Skip to content

Commit d355e9f

Browse files
authored
Merge pull request #3 from rwjblue/add-clear-render
Add support for `this.clearRender()` -> `await clearRender()`
2 parents d366752 + bcbe228 commit d355e9f

3 files changed

Lines changed: 40 additions & 15 deletions

File tree

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ test('it happens with comments', function() {
1414
this.render(hbs`derp`);
1515
});
1616

17+
test('multiple renders', function() {
18+
this.render(hbs`lololol`);
19+
20+
assert.ok(this.$().text(), 'lololol');
21+
22+
this.clearRender();
23+
this.render(hbs`other stuff`);
24+
25+
assert.ok(this.$().text(), 'other stuff');
26+
});
27+
1728
moduleForComponent('foo-bar', 'Unit | Component | FooBar', {
1829
needs: [],
1930
});

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

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

55
module('Integration | Component | FooBar', function(hooks) {
@@ -13,6 +13,17 @@ module('Integration | Component | FooBar', function(hooks) {
1313
// comments above this.render are preserved
1414
await render(hbs`derp`);
1515
});
16+
17+
test('multiple renders', async function() {
18+
await render(hbs`lololol`);
19+
20+
assert.ok(this.$().text(), 'lololol');
21+
22+
await clearRender();
23+
await render(hbs`other stuff`);
24+
25+
assert.ok(this.$().text(), 'other stuff');
26+
});
1627
});
1728

1829
module('Unit | Component | FooBar', function(hooks) {

ember-qunit-codemod.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,27 @@ function updateToNewEmberQUnitImports(j, root) {
7070
// Remove all existing import specifiers
7171
.remove();
7272

73-
let renderUsages = findRenderUsages(j, root);
74-
if (renderUsages.size() > 0) {
75-
specifiers.add('render');
76-
}
73+
['render', 'clearRender'].forEach(type => {
74+
let usages = findTestHelperUsageOf(j, root, type);
75+
if (usages.size() > 0) {
76+
specifiers.add(type);
77+
}
78+
});
7779

7880
emberQUnitImports
7981
.get('specifiers')
8082
.replace(Array.from(specifiers).map(s => j.importSpecifier(j.identifier(s))));
8183
}
8284

83-
function findRenderUsages(j, root) {
85+
function findTestHelperUsageOf(j, root, property) {
8486
return root.find(j.ExpressionStatement, {
8587
expression: {
8688
callee: {
8789
object: {
8890
type: 'ThisExpression',
8991
},
9092
property: {
91-
name: 'render',
93+
name: property,
9294
},
9395
},
9496
},
@@ -184,15 +186,16 @@ function updateModuleForToNestedModule(j, root) {
184186
// mark the test function as an async function
185187
expression.expression.arguments[1].async = true;
186188

187-
let renderUsage = findRenderUsages(j, j(expression));
189+
// Transform to await render() or await clearRender()
190+
['render', 'clearRender'].forEach(type => {
191+
findTestHelperUsageOf(j, j(expression), type).forEach(p => {
192+
let expression = p.get('expression');
188193

189-
renderUsage.forEach(p => {
190-
let expression = p.get('expression');
191-
192-
let awaitExpression = j.awaitExpression(
193-
j.callExpression(j.identifier('render'), expression.node.arguments)
194-
);
195-
expression.replace(awaitExpression);
194+
let awaitExpression = j.awaitExpression(
195+
j.callExpression(j.identifier(type), expression.node.arguments)
196+
);
197+
expression.replace(awaitExpression);
198+
});
196199
});
197200
}
198201

0 commit comments

Comments
 (0)