@angular-package/testing
Version:
Jasmine unit testing wrapper with additional custom testing features.
1 lines • 76.2 kB
JavaScript
import{is,are,typeOf}from"@angular-package/type";class Random{number=t=>Math.floor(Math.random()*t);string=(t,e="0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ")=>{let s="";for(let i=0;i<=t;i++){const t=Math.floor(Math.random()*e.length);s+=e.substring(t,t+1)}return s.slice(0,-1)}}class TestingExpect{get already(){return this.#t=!0,this}get not(){return this.#e=!0,this}#t=!1;#e=!1;expect(t,e,s=(e?expect(t).withContext(e):expect(t))){return is.true(this.#e)?s.not:s}expectation(t,e,s){return e&&e(this.expect(t,s)),this}expectAsync(t,e,s,i,n=(e?expectAsync(t).withContext(e):expectAsync(t))){return i&&this.already,s&&this.not,is.true(this.#e)?is.true(this.#t)?n.not.already:n.not:is.true(this.#t)?n.already:n}getAlready(){return this.#t}getNot(){return this.#e}setAlready(t){return is.boolean(t)&&(this.#t=t),this}setNot(t){return is.boolean(t)&&(this.#e=t),this}}class Expect{get already(){return this.#s.already,this}get not(){return this.#s.not,this}#s;constructor(t=new TestingExpect){this.#s=t}expect(t,e){return this.#s.expect(t,e)}expectation(t,e,s){return e&&e(this.expect(t,s)),this}expectAsync(t,e,s,i){return i&&this.already,s&&this.not,this.#s.expectAsync(t,e,s,i)}getAlready(){return this.#s.already}getNot(){return this.#s.getNot()}setAlready(t){return this.#s.setAlready(t),this}setNot(t){return this.#s.setNot(t),this}}class TestingExpectToBeArrayOf extends Expect{expectationFailOutput="The expected value should";bigint(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`date\``){return are.bigint(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}boolean(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`boolean\``){return are.boolean(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}date(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`date\``){return are.date(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}defined(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of defined`){return are.defined(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}number(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`number\``){return are.number(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}null(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`null\``){return are.null(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}false(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`false\``){return are.false(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}regExp(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`regexp\``){return are.regexp(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}string(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`string\``){return are.string(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}symbol(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`symbol\``){return are.symbol(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}true(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`true\``){return are.true(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}undefined(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\` of \`undefined\``){return are.undefined(...t).every((i=>this.toBe(e,i&&Array.isArray(t)&&t.length>0,s))),this}toBe(t=!0,e,s){return this.expect(e,s).toBe(t),this.setNot(!1),e}}class TestingExpectToBeInstanceOf extends Expect{expectationFailOutput="The expected value should";array(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Array\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Array),this.setNot(!1),this}boolean(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Boolean\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Boolean),this.setNot(!1),this}dataView(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`DataView\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(DataView),this.setNot(!1),this}date(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Date\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Date),this.setNot(!1),this}error(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Error\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Error),this.setNot(!1),this}evalError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`EvalError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(EvalError),this.setNot(!1),this}function(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Function\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Function),this.setNot(!1),this}map(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Map\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Map),this.setNot(!1),this}number(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of a \`Number\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Number),this.setNot(!1),this}object(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Object\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Object),this.setNot(!1),this}promise(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Promise\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Promise),this.setNot(!1),this}rangeError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`RangeError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(RangeError),this.setNot(!1),this}referenceError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`ReferenceError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(ReferenceError),this.setNot(!1),this}regexp(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`RegExp\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(RegExp),this.setNot(!1),this}set(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Set\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(Set),this.setNot(!1),this}syntaxError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`SyntaxError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(SyntaxError),this.setNot(!1),this}string(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of a \`String\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(String),this.setNot(!1),this}storage(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`Storage\``){return this}typeError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`TypeError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(TypeError),this.setNot(!1),this}URIError(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`URIError\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(URIError),this.setNot(!1),this}weakMap(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`WeakMap\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(WeakMap),this.setNot(!1),this}weakSet(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`WeakSet\``){return!1===e&&this.not,this.expect(t,s).toBeInstanceOf(WeakSet),this.setNot(!1),this}}class TestingExpectToBe extends Expect{get arrayof(){return this.toBeArrayOf}get instanceof(){return this.toBeInstanceOf}toBeArrayOf;toBeInstanceOf;expectationFailOutput="The expected value should";constructor(t=new TestingExpect){super(t),this.toBeArrayOf=new TestingExpectToBeArrayOf(t),this.toBeInstanceOf=new TestingExpectToBeInstanceOf(t)}array(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`array\``){return this.be(is.array(t),e,s),this}be(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`expected\``){return this.expect(t,s).toBe(e),this.setNot(!1),this}bigint(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`bigint\``){return this.be(is.bigint(t),e,s),this}boolean(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`boolean\` type or an instance of \`Boolean\``){return this.be(is.boolean(t),e,s),this}booleanType(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`boolean\` type`){return this.be(is.booleanType(t),e,s),this}class(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`class\``){return this.be(is.class(t),e,s),this}closeTo(t,e,s,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be close to \`expected\``){return this.expect(t,i).toBeCloseTo(e,s),this.setNot(!1),this}date(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`date\``){return this.be(is.date(t),e,s),this}defined(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be defined`){return!1===e&&this.not,this.expect(t,s).toBeDefined(),this.setNot(!1),this}false(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be equal to \`false\``){return!1===e&&this.not,this.expect(t,s).toBeFalse(),this.setNot(!1),this}falsy(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be falsy`){return!1===e&&this.not,this.expect(t,s).toBeFalsy(),this.setNot(!1),this}function(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`function\``){return this.be(is.function(t),e,s),this}greaterThan(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be greater than \`expected\``){return this.expect(t,s).toBeGreaterThan(e),this.setNot(!1),this}greaterThanOrEqual(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be greater or equal than \`expected\``){return this.expect(t,s).toBeGreaterThanOrEqual(e),this.setNot(!1),this}instance(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of ${e.name}`){return this.be(is.instance(t,e),s,i),this}instanceOf(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an instance of \`expected\``){return this.expect(t,s).toBeInstanceOf(e),this.setNot(!1),this}key(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be the property key`){return this.be(is.key(t),e,s),this}lessThan(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be less than \`expected\``){return this.expect(t,s).toBeLessThan(e),this.setNot(!1),this}lessThanOrEqual(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be less or equal than \`expected\``){return this.expect(t,s).toBeLessThanOrEqual(e),this.setNot(!1),this}naN(t,e=!0,s){return!1===e&&this.not,this.expect(t,s).toBeNaN(),this.setNot(!1),this}negativeInfinity(t,e=!0,s){return!1===e&&this.not,this.expect(t,s).toBeNegativeInfinity(),this.setNot(!1),this}null(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`null\``){return!1===e&&this.not,this.expect(t,s).toBeNull(),this.setNot(!1),this}number(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`number\` type or an instance of a \`Number\``){return this.be(is.number(t),e,s),this}numberBetween(t,e,s,i=!0,n=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`number\` type or an instance of a \`Number\` between the range of ${e} and ${s}`){return this.be(is.numberBetween(t,e,s),i,n),this}numberType(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`number\` type`){return this.be(is.numberType(t),e,s),this}object(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\``){return this.be(is.object(t),e,s),this}objectKey(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\` with a given \`key\``){return this.be(is.objectKey(t,e),s,i),this}objectKeyIn(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\` with a given \`key\` in it(or its prototype chain)`){return this.be(is.objectKeyIn(t,e),s,i),this}objectKeys(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\` with given \`keys\``){return this.be(is.objectKeys(t,e),s,i),this}objectKeysIn(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\` with given \`keys\` in it(or its prototype chain)`){return this.be(is.objectKeysIn(t,e),s,i),this}objectSomeKeys(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be an \`object\` with some of its keys or some groups of its keys from given \`keys\``){return this.be(is.objectSomeKeys(t,e),s,i),this}pending(t,e){return this.expectAsync(t,e).toBePending(),this.setAlready(!1).setNot(!1),this}positiveInfinity(t,e=!0,s){return!1===e&&this.not,this.expect(t,s).toBePositiveInfinity(),this.setNot(!1),this}regexp(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`RegExp\``){return this.be(is.regexp(t),e,s),this}rejected(t,e=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be rejected`){return this.expectAsync(t,e).toBeRejected(),this.setAlready(!1).setNot(!1),this}rejectedWith(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be rejected with \`expected\``){return this.expectAsync(t,s).toBeRejectedWith(e),this.setAlready(!1).setNot(!1),this}rejectedWithError(t,e,s,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be resolved with error`){return this.expectAsync(t,i).toBeRejectedWithError(e,s),this.setAlready(!1).setNot(!1),this}resolved(t,e=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be resolved`){return this.expectAsync(t,e).toBeResolved(),this.setAlready(!1).setNot(!1),this}resolvedTo(t,e,s){return this.expectAsync(t,s).toBeResolvedTo(e),this.setAlready(!1).setNot(!1),this}string(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type or an instance of a \`String\``){return this.be(is.string(t),e,s),this}stringIncludes(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type or an instance of \`String\` that includes the specified words/sentences from a given \`includes\``){return this.be(is.stringIncludes(t,e),s,i),this}stringIncludesSome(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type or an instance of \`String\` that includes some of the specified words/sentences from a given \`includes\``){return this.be(is.stringIncludesSome(t,e),s,i),this}stringOfLength(t,e,s=!0,i=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type or an instance of a \`String\` of the specified \`length\` equal to ${e}`){return this.be(is.stringLength(t,e),s,i),this}stringOfLengthBetween(t,e,s,i=!0,n=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type or an instance of a \`String\` of the \`length\` between the given ${e} and ${s}`){return this.be(is.stringLengthBetween(t,e,s),i,n),this}stringType(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`string\` type`){return this.be(is.stringType(t),e,s),this}symbol(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be a \`symbol\``){return this.be(is.symbol(t),e,s),this}true(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be equal to \`true\``){return!1===e&&this.not,this.expect(t,s).toBeTrue(),this.setNot(!1),this}truthy(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be truthy`){return!1===e&&this.not,this.expect(t,s).toBeTruthy(),this.setNot(!1),this}typeOf(t,e,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be typeOf`){return this.expect(typeOf(t)===e,s).toBeTrue(),this.setNot(!1),this}undefined(t,e=!0,s=`${this.expectationFailOutput} ${!0===this.getNot()?"not":""} be \`undefined\``){return!1===e&&this.not,this.expect(t,s).toBeUndefined(),this.setNot(!1),this}}class TestingExpectToHaveBeenCalled extends Expect{before(t,e,s){return this.expect(t,s).toHaveBeenCalledBefore(e),this.setNot(!1),this}called(t,e){return this.expect(t,e).toHaveBeenCalled(),this.setNot(!1),this}onceWith(t,...e){return this.expect(t).toHaveBeenCalledOnceWith(...e),this.setNot(!1),this}times(t,e,s){return this.expect(t,s).toHaveBeenCalledTimes(e),this.setNot(!1),this}with(t,...e){return this.expect(t).toHaveBeenCalledWith(...e),this.setNot(!1),this}}class TestingExpectToHaveBeen extends Expect{get called(){return this.toHaveBeenCalled}toHaveBeenCalled;constructor(t=new TestingExpect){super(t),this.toHaveBeenCalled=new TestingExpectToHaveBeenCalled(t)}}class TestingExpectToHave extends Expect{get been(){return this.toHaveBeen}toHaveBeen;constructor(t=new TestingExpect){super(t),this.toHaveBeen=new TestingExpectToHaveBeen(t)}class(t,e,s){return this.expect(t,s).toHaveClass(e),this.setNot(!1),this}size(t,e,s){return this.expect(t,s).toHaveSize(e),this.setNot(!1),this}spyInteractions(t,e){return this.expect(t,e).toHaveSpyInteractions(),this.setNot(!1),this}}class TestingExpectToThrow extends Expect{error(t,e,s){return this.expect(t,s).toThrowError(e),this.setNot(!1),this}matching(t,e,s){return this.expect(t,s).toThrowMatching(e),this.setNot(!1),this}throw(t,e,s){return this.expect(t,s).toThrow(e),this.setNot(!1),this}}class TestingExpectTo extends Expect{get be(){return this.toBe}get have(){return this.toHave}get throw(){return this.toThrow}toBe;toHave;toThrow;constructor(t=new TestingExpect){super(t),this.toBe=new TestingExpectToBe(t),this.toHave=new TestingExpectToHave(t),this.toThrow=new TestingExpectToThrow(t)}contain(t,e,s){return this.expectation(t,(t=>t.toContain(e)),s).setNot(!1),this}equal(t,e,s){return this.expectation(t,(t=>t.toEqual(e)),s).setNot(!1),this}match(t,e,s){return this.expectation(t,(t=>t.toMatch(e)),s).setNot(!1),this}}class TestingCounter{get counterActive(){return this.#i}get counterDescription(){return this.#n}#i;#n;#r=0;constructor(t=!0,e=!1){this.#i=t,this.#n=e}count(){return this.#i&&this.#r++,this}resetCounter(){return this.#r=0,this}getCounter(){return this.#r}joinCounter(t){return`[counter]. ${t}`}replaceCounter(t){return(this.#n?this.joinCounter(t):t).replace("[counter]",`${this.getCounter()}`)}}class TestingExecutable extends TestingCounter{get allowed(){return this.#o}get executable(){return this.#a}#o=!1;#a=new Set;constructor(t,e,s=[!0,!1]){super(..."boolean"==typeof s?[s,s]:s),this.#o=is.boolean(t)?t:this.#o,is.defined(e)&&(this.#a=new Set(Array.isArray(e)?e:[e]))}allow(){return this.#o=!0,this}disallow(){return this.#o=!1,this}isExecutable(t){return this.#a.has(is.number(t)?t:this.getCounter())}}class TestingDescribe extends TestingExecutable{static define(t,e){return(s=!1)=>is.true(s)&&describe(t,e)}constructor(t,e,s=[!0,!1]){super(t,e,s)}describe(t,e,s=!is.false(super.allowed)||this.isExecutable(this.getCounter()+1)){return this.count(),TestingDescribe.define(this.replaceCounter(t),e)(s),this}fdescribe(t,e){return this.count(),fdescribe(this.replaceCounter(t),e),this}xdescribe(t,e){return this.count(),xdescribe(this.replaceCounter(t),e),this}}class TestingExpectation extends Expect{get to(){return this.#h}#h;constructor(t=new TestingExpect){super(t),this.#h=new TestingExpectTo(t)}toBe(t,e,s){return this.#h.be.be(t,e,s),this}toBeArray(t,e,s){return this.#h.be.array(t,e,s),this}toBeArrayOfBigInt(t,e,s){return this.#h.be.arrayof.bigint(t,e,s),this}toBeArrayOfBoolean(t,e,s){return this.#h.be.arrayof.boolean(t,e,s),this}toBeArrayOfDate(t,e,s){return this.#h.be.arrayof.date(t,e,s),this}toBeArrayOfDefined(t,e,s){return this.#h.be.arrayof.defined(t,e,s),this}toBeArrayOfFalse(t,e,s){return this.#h.be.arrayof.false(t,e,s),this}toBeArrayOfNull(t,e,s){return this.#h.be.arrayof.null(t,e,s),this}toBeArrayOfNumber(t,e,s){return this.#h.be.arrayof.number(t,e,s),this}toBeArrayOfRegExp(t,e,s){return this.#h.be.arrayof.regExp(t,e,s),this}toBeArrayOfString(t,e,s){return this.#h.be.arrayof.string(t,e,s),this}toBeArrayOfSymbol(t,e,s){return this.#h.be.arrayof.symbol(t,e,s),this}toBeArrayOfTrue(t,e,s){return this.#h.be.arrayof.true(t,e,s),this}toBeArrayOfUndefined(t,e,s){return this.#h.be.arrayof.undefined(t,e,s),this}toBeBigInt(t,e,s){return this.#h.be.bigint(t,e,s),this}toBeBoolean(t,e,s){return this.#h.be.boolean(t,e,s),this}toBeBooleanType(t,e,s){return this.#h.be.booleanType(t,e,s),this}toBeClass(t,e,s){return this.#h.be.class(t,e,s),this}toBeCloseTo(t,e,s,i){return this.#h.be.closeTo(t,e,s,i),this}toBeDate(t,e,s){return this.#h.be.date(t,e,s),this}toBeDefined(t,e,s){return this.#h.be.defined(t,e,s),this}toBeFalse(t,e,s){return this.#h.be.false(t,e,s),this}toBeFalsy(t,e,s){return this.#h.be.falsy(t,e,s),this}toBeFunction(t,e,s){return this.#h.be.function(t,e,s),this}toBeGreaterThan(t,e,s){return this.#h.be.greaterThan(t,e,s),this}toBeGreaterThanOrEqual(t,e,s){return this.#h.be.greaterThanOrEqual(t,e,s),this}toBeInstance(t,e,s,i){return this.#h.be.instance(t,e,s,i),this}toBeInstanceOf(t,e,s){return this.#h.be.instanceOf(t,e,s),this}toBeInstanceOfArray(t,e,s){return this.#h.be.instanceof.array(t,e,s),this}toBeInstanceOfBoolean(t,e,s){return this.#h.be.instanceof.boolean(t,e,s),this}toBeInstanceOfDate(t,e,s){return this.#h.be.instanceof.date(t,e,s),this}toBeInstanceOfError(t,e,s){return this.#h.be.instanceof.error(t,e,s),this}toBeInstanceOfFunction(t,e,s){return this.#h.be.instanceof.function(t,e,s),this}toBeInstanceOfMap(t,e,s){return this.#h.be.instanceof.map(t,e,s),this}toBeInstanceOfNumber(t,e,s){return this.#h.be.instanceof.number(t,e,s),this}toBeInstanceOfObject(t,e,s){return this.#h.be.instanceof.object(t,e,s),this}toBeInstanceOfPromise(t,e,s){return this.#h.be.instanceof.promise(t,e,s),this}toBeInstanceOfRangeError(t,e,s){return this.#h.be.instanceof.rangeError(t,e,s),this}toBeInstanceOfReferenceError(t,e,s){return this.#h.be.instanceof.referenceError(t,e,s),this}toBeInstanceOfRegExp(t,e,s){return this.#h.be.instanceof.regexp(t,e,s),this}toBeInstanceOfSet(t,e,s){return this.#h.be.instanceof.set(t,e,s),this}toBeInstanceOfStorage(t,e,s){return this.#h.be.instanceof.storage(t,e,s),this}toBeInstanceOfString(t,e,s){return this.#h.be.instanceof.string(t,e,s),this}toBeInstanceOfSyntaxError(t,e,s){return this.#h.be.instanceof.syntaxError(t,e,s),this}toBeInstanceOfTypeError(t,e,s){return this.#h.be.instanceof.typeError(t,e,s),this}toBeInstanceOfURIError(t,e,s){return this.#h.be.instanceof.URIError(t,e,s),this}toBeInstanceOfWeakSet(t,e,s){return this.#h.be.instanceof.weakSet(t,e,s),this}toBeKey(t,e,s){return this.#h.be.key(t,e,s),this}toBeLessThan(t,e,s){return this.#h.be.lessThan(t,e,s),this}toBeLessThanOrEqual(t,e,s){return this.#h.be.lessThanOrEqual(t,e,s),this}toBeNaN(t,e,s){return this.#h.be.naN(t,e,s),this}toBeNegativeInfinity(t,e,s){return this.#h.be.negativeInfinity(t,e,s),this}toBeNull(t,e,s){return this.#h.be.null(t,e,s),this}toBeNumber(t,e,s){return this.#h.be.number(t,e,s),this}toBeNumberBetween(t,e,s,i,n){return this.#h.be.numberBetween(t,e,s,i,n),this}toBeNumberType(t,e,s){return this.#h.be.numberType(t,e,s),this}toBeObject(t,e,s){return this.#h.be.object(t,e,s),this}toBeObjectKey(t,e,s,i){return this.#h.be.objectKey(t,e,s,i),this}toBeObjectKeyIn(t,e,s,i){return this.#h.be.objectKeyIn(t,e,s,i),this}toBeObjectKeys(t,e,s,i){return this.#h.be.objectKeys(t,e,s,i),this}toBeObjectKeysIn(t,e,s,i){return this.#h.be.objectKeysIn(t,e,s,i),this}toBeObjectSomeKeys(t,e,s,i){return this.#h.be.objectSomeKeys(t,e,s,i),this}toBePending(t,e){return this.#h.be.pending(t,e),this}toBePositiveInfinity(t,e,s){return this.#h.be.positiveInfinity(t,e,s),this}toBeRegExp(t,e,s){return this.#h.be.regexp(t,e,s),this}toBeRejected(t,e){return this.#h.be.rejected(t,e),this}toBeRejectedWith(t,e,s){return this.#h.be.rejectedWith(t,e,s),this}toBeRejectedWithError(t,e,s,i){return this.#h.be.rejectedWithError(t,e,s,i),this}toBeResolved(t,e){return this.#h.be.resolved(t,e),this}toBeResolvedTo(t,e,s){return this.#h.be.resolvedTo(t,e,s),this}toBeString(t,e,s){return this.#h.be.string(t,e,s),this}toBeStringIncludes(t,e,s,i){return this.#h.be.stringIncludes(t,e,s,i),this}toBeStringIncludesSome(t,e,s,i){return this.#h.be.stringIncludesSome(t,e,s,i),this}toBeStringOfLength(t,e,s,i){return this.#h.be.stringOfLength(t,e,s,i),this}toBeStringOfLengthBetween(t,e,s,i,n){return this.#h.be.stringOfLengthBetween(t,e,s,i,n),this}toBeStringType(t,e,s){return this.#h.be.stringType(t,e,s),this}toBeSymbol(t,e,s){return this.#h.be.symbol(t,e,s),this}toBeTrue(t,e,s){return this.#h.be.true(t,e,s),this}toBeTruthy(t,e,s){return this.#h.be.truthy(t,e,s),this}toBeTypeOf(t,e,s){return this.#h.be.typeOf(t,e,s),this}toBeUndefined(t,e,s){return this.#h.be.undefined(t,e,s),this}toContain(t,e,s){return this.#h.contain(t,e,s),this}toEqual(t,e,s){return this.#h.equal(t,e,s),this}toHaveBeenCalled(t,e){return this.#h.have.been.called.called(t,e),this}toHaveBeenCalledBefore(t,e,s){return this.#h.have.been.called.before(t,e,s),this}toHaveBeenCalledOnceWith(t,...e){return this.#h.have.been.called.onceWith(t,...e),this}toHaveBeenCalledTimes(t,e,s){return this.#h.have.been.called.times(t,e,s),this}toHaveBeenCalledWith(t,...e){return this.#h.have.been.called.with(t,...e),this}toHaveClass(t,e,s){return this.#h.have.class(t,e,s),this}toHaveSize(t,e,s){return this.#h.have.size(t,e,s),this}toHaveSpyInteractions(t,e){return this.#h.have.spyInteractions(t,e),this}toMatch(t,e,s){return this.#h.match(t,e,s),this}toThrow(t,e,s){return this.#h.throw.throw(t,e,s),this}toThrowError(t,e,s){return this.#h.throw.error(t,e,s),this}toThrowMatching(t,e,s){return this.#h.throw.matching(t,e,s),this}}class TextualExpectation{static toBeArray="The `actual` value must be `array` type or an instance of `Array`.";static toBeArrayOfBigInt="The `actual` value must be `array` type or an instance of `Array` of `bigint`.";static toBeArrayOfBoolean="The `actual` value must be `array` type or an instance of `Array` of `boolean`.";static toBeArrayOfDate="The `actual` value must be `array` type or an instance of `Array` of `date`.";static toBeArrayOfDefined="The `actual` value must be `array` type or an instance of `Array` of defined.";static toBeArrayOfFalse="The `actual` value must be `array` type or an instance of `Array` of `false`.";static toBeArrayOfNull="The `actual` value must be `array` type or an instance of `Array` of `null`.";static toBeArrayOfNumber="The `actual` value must be `array` type or an instance of `Array` of `number`.";static toBeArrayOfRegExp="The `actual` value must be `array` type or an instance of `Array` of `regexp.";static toBeArrayOfString="The `actual` value must be `array` type or an instance of `Array` of `string`.";static toBeArrayOfSymbol="The `actual` value must be `array` type or an instance of `Array` of `symbol`.";static toBeArrayOfTrue="The `actual` value must be `array` type or an instance of `Array` of `true`.";static toBeArrayOfUndefined="The `actual` value must be `array` type or an instance of `Array` of `undefined`.";static toBeBigInt="The `actual` value must be a `bigint` type.";static toBeBoolean=`The \`actual\` value must be of a \`boolean\` type or an instance of \`${Boolean.name}\`.`;static toBeBooleanType="The `actual` value must be of a `boolean` type.";static toBeClass="The `actual` value must be a `class`.";static toBeCloseTo="The `actual` value must be within a specified `precision` of the `expected` actual.";static toBeDate="The `actual` value to be a `date`.";static toBeDefined="The `actual` value must be defined.";static toBeFalse="The `actual` value must be `false`.";static toBeFalsy="The `actual` value must be falsy.";static toBeFunction="The `actual` value must be `function`.";static toBeGreaterThan="The `actual` value to be greater than the `expected` value.";static toBeGreaterThanOrEqual="The `actual` value to be greater than or equal to the `expected` value.";static toBeInstance="The `actual` value to be an instance of `constructor`.";static toBeInstanceOf="The `actual` value must be an instance of `expected`.";static toBeInstanceOfArray=`The \`actual\` value must be an instance of an \`${Array.name}\`.`;static toBeInstanceOfBoolean=`The \`actual\` value must be an instance of \`${Boolean.name}\`.`;static toBeInstanceOfDate=`The \`actual\` value must be an instance of \`${Date.name}\`.`;static toBeInstanceOfError=`The \`actual\` value must be an instance of an \`${Error.name}\`.`;static toBeInstanceOfFunction=`The \`actual\` value must be an instance of a \`${Function.name}\`.`;static toBeInstanceOfMap=`The \`actual\` value must be an instance of a \`${Map.name}\`.`;static toBeInstanceOfNumber=`The \`actual\` value must be an instance of a \`${Number.name}\`.`;static toBeInstanceOfObject=`The \`actual\` value must be an instance of an \`${Object.name}\`.`;static toBeInstanceOfPromise=`The \`actual\` value must be an instance of \`${Promise.name}\`.`;static toBeInstanceOfRangeError=`The \`actual\` value must be an instance of \`${RangeError.name}\`.`;static toBeInstanceOfReferenceError=`The \`actual\` value must be an instance of \`${ReferenceError.name}\`.`;static toBeInstanceOfRegExp=`The \`actual\` value must be an instance of \`${RegExp.name}\`.`;static toBeInstanceOfSet=`The \`actual\` value must be an instance of \`${Set.name}\`.`;static toBeInstanceOfString=`The \`actual\` value must be an instance of a \`${String.name}\`.`;static toBeInstanceOfSyntaxError=`The \`actual\` value must be an instance of \`${SyntaxError.name}\`.`;static toBeInstanceOfTypeError=`The \`actual\` value must be an instance of \`${TypeError.name}\`.`;static toBeInstanceOfURIError=`The \`actual\` value must be an instance of \`${URIError.name}\`.`;static toBeInstanceOfWeakMap=`The \`actual\` value must be an instance of a \`${WeakMap.name}\`.`;static toBeInstanceOfWeakSet=`The \`actual\` value must be an instance of a \`${WeakSet.name}\`.`;static toBeKey="The `actual` value to be a `PropertyKey`.";static toBeLessThan="The `actual` value to be less than the `expected` value.";static toBeLessThanOrEqual="The `actual` value to be less than or equal to the `expected` value.";static toBeNaN="The `actual` value to be NaN (Not a Number).";static toBeNegativeInfinity="The `actual` value to be -Infinity (-infinity).";static toBeNull="The `actual` value must be `null`.";static toBeNumber=`The \`actual\` value to be a \`number\` type or an instance of a \`${Number.name}\`.`;static toBeNumberBetween=`The \`actual\` value to be a \`number\` type or an instance of \`${Number.name}\` between the range of \`min\` and \`max\`.`;static toBeNumberType="The `actual` value must be of a `number` type.";static toBeObject="The `actual` value must be of `object` type or an instance of `Object`.";static toBeObjectKey="The `actual` value must be of `object` type or an instance of `Object` with a given `key`.";static toBeObjectKeys="The `actual` value must be of `object` type or an instance of `Object` with given `keys`.";static toBeObjectKeyIn="The `actual` value must be of `object` type or an instance of `Object` with a given `key` in it(or its prototype chain).";static toBeObjectKeysIn="The `actual` value must be of `object` type or an instance of `Object` with given `keys` in it(or its prototype chain).";static toBeObjectSomeKeys="The `actual` value must be of `object` type or an instance of `Object` with some given `keys`.";static toBePending="Mark a spec as pending; expectation results will be ignored.";static toBePositiveInfinity="The `actual` value to be Infinity (infinity).";static toBeRegExp=`The \`actual\` value must be \`${RegExp.name}\`.`;static toBeRejected="Expect the `actual` value a promise to be rejected.";static toBeRejectedWith="Expect the `actual` value a promise to be rejected with a value equal to the expected; using deep equality comparison.";static toBeRejectedWithError="Expect the `actual` value a promise to be rejected with a value matched to the expected.";static toBeResolved="Expect the `actual` value a promise to be resolved.";static toBeResolvedTo="Expect the `actual` value a promise to be resolved to a value equal to the expected; using deep equality comparison.";static toBeString="The `actual` value must be a `string` type or an instance of a `String`.";static toBeStringIncludes="The `actual` value must be a `string` type or an instance of a `String` that includes the specified words/sentences.";static toBeStringIncludesSome="The `actual` value must be a `string` type or an instance of a `String` that includes some of the specified words/sentences.";static toBeStringOfLength="The `actual` value must be a `string` type or an instance of a `String` of the given `length`.";static toBeStringOfLengthBetween="The `actual` value must be a `string` type or an instance of a `String` of the length between the given `min` and `max`.";static toBeStringType="The `actual` value must be of a `string` type.";static toBeSymbol="The `actual` value must be a `symbol`.";static toBeTrue="The `actual` value must be a `boolean` type or an instance of `Boolean` equal to `true`.";static toBeTruthy="The `actual` value to be truthy.";static toBeUndefined="The `actual` value must be `undefined`.";static toContain="The `actual` value to contain a specific value.";static toEqual="The `actual` value to be equal to the `expected`; using deep equality comparison.";static toHaveBeenCalled="The `actual` value (a Spy) to have been called.";static toHaveBeenCalledBefore="The `actual` value (a Spy) to have been called before another Spy.";static toHaveBeenCalledOnceWith="The `actual` value (a Spy) to have been called exactly once; and exactly with the particular arguments.";static toHaveBeenCalledTimes="The `actual` value (a Spy) to have been called the specified number of times.";static toHaveBeenCalledWith="The `actual` (a Spy) to have been called with particular arguments at least once.";static toHaveClass="The `actual` value to be a DOM element that has the expected class.";static toHaveSize="The `actual` size to be equal to the expected; using array-like length or object keys size.";static toHaveSpyInteractions="The `actual` value (a SpyObj) spies to have been called.";static toMatch="The `actual` value to match a regular expression.";static toThrow="The `actual` value a function to throw something.";static toThrowError="The `actual` value a function to throw an Error.";static toThrowMatching="The `actual` value a function to throw something matching a predicate."}class TestingIt extends TestingExecutable{static define(t,e,s){return(i=!1)=>is.true(i)&&is.function(e)&&it(t,e,s)}#o=!1;constructor(t,e,s=[!0,!1]){super(t,e,s)}it(t,e,s=!is.false(super.allowed)||super.isExecutable(this.getCounter()+1),i){return this.count(),TestingIt.define(this.replaceCounter(t),e,i)(s),this}fit(t,e,s){return this.count(),fit(this.replaceCounter(t),e,s),this}xit(t,e,s){return this.count(),xit(this.replaceCounter(t),e,s),this}}class TestingCore{get expect(){return this.#c}get testingDescribe(){return this.#u}get testingIt(){return this.#l}#c;#u;#l;constructor(t=!0,e=!0,s,i=[!0,!1],n=new TestingDescribe(t,s?.describe,i),r=new TestingIt(e,s?.it,i),o=new TestingExpectation){this.#u=n,this.#l=r,this.#c=o}afterAll(t,e,s=!0){return(s=>{s&&afterAll(t,e)})(s),this}afterEach(t,e,s=!0){return(s=>{s&&afterEach(t,e)})(s),this}beforeAll(t,e,s=!0){return(s=>{s&&beforeAll(t,e)})(s),this}beforeEach(t,e,s=!0){return(s=>{s&&beforeEach(t,e)})(s),this}describe(t,e,s){return this.testingIt.resetCounter(),this.testingDescribe.describe(t,e,s),this}fdescribe(t,e){return this.testingIt.resetCounter(),this.testingDescribe.fdescribe(t,e),this}it(t,e,s){return this.testingIt.it(t,e,s),this}setSpecProperty(t,e){return setSpecProperty(t,e),this}setSuiteProperty(t,e){return setSuiteProperty(t,e),this}spec(t,e="",s){return 0===e.length&&(Object.entries(TextualExpectation).forEach((([s,i])=>t.toString().includes(s)&&(e+=i+" and "))),e=e.slice(0,-5)),this.it(e,(()=>t(this.expect)),s),this}xdescribe(t,e){return this.testingIt.resetCounter(),this.testingDescribe.xdescribe(t,e),this}}class TestingItToBeArrayOf extends TestingCore{bigint(t,e=!0,s=TextualExpectation.toBeArrayOfBigInt,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.bigint(t,e,i)),n),this}boolean(t,e=!0,s=TextualExpectation.toBeArrayOfBoolean,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.boolean(t,e,i)),n),this}date(t,e=!0,s=TextualExpectation.toBeArrayOfDate,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.date(t,e,i)),n),this}defined(t,e=!0,s=TextualExpectation.toBeArrayOfDefined,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.defined(t,e,i)),n),this}false(t,e=!0,s=TextualExpectation.toBeArrayOfFalse,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.false(t,e,i)),n),this}null(t,e=!0,s=TextualExpectation.toBeArrayOfNull,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.null(t,e,i)),n),this}number(t,e=!0,s=TextualExpectation.toBeArrayOfNumber,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.number(t,e,i)),n),this}regExp(t,e=!0,s=TextualExpectation.toBeArrayOfRegExp,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.regExp(t,e,i)),n),this}string(t,e=!0,s=TextualExpectation.toBeArrayOfString,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.string(t,e,i)),n),this}symbol(t,e=!0,s=TextualExpectation.toBeArrayOfSymbol,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.symbol(t,e,i)),n),this}true(t,e=!0,s=TextualExpectation.toBeArrayOfTrue,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.true(t,e,i)),n),this}undefined(t,e=!0,s=TextualExpectation.toBeArrayOfUndefined,i,n){return this.it(s,(()=>super.expect.to.be.arrayof.undefined(t,e,i)),n),this}}class TestingItToBeBoolean extends TestingCore{boolean(t,e=!0,s=TextualExpectation.toBeBoolean,i,n){return this.it(s,(()=>super.expect.to.be.boolean(t,e,i)),n),this}type(t,e=!0,s=TextualExpectation.toBeBooleanType,i,n){return this.it(s,(()=>super.expect.to.be.booleanType(t,e,i)),n),this}}class TestingItToBeInstanceOf extends TestingCore{array(t,e=!0,s=TextualExpectation.toBeArray,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.array(t,e,i)),n),this}boolean(t,e=!0,s=TextualExpectation.toBeInstanceOfBoolean,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.boolean(t,e,i)),n),this}date(t,e=!0,s=TextualExpectation.toBeInstanceOfDate,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.date(t,e,i)),n),this}error(t,e=!0,s=TextualExpectation.toBeInstanceOfError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.error(t,e,i)),n),this}function(t,e=!0,s=TextualExpectation.toBeInstanceOfFunction,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.function(t,e,i)),n),this}map(t,e=!0,s=TextualExpectation.toBeInstanceOfMap,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.map(t,e,i)),n),this}number(t,e=!0,s=TextualExpectation.toBeInstanceOfNumber,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.number(t,e,i)),n),this}object(t,e=!0,s=TextualExpectation.toBeInstanceOfObject,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.object(t,e,i)),n),this}promise(t,e=!0,s=TextualExpectation.toBeInstanceOfPromise,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.promise(t,e,i)),n),this}rangeError(t,e=!0,s=TextualExpectation.toBeInstanceOfRangeError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.rangeError(t,e,i)),n),this}referenceError(t,e=!0,s=TextualExpectation.toBeInstanceOfReferenceError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.referenceError(t,e,i)),n),this}regExp(t,e=!0,s=TextualExpectation.toBeInstanceOfRegExp,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.regexp(t,e,i)),n),this}set(t,e=!0,s=TextualExpectation.toBeInstanceOfSet,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.set(t,e,i)),n),this}storage(t,e=!0,s="",i,n){return this}string(t,e=!0,s=TextualExpectation.toBeInstanceOfString,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.string(t,e,i)),n),this}syntaxError(t,e=!0,s=TextualExpectation.toBeInstanceOfSyntaxError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.syntaxError(t,e,i)),n),this}typeError(t,e=!0,s=TextualExpectation.toBeInstanceOfTypeError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.typeError(t,e,i)),n),this}URIError(t,e=!0,s=TextualExpectation.toBeInstanceOfURIError,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.URIError(t,e,i)),n),this}weakMap(t,e=!0,s=TextualExpectation.toBeInstanceOfWeakMap,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.weakMap(t,e,i)),n),this}weakSet(t,e=!0,s=TextualExpectation.toBeInstanceOfWeakSet,i,n){return this.it(s,(()=>super.expect.to.be.instanceof.weakSet(t,e,i)),n),this}}class TestingItToBe extends TestingCore{get arrayof(){return this.#T}get boolean(){return this.#p}get instanceof(){return this.#b}#T;#p;#b;constructor(t,e,s,i=[!0,!1],n=new TestingDescribe(t,s?.describe,i),r=new TestingIt(e,s?.it,i),o=new TestingExpectation){super(t,e,s,i,n,r,o),this.#T=new TestingItToBeArrayOf(t,e,s,i,n,r,o),this.#p=new TestingItToBeBoolean(t,e,s,i,n,r,o),this.#b=new TestingItToBeInstanceOf(t,e,s,i,n,r,o)}be(t,e,s,i,n){return this.it(s,(()=>super.expect.to.be.be(t,e,i)),n),this}array(t,e=!0,s=TextualExpectation.toBeArray,i,n){return this.it(s,(()=>super.expect.to.be.array(t,e,i)),n),this}bigInt(t,e=!0,s=TextualExpectation.toBeBigInt,i,n){return this.it(s,(()=>super.expect.to.be.bigint(t,e,i)),n),this}class(t,e=!0,s=TextualExpectation.toBeClass,i,n){return this.it(s,(()=>super.expect.to.be.class(t,e,i)),n),this}closeTo(t,e,s,i=TextualExpectation.toBeCloseTo,n,r){return this.it(i,(()=>super.expect.to.be.closeTo(t,e,s,n)),r),this}date(t,e=!0,s=TextualExpectation.toBeDate,i,n){return this.it(s,(()=>super.expect.to.be.date(t,e,i)),n),this}defined(t,e=!0,s=TextualExpectation.toBeDefined,i,n){return this.it(s,(()=>super.expect.to.be.defined(t,e,i)),n),this}false(t,e=!0,s=TextualExpectation.toBeFalse,i,n){return this.it(s,(()=>super.expect.to.be.false(t,e,i)),n),this}falsy(t,e=!0,s=TextualExpectation.toBeFalsy,i,n){return this.it(s,(()=>super.expect.to.be.falsy(t,e,i)),n),this}function(t,e=!0,s=TextualExpectation.toBeFunction,i,n){return this.it(s,(()=>super.expect.to.be.function(t,e,i)),n),this}greaterThan(t,e,s=TextualExpectation.toBeGreaterThan,i,n){return this.it(s,(()=>super.expect.to.be.greaterThan(t,e,i)),n),this}greaterThanOrEqual(t,e,s=TextualExpectation.toBeGreaterThanOrEqual,i,n){return this.it(s,(()=>super.expect.to.be.greaterThanOrEqual(t,e,i)),n),this}instance(t,e,s=!0,i=TextualExpectation.toBeInstance,n,r){return this.it(i,(()=>super.expect.to.be.instance(t,e,s,n)),r),this}instanceOf(t,e,s=TextualExpectation.toBeInstanceOf,i,n){return this.it(s,(()=>super.expect.to.be.instanceOf(t,e,i)),n),this}key(t,e=!0,s=TextualExpectation.toBeKey,i,n){return this.it(s,(()=>super.expect.to.be.key(t,e,i)),n),this}lessThan(t,e,s=TextualExpectation.toBeLessThan,i,n){return this.it(s,(()=>super.expect.to.be.lessThan(t,e,i)),n),this}lessThanOrEqual(t,e,s=TextualExpectation.toBeLessThanOrEqual,i,n){return this.it(s,(()=>super.expect.to.be.lessThanOrEqual(t,e,i)),n),this}naN(t,e=!0,s=TextualExpectation.toBeNaN,i,n){return this.it(s,(()=>super.expect.to.be.naN(t,e,i)),n),this}negativeInfinity(t,e=!0,s=TextualExpectation.toBeNegativeInfinity,i,n){return this.it(s,(()=>super.expect.to.be.negativeInfinity(t,e,i)),n),this}null(t,e=!0,s=TextualExpectation.toBeNull,i,n){return this.it(s,(()=>super.expect.to.be.null(t,e,i)),n),this}number(t,e=!0,s=TextualExpectation.toBeNumber,i,n){return this.it(s,(()=>super.expect.to.be.number(t,e,i)),n),this}numberBetween(t,e,s,i=!0,n=TextualExpectation.toBeNumberBetween,r,o){return this.it(n,(()=>super.expect.to.be.numberBetween(t,e,s,i,r)),o),this}numberType(t,e=!0,s=TextualExpectation.toBeNumberType,i,n){return this.it(s,(()=>super.expect.to.be.numberType(t,e,i)),n),this}object(t,e=!0,s=TextualExpectation.toBeObject,i,n){return this.it(s,(()=>super.expect.to.be.object(t,e,i)),n),this}objectKey(t,e,s=!0,i=TextualExpectation.toBeObjectKey,n,r){return this.it(i,(()=>super.expect.to.be.objectKey(t,e,s,n)),r),this}objectKeyIn(t,e,s=!0,i=TextualExpectation.toBeObjectKeyIn,n,r){return this.it(i,(()=>super.expect.to.be.objectKeyIn(t,e,s,n)),r),this}objectKeys(t,e,s=!0,i=TextualExpectation.toBeObjectKeys,n,r){return this.it(i,(()=>super.expect.to.be.objectKeys(t,e,s,n)),r),this}objectKeysIn(t,e,s=!0,i=TextualExpectation.toBeObjectKeysIn,n,r){return this.it(i,(()=>super.expect.to.be.objectKeysIn(t,e,s,n)),r),this}objectSomeKeys(t,e,s=!0,i=TextualExpectation.toBeObjectSomeKeys,n,r){return this.it(i,(()=>super.expect.to.be.objectSomeKeys(t,e,s,n)),r),this}positiveInfinity(t,e=!0,s=TextualExpectation.toBePositiveInfinity,i,n){return this.it(s,(()=>super.expect.to.be.positiveInfinity(t,e,i)),n),this}regExp(t,e=!0,s=TextualExpectation.toBeRegExp,i,n=!0){return this.it(s,(()=>super.expect.to.be.regexp(t,e,i)),n),this}pending(t,e=TextualExpectation.toBePending,s,i){return this.it(e,(()=>super.expect.to.be.pending(t,s)),i),this}rejected(t,e=TextualExpectation.toBeRejected,s,i){return this.it(e,(e=>{super.expect.to.be.rejected(t,s),e()}),i),this}rejectedWith(t,e,s=TextualExpectation.toBeRejectedWith,i,n){return this.it(s,(s=>{super.expect.to.be.rejectedWith(t,e,i),s()}),n),this}rejectedWithError(t,e,s,i=TextualExpectation.toBeRejectedWith,n,r){return this.it(i,(i=>{super.expect.to.be.rejectedWithError(t,e,s,n),i()}),r),this}resolved(t,e=TextualExpectation.toBeResolved,s,i){return this.it(e,(e=>{super.expect.to.be.resolved(t,s),e()}),i),this}resolvedTo(t,e,s=TextualExpectation.toBeResolvedTo,i,n){return this.it(s,(s=>{super.expect.to.be.resolvedTo(t,e,i),s()}),n),this}string(t,e=!0,s=TextualExpectation.toBeString,i,n){return this.it(s,(()=>super.expect.to.be.string(t,e,i)),n),this}stringIncludes(t,e,s=!0,i=TextualExpectation.toBeStringIncludes,n,r){return this.it(i,(()=>super.expect.to.be.stringIncludes(t,e,s,n)),r),this}stringIncludesSome(t,e,s=!0,i=TextualExpectation.toBeStringIncludesSome,n,r){return this.it(i,(()=>super.expect.to.be.stringIncludesSome(t,e,s,n)),r),this}stringOfLength(t,e,s=!0,i=TextualExpectation.toBeStringOfLength,n,r){return this.it(i,(()=>super.expect.to.be.stringOfLength(t,e,s,n)),r),this}stringOfLengthBetween(t,e,s,i=!0,n=TextualExpectation.toBeStringOfLengthBetween,r,o){return this.it(n,(()=>super.expect.to.be.stringOfLengthBetween(t,e,s,i,r)),o),this}stringType(t,e=!0,s=TextualExpectation.toBeStringType,i,n){return this.it(s,(()=>super.expect.to.be.stringType(t,e,i)),n),this}symbol(t,e=!0,s=TextualExpectation.toBeSymbol,i,n){return this.it(s,(()=>super.expect.to.be.symbol(t,e,i)),n),this}true(t,e=!0,s=TextualExpectation.toBeTrue,i,n){return this.it(s,(()=>super.expect.to.be.true(t,e,i)),n),this}truthy(t,e=!0,s=TextualExpectation.toBeTruthy,i,n){return this.it(s,(()=>super.expect.to.be.truthy(t,e,i)),n),this}undefined(t,e=!0,s=TextualExpectation.toBeUndefined,i,n){return this.it(s,(()=>super.expect.to.be.undefined(t,e,i)),n),this}}class TestingItToHaveBeenCalled extends TestingCore{before(t,e=TextualExpectation.toHaveBeenCalledBefore,s,i){return this.it(e,(()=>super.expect.to.have.been.called.before(t()[0],t()[1],s)),i),this}called(t,e=TextualExpectation.toHaveBeenCalled,s,i){return this.it(e,(()=>{let e=t();(Array.isArray(e)?e:[e]).forEach((t=>super.expect.to.have.been.called.called(t,s)))}),i),this}onceWith(t=TextualExpectation.toHaveBeenCalledOnceWith,e,...s){return this.it(t,(()=>super.expect.to.have.been.called.onceWith(e(),...s)),!0),this}times(t,e,s=TextualExpectation.toHaveBeenCalledTimes,i,n){return this.it(s,(()=>super.expect.to.have.been.called.times(t(),e,i)),n),this}with(t=TextualExpectation.toHaveBeenCalledWith,e,...s){return this.it(t,(()=>super.expect.to.have.been.called.with(e(),...s)),!0),this}}class TestingItToHaveBeen extends TestingCore{get called(){return this.#g}#g;constructor(t,e,s,i=[!0,!1],n=new TestingDescribe(t,s?.describe,i),r=new TestingIt(e,s?.it,i),o=new TestingExpectation){super(t,e,s,i,n,r,o),this.#g=new TestingItToHaveBeenCalled(t,e,s,i,n,r,o)}}class TestingItToHave extends TestingCore{get been(){return this.#B}#B;constructor(t,e,s,i=[!0,!1],n=new TestingDescribe(t,s?.describe,i),r=new TestingIt(e,s?.it,i),o=new TestingExpectation){super(t,e,s,i,n,r,o),this.#B=new TestingItToHaveBeen(t,e,s,i,n,r,o)}class(t,e,s=TextualExpectation.toHaveClass,i,n){return this.it(s,(()=>super.expect.to.have.class(t,e,i)),n),this}size(t,e,s=TextualExpectation.toHaveSize,i,n){return this.it(s,(()=>super.expect.to.have.size(t,e,i)),n),this}spyInteractions(t,e=TextualExpectation.toHaveSpyInteractions,s,i){return this.it(e,(()=>super.expect.to.have.spyInteractions(t,s)),i),this}}class TestingItToThrow extends TestingCore{error(t,e,s=TextualExpectation.toThrowError,i,n){return this.it(s,(()=>super.expect.to.throw.error(t,e,i)),n),this}matching(t,e,s=TextualExpectation.toThrowMatching,i,n){return this.it(s,(()=>super.expect.to.throw.matching(t,e,i)),n),this}throw(t,e,s=TextualExpectation.toThrow,i,n){return this.it(s,(()=>super.expect.to.throw.throw(t,e,i)),n),this}}class TestingItTo extends TestingCore{get be(){return this.#f}get have(){return this