[Framework] Add/update tests for sorting

Add/update framework tests to include the sorting of extensions
by priority, WTD-590.
This commit is contained in:
Victor Woeltjen 2015-01-07 17:06:09 -08:00
parent 9d8885d48f
commit 64ede1e917
3 changed files with 79 additions and 1 deletions

View File

@ -11,14 +11,24 @@ define(
describe("The extension registrar", function () {
var mockApp,
mockLog,
mockSorter,
customRegistrars,
registrar;
beforeEach(function () {
mockApp = jasmine.createSpyObj("app", ["factory"]);
mockLog = jasmine.createSpyObj("$log", ["error", "warn", "debug", "info"]);
mockSorter = jasmine.createSpyObj("sorter", ["sort"]);
customRegistrars = {};
registrar = new ExtensionRegistrar(mockApp, customRegistrars, mockLog);
mockSorter.sort.andCallFake(function (v) { return v; });
registrar = new ExtensionRegistrar(
mockApp,
customRegistrars,
mockSorter,
mockLog
);
});
it("registers extensions using the factory", function () {
@ -64,6 +74,23 @@ define(
expect(customRegistrars.things).toHaveBeenCalled();
});
it("sorts extensions before registering", function () {
// Some extension definitions to sort
var a = { a: 'a' }, b = { b: 'b' }, c = { c: 'c' };
// Fake sorting; just reverse the array
mockSorter.sort.andCallFake(function (v) { return v.reverse(); });
// Register the extensions
registrar.registerExtensions({ things: [ a, b, c ] });
// Verify registration interactions occurred in reverse-order
[ c, b, a ].forEach(function (extension, index) {
expect(mockApp.factory.calls[index].args[1][0]())
.toEqual(extension);
});
});
});
}
);

View File

@ -0,0 +1,50 @@
/*global define,Promise,describe,it,expect,beforeEach,jasmine,waitsFor*/
define(
["../../src/register/ExtensionSorter"],
function (ExtensionSorter) {
"use strict";
describe("The extension sorter", function () {
var mockLog,
sorter;
beforeEach(function () {
mockLog = jasmine.createSpyObj(
"$log",
["error", "warn", "debug", "info"]
);
sorter = new ExtensionSorter(mockLog);
});
it("sorts extensions in priority order", function () {
var a = { priority: 10 },
b = {},
c = { priority: 'mandatory' }; // Should be +Inf
expect(sorter.sort([a, b, c])).toEqual([c, a, b]);
});
it("warns about unrecognized priorities", function () {
var a = { priority: 10 },
b = {},
c = { priority: 'mandatory' }, // Should be +Inf
d = { priority: 'GARBAGE-TEXT' },
e = { priority: { mal: "formed"} },
f = { priority: 3 };
// Sorting should use default order (note we assume
// a stable sort here as well)
expect(sorter.sort(
[a, b, c, d, e, f]
)).toEqual(
[c, a, f, b, d, e]
);
// Should have been warned exactly twice (for d & e)
expect(mockLog.warn.calls.length).toEqual(2);
});
});
}
);

View File

@ -6,6 +6,7 @@
"load/Extension",
"register/CustomRegistrars",
"register/ExtensionRegistrar",
"register/ExtensionSorter",
"register/PartialConstructor",
"register/ServiceCompositor",
"resolve/BundleResolver",