Created
December 12, 2012 18:56
-
-
Save mmthomas/4270523 to your computer and use it in GitHub Desktop.
QUnit unit tests for ServiceKernel.js (https://gist.github.com/4089076)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// unit tests for ServiceKernel.js (https://gist.github.com/4089076) | |
// requires QUnit test framework | |
module("ServiceKernelTests"); | |
if (typeof throws === "undefined") throws = raises; | |
test("require unregistered service throws", function () { | |
var kernel = new ServiceKernel(); | |
throws(function () { | |
kernel.require("a", function (a) { | |
ok(false, "should not get here."); | |
}); | |
}, Error); | |
}); | |
test("require 'require' service succeeds", function () { | |
var kernel = new ServiceKernel(); | |
var requireCallbackInvoked = false; | |
kernel.require("require", function (require) { | |
ok(typeof require === "function"); | |
require("require", function (require2) { | |
deepEqual(require, require2); | |
requireCallbackInvoked = true; | |
}); | |
}); | |
ok(requireCallbackInvoked); | |
}); | |
test("require 'kernel' service succeeds", function () { | |
var kernel = new ServiceKernel(); | |
var requireCallbackInvoked = false; | |
kernel.require("kernel", function (kernel2) { | |
deepEqual(kernel, kernel2); | |
requireCallbackInvoked = true; | |
}); | |
ok(requireCallbackInvoked); | |
}); | |
test("undefine existing service returns true", function () { | |
var kernel = new ServiceKernel(); | |
ok(kernel.undefine("require")); | |
ok(kernel.undefine("kernel")); | |
}); | |
test("require undefined service throws", function () { | |
var kernel = new ServiceKernel(); | |
kernel.undefine("require"); | |
throws(function () { | |
kernel.require("require", function () { | |
ok(false, "should not get here."); | |
}); | |
}, Error); | |
kernel.undefine("kernel"); | |
throws(function () { | |
kernel.require("kernel", function () { | |
ok(false, "should not get here."); | |
}); | |
}, Error); | |
}); | |
test("undefine non-existent service returns false", function () { | |
var kernel = new ServiceKernel(); | |
ok(!kernel.undefine("foo")); | |
}); | |
test("define existing service throws", function () { | |
var kernel = new ServiceKernel(); | |
throws(function () { | |
kernel.define("require", function () { | |
}); | |
}, Error); | |
throws(function () { | |
kernel.define("kernel", function () { | |
}); | |
}, Error); | |
var service = defineService(function () { | |
return this; | |
}); | |
throws(function () { | |
kernel.define("require", service); | |
}, Error); | |
throws(function () { | |
kernel.define("kernel", service); | |
}, Error); | |
}); | |
test("require service instance succeeds", function () { | |
var kernel = new ServiceKernel(); | |
var a = { | |
foo: 0 | |
}; | |
kernel.defineInstance("a", a); | |
var requireCallbackInvoked = false; | |
kernel.require("a", function (a2) { | |
deepEqual(a, a2); | |
requireCallbackInvoked = true; | |
}); | |
ok(requireCallbackInvoked); | |
}); | |
test("require service succeeds", function () { | |
var kernel = new ServiceKernel(); | |
kernel.define("a", function () { | |
return function () { | |
return "a"; | |
} | |
}); | |
var requireCallbackInvoked = false; | |
kernel.require("a", function (a) { | |
equal("a", a()); | |
requireCallbackInvoked = true; | |
}); | |
ok(requireCallbackInvoked); | |
}); | |
test("require service with dependency succeeds", function () { | |
var kernel = new ServiceKernel(); | |
kernel.define("a", function () { | |
return { | |
foo: function () { | |
return "afoo"; | |
} | |
}; | |
}); | |
var bServiceInitialized = false; | |
kernel.define("b", ["a"], function (a) { | |
bServiceInitialized = true; | |
return { | |
a_foo: function () { | |
return a.foo(); | |
} | |
}; | |
}); | |
var requireCallbackInvoked = false; | |
kernel.require("b", function (b) { | |
equal("afoo", b.a_foo()); | |
requireCallbackInvoked = true; | |
}); | |
ok(requireCallbackInvoked); | |
ok(bServiceInitialized); | |
}); | |
test("require service with circular dependency succeeds", function () { | |
var kernel = new ServiceKernel(); | |
var aServiceInitialized = false; | |
kernel.define("a", [ | |
"require", | |
"b" | |
], function (require, b) { | |
strictEqual("undefined", typeof b); | |
aServiceInitialized = true; | |
return { | |
foo: function () { | |
return require("b").foo(); | |
} | |
}; | |
}); | |
var bServiceInitialized = false; | |
kernel.define("b", ["a"], function (a) { | |
bServiceInitialized = true; | |
return { | |
foo: function () { | |
return "bfoo"; | |
}, | |
a_foo: function () { | |
return a.foo(); | |
} | |
}; | |
}); | |
var requireCallbackInvoked = false; | |
kernel.require("b", function (b) { | |
equal("bfoo", b.foo()); | |
equal("bfoo", b.a_foo()); | |
requireCallbackInvoked = true; | |
}); | |
ok(requireCallbackInvoked); | |
ok(bServiceInitialized); | |
ok(aServiceInitialized); | |
}); | |
test("require service with circular dependency and dependent deferred require succeeds", function () { | |
var kernel = new ServiceKernel(); | |
var aServiceInitialized = false; | |
var bRequireCallbackInvoked = false; | |
kernel.define("a", ["require", "b"], function (require, b) { | |
strictEqual("undefined", typeof b); | |
require(["b"], function(b) { | |
bRequireCallbackInvoked = true; | |
equal("bfoo", b.foo()); | |
}); | |
// above require callback can't be invoked until b finished being defined | |
ok(!bRequireCallbackInvoked); | |
aServiceInitialized = true; | |
return { | |
foo: function () { | |
return require("b").foo(); | |
} | |
}; | |
}); | |
var bServiceInitialized = false; | |
kernel.define("b", ["a"], function (a) { | |
bServiceInitialized = true; | |
return { | |
foo: function () { | |
return "bfoo"; | |
}, | |
a_foo: function () { | |
return a.foo(); | |
} | |
}; | |
}); | |
var requireCallbackInvoked = false; | |
kernel.require("b", function (b) { | |
equal("bfoo", b.foo()); | |
equal("bfoo", b.a_foo()); | |
requireCallbackInvoked = true; | |
}); | |
ok(bRequireCallbackInvoked); | |
ok(requireCallbackInvoked); | |
ok(bServiceInitialized); | |
ok(aServiceInitialized); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment