mirror of https://github.com/lukechilds/rollup.git
Oskar Segersvärd
9 years ago
5 changed files with 142 additions and 21 deletions
@ -0,0 +1,74 @@ |
|||||
|
require('babel/register'); |
||||
|
var assert = require( 'assert' ); |
||||
|
|
||||
|
var Scope = require( '../src/Scope' ); |
||||
|
|
||||
|
describe( 'Scope', function () { |
||||
|
it( 'can define and bind names', function () { |
||||
|
const scope = new Scope(); |
||||
|
|
||||
|
// If I define 'a'...
|
||||
|
scope.define( 'a' ); |
||||
|
|
||||
|
// ... and bind 'b' to a reference to 'a'...
|
||||
|
scope.bind( 'b', scope.reference( 'a' ) ); |
||||
|
|
||||
|
// ... lookups for 'a' and 'b' should both
|
||||
|
// resolve to the same identifier.
|
||||
|
assert.equal( scope.lookup( 'b' ), scope.lookup( 'a' ) ); |
||||
|
}); |
||||
|
|
||||
|
describe( 'virtual scope:', function () { |
||||
|
var real, a, b; |
||||
|
|
||||
|
beforeEach(function () { |
||||
|
real = new Scope(); |
||||
|
a = real.virtual(); |
||||
|
b = real.virtual(); |
||||
|
}); |
||||
|
|
||||
|
it( 'is created within another scope', function () { |
||||
|
// The actual ids are the same.
|
||||
|
assert.equal( real.ids, a.ids ); |
||||
|
assert.equal( real.ids, b.ids ); |
||||
|
}); |
||||
|
|
||||
|
it( 'lookups different identifiers', function () { |
||||
|
// If I define 'a' in both scopes...
|
||||
|
a.define( 'a' ); |
||||
|
b.define( 'a' ); |
||||
|
|
||||
|
// ... the name 'a' should lookup different identifiers.
|
||||
|
assert.notEqual( a.lookup( 'a' ), b.lookup( 'b' ) ); |
||||
|
}); |
||||
|
|
||||
|
it( 'can deconflict names', function () { |
||||
|
a.define( 'a' ); |
||||
|
b.define( 'a' ); |
||||
|
|
||||
|
// Deconflicting the actual scope should make all identifiers unique.
|
||||
|
real.deconflict(); |
||||
|
|
||||
|
assert.deepEqual( real.usedNames(), [ '_a', 'a' ] ); |
||||
|
}); |
||||
|
|
||||
|
it( 'deconflicts with a custom function, if provided', function () { |
||||
|
for (var i = 0; i < 26; i++) { |
||||
|
// Create 26 scopes, all of which define 'a'.
|
||||
|
real.virtual().define( 'a' ); |
||||
|
} |
||||
|
|
||||
|
// Custom deconfliction function which ignores the current name.
|
||||
|
var num = 10; |
||||
|
real.deconflict( function () { |
||||
|
return (num++).toString(36); |
||||
|
}); |
||||
|
|
||||
|
assert.deepEqual( real.usedNames(), 'abcdefghijklmnopqrstuvwxyz'.split('') ); |
||||
|
|
||||
|
// Deconflicting twice has no additional effect.
|
||||
|
real.deconflict(); |
||||
|
assert.deepEqual( real.usedNames(), 'abcdefghijklmnopqrstuvwxyz'.split('') ); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
Loading…
Reference in new issue