UNPKG

conditional

Version:

A preconditions package based on Google's Preconditions library

226 lines (220 loc) 7.42 kB
(function() { var IllegalArgumentError, UNDEFINED, UnknownValueError, checkEquals; require('./helpers/test_helper'); checkEquals = preconditions.checkEquals, UnknownValueError = preconditions.UnknownValueError, IllegalArgumentError = preconditions.IllegalArgumentError; UNDEFINED = {}.xyz; describe('test equality precondition', function() { describe('primitive type tests', function() { it('string equality test', function() { var wrapper; wrapper = function() { return checkEquals('str', 'str', "expecting 'a'"); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals('abc', 'xyz', 'invalid string'); }; return assert.throws(wrapper, UnknownValueError, 'invalid string'); }); it('number equality test', function() { var wrapper; wrapper = function() { return checkEquals(5, 5, 'number should be equal'); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals(123, 234, 'invalid number'); }; return assert.throws(wrapper, UnknownValueError, 'invalid number'); }); it('numbers and string are not equal', function() { var wrapper; wrapper = function() { return checkEquals('123', 123, 'expecting number'); }; return assert.throws(wrapper, UnknownValueError, 'expecting number'); }); return it('boolean equality test', function() { var wrapper; wrapper = function() { return checkEquals(false, false, 'true value expected'); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals(true, false, 'invalid string'); }; return assert.throws(wrapper, UnknownValueError, 'invalid string'); }); }); describe('object equality tests', function() { it('flat object test', function() { var wrapper; wrapper = function() { return checkEquals({ val: 'a' }, { val: 'a' }, 'expecting {val: a}'); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals({ val: 'a' }, { val: 'b' }, 'invalid object'); }; assert.throws(wrapper, UnknownValueError, 'invalid object'); wrapper = function() { return checkEquals({ val1: 'a' }, { val2: 'a' }, 'expecting {val2: a}'); }; return assert.throws(wrapper, UnknownValueError, 'expecting {val2: a}'); }); return it('nested object test', function() { var wrapper; wrapper = function() { return checkEquals({ val: 'a', arr: [ 1, 2, { x: 'y' } ], inner: { val2: 2 } }, { val: 'a', arr: [ 1, 2, { x: 'y' } ], inner: { val2: 2 } }); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals({ val: 'a', arr: [ 1, 2, { x: 'y' } ], inner: { val2: 1 } }, { val: 'a', arr: [ 1, 2, { x: 'y' } ], inner: { val2: 2 } }, 'expecting val2 to be 2'); }; return assert.throws(wrapper, UnknownValueError, 'expecting val2 to be 2'); }); }); describe('undefined and null values equality tests', function() { it('undefined should not be expected', function() { var wrapper; wrapper = function() { return checkEquals('val', UNDEFINED); }; return assert.throws(wrapper, IllegalArgumentError, 'invalid value expected'); }); it('nulls are equal', function() { var wrapper; wrapper = function() { return checkEquals(null, null, 'null value expected'); }; return assert.doesNotThrow(wrapper); }); it('null is not same as undefined', function() { var wrapper; wrapper = function() { return checkEquals(UNDEFINED, null, 'null value expected'); }; return assert.throws(wrapper, UnknownValueError, 'null value expected'); }); return it('boolean false is not null or undefined', function() { var wrapper; wrapper = function() { return checkEquals(null, false, 'expecting false'); }; assert.throws(wrapper, UnknownValueError, 'expecting false'); wrapper = function() { return checkEquals(UNDEFINED, false, 'expecting false'); }; return assert.throws(wrapper, UnknownValueError, 'expecting false'); }); }); return describe('array equality tests', function() { it('flat array test', function() { var wrapper; wrapper = function() { return checkEquals(['a'], ['a'], 'expecting [a]'); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals(['b'], ['a'], 'expecting [a]'); }; return assert.throws(wrapper, UnknownValueError, 'expecting [a]'); }); it('empty arrays are equal', function() { var wrapper; wrapper = function() { return checkEquals([], [], 'expecting empty array'); }; return assert.doesNotThrow(wrapper); }); it('arrays of different length are not equal', function() { var wrapper; wrapper = function() { return checkEquals(['a', 'b'], ['a', 'b', 'c'], 'expecting length 3'); }; assert.throws(wrapper, UnknownValueError, 'expecting length 3'); wrapper = function() { return checkEquals(['a', 'b', 'c'], ['a', 'b'], 'expecting length 2'); }; return assert.throws(wrapper, UnknownValueError, 'expecting length 2'); }); it('array containing null values are equal', function() { var wrapper; wrapper = function() { return checkEquals([null, null], [null, null], 'expecting 2 nulls'); }; return assert.doesNotThrow(wrapper); }); it('array containing undefined values are not equal', function() { var wrapper; wrapper = function() { return checkEquals([UNDEFINED], [UNDEFINED], 'expecting undefined'); }; return assert.throws(wrapper, UnknownValueError, 'expecting undefined'); }); return it('multidimensional array equality test', function() { var wrapper; wrapper = function() { return checkEquals([[1, 2], [3, 4], ['a', ['b']]], [[1, 2], [3, 4], ['a', ['b']]]); }; assert.doesNotThrow(wrapper); wrapper = function() { return checkEquals([[1, 2], [3, 4], ['a', ['b']]], [[1, 2], [3, 4], ['a', ['b', 'c']]], 'expecting abc'); }; return assert.throws(wrapper, UnknownValueError, 'expecting abc'); }); }); }); }).call(this);