dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
914 lines (844 loc) • 27.3 kB
JavaScript
define([
'require',
'intern!object',
'intern/chai!assert',
'./loader/support/loaderTest',
'./loader/support/pageReady',
'./loader/requirejs',
'./loader/xdomain',
'./loader/moduleIds',
'./loader/hostenv_webworkers'
], function (require, registerSuite, assert, loaderTest, pageReady) {
registerSuite({
name: 'dojo/_base/loader',
'async with dojo require': loaderTest(
require.toUrl('./loader/index.html'),
{
async: true,
baseUrl: '.',
packages: [
{ name: 'dijit', location: 'dijit' },
{ name: 'dojox', location: 'dojox' },
{ name: 'dojo', location: '../../../../node_modules/dojo' },
{ name: 'test-modules', location: '.' }
]
},
function (callback) {
// dojo must be loaded for legacy modes to work
require({ async: 'sync' }, [ 'dojo' ]);
// now we can switch to legacy async mode
require({ async: 'legacyAsync' });
require([ 'test-modules/syncFromAsyncModule' ], function () {
callback(window.syncFromAsyncModule);
});
},
function (value) {
assert.strictEqual(value, 'OK');
}
),
'config': (function () {
function createConfigTest(search, configName) {
return loaderTest(
require.toUrl('./loader/config.html') + '?' + search,
[
function (configName, callback) {
require([
'dojo',
'dojo/has'
], function (dojo, has) {
var config = window[configName];
var data = {
baseUrl: require.baseUrl,
config: config,
requireConfig: require.rawConfig,
dojoConfig: dojo.config
};
var hasResults = {};
for (var key in config.has) {
hasResults[key] = has(key);
}
data.has = hasResults;
callback(data);
});
},
[ configName ]
],
function (data) {
var config = data.config;
var requireConfig = data.requireConfig;
var dojoConfig = data.dojoConfig;
assert.strictEqual(requireConfig.baseUrl, config.baseUrl);
assert.strictEqual(requireConfig.waitSeconds, config.waitSeconds);
assert.strictEqual(requireConfig.locale, config.locale);
assert.deepEqual(requireConfig.has, config.has);
assert.strictEqual(requireConfig.cats, config.cats);
assert.strictEqual(requireConfig.a, config.a);
assert.deepEqual(requireConfig.b, config.b);
assert.strictEqual(data.baseUrl, config.baseUrl + '/');
for (var key in data.has) {
assert.ok(data.has[key]);
}
assert.isUndefined(require.cats);
assert.isUndefined(require.a);
assert.isUndefined(require.b);
assert.strictEqual(dojoConfig.baseUrl, config.baseUrl + '/');
assert.strictEqual(dojoConfig.waitSeconds, config.waitSeconds);
assert.strictEqual(dojoConfig.locale, config.locale);
assert.strictEqual(dojoConfig.cats, config.cats);
assert.strictEqual(dojoConfig.a, config.a);
assert.deepEqual(dojoConfig.b, config.b);
}
);
}
var testMap = {
'djConfig': '_djConfig',
'djConfig-require': '_djConfig',
'dojoConfig': '_dojoConfig',
'dojoConfig-djConfig': '_dojoConfig',
'dojoConfig-require': '_dojoConfig',
'dojoConfig-djConfig-require': '_dojoConfig',
'require': '_require'
};
var tests = {};
for (var key in testMap) {
tests[key] = createConfigTest(key, testMap[key]);
}
return tests;
})(),
'config api': loaderTest(
require.toUrl('./loader/index.html'),
{
async: true,
isDebug: true,
packages: [
{ name: 'dojo', location: 'node_modules/dojo' }
]
},
function (callback) {
require([ 'dojo' ], function (dojo) {
dojo.ready(function () {
var data = { async: {} };
var runData;
function listener1(config, rawConfig) {
runData.called1 = true;
runData.rawConfig1 = dojo.mixin({}, rawConfig);
}
function listener2(config, rawConfig) {
runData.called2 = true;
runData.rawConfig2 = dojo.mixin({}, rawConfig);
}
var handle1 = require.on('config', listener1);
var handle2 = require.on('config', listener2);
data.call1 = runData = {};
require({
someFeature: 1
});
handle1.remove();
data.call2 = runData = {};
require({
someFeature: 0,
someOtherFeature: 1
});
handle2.remove();
function recordResults(key) {
data.async[key] = {
async: require.async,
legacyMode: require.legacyMode
};
}
require({ async: 1 });
recordResults('1');
require({ async: true });
recordResults('true');
require({ async: 2 });
recordResults('2');
require({ async: 'nonsense' });
recordResults('nonsense');
require({ async: 0 });
recordResults('0');
require({ async: false });
recordResults('false');
require({ async: 'sync' });
recordResults('sync');
require({ async: 'legacyAsync' });
recordResults('legacyAsync');
callback(data);
});
});
},
function (data) {
var call1 = data.call1;
assert.ok(call1.called1);
assert.ok(call1.called2);
assert.strictEqual(call1.rawConfig1.someFeature, 1);
assert.strictEqual(call1.rawConfig2.someFeature, 1);
var call2 = data.call2;
assert.notOk(call2.called1);
assert.ok(call2.called2);
assert.strictEqual(call2.rawConfig2.someFeature, 0);
assert.strictEqual(call2.rawConfig2.someOtherFeature, 1);
var expected;
for (var key in data.async) {
expected = {
async: false,
legacyMode: false
};
if (key === 'legacyAsync') {
expected.legacyMode = 'legacyAsync';
}
else if (key in { 0: 1, 'false': 1, sync: 1 }) {
expected.legacyMode = 'sync';
}
else {
expected.async = true;
}
assert.deepEqual(data.async[key], expected);
}
}
),
'config sniff': (function () {
function createSniffTest(url) {
return loaderTest(
require.toUrl(url),
function (callback) {
require(['dojo'], function (dojo) {
callback({
requireConfig: require.rawConfig,
dojoConfig: dojo.config,
async: require.async,
baseUrl: require.baseUrl,
cats: require.cats === undefined,
a: require.a === undefined,
b: require.b === undefined
});
});
},
function (data) {
var requireConfig = data.requireConfig;
var dojoConfig = data.dojoConfig;
assert.ok(requireConfig.async);
assert.strictEqual(requireConfig.baseUrl, '../../../..');
assert.strictEqual(requireConfig.waitSeconds, 6);
assert.strictEqual(requireConfig.cats, 'dojo-config-dogs');
assert.strictEqual(requireConfig.a, 2);
assert.deepEqual(requireConfig.b, [ 3, 4, 5 ]);
assert.ok(data.async);
assert.strictEqual(data.baseUrl, '../../../../');
assert.isTrue(data.cats);
assert.isTrue(data.a);
assert.isTrue(data.b);
assert.strictEqual(dojoConfig.baseUrl, '../../../../');
assert.strictEqual(dojoConfig.cats, 'dojo-config-dogs');
assert.strictEqual(dojoConfig.a, 2);
assert.deepEqual(dojoConfig.b, [ 3, 4, 5 ]);
}
);
}
return {
dojoConfig: createSniffTest('./loader/config-sniff.html'),
djConfig: createSniffTest('./loader/config-sniff-djConfig.html')
};
})(),
'config has': pageReady(
require.toUrl('./loader/config-has.html'),
function (command) {
return command.executeAsync(function (callback) {
require([ 'dojo/has' ], function (has) {
callback({
requireConfig: require.rawConfig,
has: {
'config-someConfigSwitch': has('config-someConfigSwitch'),
'config-isDebug': has('config-isDebug'),
'config-anotherConfigSwitch': has('config-anotherConfigSwitch'),
'some-has-feature': has('some-has-feature')
}
});
});
}).then(function (data) {
var requireConfig = data.requireConfig;
assert.strictEqual(requireConfig.someConfigSwitch, 0);
assert.strictEqual(requireConfig.isDebug, 1);
assert.strictEqual(requireConfig.anotherConfigSwitch, 2);
assert.strictEqual(data.has['config-someConfigSwitch'], 0);
assert.strictEqual(data.has['config-isDebug'], 1);
assert.strictEqual(data.has['config-anotherConfigSwitch'], 2);
assert.strictEqual(data.has['some-has-feature'], 5);
}).executeAsync(function (callback) {
// setting an existing config variable after boot does *not* affect the has cache
require([ 'dojo/has' ], function (has) {
require({ someConfigSwitch: 3 });
callback({
requireConfig: require.rawConfig,
'config-someConfigSwitch': has('config-someConfigSwitch')
});
});
}).then(function (data) {
assert.strictEqual(data.requireConfig.someConfigSwitch, 3);
assert.strictEqual(data['config-someConfigSwitch'], 0);
}).executeAsync(function (callback) {
// but, we can add new configfeatures any time
require([ 'dojo/has' ], function (has) {
require({ someNewConfigSwitch: 4 });
callback({
requireConfig: require.rawConfig,
'config-someNewConfigSwitch': has('config-someNewConfigSwitch')
});
});
}).then(function (data) {
assert.strictEqual(data.requireConfig.someNewConfigSwitch, 4);
assert.strictEqual(data['config-someNewConfigSwitch'], 4);
}).executeAsync(function (callback) {
// setting an existing has feature via config after boot does *not* affect the has cache
require([ 'dojo/has' ], function (has) {
require({ has: { 'some-has-feature': 6 } });
callback({
'some-has-feature': has('some-has-feature')
});
});
}).then(function (data) {
assert.strictEqual(data['some-has-feature'], 5);
}).executeAsync(function (callback) {
// setting an existing has feature via has.add does *not* affect the has cache...
require([ 'dojo/has' ], function (has) {
has.add('some-has-feature', 6);
callback({
'some-has-feature': has('some-has-feature')
});
});
}).then(function (data) {
assert.strictEqual(data['some-has-feature'], 5);
}).executeAsync(function (callback) {
// ...*unless* you use force...
require([ 'dojo/has' ], function (has) {
has.add('some-has-feature', 6, 0, 1);
callback({
'some-has-feature': has('some-has-feature')
});
});
}).then(function (data) {
assert.strictEqual(data['some-has-feature'], 6);
}).executeAsync(function (callback) {
// but, we can add new has features any time
require([ 'dojo/has' ], function (has) {
require({ has: { 'some-new-has-feature': 7 } });
callback({
'some-new-has-feature': has('some-new-has-feature')
});
});
}).then(function (data) {
assert.strictEqual(data['some-new-has-feature'], 7);
});
}
),
'declare steps on provide': loaderTest(
require.toUrl('./loader/index.html'),
{
packages: [
{ name: 'dojo', location: 'node_modules/dojo' },
{ name: 'testing', location: '.' }
],
map: {
'*': {
'dojo/tests': 'testing/tests/functional'
}
}
},
function (callback) {
require([
'dojo',
'dojo/tests/_base/loader/declareStepsOnProvideAmd'
], function (dojo, DeclareStepsOnProvideAmd) {
var data = {};
var instance = new DeclareStepsOnProvideAmd();
data.status1 = instance.status();
// requiring declareStepsOnProvideAmd caused
// declareStepsOnProvide to load which loaded *two* modules
// and dojo.declare stepped on both of them
instance = new (require('dojo/tests/_base/loader/declareStepsOnProvide1'))();
data.status2 = instance.status();
callback(data);
});
},
function (data) {
assert.strictEqual(data.status1, 'OK');
assert.strictEqual(data.status2, 'OK-1');
}
),
'publish require result': (function () {
function createPublishTest(publish) {
return loaderTest(
require.toUrl('./loader/index.html'),
{
publishRequireResult: Boolean(publish),
packages: [
{ name: 'dojo', location: 'node_modules/dojo' },
{ name: 'testing', location: '.' }
],
map: {
'*': {
'dojo/tests': 'testing/tests/functional'
}
}
},
function (callback) {
var dojo = window.dojo;
dojo.setObject('dojo.tests._base.loader.pub1', 'do-not-mess-with-me');
dojo.require('dojo.tests._base.loader.pub1');
dojo.require('dojo.tests._base.loader.pub2');
require([ 'dojo/has' ], function (has) {
callback({
pub1: dojo.getObject('dojo.tests._base.loader.pub1'),
pub2Status: dojo.getObject('dojo.tests._base.loader.pub2') &&
dojo.getObject('dojo.tests._base.loader.pub2.status'),
dojoConfigPublishRequireResult: !!dojo.config.publishRequireResult,
hasPublishRequireResult: !!has('config-publishRequireResult')
});
});
},
function (data) {
assert.strictEqual(data.pub1, 'do-not-mess-with-me');
if (publish) {
assert.isTrue(data.hasPublishRequireResult);
assert.strictEqual(data.pub2Status, 'ok');
}
else {
assert.isFalse(data.hasPublishRequireResult);
assert.isFalse(data.dojoConfigPublishRequireResult);
assert.isTrue(data.pub2Status == null);
}
}
);
}
return {
'publish': createPublishTest(true),
'no publish': createPublishTest()
};
})(),
'top level module by paths': loaderTest(
require.toUrl('./loader/index.html'),
{
packages: [
{ name: 'dojo', location: 'node_modules/dojo' }
]
},
function (callback) {
var myModule1Value = {};
var myModule2Value = {};
define('myModule1', [], myModule1Value);
define('myModule2', [], myModule2Value);
require({
aliases: [
// yourModule --> myModule1
[ 'yourModule', 'myModule1' ],
// yourOtherModule --> myModule1
[ /yourOtherModule/, 'myModule1' ],
// yourModule/*/special --> yourModule/common/special
// this will result in a resubmission to finally resolve in the next one
[ /yourOtherModule\/([^\/]+)\/special/, 'yourOtherModule/common/special' ],
// yourModule/common/special --> myModule2
// notice the regex above also finds yourOtherModule/common/special;
// the extra parenthesized subexprs make this have priority
[ /(yourOtherModule\/(common))\/special/, 'myModule2' ]
],
paths: { myTopLevelModule: './tests/functional/_base/loader/myTopLevelModule' }
});
require([
'myTopLevelModule',
'myModule1',
'myModule2',
'yourModule',
'yourOtherModule',
'yourOtherModule/stuff/special'
], function (myModule, myModule1, myModule2, yourModule, yourOtherModule, special) {
// top level module via path
var myTopLevelModule = this.myTopLevelModule;
var results =
myModule1Value === myModule1 &&
myModule1Value === yourModule &&
myModule1Value === yourOtherModule &&
myModule2Value === myModule2 &&
myModule2Value === special &&
myTopLevelModule.name === 'myTopLevelModule' &&
myTopLevelModule.myModule.name === 'myTopLevelModule.myModule';
callback(results);
});
},
function (data) {
assert.isTrue(data);
}
),
'config/test': loaderTest(
require.toUrl('./loader/index.html'),
{
async: true,
baseUrl: '../../../..',
packages: [
{
name: 'loader',
location: 'tests/functional/_base/loader/config',
packageMap: {
'pkg': 'pkgMapped'
}
},
{
name: 'pkg',
location: 'tests/functional/_base/loader/config/pkg'
},
{
name: 'pkgMapped',
location: 'tests/functional/_base/loader/config/pkg',
packageMap: {
'pkg': 'pkgMapped'
}
},
{
name: 'dojo',
location: 'node_modules/dojo'
}
],
config: {
'loader/someModuleConfiggedPriorToBoot': {
someConfig: 'this is the config for someModuleConfiggedPriorToBoot'
}
}
},
function (callback) {
function mixin(destination, source) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
destination[key] = source[key];
}
}
return destination;
}
require({
config: {
'loader/someModule': {
someConfig: 'this is the config for someModule-someConfig'
},
'pkgMapped/m1': {
globalConfig: 'globalConfigForpkgMapped/m1',
isMapped: true
},
'pkgMapped/m2': {
globalConfig: 'globalConfigForpkgMapped/m2'
}
}
});
require([
'loader/someModuleConfiggedPriorToBoot',
'loader/someModule'
], function (someModuleConfiggedPriorToBoot, someModule) {
var results = {
someModuleConfiggedPriorToBootConfig: mixin({}, someModuleConfiggedPriorToBoot.getConfig()),
someModuleConfig: mixin({}, someModule.getConfig()),
someModuleM1Config: mixin({}, someModule.m1.getConfig()),
someModuleM2Config: mixin({}, someModule.m2.getConfig())
};
require({
config: {
'loader/someModule': {
someMoreConfig: 'this is the config for someModule-someMoreConfig'
}
}
});
require(['loader/someModule'], function (someModuleAfterConfig) {
mixin(results, {
someModuleAfterConfig: mixin({}, someModuleAfterConfig.getConfig())
});
require({
config: {
'pkg/m1': { globalConfig: 'globalConfigForM1' },
'pkg/m2': { globalConfig: 'globalConfigForM2' }
}
}, [ 'pkg/m1', 'pkg/m2' ], function (m1, m2) {
callback(mixin(results, {
m1Config: m1.getConfig(),
m2Config: m2.getConfig()
}));
});
});
});
},
function (data) {
assert.deepEqual(data.someModuleConfiggedPriorToBootConfig, {
someConfig: 'this is the config for someModuleConfiggedPriorToBoot'
});
assert.deepEqual(data.someModuleConfig, {
someConfig: 'this is the config for someModule-someConfig'
});
assert.deepEqual(data.someModuleM1Config, {
globalConfig: 'globalConfigForpkgMapped/m1',
isMapped: true,
configThroughMappedRefForM1: 'configThroughMappedRefForM1'
});
assert.deepEqual(data.someModuleM2Config, {
globalConfig: 'globalConfigForpkgMapped/m2',
configThroughMappedRefForM1: 'configThroughMappedRefForM1',
config1: 'mapped-config1',
config2: 'mapped-config2',
config3: 'mapped-config3'
});
assert.deepEqual(data.someModuleAfterConfig, {
someConfig: 'this is the config for someModule-someConfig',
someMoreConfig: 'this is the config for someModule-someMoreConfig'
});
assert.deepEqual(data.m1Config, {
globalConfig: 'globalConfigForM1'
});
assert.deepEqual(data.m2Config, {
globalConfig: 'globalConfigForM2',
config1: 'config1',
config2: 'config2',
config3: 'config3'
});
}
),
mappingMultiLayer: loaderTest(
require.toUrl('./loader/index.html'),
{
async: true,
baseUrl: '.',
packages: [
{ name: 'dojo', location: 'node_modules/dojo' },
{
name: 'test',
location: './mapping-multi-layer'
},
{
name: 'app1',
location: './mapping-multi-layer/App1'
},
{
name: 'app2',
location: './mapping-multi-layer/App2'
},
{
name: 'common1',
location: './mapping-multi-layer/Common1'
},
{
name: 'common2',
location: './mapping-multi-layer/Common2'
},
{
name: 'router',
location: './mapping-multi-layer/Router'
},
{
name: 'mappedModule',
location: './mapping-multi-layer/MappedModule'
}
],
map: {
'app1': {
'common': 'common1'
},
'app2': {
'common': 'common2'
},
'my/replacement/A': {
'my/A': 'my/A'
},
'*': {
'starmap/demo1': 'router/demoA',
'starmap/demo2': 'router/demoB',
'starmapModule': 'mappedModule',
'my/A': 'my/replacement/A'
}
}
},
function (callback) {
// consume pending cache, the following are added at the end of a built dojo.js in a closure
require({ cache: {} });
!require.async && require([ 'dojo' ]);
require.boot && require.apply(null, require.boot);
// begin test:
// moving modules from the pending cache to the module cache should ignore
// any mapping, pathing, or alias rules
var handle = require.on('error', function () {
handle.remove();
callback({ error: true });
});
require([ 'test/main' ], function () {
handle.remove();
callback({ error: false, results: results });
});
},
function (data) {
if (data.error) {
assert.fail("require error");
}
else {
var expected = ["Common1/another:cache", "Router/demoB:nocache", "App1/thing:cache", "Router/demoC:cache", "Router/demoA:cache", "MappedModule/mappedC:cache", "mappedModule/mappedA:cache", "my/B:cache", "my/A:cache", "my/replacement/A:cache", "mainRequire1:loaded", "Common2/anotherone:cache", "Common2/another:cache", "mappedModule/mappedB:cache", "App2/thing:cache", "mainRequire2:loaded"];
assert.strictEqual(data.results.join(), expected.join());
}
}
),
mapping: loaderTest(
require.toUrl('./loader/index.html'),
{
async: true,
packages: [
{ name: 'dojo', location: 'node_modules/dojo' }
],
map: {
'my/replacement/A': {
'my/A': 'my/A'
},
'*': {
'my/A': 'my/replacement/A'
}
}
},
function (callback) {
// simulate a built layer, this is added to dojo.js by the builder
require({
cache: {
'my/replacement/A': function () {
define([ '../A' ], function () {
return { it: 'is a replacement module' };
});
},
'my/A': function () {
define([ './B' ], function () {
return { it: 'is the original module' };
});
},
'my/B': function () {
define([], function () {
return { it: 'is a module dependency' };
});
}
}
});
// consume pending cache, the following are added at the end of a built dojo.js in a closure
require({ cache: {} });
!require.async && require([ 'dojo' ]);
require.boot && require.apply(null, require.boot);
// begin test:
// moving modules from the pending cache to the module cache should ignore
// any mapping, pathing, or alias rules
var handle = require.on('error', function () {
handle.remove();
callback({ error: true });
});
require([ 'my/A' ], function (A) {
handle.remove();
callback({ aIt: A.it });
});
},
function (data) {
if (data.error) {
assert.fail();
}
else {
assert.strictEqual(data.aIt, 'is a replacement module');
}
}
),
compactPath: loaderTest(
require.toUrl('./loader/index.html'),
{ isDebug: 1, async: 1 },
function (callback) {
var compactPath = require.compactPath;
callback([
compactPath('../../dojo/../../mytests'),
compactPath('module'),
compactPath('a/./b'),
compactPath('a/../b'),
compactPath('a/./b/./c/./d'),
compactPath('a/../b/../c/../d'),
compactPath('a/b/c/../../d'),
compactPath('a/b/c/././d'),
compactPath('./a/b'),
compactPath('../a/b'),
compactPath('')
]);
},
function (data) {
assert.strictEqual('../../../mytests', data.shift());
assert.strictEqual('module', data.shift());
assert.strictEqual('a/b', data.shift());
assert.strictEqual('b', data.shift());
assert.strictEqual('a/b/c/d', data.shift());
assert.strictEqual('d', data.shift());
assert.strictEqual('a/d', data.shift());
assert.strictEqual('a/b/c/d', data.shift());
assert.strictEqual('a/b', data.shift());
assert.strictEqual('../a/b', data.shift());
assert.strictEqual('', data.shift());
}
),
modules: loaderTest(
require.toUrl('./loader/index.html'),
{
async: 1,
baseUrl: './foo',
packages: [
{ name: 'testing', location: '../../../../../' },
{ name: 'dojo', location: '../../../../../node_modules/dojo' }
]
},
function (callback) {
require([
'dojo',
'dojo/has',
'modules/anon',
'modules/wrapped',
'testing/tests/functional/_base/loader/modules/full',
'modules/data',
'modules/factoryArity',
'modules/factoryArityExports',
'testing/tests/functional/_base/loader/modules/idFactoryArity',
'testing/tests/functional/_base/loader/modules/idFactoryArityExports'
], function (dojo, has, anon, wrapped) {
callback([
has('dojo-amd-factory-scan'),
anon.theAnswer,
require('modules/anon').five,
wrapped.five,
dojo.require('testing.tests.functional._base.loader.modules.wrapped').five,
require('modules/wrapped').five,
require('testing/tests/functional/_base/loader/modules/full').twiceTheAnswer,
require('modules/data').five,
require('modules/factoryArity').module.id,
require('modules/factoryArity').id,
require('modules/factoryArity').impliedDep,
require('modules/factoryArityExports').module.id,
require('modules/factoryArityExports').id,
require('modules/factoryArityExports').impliedDep,
require('testing/tests/functional/_base/loader/modules/idFactoryArity').module.id,
require('testing/tests/functional/_base/loader/modules/idFactoryArity').id,
require('testing/tests/functional/_base/loader/modules/idFactoryArity').impliedDep,
require('testing/tests/functional/_base/loader/modules/idFactoryArityExports').module.id,
require('testing/tests/functional/_base/loader/modules/idFactoryArityExports').id,
require('testing/tests/functional/_base/loader/modules/idFactoryArityExports').impliedDep
]);
});
},
function (data) {
assert.strictEqual(data.shift(), 1);
assert.strictEqual(data.shift(), 42);
assert.strictEqual(data.shift(), 5);
assert.strictEqual(data.shift(), 5);
assert.strictEqual(data.shift(), 5);
assert.strictEqual(data.shift(), 5);
assert.strictEqual(data.shift(), 84);
assert.strictEqual(data.shift(), 5);
assert.strictEqual(data.shift(), 'modules/factoryArity');
assert.strictEqual(data.shift(), 'factoryArity');
assert.strictEqual(data.shift(), 'impliedDep1');
assert.strictEqual(data.shift(), 'modules/factoryArityExports');
assert.strictEqual(data.shift(), 'factoryArityExports');
assert.strictEqual(data.shift(), 'impliedDep2');
assert.strictEqual(data.shift(), 'testing/tests/functional/_base/loader/modules/idFactoryArity');
assert.strictEqual(data.shift(), 'idFactoryArity');
assert.strictEqual(data.shift(), 'impliedDep3');
assert.strictEqual(data.shift(), 'testing/tests/functional/_base/loader/modules/idFactoryArityExports');
assert.strictEqual(data.shift(), 'idFactoryArityExports');
assert.strictEqual(data.shift(), 'impliedDep4');
}
)
});
});