You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

353 lines
7.7 KiB

import test from 'ava';
import ow from '../source';
test('number', t => {
t.notThrows(() => {
ow(1, ow.number);
});
t.throws(() => {
ow('12' as any, ow.number);
}, 'Expected argument to be of type `number` but received type `string`');
t.throws(() => {
ow('12' as any, 'foo', ow.number);
}, 'Expected `foo` to be of type `number` but received type `string`');
});
test('number.inRange', t => {
t.notThrows(() => {
ow(10, ow.number.inRange(0, 20));
});
t.notThrows(() => {
ow(10, ow.number.inRange(10, 20));
});
t.notThrows(() => {
ow(10, ow.number.inRange(0, 10));
});
t.throws(() => {
ow(10 as any, ow.number.inRange(0, 9));
}, 'Expected number to be in range [0..9], got 10');
t.throws(() => {
ow(10 as any, 'foo', ow.number.inRange(0, 9));
}, 'Expected number `foo` to be in range [0..9], got 10');
t.throws(() => {
ow(10 as any, ow.number.inRange(11, 20));
}, 'Expected number to be in range [11..20], got 10');
});
test('number.greaterThan', t => {
t.notThrows(() => {
ow(10, ow.number.greaterThan(5));
});
t.notThrows(() => {
ow(10, ow.number.greaterThan(9));
});
t.throws(() => {
ow(10 as any, ow.number.greaterThan(10));
}, 'Expected number to be greater than 10, got 10');
t.throws(() => {
ow(10 as any, ow.number.greaterThan(11));
}, 'Expected number to be greater than 11, got 10');
t.throws(() => {
ow(10 as any, ow.number.greaterThan(20));
}, 'Expected number to be greater than 20, got 10');
});
test('number.greaterThanOrEqual', t => {
t.notThrows(() => {
ow(10, ow.number.greaterThanOrEqual(5));
});
t.notThrows(() => {
ow(10, ow.number.greaterThanOrEqual(10));
});
t.throws(() => {
ow(10 as any, ow.number.greaterThanOrEqual(11));
}, 'Expected number to be greater than or equal to 11, got 10');
t.throws(() => {
ow(10 as any, ow.number.greaterThanOrEqual(20));
}, 'Expected number to be greater than or equal to 20, got 10');
});
test('number.lessThan', t => {
t.notThrows(() => {
ow(10, ow.number.lessThan(20));
});
t.notThrows(() => {
ow(10, ow.number.lessThan(11));
});
t.throws(() => {
ow(10 as any, ow.number.lessThan(10));
}, 'Expected number to be less than 10, got 10');
t.throws(() => {
ow(10 as any, ow.number.lessThan(9));
}, 'Expected number to be less than 9, got 10');
t.throws(() => {
ow(10 as any, ow.number.lessThan(0));
}, 'Expected number to be less than 0, got 10');
});
test('number.lessThanOrEqual', t => {
t.notThrows(() => {
ow(10, ow.number.lessThanOrEqual(20));
});
t.notThrows(() => {
ow(10, ow.number.lessThanOrEqual(10));
});
t.throws(() => {
ow(10 as any, ow.number.lessThanOrEqual(9));
}, 'Expected number to be less than or equal to 9, got 10');
t.throws(() => {
ow(10 as any, ow.number.lessThanOrEqual(0));
}, 'Expected number to be less than or equal to 0, got 10');
});
test('number.equal', t => {
t.notThrows(() => {
ow(10, ow.number.equal(10));
});
t.throws(() => {
ow(10 as any, ow.number.equal(5));
}, 'Expected number to be equal to 5, got 10');
});
test('number.oneOf', t => {
t.notThrows(() => {
ow(10, ow.number.oneOf([5, 10]));
});
t.throws(() => {
ow(10, ow.number.oneOf([5, 6]));
}, 'Expected number to be one of `[5,6]`, got 10');
t.throws(() => {
ow(10, 'hello', ow.number.oneOf([5, 6]));
}, 'Expected number `hello` to be one of `[5,6]`, got 10');
t.throws(() => {
ow(10, ow.number.oneOf([5, 6, 7, 8, 9]));
}, 'Expected number to be one of `[5,6,7,8,9]`, got 10');
t.throws(() => {
ow(10, ow.number.oneOf([5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18]));
}, 'Expected number to be one of `[5,6,7,8,9,11,12,13,14,15,…+3 more]`, got 10');
});
test('number.integer', t => {
t.notThrows(() => {
ow(10, ow.number.integer);
});
t.throws(() => {
ow(10.1 as any, ow.number.integer);
}, 'Expected number to be an integer, got 10.1');
});
test('number.finite', t => {
t.notThrows(() => {
ow(10, ow.number.finite);
});
t.throws(() => {
ow(Infinity as any, ow.number.finite);
}, 'Expected number to be finite, got Infinity');
});
test('number.infinite', t => {
t.notThrows(() => {
ow(Infinity, ow.number.infinite);
});
t.throws(() => {
ow(10 as any, ow.number.infinite);
}, 'Expected number to be infinite, got 10');
});
test('number.positive', t => {
t.notThrows(() => {
ow(1, ow.number.positive);
});
t.throws(() => {
ow(-1 as any, ow.number.positive);
}, 'Expected number to be positive, got -1');
});
test('number.negative', t => {
t.notThrows(() => {
ow(-1, ow.number.negative);
});
t.throws(() => {
ow(1 as any, ow.number.negative);
}, 'Expected number to be negative, got 1');
});
test('number.integerOrInfinite', t => {
t.notThrows(() => {
ow(10, ow.number.integerOrInfinite);
});
t.notThrows(() => {
ow(Infinity, ow.number.integerOrInfinite);
});
t.notThrows(() => {
ow(-10, ow.number.integerOrInfinite);
});
t.throws(() => {
ow(3.14, ow.number.integerOrInfinite);
}, 'Expected number to be an integer or infinite, got 3.14');
});
test('number.uint8', t => {
t.notThrows(() => {
ow(0, ow.number.uint8);
});
t.notThrows(() => {
ow(255, ow.number.uint8);
});
t.throws(() => {
ow(-1, ow.number.uint8);
}, 'Expected number to be in range [0..255], got -1');
t.throws(() => {
ow(1.5, ow.number.uint8);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(256, ow.number.uint8);
}, 'Expected number to be in range [0..255], got 256');
});
test('number.uint16', t => {
t.notThrows(() => {
ow(0, ow.number.uint16);
});
t.notThrows(() => {
ow(65535, ow.number.uint16);
});
t.throws(() => {
ow(-1, ow.number.uint16);
}, 'Expected number to be in range [0..65535], got -1');
t.throws(() => {
ow(1.5, ow.number.uint16);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(65536, ow.number.uint16);
}, 'Expected number to be in range [0..65535], got 65536');
});
test('number.uint32', t => {
t.notThrows(() => {
ow(0, ow.number.uint32);
});
t.notThrows(() => {
ow(4294967295, ow.number.uint32);
});
t.throws(() => {
ow(-1, ow.number.uint32);
}, 'Expected number to be in range [0..4294967295], got -1');
t.throws(() => {
ow(1.5, ow.number.uint32);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(4294967296, ow.number.uint32);
}, 'Expected number to be in range [0..4294967295], got 4294967296');
});
test('number.int8', t => {
t.notThrows(() => {
ow(-128, ow.number.int8);
});
t.notThrows(() => {
ow(127, ow.number.int8);
});
t.throws(() => {
ow(-129, ow.number.int8);
}, 'Expected number to be in range [-128..127], got -129');
t.throws(() => {
ow(1.5, ow.number.int8);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(128, ow.number.int8);
}, 'Expected number to be in range [-128..127], got 128');
});
test('number.int16', t => {
t.notThrows(() => {
ow(-32768, ow.number.int16);
});
t.notThrows(() => {
ow(32767, ow.number.int16);
});
t.throws(() => {
ow(-32769, ow.number.int16);
}, 'Expected number to be in range [-32768..32767], got -32769');
t.throws(() => {
ow(1.5, ow.number.int16);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(32768, ow.number.int16);
}, 'Expected number to be in range [-32768..32767], got 32768');
});
test('number.int32', t => {
t.notThrows(() => {
ow(-2147483648, ow.number.int32);
});
t.notThrows(() => {
ow(2147483647, ow.number.int32);
});
t.throws(() => {
ow(-2147483649, ow.number.int32);
}, 'Expected number to be in range [-2147483648..2147483647], got -2147483649');
t.throws(() => {
ow(1.5, ow.number.int32);
}, 'Expected number to be an integer, got 1.5');
t.throws(() => {
ow(2147483648, ow.number.int32);
}, 'Expected number to be in range [-2147483648..2147483647], got 2147483648');
});