UNPKG

unit.js

Version:

Simple, intuitive and flexible unit testing framework for javascript / Node.js (browser and server). Integrates awesome assertions libraries like Must.js, Should.js, Assert of Node.js, Sinon.js and other friendly features (promise, IoC, plugins, ...).

1 lines 119 kB
/*! Unit.js v2.1.1 | (c) 2019 Nicolas Tallefourtane | http://unitjs.com/license.html */!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=1)}([function(module,exports){module.exports=function(actual){return{is:function(expected){},isNot:function(expected){},isEqualTo:function(expected){},isNotEqualTo:function(expected){},isStrictEqualTo:function(expected){},isNotStrictEqualTo:function(expected){},isIdenticalTo:function(expected){},isNotIdenticalTo:function(expected){},match:function(expected){},notMatch:function(expected){},matchEach:function(expected){},notMatchEach:function(expected){},isValid:function(expected){},isNotValid:function(expected){},isType:function(expected){},isNotType:function(expected){},isObject:function(){},isArray:function(){},isFunction:function(){},isString:function(){},isNumber:function(){},isBool:function(){},isBoolean:function(){},isNull:function(){},isUndefined:function(){},isRegExp:function(){},isNotRegExp:function(){},isDate:function(){},isNotDate:function(){},isArguments:function(){},isNotArguments:function(){},isTrue:function(){},isNotTrue:function(){},isTruthy:function(){},isNotTruthy:function(){},isFalse:function(){},isNotFalse:function(){},isFalsy:function(){},isNotFalsy:function(){},isEmpty:function(){},isNotEmpty:function(){},isNaN:function(){},isNotNaN:function(){},exists:function(){},isError:function(){},throws:function(constructor,expected){},hasLength:function(expected){},hasNotLength:function(expected){},isBetween:function(begin,end){},isNotBetween:function(begin,end){},isBefore:function(expected){},isAfter:function(expected){},isGreaterThan:function(expected){},isLessThan:function(expected){},isApprox:function(num,delta){},isInfinite:function(){},isNotInfinite:function(){},isEnumerable:function(property){},isNotEnumerable:function(property){},isFrozen:function(){},isNotFrozen:function(){},isInstanceOf:function(expected){},isNotInstanceOf:function(expected){},hasProperty:function(property,value){},hasNotProperty:function(property,value){},hasOwnProperty:function(property,value){},hasNotOwnProperty:function(property,value){},hasProperties:function(properties){},hasNotProperties:function(properties){},hasOwnProperties:function(properties){},hasKey:function(key,value){},notHasKey:function(key,value){},hasKeys:function(keys){},notHasKeys:function(keys){},hasValue:function(expected){},notHasValue:function(expected){},hasValues:function(expected){},notHasValues:function(expected){},contains:function(expected){},notContains:function(expected){},isReverseOf:function(expected){},isNotReverseOf:function(expected){},startsWith:function(str){},notStartsWith:function(str){},endsWith:function(str){},notEndsWith:function(str){},hasHttpStatus:function(code){},notHasHttpStatus:function(code){},hasHeader:function(field,value){},notHasHeader:function(field,value){},hasHeaderJson:function(){},notHasHeaderJson:function(){},hasHeaderHtml:function(){},notHasHeaderHtml:function(){}}},module.exports=function(actual){return{is:function(expected){},isNot:function(expected){},isEqualTo:function(expected){},isNotEqualTo:function(expected){},isStrictEqualTo:function(expected){},isNotStrictEqualTo:function(expected){},isIdenticalTo:function(expected){},isNotIdenticalTo:function(expected){},match:function(expected){},notMatch:function(expected){},matchEach:function(expected){},notMatchEach:function(expected){},isValid:function(expected){},isNotValid:function(expected){},isType:function(expected){},isNotType:function(expected){},isObject:function(){},isArray:function(){},isFunction:function(){},isString:function(){},isNumber:function(){},isBool:function(){},isBoolean:function(){},isNull:function(){},isUndefined:function(){},isRegExp:function(){},isNotRegExp:function(){},isDate:function(){},isNotDate:function(){},isArguments:function(){},isNotArguments:function(){},isTrue:function(){},isNotTrue:function(){},isTruthy:function(){},isNotTruthy:function(){},isFalse:function(){},isNotFalse:function(){},isFalsy:function(){},isNotFalsy:function(){},isEmpty:function(){},isNotEmpty:function(){},isNaN:function(){},isNotNaN:function(){},exists:function(){},isError:function(){},throws:function(constructor,expected){},hasLength:function(expected){},hasNotLength:function(expected){},isBetween:function(begin,end){},isNotBetween:function(begin,end){},isBefore:function(expected){},isAfter:function(expected){},isGreaterThan:function(expected){},isLessThan:function(expected){},isApprox:function(num,delta){},isInfinite:function(){},isNotInfinite:function(){},isEnumerable:function(property){},isNotEnumerable:function(property){},isFrozen:function(){},isNotFrozen:function(){},isInstanceOf:function(expected){},isNotInstanceOf:function(expected){},hasProperty:function(property,value){},hasNotProperty:function(property,value){},hasOwnProperty:function(property,value){},hasNotOwnProperty:function(property,value){},hasProperties:function(properties){},hasNotProperties:function(properties){},hasOwnProperties:function(properties){},hasKey:function(key,value){},notHasKey:function(key,value){},hasKeys:function(keys){},notHasKeys:function(keys){},hasValue:function(expected){},notHasValue:function(expected){},hasValues:function(expected){},notHasValues:function(expected){},contains:function(expected){},notContains:function(expected){},isReverseOf:function(expected){},isNotReverseOf:function(expected){},startsWith:function(str){},notStartsWith:function(str){},endsWith:function(str){},notEndsWith:function(str){},hasHttpStatus:function(code){},notHasHttpStatus:function(code){},hasHeader:function(field,value){},notHasHeader:function(field,value){},hasHeaderJson:function(){},notHasHeaderJson:function(){},hasHeaderHtml:function(){},notHasHeaderHtml:function(){}}}},function(module,exports,__webpack_require__){"use strict";var test=unitjs;function once(fn){var returnValue,called=!1;return function(){return called||(called=!0,returnValue=fn.apply(this,arguments)),returnValue}}describe("Unit.js provides several API unified and several assertion styles",function(){it("Unit.js style",function(){test.string("foobar").isEqualTo("foobar").isIdenticalTo("foobar")}),it("Assert library of Node.js",function(){test.assert(!0),test.assert.equal("foobar","foobar"),test.assert.strictEqual("foobar","foobar");var assert=test.assert;assert(!0),assert.equal("foobar","foobar"),assert.strictEqual("foobar","foobar")}),it("Should.js library",function(){test.should("foobar").be.type("string"),test.should(!0).be.ok,test.should("foobar").be.equal("foobar");var should=test.should;"foobar".should.be.type("string"),(!0).should.be.ok,"foobar".should.be.equal("foobar"),should("foobar").be.type("string"),should(!0).be.ok,should("foobar").be.equal("foobar")}),it("Must.js library",function(){test.must("foobar").be.a.string(),test.must(!0).be.true(),test.must("foobar").be.equal("foobar");var must=test.must;"foobar".must.be.a.string(),(!0).must.be.true(),"foobar".must.be.equal("foobar"),must("foobar").be.a.string(),must(!0).be.true(),must("foobar").be.equal("foobar")}),it("Unit.js is expressive and fluent",function(){var num,arr,obj={fluent:"is awesome"},copy_obj=obj;test.object(obj).isIdenticalTo(copy_obj).isNotIdenticalTo({fluent:"is awesome"}).isNotEqualTo({fluent:"is awesome"}).is({fluent:"is awesome"}).hasProperty("fluent","is awesome").given(num=10).number(num).isBetween(5,15).then().error(function(){test.number(num/1).isInfinite()}).if(num*=.4).number(num).isApprox(5,1.5).when(function(){(arr=[]).push(num),arr.push("fluent")}).array(arr).hasLength(2).hasValue("fluent").if(arr.push("test flow")).and(arr.push("is expressive")).array(arr).hasLength(4).hasValues(["fluent","test flow","is expressive"])})}),describe("Control flow",function(){describe("Performs the tests without entangled with the flow of other series of tests",function(){it("Series launched with chaining",function(){test.exception(function(){throw test.string("serie1-1").isEqualTo("serie1-1").string("serie1-2").isEqualTo("serie1-2").string("serie1-3").isEqualTo("serie1-3"),new Error("Whoops1-1 !")}).hasMessage("Whoops1-1 !").hasMessage(/Whoop/).string("serie2-1").isEqualTo("serie2-1").exception(function(){throw test.string("serie2-1").isEqualTo("serie2-1").string("serie2-2").isEqualTo("serie2-2").string("serie2-3").isEqualTo("serie2-3"),new Error("Whoops2-1 !")}).hasMessage("Whoops2-1 !").hasMessage(/Whoop/).string("serie3-1").isEqualTo("serie3-1").exception(function(){throw new Error("Whoops3-1 !")}).hasMessage("Whoops3-1 !").string("serie4-1").isEqualTo("serie4-1").exception(function(){throw new Error("Whoops4-1 !")}).hasMessage("Whoops4-1 !").string("serie5-1").isEqualTo("serie5-1").string("serie5-2").isEqualTo("serie5-2").string("serie5-3").isEqualTo("serie5-3").then().string("serie5-4").isEqualTo("serie5-4")}),it("Series launched without chaining",function(){test.exception(function(){throw test.string("serie1-1").isEqualTo("serie1-1"),test.string("serie1-2").isEqualTo("serie1-2"),test.string("serie1-3").isEqualTo("serie1-3"),new Error("Whoops1-1 !")}).hasMessage("Whoops1-1 !").hasMessage(/Whoop/),test.string("serie2-1").isEqualTo("serie2-1"),test.exception(function(){throw test.string("serie2-1").isEqualTo("serie2-1"),test.string("serie2-2").isEqualTo("serie2-2"),test.string("serie2-3").isEqualTo("serie2-3"),new Error("Whoops2-1 !")}).hasMessage("Whoops2-1 !").hasMessage(/Whoop/),test.string("serie3-1").isEqualTo("serie3-1"),test.exception(function(){throw new Error("Whoops3-1 !")}).hasMessage("Whoops3-1 !"),test.string("serie4-1").isEqualTo("serie4-1"),test.exception(function(){throw new Error("Whoops4-1 !")}).hasMessage("Whoops4-1 !"),test.string("serie5-1").isEqualTo("serie5-1"),test.string("serie5-2").isEqualTo("serie5-2"),test.string("serie5-3").isEqualTo("serie5-3"),test.string("serie5-4").isEqualTo("serie5-4")}),it("Chaining with dependency injection",function(){test.$provider("getStrProvider",function(self){return test.object(self).isIdenticalTo(test.$di._container),self.fromSelf="ok from self",function(val){return test.string(val),val}}).case("Test the chain of provider",function(){var fn=test.$di.get("getStrProvider");test.function(fn).string(fn("ok1")).isIdenticalTo("ok1").string(test.$di.get("fromSelf")).isIdenticalTo("ok from self")}).$invoke("getStrProvider",function(getStr){return test.string(getStr("ok2")).isIdenticalTo("ok2"),test}).case("Test the chain of a factorized function").$factory("chainStrTest","getStrProvider",function(getStr){return test.function(getStr).string(getStr("from factory"))}).$di.get("chainStrTest").isIdenticalTo("from factory")}),it("Series with helpers",function(){var str,indicator,log=console.log;console.log=test.spy(),test.given(str="serie1-1").string(str).isEqualTo("serie1-1").when('change "str" value',function(){str="serie1-2"}).then(function(){indicator=!0,test.string(str).isEqualTo("serie1-2")}).case('Checks that "then" execute the function argument').bool(indicator).isTrue().string("1").dump("test.dump()").is("1").bool(console.log.called).isTrue().then(function(){console.log=log}).then("Check break of flow").exception(function(){test.string("1").case().is("1")}).exception(function(){test.string("1").if().is("1")}).exception(function(){test.string("1").and().is("1")}).exception(function(){test.string("1").case.is("1")}).exception(function(){test.string("1").if.is("1")}).exception(function(){test.string("1").and.is("1")}).exception(function(){test.string("1").given().is("1")}).exception(function(){test.string("1").when().is("1")}).exception(function(){test.string("1").then().is("1")}).then("The context of flow",function(){var flow=test.string("1").bool(!0).isTrue();test.object(flow).hasProperty("isTrue").hasProperty("isFalse").hasNotProperty("hasValue").object(test.string("1")).hasProperty("hasValue")})})})}),describe("Passes IOC container",function(){beforeEach(function(){test.$di.set("spy",test.spy()).provider("assertSpy","spy",function(spy){return function(num){return test.assert(spy.callCount===num),test}}).set("callSpy",function(){return test.$di.get("spy"),test})}),afterEach(function(){test.$di.remove("spy").remove("assertSpy").remove("callSpy")}),it("case()",function(){test.case(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).case(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("given()",function(){test.given(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).given(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("when()",function(){test.when(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).when(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("then()",function(){test.then(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).then(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("if()",function(){test.if(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).if(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("and()",function(){test.and(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(1).then("control flow").object({}).and(function(){test.object(this).isIdenticalTo(test.$di._container),this.callSpy()}).$di.get("assertSpy")(2)}),it("wait()",function(done){var calledAt,spy=test.spy(function(){calledAt=(calledAt=new Date).getTime()}),defAt=new Date;test.wait(20,spy),setTimeout(function(){test.assert(spy.calledOnce),defAt=defAt.getTime(),test.number(calledAt).isGreaterThan(defAt+18),done()},25)}),it("dump()",function(){var log=console.log;console.log=test.spy(),test.string("1").dump("test.dump()").is("1").bool(console.log.called).isTrue(),console.log=log}),it("stats",function(){var countAssert,countAssertOk,total;test.object(test.stats).object(test.stats.assertions).object(test.stats.total).number(test.stats.total.assertions).isGreaterThan(2).number(test.stats.assertions.isObject).isGreaterThan(1).number(test.stats.assertions.isNumber).isGreaterThan(1).case("assert",function(){total=test.stats.total.assertions,countAssert=test.stats.assertions.assert||0,countAssertOk=test.stats.assertions["assert.ok"]||0,test.assert(!0),test.assert.ok(!0),test.number(test.stats.total.assertions).is(total+2).number(test.stats.assertions.assert).is(countAssert+1).number(test.stats.assertions["assert.ok"]).is(countAssertOk+1)})})});var jQuery={ajax:function(){}};describe("Unit.js provides sinon.js",function(){describe("Spies",function(){it("calls the original function",function(){var callback=test.spy();once(callback)(),test.assert(callback.called)}),it("calls the original function only once",function(){var callback=test.spy(),proxy=once(callback);proxy(),proxy(),test.assert(callback.calledOnce),test.assert.strictEqual(callback.callCount,1)}),it("calls original function with right this and args",function(){var callback=test.spy(),obj={};once(callback).call(obj,1,2,3),test.assert(callback.calledOn(obj)),test.assert(callback.calledWith(1,2,3))})}),describe("Stubs",function(){it("returns the return value from the original function",function(){var proxy=once(test.stub().returns(42));test.assert.strictEqual(proxy(),42)})}),describe("Testing Ajax",function(){after(function(){jQuery.ajax.restore()}),it("makes a GET request for todo items",function(){test.stub(jQuery,"ajax"),function(listId,callback){jQuery.ajax({url:"/todo/"+listId+"/items",success:function(data){callback(null,data)}})}(42,test.spy()),test.assert(jQuery.ajax.calledWithMatch({url:"/todo/42/items"}))})}),describe("Mocks",function(){it("returns the return value from the original function",function(){var myAPI={method:function(){}},mock=test.mock(myAPI);mock.expects("method").once().returns(42);var proxy=once(myAPI.method);test.assert.equal(proxy(),42),mock.verify()}),it("test should call a method with exceptions",function(){var myAPI={method:function(){}},mock=test.mock(myAPI);mock.expects("method").once().throws(),test.exception(function(){myAPI.method()}).isInstanceOf(Error),mock.verify()})}),describe("Matchers",function(){it("test should assert fuzzy",function(){var spy=test.spy();spy({pages:42,author:"cjno"}),test.sinon.assert.calledWith(spy,test.sinon.match({author:"cjno"})),test.sinon.assert.calledWith(spy,test.sinon.match.has("pages",42))}),it("test should stub method differently based on argument types",function(){var callback=test.stub();callback.withArgs(test.sinon.match.string).returns(!0),callback.withArgs(test.sinon.match.number).throws("TypeError"),test.bool(callback("abc")).isTrue(),test.exception(function(){callback(123)}).isValid(function(err){if("TypeError"===err.name)return!0})}),it("Combining matchers",function(){var stringOrNumber=test.sinon.match.string.or(test.sinon.match.number),bookWithPages=test.sinon.match.object.and(test.sinon.match.has("pages")),spy=test.spy(),otherSpy=test.spy();spy({pages:42,author:"cjno"}),otherSpy(10),test.sinon.assert.calledWith(spy,bookWithPages),test.sinon.assert.calledWith(otherSpy,stringOrNumber)}),it("Custom matchers",function(){var equal10=test.sinon.match(function(value){return 10===value},"value is not equal to 10"),spy=test.spy(),otherSpy=test.spy();spy(10),otherSpy(42),test.sinon.assert.calledWith(spy,equal10),test.exception(function(){test.sinon.assert.calledWith(otherSpy,equal10)}).hasMessage(/value is not equal to 10/)})}),describe("Sandbox",function(){it("test using test.sinon.test sandbox",test.sinon.test(function(){var myAPI={method:function(){}},mockMyApi=this.mock(myAPI).expects("method").once().returns(42),proxy=once(myAPI.method);test.number(proxy()).isIdenticalTo(42),mockMyApi.verify()}))})}),describe("Asserter array()",function(){describe("array() behavior",function(){it("Does not contains assertions from the assertions containers",function(){test.value(test.array([]).hasHeader).isUndefined().value(test.array([]).isError).isUndefined().value(test.array([]).hasMessage).isUndefined().value(test.array([]).isInfinite).isUndefined()}),it("Assert that the tested value is an `array`",function(){function Foo(){}test.array([]).array(["a","b","c"]).array(new Array).case("Test failure",function(){test.exception(function(){test.array({})}).exception(function(){test.array("Foo")}).exception(function(){test.array(Foo)}).exception(function(){test.array(1)}).exception(function(){test.array(void 0)}).exception(function(){test.array(!0)}).exception(function(){test.array(!1)}).exception(function(){test.array(null)}).exception(function(){test.array(function(){})})})})}),describe("Assertions of array()",function(){it("is(expected)",function(){test.array(["foo",[0,1]]).is(["foo",[0,1]]).case("Test failure",function(){test.exception(function(){test.array(["foo",[0,1]]).is(["foo",[0,"1"]])}).exception(function(){test.array(["foo",[0,1]]).is(["foo",[0,1,2]])}).exception(function(){test.array(["foo",[0,1]]).is(["foo",[0]])}).exception(function(){test.array(["foo",[0,1]]).is(["foobar",[0,1]])})})}),it("isNot(expected)",function(){test.array(["foo",[0,1]]).isNot(["foo",[0,"1"]]).exception(function(){test.array(["foo",[0,1]]).isNot(["foo",[0,1]])})}),it("isIdenticalTo(expected)",function(){var arr=[1],arr2=arr;test.array(arr).isIdenticalTo(arr2).exception(function(){test.array(arr).isIdenticalTo([1])})}),it("isNotIdenticalTo(expected)",function(){var arr=[1],arr2=arr;test.array(arr).isNotIdenticalTo([1]).exception(function(){test.array(arr).isNotIdenticalTo(arr2)})}),it("isEqualTo(expected)",function(){var arr=[1],arr2=arr;test.array(arr).isEqualTo(arr2).exception(function(){test.array(arr).isEqualTo([1])})}),it("isNotEqualTo(expected)",function(){var arr=[1],arr2=arr;test.array(arr).isNotEqualTo([1]).exception(function(){test.array(arr).isNotEqualTo(arr2)})}),it("match(expected)",function(){test.array(["a","b","c"]).match(/[a-z]/).array([42,10]).match(function(actual){return 10===actual[1]}).exception(function(){test.array([42,"10"]).match(function(actual){return 10===actual[1]})})}),it("notMatch(expected)",function(){test.array(["a","b","c"]).notMatch(/[d-z]/).array([42,10]).notMatch(function(actual){return"10"===actual[1]}).exception(function(){test.array([42,"10"]).notMatch(function(actual){return 42===actual[0]})})}),it("isValid(expected)",function(){test.array(["a","b","c"]).isValid(/[a-z]/).array([42,10]).isValid(function(actual){return 10===actual[1]}).exception(function(){test.array([42,"10"]).isValid(function(actual){return 10===actual[1]})})}),it("isNotValid(expected)",function(){test.array(["a","b","c"]).isNotValid(/[d-z]/).array([42,10]).isNotValid(function(actual){return"10"===actual[1]}).exception(function(){test.array([42,"10"]).isNotValid(function(actual){return 42===actual[0]})})}),it("matchEach(expected)",function(){test.array([10,11,12]).matchEach(function(it){return 10<=it}).exception(function(){test.array([10,11,12]).matchEach(function(it){return 11<=it})})}),it("notMatchEach(expected)",function(){test.array([10,11,12]).notMatchEach(function(it){return 13<=it}).exception(function(){test.array([10,11,12]).notMatchEach(function(it){return 11<=it})})}),it("isEmpty()",function(){test.array([]).isEmpty().exception(function(){test.array([0]).isEmpty()}).exception(function(){test.array([""]).isEmpty()})}),it("isNotEmpty()",function(){test.array(["a"]).isNotEmpty().exception(function(){test.array([]).isNotEmpty()})}),it("hasLength(expected)",function(){test.array([1,2]).hasLength(2).exception(function(){test.array([1,2]).hasLength(1)})}),it("hasNotLength(expected)",function(){test.array([1,2]).hasNotLength(1).exception(function(){test.array([1,2]).hasNotLength(2)})}),it("isEnumerable(property)",function(){var arr=["is enumerable"];test.array(arr).isEnumerable(0).array(arr).isNotEnumerable("length").exception(function(){test.array(arr).isEnumerable("length")})}),it("isNotEnumerable(property)",function(){var arr=["is enumerable"];test.array(arr).isNotEnumerable("length").array(arr).isEnumerable(0).exception(function(){test.array(arr).isNotEnumerable(0)})}),it("hasProperty(property [, value])",function(){test.array(["a","b"]).hasProperty(1).hasProperty(0,"a").exception(function(){test.array(["a","b"]).hasProperty(3)}).exception(function(){test.array(["a","b"]).hasProperty(0,"b")})}),it("hasNotProperty(property [, value])",function(){test.array(["a","b"]).hasNotProperty(2).hasNotProperty(0,"b").exception(function(){test.array(["a","b"]).hasNotProperty(0)}).exception(function(){test.array(["a","b"]).hasNotProperty(1,"b")})}),it("hasKey(key [, value])",function(){test.array(["a","b"]).hasKey(1).hasKey(0,"a").exception(function(){test.array(["a","b"]).hasKey(3)}).exception(function(){test.array(["a","b"]).hasKey(0,"b")})}),it("notHasKey(key [, value])",function(){test.array(["a","b"]).notHasKey(2).notHasKey(0,"b").exception(function(){test.array(["a","b"]).notHasKey(0)}).exception(function(){test.array(["a","b"]).notHasKey(1,"b")})}),it("hasValue(expected)",function(){test.array([1,42,3]).hasValue(42).exception(function(){test.array([1,42,3]).hasValue(0)})}),it("notHasValue(expected)",function(){test.array([1,42,3]).notHasValue(4).exception(function(){test.array([1,42,3]).notHasValue(42)})}),it("hasValues(expected)",function(){test.array([1,42,3]).hasValues([42,3]).exception(function(){test.array([1,42,3]).hasValues([42,3,10])})}),it("notHasValues(expected)",function(){test.array([1,42,3]).notHasValues([4,2]).exception(function(){test.array([1,42,3]).notHasValues([4,1])})}),it("contains(expected [, ...])",function(){test.array([1,2,3]).contains([3]).array([1,2,3]).contains([1,3]).array([1,2,3]).contains([3],[1,3]).array([1,2,3,{a:{b:{d:12}}}]).contains([2],[1,2],[{a:{b:{d:12}}}]).array([[1],[2],[3]]).contains([[3]]).array([[1],[2],[3,4]]).contains([[3]]).array([{a:"a"},{b:"b",c:"c"}]).contains([{a:"a"}],[{b:"b"}]).exception(function(){test.array([1,2,3]).contains([0])})}),it("notContains(expected [, ...])",function(){test.array([[1],[2],[3,4]]).notContains([[0]]).array([{a:"a"},{b:"b",c:"c"}]).notContains([{a:"b"}],[{c:"b"}]).exception(function(){test.array([{a:"a"},{b:"b",c:"c"}]).notContains([{a:"a"}],[{b:"b"}])})}),it("isReverseOf(expected)",function(){test.array([1,2,3]).isReverseOf([3,2,1]).exception(function(){test.array([1,2,3]).isReverseOf([1,2,3])}).exception(function(){test.array([1,2,3]).isReverseOf([3,2,2,1])})}),it("isNotReverseOf(expected)",function(){test.array([1,2,2,3]).isNotReverseOf([3,2,1]).exception(function(){test.array([3,2,1]).isNotReverseOf([3,2,1])})})})}),describe("Asserter bool()",function(){describe("bool() behavior",function(){it("Does not contains assertions from the assertions containers",function(){test.value(test.bool(!0).hasHeader).isUndefined().value(test.bool(!0).hasProperty).isUndefined().value(test.bool(!0).hasMessage).isUndefined()}),it("Assert that the tested value is a `boolean`",function(){test.bool(!0).bool(!1).case("Test failure",function(){test.exception(function(){test.bool()}).exception(function(){test.bool(0)}).exception(function(){test.bool(1)}).exception(function(){test.bool(void 0)}).exception(function(){test.bool(null)}).exception(function(){test.bool("")}).exception(function(){test.bool("true")}).exception(function(){test.bool("false")}).exception(function(){test.bool("1")}).exception(function(){test.bool("0")}).exception(function(){test.bool([])}).exception(function(){test.bool({})}).exception(function(){test.bool(new Boolean("false")).isFalse()}).exception(function(){test.bool(Boolean("false")).isFalse()})})})}),describe("Assertions of bool()",function(){it("isTrue()",function(){test.bool(!0).isTrue().exception(function(){test.bool(!1).isTrue()})}),it("isNotTrue()",function(){test.bool(!1).isNotTrue().exception(function(){test.bool(!0).isNotTrue()})}),it("isFalse()",function(){test.bool(!1).isFalse().exception(function(){test.bool(!0).isFalse()})}),it("isNotFalse()",function(){test.bool(!0).isNotFalse().exception(function(){test.bool(!1).isNotFalse()})})})}),describe("Asserter date()",function(){describe("date() behavior",function(){it("Does not contains assertions from the assertions containers",function(){test.value(test.date(new Date).hasHeader).isUndefined().value(test.date(new Date).hasProperty).isUndefined().value(test.date(new Date).hasMessage).isUndefined().value(test.date(new Date).isInfinite).isUndefined()}),it("Assert that the tested value is an instance of `Date`",function(){test.date(new Date).date(new Date("2010, 5, 20")).case("Test failure",function(){test.exception(function(){test.date("2010 5 20")}).exception(function(){test.date(2010)}).exception(function(){test.date(Date)})})})}),describe("Assertions of date()",function(){it("is(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).is(new Date("2010, 5, 20")).case("Test failure",function(){test.exception(function(){test.date(date).is(/2010/)}).exception(function(){test.date(date).is(new Date("2011, 5, 20"))})})}),it("isNot(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isNot(new Date("2012, 02, 28")).case("Test failure",function(){test.exception(function(){test.date(date).isNot(new Date("2010, 5, 20"))}).exception(function(){test.date(date).isNot(date)})})}),it("isIdenticalTo(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isIdenticalTo(date).exception(function(){test.date(date).isIdenticalTo(new Date("2010, 5, 20"))})}),it("isNotIdenticalTo(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isNotIdenticalTo(new Date("2010, 5, 20")).exception(function(){test.date(date).isNotIdenticalTo(date)})}),it("isEqualTo(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isEqualTo(date).exception(function(){test.date(date).isEqualTo(new Date("2010, 5, 20"))})}),it("isNotEqualTo(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isNotEqualTo(new Date("2010, 5, 20")).exception(function(){test.date(date).isNotEqualTo(date)})}),it("match(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).match(/\d/).match(/2010/).exception(function(){test.date(date).match(/^\d$/)}).exception(function(){test.date(date).match(/03/)})}),it("notMatch(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).notMatch(/^\d$/).notMatch(/03/).exception(function(){test.date(date).notMatch(/\d/)}).exception(function(){test.date(date).notMatch(/20/)})}),it("isValid(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isValid(/\d/).isValid(/2010/).exception(function(){test.date(date).isValid(/^\d$/)}).exception(function(){test.date(date).isValid(/03/)})}),it("isNotValid(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isNotValid(/^\d$/).isNotValid(/03/).exception(function(){test.date(date).isNotValid(/\d/)}).exception(function(){test.date(date).isNotValid(/20/)})}),it("isBetween(begin, end)",function(){var date=new Date("2010, 5, 20");test.date(date).isBetween(new Date("1982, 02, 17"),new Date("2012, 02, 28")).exception(function(){test.date(date).isBetween(new Date("2012, 02, 28"),new Date("1982, 02, 17"))})}),it("isNotBetween(begin, end)",function(){var date=new Date("2010, 5, 20");test.date(date).isNotBetween(new Date("2011, 02, 17"),new Date("2012, 02, 28")).exception(function(){test.date(date).isNotBetween(new Date("1982, 02, 17"),new Date("2012, 02, 28"))})}),it("isBefore(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isBefore(new Date("2012, 02, 28")).exception(function(){test.date(date).isBefore(new Date("1982, 02, 17"))})}),it("isAfter(expected)",function(){var date=new Date("2010, 5, 20");test.date(date).isAfter(new Date("1982, 02, 17")).exception(function(){test.date(date).isAfter(new Date("2012, 02, 28"))})})})}),describe("Asserter error()",function(){describe("error() behavior",function(){it("Does not contains inappropriate assertions from the assertions containers",function(){function trigger(){throw new Error("Whoops!")}var indicator=0,deletedAssertions=["isType","isNotType","isObject","isArray","isString","isNumber","isBool","isBoolean","isNull","isUndefined","isRegExp","isNotRegExp","isDate","isNotDate","isArguments","isNotArguments","isEmpty","isNotEmpty","hasLength","hasNotLength","hasProperties","hasNotProperties","hasOwnProperties","hasKeys","notHasKeys","hasValue","notHasValue","hasValues","notHasValues","contains","notContains","startsWith","notStartsWith","endsWith","notEndsWith"];test.value(test.error(trigger).hasHeader).isUndefined().value(test.error(trigger).isInfinite).isUndefined(),deletedAssertions.map(function(method){test.value(test.error(trigger)[method]).isUndefined(),indicator++});var error=test.error(trigger);test.exception(function(){test.value(error.hasMessage).isUndefined()}),test.number(indicator).isIdenticalTo(deletedAssertions.length)}),it("Fails if the tested exception is not an instance of Error",function(){function error(){throw new Error("foo")}function number(){throw 1}function string(){throw"Error"}function object(){throw{name:Error,message:"Whoops!"}}function array(){throw[Error]}var allCatch={number:!0,string:!0,object:!0,array:!0},status={number:!1,string:!1,object:!1,array:!1},check=function(name,trigger){try{test.error(trigger)}catch(e){status[name]=!0}};test.error(error).when(function(){check("number",number),check("string",string),check("object",object),check("array",array)}).object(status).is(allCatch);allCatch={number:!0,string:!0,object:!0,array:!0},status={number:!1,string:!1,object:!1,array:!1},check=function(name,trigger){try{test.exception(trigger)}catch(e){status[name]=!0}};test.exception(error).isError().when(function(){check("number",number),check("string",string),check("object",object),check("array",array)}).object(status).isNot(allCatch).is({number:!1,string:!1,object:!1,array:!1})}),it("dependency injection",function(){var spy=test.spy();test.$di.set("spyException",spy),test.error(function(){throw this.spyException("arg1","arg2"),new Error("Whoops!")}).bool(spy.calledOnce&&spy.calledWithExactly("arg1","arg2")).isTrue()})}),describe("Assertions of error()",function(){it("is(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).is(error).is(new Error("Whoops !")).case("Test failure",function(){test.value(function(){test.error(trigger).is({message:"Whoops !"})}).throws().value(function(){test.error(trigger).is(new TypeError("Whoops !"))}).throws()})}),it("isNot(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).isNot({message:"Whoops !"}).value(function(){test.error(trigger).isNot(error)}).throws()}),it("isIdenticalTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).isIdenticalTo(error).value(function(){test.error(trigger).isIdenticalTo(new Error("Whoops !"))}).throws()}),it("isNotIdenticalTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).isNotIdenticalTo(new Error("Whoops !")).value(function(){test.error(trigger).isNotIdenticalTo(error)}).throws()}),it("isEqualTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).isEqualTo(error).value(function(){test.error(trigger).isEqualTo(new Error("Whoops !"))}).throws()}),it("isNotEqualTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.error(trigger).isNotEqualTo(new Error("Whoops !")).value(function(){test.error(trigger).isNotEqualTo(error)}).throws()}),it("match(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.error(trigger).match("Whoops!").match(/Whoops/).match(function(exception){return indicator.set("custom error validation called",!0),exception instanceof Error&&/whoops/i.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.error(trigger).match("Hey")}).throws().value(function(){test.error(trigger).match(/Hey/)}).throws().value(function(){test.error(trigger).match(function(error){return error instanceof RegExp})}).throws()})}),it("notMatch(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.error(trigger).notMatch("Yeah an error").notMatch(/Yeah/).notMatch(function(exception){return indicator.set("custom error validation called",!0),/yeah/.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.error(trigger).notMatch("Whoops!")}).throws().value(function(){test.error(trigger).notMatch(/Whoops/)}).throws()})}),it("isValid(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.error(trigger).isValid("Whoops!").isValid(/Whoops/).isValid(function(exception){return indicator.set("custom error validation called",!0),exception instanceof Error&&/whoops/i.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.error(trigger).isValid("Hey")}).throws().value(function(){test.error(trigger).isValid(/Hey/)}).throws().value(function(){test.error(trigger).isValid(function(error){return error instanceof RegExp})}).throws()})}),it("isNotValid(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.error(trigger).isNotValid("Yeah an error").isNotValid(/Yeah/).isNotValid(function(exception){return indicator.set("custom error validation called",!0),/yeah/.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.error(trigger).isNotValid("Whoops!")}).throws().value(function(){test.error(trigger).isNotValid(/Whoops/)}).throws()})}),it("isEnumerable(property)",function(){var error=new Error("Whoops !");error.foo="bar",test.error(function(){throw error}).isEnumerable("foo").value(function(){test.error(function(){throw error}).isEnumerable("message")}).throws()}),it("isNotEnumerable(property)",function(){var error=new Error("Whoops !");error.foo="bar",test.error(function(){throw error}).isNotEnumerable("message").value(function(){test.error(function(){throw error}).isNotEnumerable("foo")}).throws()}),it("isFrozen()",function(){var error=new Error("Whoops !"),frozenError=new Error("Whoops !");Object.freeze(frozenError),test.error(function(){throw frozenError}).isFrozen().value(function(){test.error(function(){throw error}).isFrozen()}).throws()}),it("isNotFrozen()",function(){var error=new Error("Whoops !"),frozenError=new Error("Whoops !");Object.freeze(frozenError),test.error(function(){throw error}).isNotFrozen().value(function(){test.error(function(){throw frozenError}).isNotFrozen()}).throws()}),it("isInstanceOf(expected)",function(){test.error(function(){throw new TypeError("Whoops !")}).isInstanceOf(TypeError).value(function(){test.error(function(){throw new Error("Bad type")}).isInstanceOf(TypeError)}).throws()}),it("isNotInstanceOf(expected)",function(){test.error(function(){throw new Error("Whoops !")}).isNotInstanceOf(TypeError).value(function(){test.error(function(){throw new TypeError("Bad type")}).isNotInstanceOf(TypeError)}).throws()}),it("hasProperty(property [, value])",function(){test.error(function(){throw new Error("Whoops !")}).hasProperty("message").hasProperty("message","Whoops !").hasProperty("constructor").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).hasProperty("foo")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasProperty("message","whoops")}).throws()})}),it("hasNotProperty(property [, value])",function(){test.error(function(){throw new Error("Whoops !")}).hasNotProperty("foo").hasNotProperty("message","whoops").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).hasNotProperty("message")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasNotProperty("message","Whoops !")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasNotProperty("constructor")}).throws()})}),it("hasOwnProperty(property [, value])",function(){test.error(function(){throw new Error("Whoops !")}).hasOwnProperty("message").hasOwnProperty("message","Whoops !").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).hasOwnProperty("foo")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasOwnProperty("message","Grrrr !")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasOwnProperty("constructor")}).throws()})}),it("hasNotOwnProperty(property [, value])",function(){test.error(function(){throw new Error("Whoops !")}).hasNotOwnProperty("foo").hasNotOwnProperty("message","Grrrr !").hasNotOwnProperty("constructor").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).hasNotOwnProperty("message")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasNotOwnProperty("message","Whoops !")}).throws()})}),it("hasKey(key [, value])",function(){test.error(function(){throw new Error("Whoops !")}).hasKey("message").hasKey("message","Whoops !").hasKey("constructor").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).hasKey("foo")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).hasKey("message","whoops")}).throws()})}),it("notHasKey(key [, value])",function(){test.error(function(){throw new Error("Whoops !")}).notHasKey("foo").notHasKey("message","whoops").case("Test failure",function(){test.value(function(){test.error(function(){throw new Error("Whoops !")}).notHasKey("message")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).notHasKey("message","Whoops !")}).throws().value(function(){test.error(function(){throw new Error("Whoops !")}).notHasKey("constructor")}).throws()})}),it("hasMessage(expected)",function(){function trigger(){throw indicator.set("error constructor called",!0),new Error("I'm a ninja !")}function resetIndicator(){indicator.setAll({})}var exception,indicator=test.createCollection();test.error(trigger).hasMessage("I'm a ninja !").bool(indicator.get("error constructor called")).isTrue().then(resetIndicator()).error(trigger).hasMessage(/ninja/).bool(indicator.get("error constructor called")).isTrue().then(resetIndicator()).case(exception=test.error(trigger)).error(function(){indicator.set("ninjaa is not in error message",!0),exception.hasMessage(/ninjaa/)}).bool(indicator.get("error constructor called")).isTrue().bool(indicator.get("ninjaa is not in error message")).isTrue().then(resetIndicator()).value(function(){indicator.set("ninjaa is not in error message",!0),test.error(trigger).hasMessage(/ninjaa/)}).throws().bool(indicator.get("error constructor called")).isTrue().bool(indicator.get("ninjaa is not in error message")).isTrue()})})}),describe("Asserter exception()",function(){describe("exception() behavior",function(){it("Does not contains assertions from the assertions containers",function(){test.value(test.exception(function(){throw new Error("hu")}).hasHeader).isUndefined().value(test.exception(function(){throw new Error("hu")}).isBetween).isUndefined()}),it("Takes a function that will throws an exception",function(){var indicator;test.exception(function(){throw indicator=!0,new Error("I'm a ninja !")}).bool(indicator).isTrue().given(indicator=!1).exception(function(){throw indicator=!0,new Error("Whoops!")}).bool(indicator).isTrue()}),it("Error if the trigger don't throws an exception",function(){var indicator;test.given(indicator=!1).value(function(){test.exception(function(){indicator=!0})}).throws().bool(indicator).isTrue()}),it("Assert that thrown with the Error class and a given message",function(){function fn(){throw indicator.set("error constructor called",!0),new Error("I'm a ninja !")}function resetIndicator(){indicator.setAll({})}var exception,indicator=test.createCollection();test.exception(fn).isError().hasMessage("I'm a ninja !").bool(indicator.get("error constructor called")).isTrue().when(exception=test.exception(fn)).exception(function(){exception.isError().hasMessage("I'm a not ninja !")}).given(resetIndicator()).exception(fn).isError().hasMessage(/ninja/).bool(indicator.get("error constructor called")).isTrue().when(exception=test.exception(fn)).exception(function(){exception.isError().hasMessage(/ninjaa/)}).given(resetIndicator()).exception(function(){throw indicator.set("Whoops error, is called",!0),new Error("Whoops!")}).hasMessage("Whoops!").isInstanceOf(Error).bool(indicator.get("Whoops error, is called")).isTrue()}),it("dependency injection",function(){var spy=test.spy();test.$di.set("spyException",spy),test.exception(function(){throw this.spyException("arg1","arg2"),new Error("Whoops!")}).bool(spy.calledOnce&&spy.calledWithExactly("arg1","arg2")).isTrue()})}),describe("Assertions of exception()",function(){it("is(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).is(error).is(new Error("Whoops !")).case("Test failure",function(){test.value(function(){test.exception(trigger).is({message:"Whoops !"})}).throws().value(function(){test.exception(trigger).is(new String("Whoops !"))}).throws()})}),it("isNot(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).isNot({message:"Whoops !"}).value(function(){test.exception(trigger).isNot(error)}).throws()}),it("isIdenticalTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).isIdenticalTo(error).value(function(){test.exception(trigger).isIdenticalTo(new Error("Whoops !"))}).throws()}),it("isNotIdenticalTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).isNotIdenticalTo(new Error("Whoops !")).value(function(){test.exception(trigger).isNotIdenticalTo(error)}).throws()}),it("isEqualTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).isEqualTo(error).value(function(){test.exception(trigger).isEqualTo(new Error("Whoops !"))}).throws()}),it("isNotEqualTo(expected)",function(){function trigger(){throw error}var error=new Error("Whoops !");test.exception(trigger).isNotEqualTo(new Error("Whoops !")).value(function(){test.exception(trigger).isNotEqualTo(error)}).throws()}),it("match(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.exception(trigger).match("Whoops!").match(/Whoops/).match(function(exception){return indicator.set("custom error validation called",!0),exception instanceof Error&&/whoops/i.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.exception(trigger).match("Hey")}).throws().value(function(){test.exception(trigger).match(/Hey/)}).throws().value(function(){test.exception(trigger).match(function(error){return error instanceof RegExp})}).throws()})}),it("notMatch(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.exception(trigger).notMatch("Yeah an error").notMatch(/Yeah/).notMatch(function(exception){return indicator.set("custom error validation called",!0),/yeah/.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.exception(trigger).notMatch("Whoops!")}).throws().value(function(){test.exception(trigger).notMatch(/Whoops/)}).throws()})}),it("isValid(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.exception(trigger).isValid("Whoops!").isValid(/Whoops/).isValid(function(exception){return indicator.set("custom error validation called",!0),exception instanceof Error&&/whoops/i.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.exception(trigger).isValid("Hey")}).throws().value(function(){test.exception(trigger).isValid(/Hey/)}).throws().value(function(){test.exception(trigger).isValid(function(error){return error instanceof RegExp})}).throws()})}),it("isNotValid(expected)",function(){function trigger(){throw indicator.set("error trigger called",!0),new Error("Whoops!")}var indicator=test.createCollection();test.exception(trigger).isNotValid("Yeah an error").isNotValid(/Yeah/).isNotValid(function(exception){return indicator.set("custom error validation called",!0),/yeah/.test(exception)}).bool(indicator.get("error trigger called")).isTrue().bool(indicator.get("custom error validation called")).isTrue().case("Test failure",function(){test.value(function(){test.exception(trigger).isNotValid("Whoops!")}).throws().value(function(){test.exception(trigger).isNotValid(/Whoops/)}).throws()})}),it("isType(expected)",function(){