202 lines
35 KiB
JavaScript
202 lines
35 KiB
JavaScript
|
(function() {
|
||
|
var escope, expect, harmony;
|
||
|
|
||
|
expect = require('chai').expect;
|
||
|
|
||
|
harmony = require('../third_party/esprima');
|
||
|
|
||
|
escope = require('..');
|
||
|
|
||
|
describe('export declaration', function() {
|
||
|
it('should create vairable bindings', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export var v;", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(1);
|
||
|
expect(scope.variables[0].name).to.be.equal('v');
|
||
|
expect(scope.variables[0].defs[0].type).to.be.equal('Variable');
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
it('should create function declaration bindings', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export default function f(){};", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(3);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(1);
|
||
|
expect(scope.variables[0].name).to.be.equal('f');
|
||
|
expect(scope.variables[0].defs[0].type).to.be.equal('FunctionName');
|
||
|
expect(scope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[2];
|
||
|
expect(scope.type).to.be.equal('function');
|
||
|
expect(scope.variables).to.have.length(1);
|
||
|
expect(scope.variables[0].name).to.be.equal('arguments');
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
it('should export function expression', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export default function(){};", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(3);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
expect(scope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[2];
|
||
|
expect(scope.type).to.be.equal('function');
|
||
|
expect(scope.variables).to.have.length(1);
|
||
|
expect(scope.variables[0].name).to.be.equal('arguments');
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
it('should export literal', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export default 42;", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
it('should refer exported references#1', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export {x};", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
expect(scope.references).to.have.length(1);
|
||
|
return expect(scope.references[0].identifier.name).to.be.equal('x');
|
||
|
});
|
||
|
it('should refer exported references#2', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export {v as x};", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
expect(scope.references).to.have.length(1);
|
||
|
return expect(scope.references[0].identifier.name).to.be.equal('v');
|
||
|
});
|
||
|
it('should not refer exported references from other source#1', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export {x} from \"mod\";", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
it('should not refer exported references from other source#2', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export {v as x} from \"mod\";", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
return it('should not refer exported references from other source#3', function() {
|
||
|
var ast, globalScope, scope, scopeManager;
|
||
|
ast = harmony.parse("export * from \"mod\";", {
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
scopeManager = escope.analyze(ast, {
|
||
|
ecmaVersion: 6,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
expect(scopeManager.scopes).to.have.length(2);
|
||
|
globalScope = scopeManager.scopes[0];
|
||
|
expect(globalScope.type).to.be.equal('global');
|
||
|
expect(globalScope.variables).to.have.length(0);
|
||
|
expect(globalScope.references).to.have.length(0);
|
||
|
scope = scopeManager.scopes[1];
|
||
|
expect(scope.type).to.be.equal('module');
|
||
|
expect(scope.variables).to.have.length(0);
|
||
|
return expect(scope.references).to.have.length(0);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
}).call(this);
|
||
|
|
||
|
//# sourceMappingURL=data:application/json;base64,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
|