Skip to content

Commit f367b11

Browse files
authored
Merge pull request #34 from rwjblue/wait-support
Update `wait` imports to `settled`.
2 parents 03248cd + 3b5ac69 commit f367b11

3 files changed

Lines changed: 64 additions & 27 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import wait from 'ember-test-helpers/wait';
2+
3+
function stuff() {
4+
wait().then(() => {
5+
otherStuff();
6+
});
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { settled } from 'ember-test-helpers';
2+
3+
function stuff() {
4+
settled().then(() => {
5+
otherStuff();
6+
});
7+
}

ember-qunit-codemod.js

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@ module.exports = function(file, api, options) {
22
const j = api.jscodeshift;
33
const root = j(file.source);
44

5+
function ensureImport(source, anchor, method = 'insertAfter') {
6+
let desiredImport = root.find(j.ImportDeclaration, { source: { value: source } });
7+
if (desiredImport.size() > 0) {
8+
return desiredImport;
9+
}
10+
11+
let newImport = j.importDeclaration([], j.literal(source));
12+
let anchorImport = root.find(j.ImportDeclaration, { source: { value: anchor } });
13+
let imports = root.find(j.ImportDeclaration);
14+
if (anchorImport.size() > 0) {
15+
anchorImport[method](newImport);
16+
} else if (imports.size() > 0) {
17+
// if anchor is not present, always add at the end
18+
imports.insertAfter(newImport);
19+
} else {
20+
// if no imports are present, add as first statement
21+
root.get().node.program.body.unshift(newImport);
22+
}
23+
24+
return j(newImport);
25+
}
26+
527
function moveQUnitImportsFromEmberQUnit() {
628
let emberQUnitImports = root.find(j.ImportDeclaration, { source: { value: 'ember-qunit' } });
729
// Find `module` and `test` imports
@@ -15,19 +37,12 @@ module.exports = function(file, api, options) {
1537
.forEach(p => specifiers.add(p.node.imported.name))
1638
.remove();
1739

18-
let qunitImports = root.find(j.ImportDeclaration, { source: { value: 'qunit' } });
19-
qunitImports.find(j.ImportSpecifier).forEach(p => specifiers.add(p.node.imported.name));
20-
2140
if (specifiers.size === 0) {
2241
return;
2342
}
2443

25-
if (qunitImports.size() === 0) {
26-
// Add new `import from 'qunit'` node
27-
let newQUnitImport = j.importDeclaration([], j.literal('qunit'));
28-
emberQUnitImports.insertBefore(newQUnitImport);
29-
qunitImports = j(newQUnitImport);
30-
}
44+
let qunitImports = ensureImport('qunit', 'ember-qunit', 'insertBefore');
45+
qunitImports.find(j.ImportSpecifier).forEach(p => specifiers.add(p.node.imported.name));
3146

3247
qunitImports.get('specifiers').replace(
3348
Array.from(specifiers)
@@ -93,6 +108,14 @@ module.exports = function(file, api, options) {
93108
}
94109
});
95110

111+
root
112+
.find(j.ImportDeclaration, { source: { value: 'ember-test-helpers/wait' } })
113+
.forEach(p => {
114+
specifiers.add('settled');
115+
return p;
116+
})
117+
.remove();
118+
96119
if (specifiers.size > 0) {
97120
if (emberTestHelpersImport.size() > 0) {
98121
// collect existing imports
@@ -102,13 +125,7 @@ module.exports = function(file, api, options) {
102125
.remove();
103126
} else {
104127
// Add new `import from 'ember-test-helpers'` node
105-
root
106-
.find(j.ImportDeclaration, { source: { value: 'ember-qunit' } })
107-
.insertAfter(j.importDeclaration([], j.literal('ember-test-helpers')));
108-
109-
emberTestHelpersImport = root.find(j.ImportDeclaration, {
110-
source: { value: 'ember-test-helpers' },
111-
});
128+
emberTestHelpersImport = ensureImport('ember-test-helpers', 'ember-qunit');
112129
}
113130

114131
emberTestHelpersImport.get('specifiers').replace(
@@ -523,21 +540,27 @@ module.exports = function(file, api, options) {
523540
.forEach(replacement);
524541
}
525542

543+
function updateWaitCalls() {
544+
root.find(j.CallExpression, { callee: { name: 'wait' } }).forEach(p => {
545+
p.node.callee.name = 'settled';
546+
});
547+
}
548+
526549
const printOptions = options.printOptions || { quote: 'single' };
527550

528-
// Find `ember-qunit` imports
529551
let emberQUnitImports = root.find(j.ImportDeclaration, { source: { value: 'ember-qunit' } });
530-
if (emberQUnitImports.size() === 0) {
531-
return file.source;
552+
if (emberQUnitImports.size() > 0) {
553+
moveQUnitImportsFromEmberQUnit();
554+
updateToNewEmberQUnitImports();
555+
updateEmberTestHelperImports();
556+
updateModuleForToNestedModule();
557+
updateLookupCalls();
558+
updateRegisterCalls();
559+
updateInjectCalls();
560+
} else {
561+
updateEmberTestHelperImports();
562+
updateWaitCalls();
532563
}
533564

534-
moveQUnitImportsFromEmberQUnit();
535-
updateToNewEmberQUnitImports();
536-
updateEmberTestHelperImports();
537-
updateModuleForToNestedModule();
538-
updateLookupCalls();
539-
updateRegisterCalls();
540-
updateInjectCalls();
541-
542565
return root.toSource(printOptions);
543566
};

0 commit comments

Comments
 (0)