Skip to content

Commit 3cc2831

Browse files
author
Robert Jackson
committed
Replace this.render with render.
1 parent a82b4ed commit 3cc2831

3 files changed

Lines changed: 40 additions & 15 deletions

File tree

__testfixtures__/ember-qunit-codemod/module-for-component.input.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ test('it happens', function() {
99
this.render(hbs`derp`);
1010
});
1111

12+
test('it happens with comments', function() {
13+
// comments above this.render are preserved
14+
this.render(hbs`derp`);
15+
});
16+
1217
moduleForComponent('foo-bar', 'Unit | Component | FooBar', {
1318
needs: [],
1419
});

__testfixtures__/ember-qunit-codemod/module-for-component.output.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { module, test } from 'qunit';
2-
import { setupRenderingTest, setupTest } from 'ember-qunit';
2+
import { setupRenderingTest, setupTest, render } from 'ember-qunit';
33
import hbs from 'htmlbars-inline-precompile';
44

55
module('Integration | Component | FooBar', function(hooks) {
66
setupRenderingTest(hooks);
77

88
test('it happens', async function() {
9-
await this.render(hbs`derp`);
9+
await render(hbs`derp`);
10+
});
11+
12+
test('it happens with comments', async function() {
13+
// comments above this.render are preserved
14+
await render(hbs`derp`);
1015
});
1116
});
1217

ember-qunit-codemod.js

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ function updateToNewEmberQUnitImports(j, root) {
5050
let importName = p.node.imported.name;
5151
let mappedName = mapping[importName] || importName;
5252

53+
// If importName is `moduleForComponent` determine if we need
54+
// `setupTest` (unit) or `setupRenderingTest` (integration)
5355
if (importName === 'moduleForComponent') {
5456
root
5557
.find(j.ExpressionStatement, {
@@ -68,11 +70,31 @@ function updateToNewEmberQUnitImports(j, root) {
6870
// Remove all existing import specifiers
6971
.remove();
7072

73+
let renderUsages = findRenderUsages(j, root);
74+
if (renderUsages.size() > 0) {
75+
specifiers.add('render');
76+
}
77+
7178
emberQUnitImports
7279
.get('specifiers')
7380
.replace(Array.from(specifiers).map(s => j.importSpecifier(j.identifier(s))));
7481
}
7582

83+
function findRenderUsages(j, root) {
84+
return root.find(j.ExpressionStatement, {
85+
expression: {
86+
callee: {
87+
object: {
88+
type: 'ThisExpression',
89+
},
90+
property: {
91+
name: 'render',
92+
},
93+
},
94+
},
95+
});
96+
}
97+
7698
function parseModule(j, p) {
7799
let calleeName = p.node.expression.callee.name;
78100
// Find the moduleName and the module's options
@@ -162,22 +184,15 @@ function updateModuleForToNestedModule(j, root) {
162184
// mark the test function as an async function
163185
expression.expression.arguments[1].async = true;
164186

165-
let renderUsage = j(expression).find(j.ExpressionStatement, {
166-
expression: {
167-
callee: {
168-
object: {
169-
type: 'ThisExpression',
170-
},
171-
property: {
172-
name: 'render',
173-
},
174-
},
175-
},
176-
});
187+
let renderUsage = findRenderUsages(j, j(expression));
177188

178189
renderUsage.forEach(p => {
179190
let expression = p.get('expression');
180-
expression.replace(j.awaitExpression(expression.node));
191+
192+
let awaitExpression = j.awaitExpression(
193+
j.callExpression(j.identifier('render'), expression.node.arguments)
194+
);
195+
expression.replace(awaitExpression);
181196
});
182197
}
183198

0 commit comments

Comments
 (0)