Skip to content

Commit 3f7f816

Browse files
author
Robert Jackson
authored
Merge pull request #156 from mdeanjones/master
2 parents d6bfa5a + d1df8e7 commit 3f7f816

4 files changed

Lines changed: 277 additions & 2 deletions

File tree

__tests__/index-test.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,3 +457,44 @@ let MyController = (_dec = Ember._action, (_class = class MyController extends E
457457
export { MyController as default };`);
458458
});
459459
});
460+
461+
describe('when used with babel-plugin-istanbul', () => {
462+
// babel-plugin-istanbul won't run on <= Node 6
463+
const majorVersion = parseInt(process.version.match(/^v(\d+)\./)[1], 10);
464+
const runOrSkip = majorVersion > 6 ? it : it.skip;
465+
466+
runOrSkip('works with mixins', () => {
467+
let source = `
468+
import EmberObject from '@ember/object';
469+
import Evented from '@ember/object/evented';
470+
471+
const TestObject = EmberObject.extend(Evented);
472+
export default TestObject;
473+
`;
474+
475+
let actual = babel7.transformSync(source, {
476+
filename: 'istanbul-should-cover.js',
477+
plugins: [require('babel-plugin-istanbul'), Plugin],
478+
}).code;
479+
480+
expect(actual).toContain('Ember.Object.extend(Ember.Evented)');
481+
});
482+
483+
runOrSkip('works with classes that extend from mixins', () => {
484+
let source = `
485+
import EmberObject from '@ember/object';
486+
import Evented from '@ember/object/evented';
487+
488+
export default class TestObject extends EmberObject.extend(Evented) {};
489+
`;
490+
491+
let actual = babel7.transformSync(source, {
492+
filename: 'istanbul-should-cover.js',
493+
plugins: [require('babel-plugin-istanbul'), Plugin],
494+
}).code;
495+
496+
expect(actual).toContain(
497+
'export default class TestObject extends (Ember.Object.extend(Ember.Evented)) {}'
498+
);
499+
});
500+
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"babel-core": "^6.25.0",
3939
"eslint": "^7.19.0",
4040
"eslint-config-prettier": "^7.2.0",
41+
"babel-plugin-istanbul": "^6.0.0",
4142
"eslint-plugin-node": "^11.1.0",
4243
"eslint-plugin-prettier": "^3.3.1",
4344
"jest": "^24.9.0",

src/index.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ module.exports = function (babel) {
183183
])
184184
);
185185
} else {
186+
// Replace the occurences of the imported name with the global name.
186187
let binding = path.scope.getBinding(local.name);
187188
let referencePaths = binding.referencePaths;
188189

@@ -211,10 +212,17 @@ module.exports = function (babel) {
211212
});
212213
}
213214

214-
// Replace the occurences of the imported name with the global name.
215+
// Replace the occurrences of the imported name with the global name.
215216
referencePaths.forEach((referencePath) => {
216217
if (!isTypescriptNode(referencePath.parentPath)) {
217-
referencePath.replaceWith(getMemberExpressionFor(global));
218+
const memberExpression = getMemberExpressionFor(global);
219+
220+
try {
221+
referencePath.replaceWith(memberExpression);
222+
} catch (e) {
223+
referencePath.scope.crawl();
224+
referencePath.replaceWith(memberExpression);
225+
}
218226
}
219227
});
220228
}

0 commit comments

Comments
 (0)