raptor
Version:
RaptorJS provides an AMD module loader that works in Node, Rhino and the web browser. It also includes various sub-modules to support building optimized web applications.
103 lines (80 loc) • 4.28 kB
JavaScript
require('./_helper.js');
var raptor = require('raptor');
var define = raptor.createDefine(module);
describe('packaging module', function() {
var Dependency_module = require('raptor/packaging/Dependency_module'),
Dependency_i18n = require('raptor/packaging/Dependency_i18n');
it('should handle simple string without file extension', function() {
var PackageManifest = require('raptor/packaging/PackageManifest'),
dependencyConfig = 'some/module',
dependency = PackageManifest.createDependency(dependencyConfig);
expect(dependency.constructor).toEqual(Dependency_module);
expect(dependency.type).toEqual('module');
expect(dependency.name).toEqual('some/module');
});
it('should handle dependency config with module property but no type', function() {
var PackageManifest = require('raptor/packaging/PackageManifest'),
dependencyConfig = {"module": "some/module"},
dependency = PackageManifest.createDependency(dependencyConfig);
expect(dependency.constructor).toEqual(Dependency_module);
expect(dependency.type).toEqual('module');
expect(dependency.name).toEqual('some/module');
});
it('should handle dependency config with type and name', function() {
var PackageManifest = require('raptor/packaging/PackageManifest'),
dependencyConfig = {"type": "module", "name": "some/module"},
dependency = PackageManifest.createDependency(dependencyConfig);
expect(dependency.constructor).toEqual(Dependency_module);
expect(dependency.type).toEqual('module');
expect(dependency.name).toEqual('some/module');
});
it('should handle dependency that is simple string and infer type from file extension', function() {
var PackageManifest = require('raptor/packaging/PackageManifest'),
dependencyConfig = 'SomeThing.i18n.json',
dependency = PackageManifest.createDependency(dependencyConfig);
expect(dependency.constructor).toEqual(Dependency_i18n);
expect(dependency.type).toEqual('i18n');
expect(dependency.path).toEqual('SomeThing.i18n.json');
});
it('should handle dependency whose type is explicit', function() {
var PackageManifest = require('raptor/packaging/PackageManifest'),
dependencyConfig = {"type": "i18n", "path": "SomeThing.i18n.json"},
dependency = PackageManifest.createDependency(dependencyConfig);
expect(dependency.constructor).toEqual(Dependency_i18n);
expect(dependency.type).toEqual('i18n');
expect(dependency.path).toEqual('SomeThing.i18n.json');
});
it('should allow recursively walking dependency graph via DependencyWalker', function(done) {
var DependencyWalker = require('raptor/packaging/DependencyWalker'),
packaging = require('raptor/packaging'),
expected = ['packaging/module1', 'SomeFile1.js', 'packaging/module2', 'SomeFile2.js', 'packaging/module3', 'SomeFile3.js', 'SomeFile_jquery.css'],
actual = [];
var walker = new DependencyWalker();
walker
.enableExtensions(['jquery'])
// our callback will be called for each unique manifest that is encountered
.onManifest(function(manifest, fromDependency) {
actual.push(manifest.name);
})
// our callback will be called for EVERY dependency
.onDependency(function(dependency, extension) {
if (this.hasManifest(dependency)) {
// dependency represents a package or module so recurse into it
this.walkManifest(dependency);
} else {
// dependency represents a simple dependency (a leaf node)
actual.push(dependency.path);
}
})
.onComplete(function() {
expect(expected).toEqual(actual);
done();
})
.onError(function(err) {
throw err;
})
//.walkPackage('packaging/module1-package.json')
.walkModule('packaging/module1')
.start();
});
});