UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

127 lines (112 loc) 5.07 kB
define([ 'intern!object', 'intern/chai!assert', 'sinon', '../../../errors/create', '../../../_base/lang' ], function (registerSuite, assert, sinon, create, lang) { registerSuite({ name: 'dojo/errors/create', "prototype properties": function () { //arrange var name = "the name", props = { foo: "bar", baz: "buz" }, expectedPrototype = { qux: 42 }, base = new Error(), mock = sinon.stub(lang, "delegate").returns(expectedPrototype); //act var result = create(name, null, base, props); //assert assert.isTrue(mock.calledWith(base.prototype, props)); assert.equal(result.prototype, expectedPrototype); assert.equal(result.prototype.name, name); assert.equal(result.prototype.constructor, result); mock.restore(); }, "string + null + Error + props captures error properties": function () { if (Error.captureStackTrace) { //arrange var message = "the message", ErrorClass = create("foo", null, Error); //act var result = new ErrorClass(message); //assert assert.isDefined(result.stack); assert.equal(result.message, message); assert.instanceOf(result, Error); } else { this.skip("Only valid on clients that support Error.captureStackTrace"); } }, "string + null + non-Error func + props calls non-Error func": function () { //arrange var caughtThis, caughtArgs, mock = function () { caughtThis = this; caughtArgs = arguments; }, message = "the message", ErrorClass = create("", null, mock); //act var result = new ErrorClass(message); //assert assert.equal(caughtArgs[0], message); assert.equal(caughtThis, result); }, "string + function + Error + props calls function": function () { //arrange var caughtThis, caughtArgs, mock = function () { caughtThis = this; caughtArgs = arguments; }, message = "the message", ErrorClass = create("", mock, Error); //act var result = new ErrorClass(message); //assert assert.equal(caughtArgs[0], message); assert.equal(caughtThis, result); }, "validation tests": (function () { var TestError = create("TestError", function (message, foo) { this.foo = foo; }); var OtherError = create("OtherError", function (message, foo, bar) { this.bar = bar; }, TestError, { getBar: function () { return this.bar; } }); var testError = new TestError("hello", "asdf"), otherError = new OtherError("goodbye", "qwerty", "blah"); return { "TestError": function () { assert.instanceOf(testError, Error, "testError should be an instance of Error"); assert.instanceOf(testError, TestError, "testError should be an instance of TestError"); assert.notInstanceOf(testError, OtherError, "testError should not be an instance of OtherError"); assert.notProperty(testError, "getBar", "testError should not have a 'getBar' property"); assert.equal(testError.message, "hello", "testError's message property should be 'hello'"); if ((new Error()).stack) { assert.isTrue(!!testError.stack, "custom error should have stack set"); } }, "OtherError": function () { assert.instanceOf(otherError, Error, "otherError should be an instance of Error"); assert.instanceOf(otherError, TestError, "otherError should be an instance of TestError"); assert.instanceOf(otherError, OtherError, "otherError should be an instance of OtherError"); assert.property(otherError, "getBar", "otherError should have a 'getBar' property"); assert.isFalse(otherError.hasOwnProperty("getBar"), "otherError should not have a 'getBar' own property"); assert.equal(otherError.getBar(), "blah", "otherError should return 'blah' from getBar()"); assert.equal(otherError.message, "goodbye", "otherError's message property should be 'goodbye'"); } } })() }); });