From 74c2f08f15ddf35b008d0f2d89e2cac4a6eb2927 Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Sat, 12 Jan 2019 15:15:42 +0700 Subject: [PATCH] Reduce code duplication --- source/lib/predicates/number.ts | 48 +++++---------------------------- source/test/number.ts | 36 ++++++++++++------------- 2 files changed, 24 insertions(+), 60 deletions(-) diff --git a/source/lib/predicates/number.ts b/source/lib/predicates/number.ts index 2ff770e..1da4b0b 100644 --- a/source/lib/predicates/number.ts +++ b/source/lib/predicates/number.ts @@ -146,77 +146,41 @@ export class NumberPredicate extends Predicate { * Test a number to be in a valid range for a uint8. */ get uint8() { - const start = 0; - const end = 255; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(0, 255); } /** * Test a number to be in a valid range for a uint16. */ get uint16() { - const start = 0; - const end = 65535; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(0, 65535); } /** * Test a number to be in a valid range for a uint32. */ get uint32() { - const start = 0; - const end = 4294967295; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(0, 4294967295); } /** * Test a number to be in a valid range for a int8. */ get int8() { - const start = -128; - const end = 127; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(-128, 127); } /** * Test a number to be in a valid range for a int16. */ get int16() { - const start = -32768; - const end = 32767; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(-32768, 32767); } /** * Test a number to be in a valid range for a int32. */ get int32() { - const start = -2147483648; - const end = 2147483647; - - return this.addValidator({ - message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`, - validator: value => is.integer(value) && is.inRange(value, [start, end]) - }); + return this.integer.inRange(-2147483648, 2147483647); } } diff --git a/source/test/number.ts b/source/test/number.ts index 670c0f4..c404e3d 100644 --- a/source/test/number.ts +++ b/source/test/number.ts @@ -86,47 +86,47 @@ test('number.integerOrInfinite', t => { test('number.uint8', t => { t.notThrows(() => m(0, m.number.uint8)); t.notThrows(() => m(255, m.number.uint8)); - t.throws(() => m(-1, m.number.uint8), 'Expected number to be an integer in the range 0...255, got -1'); - t.throws(() => m(1.5, m.number.uint8), 'Expected number to be an integer in the range 0...255, got 1.5'); - t.throws(() => m(256, m.number.uint8), 'Expected number to be an integer in the range 0...255, got 256'); + t.throws(() => m(-1, m.number.uint8), 'Expected number to be in range [0..255], got -1'); + t.throws(() => m(1.5, m.number.uint8), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(256, m.number.uint8), 'Expected number to be in range [0..255], got 256'); }); test('number.uint16', t => { t.notThrows(() => m(0, m.number.uint16)); t.notThrows(() => m(65535, m.number.uint16)); - t.throws(() => m(-1, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got -1'); - t.throws(() => m(1.5, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got 1.5'); - t.throws(() => m(65536, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got 65536'); + t.throws(() => m(-1, m.number.uint16), 'Expected number to be in range [0..65535], got -1'); + t.throws(() => m(1.5, m.number.uint16), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(65536, m.number.uint16), 'Expected number to be in range [0..65535], got 65536'); }); test('number.uint32', t => { t.notThrows(() => m(0, m.number.uint32)); t.notThrows(() => m(4294967295, m.number.uint32)); - t.throws(() => m(-1, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got -1'); - t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got 1.5'); - t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got 4294967296'); + t.throws(() => m(-1, m.number.uint32), 'Expected number to be in range [0..4294967295], got -1'); + t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be in range [0..4294967295], got 4294967296'); }); test('number.int8', t => { t.notThrows(() => m(-128, m.number.int8)); t.notThrows(() => m(127, m.number.int8)); - t.throws(() => m(-129, m.number.int8), 'Expected number to be an integer in the range -128...127, got -129'); - t.throws(() => m(1.5, m.number.int8), 'Expected number to be an integer in the range -128...127, got 1.5'); - t.throws(() => m(128, m.number.int8), 'Expected number to be an integer in the range -128...127, got 128'); + t.throws(() => m(-129, m.number.int8), 'Expected number to be in range [-128..127], got -129'); + t.throws(() => m(1.5, m.number.int8), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(128, m.number.int8), 'Expected number to be in range [-128..127], got 128'); }); test('number.int16', t => { t.notThrows(() => m(-32768, m.number.int16)); t.notThrows(() => m(32767, m.number.int16)); - t.throws(() => m(-32769, m.number.int16), 'Expected number to be an integer in the range -32768...32767, got -32769'); - t.throws(() => m(1.5, m.number.int16), 'Expected number to be an integer in the range -32768...32767, got 1.5'); - t.throws(() => m(32768, m.number.int16), 'Expected number to be an integer in the range -32768...32767, got 32768'); + t.throws(() => m(-32769, m.number.int16), 'Expected number to be in range [-32768..32767], got -32769'); + t.throws(() => m(1.5, m.number.int16), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(32768, m.number.int16), 'Expected number to be in range [-32768..32767], got 32768'); }); test('number.int32', t => { t.notThrows(() => m(-2147483648, m.number.int32)); t.notThrows(() => m(2147483647, m.number.int32)); - t.throws(() => m(-2147483649, m.number.int32), 'Expected number to be an integer in the range -2147483648...2147483647, got -2147483649'); - t.throws(() => m(1.5, m.number.int32), 'Expected number to be an integer in the range -2147483648...2147483647, got 1.5'); - t.throws(() => m(2147483648, m.number.int32), 'Expected number to be an integer in the range -2147483648...2147483647, got 2147483648'); + t.throws(() => m(-2147483649, m.number.int32), 'Expected number to be in range [-2147483648..2147483647], got -2147483649'); + t.throws(() => m(1.5, m.number.int32), 'Expected number to be an integer, got 1.5'); + t.throws(() => m(2147483648, m.number.int32), 'Expected number to be in range [-2147483648..2147483647], got 2147483648'); });