BE-SPAN/node_modules/toposort-class/test/spec.js

77 lines
2.3 KiB
JavaScript
Raw Normal View History

2024-10-20 15:04:16 +00:00
"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" ]);
});
});
});