Skip to content

Commit

Permalink
add tests for types
Browse files Browse the repository at this point in the history
  • Loading branch information
uNmAnNeR committed Jun 23, 2023
1 parent fedec15 commit cae75c3
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 3 deletions.
4 changes: 2 additions & 2 deletions packages/imask/src/masked/factory.ts
Expand Up @@ -114,10 +114,10 @@ type UpdateStaticOpts<Opts extends FactoryStaticOpts> =
Opts extends MaskedRangeOptions ? MaskedRangeOptions :
Opts extends MaskedDynamicOptions ? MaskedDynamicOptions :
Opts extends MaskedPatternOptions ? MaskedPatternOptions :
Opts extends MaskedDateOptions ? MaskedDateOptions :
Opts extends MaskedNumberOptions ? MaskedNumberOptions :
Opts extends MaskedRegExpOptions ? MaskedRegExpOptions :
Opts extends MaskedFunctionOptions ? MaskedFunctionOptions :
Opts extends MaskedDateOptions ? MaskedDateOptions :
never
;

Expand All @@ -126,13 +126,13 @@ type UpdateAnyOpts = Record<string, any>;
export
type UpdateInstanceOpts<M extends Masked> =
M extends MaskedRegExp ? MaskedRegExpOptions :
M extends MaskedPattern ? MaskedPatternOptions :
M extends MaskedFunction ? MaskedFunctionOptions :
M extends MaskedDate ? MaskedDateOptions :
M extends MaskedNumber ? MaskedNumberOptions :
M extends MaskedDynamic ? MaskedDynamicOptions :
M extends MaskedRange ? MaskedRangeOptions :
M extends MaskedEnum ? MaskedEnumOptions :
M extends MaskedPattern ? MaskedPatternOptions :
UpdateAnyOpts
;

Expand Down
67 changes: 67 additions & 0 deletions packages/imask/test/controls/input.types.ts
@@ -0,0 +1,67 @@
import type InputMask from '../../src/controls/input';
import { type Check, type Equal } from '../types';

import Masked from '../../src/masked/base';
import type MaskedDate from '../../src/masked/date';
import type MaskedDynamic from '../../src/masked/dynamic';
import type MaskedEnum from '../../src/masked/enum';
import type MaskedFunction from '../../src/masked/function';
import type MaskedNumber from '../../src/masked/number';
import type MaskedPattern from '../../src/masked/pattern';
import type MaskedRange from '../../src/masked/range';
import type MaskedRegExp from '../../src/masked/regexp';

import { type MaskedDynamicOptions } from '../../src/masked/dynamic';
import { type MaskedFunctionOptions } from '../../src/masked/function';
import { type MaskedNumberOptions } from '../../src/masked/number';
import { type MaskedPatternOptions } from '../../src/masked/pattern';
import { type MaskedRegExpOptions } from '../../src/masked/regexp';
import { type MaskedEnumOptions } from '../../src/masked/enum';
import { type MaskedDateOptions } from '../../src/masked/date';
import { type MaskedRangeOptions } from '../../src/masked/range';

class MyMasked extends Masked {
declare overwrite?: boolean | 'shift' | undefined;
declare eager?: boolean | 'remove' | 'append' | undefined;
declare skipInvalid?: boolean | undefined;
}


type cases = [
Check<Equal<Parameters<InputMask<{ mask: DateConstructor }>['updateOptions']>, [Partial<MaskedDateOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: ArrayConstructor }>['updateOptions']>, [Partial<MaskedDynamicOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: () => boolean }>['updateOptions']>, [Partial<MaskedFunctionOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: NumberConstructor }>['updateOptions']>, [Partial<MaskedNumberOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: string }>['updateOptions']>, [Partial<MaskedPatternOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: RegExp }>['updateOptions']>, [Partial<MaskedRegExpOptions>]>>,

Check<Equal<Parameters<InputMask<{ mask: MaskedDate }>['updateOptions']>, [Partial<MaskedDateOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedDynamic }>['updateOptions']>, [Partial<MaskedDynamicOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedEnum }>['updateOptions']>, [Partial<MaskedEnumOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedFunction }>['updateOptions']>, [Partial<MaskedFunctionOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedNumber }>['updateOptions']>, [Partial<MaskedNumberOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedPattern }>['updateOptions']>, [Partial<MaskedPatternOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedRange }>['updateOptions']>, [Partial<MaskedRangeOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MaskedRegExp }>['updateOptions']>, [Partial<MaskedRegExpOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: MyMasked }>['updateOptions']>, [Partial<Record<string, any>>]>>,

Check<Equal<Parameters<InputMask<MaskedDate>['updateOptions']>, [Partial<MaskedDateOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedDynamic>['updateOptions']>, [Partial<MaskedDynamicOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedEnum>['updateOptions']>, [Partial<MaskedEnumOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedFunction>['updateOptions']>, [Partial<MaskedFunctionOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedNumber>['updateOptions']>, [Partial<MaskedNumberOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedPattern>['updateOptions']>, [Partial<MaskedPatternOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedRange>['updateOptions']>, [Partial<MaskedRangeOptions>]>>,
Check<Equal<Parameters<InputMask<MaskedRegExp>['updateOptions']>, [Partial<MaskedRegExpOptions>]>>,
Check<Equal<Parameters<InputMask<MyMasked>['updateOptions']>, [Partial<Record<string, any>>]>>,

Check<Equal<Parameters<InputMask<{ mask: typeof MaskedDate }>['updateOptions']>, [Partial<MaskedDateOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedDynamic }>['updateOptions']>, [Partial<MaskedDynamicOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedEnum }>['updateOptions']>, [Partial<MaskedEnumOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedFunction }>['updateOptions']>, [Partial<MaskedFunctionOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedNumber }>['updateOptions']>, [Partial<MaskedNumberOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedPattern }>['updateOptions']>, [Partial<MaskedPatternOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedRange }>['updateOptions']>, [Partial<MaskedRangeOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MaskedRegExp }>['updateOptions']>, [Partial<MaskedRegExpOptions>]>>,
Check<Equal<Parameters<InputMask<{ mask: typeof MyMasked }>['updateOptions']>, [Partial<Record<string, any>>]>>,
];
1 change: 0 additions & 1 deletion packages/imask/test/masked/factory.types.ts
Expand Up @@ -67,6 +67,5 @@ type cases = [
Check<NormalizedOpts<MaskedNumber> extends { _mask: MaskedNumber, mask: typeof MaskedNumber } ? true : false>,
Check<Equal<NormalizedOpts<{ mask: typeof MaskedNumber }>, { mask: typeof MaskedNumber }>>,
Check<Equal<NormalizedOpts<NumberConstructor>, { mask: NumberConstructor }>>,

Check<FactoryConstructorOpts extends Partial<NormalizedOpts<FactoryConstructorOpts>> ? true : false>,
];

0 comments on commit cae75c3

Please sign in to comment.