diff --git a/expect.js/expect.js-tests.ts b/expect.js/expect.js-tests.ts new file mode 100644 index 0000000000..098df13bba --- /dev/null +++ b/expect.js/expect.js-tests.ts @@ -0,0 +1,121 @@ +/// + +function test_expect() { + expect(); + expect(1); + expect(true); + expect({}); + expect(0); +} + +function test_expect_properties() { + expect(0).be.an; + expect(0).have.own; + expect(0).not.be.an; + expect(0).not.have.own; + expect(0).not.include; + expect(0).not.only.have.own; + expect(0).not.to.be; + expect(0).not.to.have.own; + expect(0).not.to.include; + expect(0).not.to.only.have.own; + expect(0).only.have.own; + expect(0).to.be.an; + expect(0).to.have.own; + expect(0).to.include; + expect(0).to.not.be.an; + expect(0).to.not.have.own; + expect(0).to.not.include; + expect(0).to.not.only.have.own; + expect(0).to.only.have.own; + expect(0).be +} + +function test_ok() { + expect(true).to.be.ok(); +} + +function test_be() { + expect(1).to.be(1); +} + +function test_equal() { + expect(1).to.equal(1); +} + +function test_eql() { + expect({ a: 'b' }).to.eql({ a: 'b' }); +} + +function test_a() { + // string + expect(5).to.be.a('number'); + expect([]).to.be.an('array'); + + // constructors + expect(5).to.be.a(Number); + expect([]).to.be.an(Array); +} + +function test_match() { + expect('1.2.3').to.match(/[0-9]+\.[0-9]+\.[0-9]+/); +} + +function test_contain() { + // string + expect('hello world').to.contain('world'); + expect('hello world').to.string('world'); + // any + expect([1, 2]).to.contain(1); + expect([1, 2]).to.string(1); +} + +function test_length() { + expect([1,2,3]).to.have.length(3); +} + +function test_empty() { + expect([]).to.be.empty(); +} + +function test_property() { + expect(window).to.have.property('expect'); + expect(window).to.have.property('expect', expect); +} + +function test_key() { + expect({ a: 'b' }).to.have.key('a'); + expect({ a: 'b' }).to.include.key('a'); + expect({ a: 'b', c: 'd' }).to.only.have.keys('a', 'c'); + expect({ a: 'b', c: 'd' }).to.only.have.keys(['a', 'c']); + expect({ a: 'b', c: 'd' }).to.not.only.have.key('a'); +} + +function test_throwException() { + var fn = () => {}; + expect(fn).to.throwError(); + expect(fn).to.throwException(function (e) { + expect(e).to.be.a(SyntaxError); + }); + expect(fn).to.throwException(/matches the exception message/); + expect(fn).to.not.throwException(); +} + +function test_within() { + expect(1).to.be.within(0, Infinity); +} + +function test_greaterThan() { + expect(5).to.be.greaterThan(3); + expect(3).to.be.above(0); +} + +function test_lessThan() { + expect(1).to.be.lessThan(3); + expect(0).to.be.below(3); +} + +function test_fail() { + expect().fail(); + expect().fail('Custom failure message'); +} diff --git a/expect.js/expect.js.d.ts b/expect.js/expect.js.d.ts new file mode 100644 index 0000000000..c4884f07d9 --- /dev/null +++ b/expect.js/expect.js.d.ts @@ -0,0 +1,216 @@ +// Type definitions for expect.js 0.2.0 +// Project: https://github.com/LearnBoost/expect.js +// Definitions by: Teppei Sato +// DefinitelyTyped: https://github.com/borisyankov/DefinitelyTyped + +declare function expect(target?: any): Expect.Root; + +module Expect { + interface Assertion { + /** + * Check if the value is truthy + */ + ok(); + + /** + * Assert that the function throws. + * + * @param fn callback to match error string against + */ + throwError(fn?: Function); + + /** + * Assert that the function throws. + * + * @param fn callback to match error string against + */ + throwException(fn?: Function); + + /** + * Assert that the function throws. + * + * @param regexp regexp to match error string against + */ + throwError(regexp: RegExp); + + /** + * Assert that the function throws. + * + * @param fn callback to match error string against + */ + throwException(regexp: RegExp); + + /** + * Checks if the array is empty. + */ + empty(): Assertion; + + /** + * Checks if the obj exactly equals another. + */ + equal(obj: any): Assertion; + + /** + * Checks if the obj sortof equals another. + */ + eql(obj: any): Assertion; + + /** + * Assert within start to finish (inclusive). + * + * @param start + * @param finish + */ + within(start: number, finish: number): Assertion; + + /** + * Assert typeof. + */ + a(type: string): Assertion; + + /** + * Assert instanceof. + */ + a(type: Function): Assertion; + + /** + * Assert typeof / instanceof. + */ + an: An; + + /** + * Assert numeric value above n. + */ + greaterThan(n: number): Assertion; + + /** + * Assert numeric value above n. + */ + above(n: number): Assertion; + + /** + * Assert numeric value below n. + */ + lessThan(n: number): Assertion; + + /** + * Assert numeric value below n. + */ + below(n: number): Assertion; + + /** + * Assert string value matches regexp. + * + * @param regexp + */ + match(regexp: RegExp): Assertion; + + /** + * Assert property "length" exists and has value of n. + * + * @param n + */ + length(n: number): Assertion; + + /** + * Assert property name exists, with optional val. + * + * @param name + * @param val + */ + property(name: string, val?: any): Assertion; + + /** + * Assert that string contains str. + */ + contain(str: string): Assertion; + string(str: string): Assertion; + + /** + * Assert that the array contains obj. + */ + contain(obj: any): Assertion; + string(obj: any): Assertion; + + /** + * Assert exact keys or inclusion of keys by using the `.own` modifier. + */ + key(keys: string[]): Assertion; + /** + * Assert exact keys or inclusion of keys by using the `.own` modifier. + */ + key(...keys: string[]): Assertion; + /** + * Assert exact keys or inclusion of keys by using the `.own` modifier. + */ + keys(keys: string[]): Assertion; + /** + * Assert exact keys or inclusion of keys by using the `.own` modifier. + */ + keys(...keys: string[]): Assertion; + + /** + * Assert a failure. + */ + fail(message?: string): Assertion; + } + + interface Root extends Assertion { + not: Not; + to: To; + only: Only; + have: Have; + be: Be; + } + + interface Be extends Assertion { + /** + * Checks if the obj exactly equals another. + */ + (obj: any): Assertion; + + an: An; + } + + interface An extends Assertion { + /** + * Assert typeof. + */ + (type: string): Assertion; + + /** + * Assert instanceof. + */ + (type: Function): Assertion; + } + + interface Not extends Expect.NotBase { + to: Expect.ToBase; + } + + interface NotBase extends Assertion { + be: Be; + have: Have; + include: Assertion; + only: Only; + } + + interface To extends Expect.ToBase { + not: Expect.NotBase; + } + + interface ToBase extends Assertion { + be: Be; + have: Have; + include: Assertion; + only: Only; + } + + interface Only extends Assertion { + have: Have; + } + + interface Have extends Assertion { + own: Assertion; + } +}