@@ -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