77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
|
|
"use strict";
|
||
|
|
|
||
|
|
!function( suiteSetup ) {
|
||
|
|
if ( typeof define === "function" && define.amd ) {
|
||
|
|
define( [ "../toposort", "./lib/chai" ], suiteSetup );
|
||
|
|
} else {
|
||
|
|
suiteSetup();
|
||
|
|
}
|
||
|
|
}(function( Toposort, chai ) {
|
||
|
|
var expect = chai ? chai.expect : null;
|
||
|
|
|
||
|
|
suite( "Toposort", function() {
|
||
|
|
if ( !Toposort ) {
|
||
|
|
// Deal with browser/Node environments, if AMD support isn't available
|
||
|
|
if ( typeof window !== "undefined" ) {
|
||
|
|
expect = window.chai.expect;
|
||
|
|
Toposort = window.Toposort;
|
||
|
|
} else {
|
||
|
|
expect = require( "chai" ).expect;
|
||
|
|
Toposort = require( ".." );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
test( "should sort correctly", function() {
|
||
|
|
var arr, fails, possibilities;
|
||
|
|
var t = new Toposort();
|
||
|
|
|
||
|
|
t.add( "3", "2" )
|
||
|
|
.add( "2", "1" )
|
||
|
|
.add( "6", "5" )
|
||
|
|
.add( "5", [ "2", "4" ] );
|
||
|
|
|
||
|
|
arr = t.sort();
|
||
|
|
fails = [];
|
||
|
|
|
||
|
|
expect( arr ).to.be.an( "array" );
|
||
|
|
|
||
|
|
possibilities = [
|
||
|
|
[ "3", "6", "5", "4", "2", "1" ],
|
||
|
|
[ "3", "6", "5", "2", "4", "1" ],
|
||
|
|
[ "6", "3", "5", "2", "4", "1" ],
|
||
|
|
[ "6", "3", "5", "2", "1", "4" ],
|
||
|
|
[ "6", "5", "3", "2", "1", "4" ],
|
||
|
|
[ "6", "5", "3", "2", "4", "1" ],
|
||
|
|
[ "6", "5", "4", "3", "2", "1" ]
|
||
|
|
];
|
||
|
|
|
||
|
|
possibilities.forEach(function( possibility ) {
|
||
|
|
try {
|
||
|
|
expect( arr ).to.deep.equal( possibility );
|
||
|
|
} catch ( e ) {
|
||
|
|
fails.push( e );
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if ( fails.length === possibilities.length ) {
|
||
|
|
throw fails[ 0 ];
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test( "should find cyclic dependencies", function() {
|
||
|
|
var t = new Toposort();
|
||
|
|
t.add( "3", "2" )
|
||
|
|
.add( "2", "1" )
|
||
|
|
.add( "1", "3" );
|
||
|
|
|
||
|
|
expect( function() { t.sort(); }).to.throw( Error );
|
||
|
|
});
|
||
|
|
|
||
|
|
test( "#2 - should add the item if an empty array of dependencies is passed", function() {
|
||
|
|
var t = new Toposort();
|
||
|
|
var out = t.add( "1", [] ).sort();
|
||
|
|
|
||
|
|
expect( out ).to.deep.equal([ "1" ]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|