mirror of https://github.com/lukechilds/ow.git
Sam Verschueren
7 years ago
committed by
Sindre Sorhus
5 changed files with 104 additions and 15 deletions
@ -0,0 +1,31 @@ |
|||
import {ArgumentError} from '../argument-error'; |
|||
import {Predicate} from './predicate'; |
|||
import {BasePredicate, testSymbol} from './base-predicate'; |
|||
import {Ow} from '../..'; |
|||
|
|||
/** |
|||
* @hidden |
|||
*/ |
|||
export class AnyPredicate<T> implements BasePredicate<T> { |
|||
constructor( |
|||
private readonly predicates: Predicate[] |
|||
) {} |
|||
|
|||
[testSymbol](value: T, main: Ow) { |
|||
const errors = [ |
|||
'Any predicate failed with the following errors:' |
|||
]; |
|||
|
|||
for (const predicate of this.predicates) { |
|||
try { |
|||
main(value, predicate); |
|||
|
|||
return; |
|||
} catch (err) { |
|||
errors.push(`- ${err.message}`); |
|||
} |
|||
} |
|||
|
|||
throw new ArgumentError(errors.join('\n'), main); |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
import {Ow} from '../..'; |
|||
|
|||
/** |
|||
* @hidden |
|||
*/ |
|||
export const testSymbol = Symbol('test'); |
|||
|
|||
/** |
|||
* @hidden |
|||
*/ |
|||
export interface BasePredicate<T = any> { |
|||
[testSymbol](value: T, main: Ow): void; |
|||
} |
@ -0,0 +1,21 @@ |
|||
import test from 'ava'; |
|||
import m from '..'; |
|||
|
|||
const createError = (...errors: string[]) => { |
|||
return [ |
|||
'Any predicate failed with the following errors:', |
|||
...errors.map(error => `- ${error}`) |
|||
].join('\n'); |
|||
} |
|||
|
|||
test('any', t => { |
|||
t.notThrows(() => m(1, m.any(m.number))); |
|||
t.notThrows(() => m(1, m.any(m.number, m.string))); |
|||
t.notThrows(() => m(1, m.any(m.number, m.string))); |
|||
t.notThrows(() => m(true, m.any(m.number, m.string, m.boolean))); |
|||
t.throws(() => m(1 as any, m.any(m.string)), createError('Expected argument to be of type `string` but received type `number`')); |
|||
t.throws(() => m(true as any, m.any(m.number, m.string)), createError( |
|||
'Expected argument to be of type `number` but received type `boolean`', |
|||
'Expected argument to be of type `string` but received type `boolean`' |
|||
)); |
|||
}); |
Loading…
Reference in new issue