Browse Source

Add boolean validator (#13)

iss58
Sam Verschueren 7 years ago
committed by Sindre Sorhus
parent
commit
075f326ac4
  1. 28
      source/lib/predicates/boolean.ts
  2. 8
      source/ow.ts
  3. 23
      source/test/boolean.ts
  4. 2
      tslint.json

28
source/lib/predicates/boolean.ts

@ -0,0 +1,28 @@
import { Predicate, Context } from './predicate';
export class BooleanPredicate extends Predicate<boolean> {
constructor(context?: Context) {
super('boolean', context);
}
/**
* Test a boolean to be true.
*/
get true() {
return this.addValidator({
message: value => `Expected ${value} to be true`,
validator: value => value === true
});
}
/**
* Test a boolean to be false.
*/
get false() {
return this.addValidator({
message: value => `Expected ${value} to be false`,
validator: value => value === false
});
}
}

8
source/ow.ts

@ -2,6 +2,7 @@ import { ArgumentError } from './lib/argument-error';
import { Predicate, validatorSymbol } from './lib/predicates/predicate';
import { StringPredicate } from './lib/predicates/string';
import { NumberPredicate } from './lib/predicates/number';
import { BooleanPredicate } from './lib/predicates/boolean';
export interface Ow {
(value: any, predicate: Predicate): void;
@ -13,6 +14,10 @@ export interface Ow {
* Test the value to be a number.
*/
number: NumberPredicate;
/**
* Test the value to be a boolean.
*/
boolean: BooleanPredicate;
}
const main = (value: any, predicate: Predicate) => {
@ -30,6 +35,9 @@ Object.defineProperties(main, {
},
number: {
get: () => new NumberPredicate()
},
boolean: {
get: () => new BooleanPredicate()
}
});

23
source/test/boolean.ts

@ -0,0 +1,23 @@
import test from 'ava';
import * as m from '..';
test('boolean', t => {
t.notThrows(() => m(true, m.boolean));
t.throws(() => m('12', m.boolean), 'Expected argument to be of type `boolean` but received type `string`');
});
test('boolean.true', t => {
t.notThrows(() => m(true, m.boolean.true));
t.notThrows(() => m(Boolean(true), m.boolean.true));
t.notThrows(() => m(Boolean(1), m.boolean.true));
t.throws(() => m(false, m.boolean.true), 'Expected false to be true');
t.throws(() => m(Boolean(0), m.boolean.true), 'Expected false to be true');
});
test('boolean.false', t => {
t.notThrows(() => m(false, m.boolean.false));
t.notThrows(() => m(Boolean(false), m.boolean.false));
t.notThrows(() => m(Boolean(0), m.boolean.false));
t.throws(() => m(true, m.boolean.false), 'Expected true to be false');
t.throws(() => m(Boolean(1), m.boolean.false), 'Expected true to be false');
});

2
tslint.json

@ -70,7 +70,7 @@
"newline-before-return": true,
"new-parens": true,
"no-angle-bracket-type-assertion": true,
"no-boolean-literal-compare": true,
"no-boolean-literal-compare": false,
"no-consecutive-blank-lines": true,
"no-irregular-whitespace": true,
"no-reference-import": true,

Loading…
Cancel
Save