conditional
Version:
A preconditions package based on Google's Preconditions library
226 lines (220 loc) • 7.42 kB
JavaScript
(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);