UNPKG

typescript-closure-tools

Version:

Command-line tools to convert closure-style JSDoc annotations to typescript, and to convert typescript sources to closure externs files

464 lines (436 loc) 16.9 kB
/// <reference path='../mocha/mocha.d.ts' /> /// <reference path='expectations.d.ts' /> // transplant from https://github.com/spmason/expectations/blob/695c25bd35bb1751533a8082a5aa378e3e1b381f/test/expect.tests.js var root = this; describe('expect', ()=> { describe('toEqual', ()=> { it('can expect true to be true', ()=> { expect(true).toEqual(true); }); it('can expect false not to be true', ()=> { try { expect(false).toEqual(true); } catch (err) { if (err.message !== 'expected false to equal true') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can expect an object to be a different but equivalent object', ()=> { expect({abc: 123}).toEqual({abc: 123}); }); it('Ignores undefined values when comparing objects', ()=> { expect({abc: 123, def: undefined}).toEqual({abc: 123}); }); it('equates undefined values and null', ()=> { expect(undefined).toEqual(null); }); it('Can expect a more complex object to equal another complex object', ()=> { var obj1 = {"name": "someData", array: [1, 2, 3, {c: "hello"}], val2: 'ing', val1: 'test'}; var obj2 = {"name": "someData", array: [1, 2, 3, {c: "hello"}], val1: 'test', val2: 'ing'}; expect(obj1).toEqual(obj2); }); it('Can expect undefined to equal an object correctly', ()=> { try { expect(undefined).toEqual('Not undefined'); } catch (err) { if (err.message !== 'expected undefined to equal "Not undefined"') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toNotEqual', ()=> { it('can expect true to be false', ()=> { expect(true).toNotEqual(false); }); it('can expect true not to be true', ()=> { try { expect(true).toNotEqual(true); } catch (err) { if (err.message !== 'expected true not to equal true') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBe', ()=> { var obj1 = {'abc': 123}; var obj2 = {'abc': 123}; it('can expect an object to be the same object', ()=> { expect(obj1).toBe(obj1); }); it('does not expect an object to be a different', ()=> { try { expect(obj1).toBe(obj2); } catch (err) { if (err.message !== 'expected {"abc": 123} to equal {"abc": 123}') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toMatch', ()=> { it('can expect string toMatch', ()=> { expect('abc').toMatch(/a/); }); it('can expect string to not match', ()=> { try { expect('abc').toMatch(/d/); } catch (err) { if (err.message !== 'expected "abc" to match /d/') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeTruthy', ()=> { it('can expect toBeTruthy when truthy', ()=> { expect('abc').toBeTruthy(); }); it('can expect toBeTruthy when falsey', ()=> { try { expect('').toBeTruthy(); } catch (err) { if (err.message !== 'expected "" to be truthy') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toContain', ()=> { it('can expect array of numbers to contain number (passing)', ()=> { expect([1, 2, 3, 4]).toContain(2); }); it('can expect array of numbers to contain number (failing)', ()=> { try { expect([1, 2, 3, 4]).toContain(5); } catch (err) { if (err.message !== 'expected [1, 2, 3, 4] to contain 5') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can expect array of objects to contain object (passing)', ()=> { expect([ {a: 1}, {a: 2}, {a: 3}, {a: 4} ]).toContain({a: 2}); }); it('can expect array of objects to contain object (failing)', ()=> { try { expect([ {a: 1}, {a: 2}, {a: 3}, {a: 4} ]).toContain({a: 5}); } catch (err) { if (err.message !== 'expected [{"a": 1}, {"a": 2}, {"a": 3}, {"a": 4}] to contain {"a": 5}') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeFalsy', ()=> { it('can expect toBeFalsy when falsey', ()=> { expect('').toBeFalsy(); }); it('can expect toBeFalsy when truthy', ()=> { try { expect('abc').toBeFalsy(); } catch (err) { if (err.message !== 'expected "abc" to be falsey') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeGreaterThan', ()=> { it('can expect 1 toBeGreaterThan 0', ()=> { expect(1).toBeGreaterThan(0); }); it('can expect 0 toBeGreaterThan 1 throws', ()=> { try { expect(0).toBeGreaterThan(1); } catch (err) { if (err.message !== 'expected 0 to be greater than 1') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeLessThan', ()=> { it('can expect 0 toBeLessThan 1', ()=> { expect(0).toBeLessThan(1); }); it('can expect 1 toBeLessThan 0 throws', ()=> { try { expect(1).toBeLessThan(0); } catch (err) { if (err.message !== 'expected 1 to be less than 0') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeDefined', ()=> { it('can expect values toBeDefined', ()=> { expect({}).toBeDefined(); }); it('throws when expects undefined values toBeDefined', ()=> { try { expect(undefined).toBeDefined(); } catch (err) { if (err.message !== 'expected undefined to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toBeUndefined', ()=> { it('can expect undefined values toBeUndefined', ()=> { expect(undefined).toBeUndefined(); }); it('throws when expects defined values toBeUndefined', ()=> { try { expect({}).toBeUndefined(); } catch (err) { if (err.message !== 'expected {} to be undefined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('toThrow', ()=> { it('can expect functions to throw', ()=> { expect(()=> { throw new Error(''); }).toThrow(); }); it('throws when function does not throw', ()=> { var error:Error; try { expect(()=> { // All OK }).toThrow(); } catch (err) { error = err; } if (error === undefined) { throw new Error('Expected error was not thrown'); } if (error.message !== 'expected function (){} to throw an exception') { throw new Error('Expected error message is not correct: ' + error.message); } }); it('throws when toThrow is called on a non-function', ()=> { var error:Error; try { expect('bob').toThrow(); } catch (err) { error = err; } if (error === undefined) { throw new Error('Expected error was not thrown'); } if (error.message !== 'expected "bob" to be a function') { throw new Error('Expected error message is not correct: ' + error.message); } }); }); describe('toBeNull', ()=> { it('can expect values toBeNull', ()=> { expect(null).toBeNull(); }); it('throws when expects non-null values toBeNull', ()=> { try { expect('abc').toBeDefined(); } catch (err) { if (err.message !== 'expected "abc" to be null') { throw new Error('Expected error message is not correct: ' + err.message); } } }); }); describe('not', ()=> { it('negates equal', ()=> { expect(false).not.toEqual(true); }); }); describe('messages', ()=> { it('can generate correct message for objects', ()=> { try { expect({}).not.toBeDefined(); } catch (err) { if (err.message !== 'expected {} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for arrays', ()=> { try { expect([]).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for arrays of values', ()=> { try { expect([1, {abc: 'def'}]).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [1, {"abc": "def"}] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for nested arrays of values', ()=> { try { expect([1, [2]]).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [1, [2]] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for Function with custom toString()', ()=> { function Obj() { } Obj.prototype.toString = ()=> { return "testing"; }; try { expect(new (<any>Obj)()).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [testing] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for Errors', ()=> { try { expect(new Error('text')).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [Error: text] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for objects with circular references', ()=> { try { var obj:any = {abc: 'def'}; obj.obj = obj; expect(obj).not.toBeDefined(); } catch (err) { if (err.message !== 'expected {"abc": "def", "obj": {"abc": "def", "obj": [Circular]}} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for deep objects', ()=> { var nested:any = {}, obj = { a: { b: { c: { d: nested } } } }; nested.e = obj; try { expect(obj).not.toBeDefined(); } catch (err) { if (err.message !== 'expected {"a": {"b": {"c": {"d": {"e": [object Object]}}}}} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for deep objects with arrays', ()=> { var nested:any = {}, obj = { a: { b: { c: { d: nested } } } }; nested.e = [obj]; try { expect(obj).not.toBeDefined(); } catch (err) { if (err.message !== 'expected {"a": {"b": {"c": {"d": {"e": [[object Object]]}}}}} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for objects with undefined values', ()=> { try { expect({a: 1, b: undefined}).toEqual({a: 1}); } catch (err) { if (err.message !== 'expected {"a": 1, "b": undefined} to equal {"a": 1}') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for anonymous functions', ()=> { try { expect(()=> { }).not.toBeDefined(); } catch (err) { if (err.message !== 'expected function (){} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for named functions', ()=> { try { expect(function name() { }).not.toBeDefined(); } catch (err) { if (err.message !== 'expected function name(){} not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); it('can generate correct message for Dates', ()=> { try { expect(new Date(2012, 0, 1)).not.toBeDefined(); } catch (err) { if (err.message !== 'expected [Date Sun, 01 Jan 2012 00:00:00 GMT] not to be defined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); if (root.document) { it('can generate correct message for DOM elements', ()=> { var el = root.document.createElement('div'); try { expect(el).toBeUndefined(); } catch (err) { if (err.message !== 'expected <div /> to be undefined') { throw new Error('Expected error message is not correct: ' + err.message); } } }); } }); describe('extensibility', ()=> { it('allows you to add your own assertions', ()=> { expect.addAssertion('toBeFoo', ()=> { if (this.value === 'foo') { return this.pass(); } this.fail('to be "foo"'); }); (<any>expect('foo')).toBeFoo(); }); }); });