type-enforcer-test-helper 1.3.10 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -156
- package/dist/js/index.js +7 -0
- package/dist/js/src/data/TestClass.js +12 -0
- package/dist/js/src/data/coercible.js +81 -0
- package/dist/js/src/data/testData.js +168 -0
- package/dist/js/src/data/testValues.js +116 -0
- package/dist/js/src/multiTest.js +116 -0
- package/dist/js/src/testCheck.js +39 -0
- package/dist/js/src/testEnforce.js +121 -0
- package/dist/js/src/testMethod.js +337 -0
- package/dist/js/src/utility/difference.js +7 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/src/data/TestClass.d.ts +6 -0
- package/dist/types/src/data/coercible.d.ts +6 -0
- package/dist/types/src/data/testData.d.ts +30 -0
- package/dist/types/src/data/testData.test.d.ts +1 -0
- package/dist/types/src/data/testValues.d.ts +19 -0
- package/dist/types/src/data/testValues.test.d.ts +1 -0
- package/dist/types/src/multiTest.d.ts +58 -0
- package/dist/types/src/multiTest.test.d.ts +1 -0
- package/dist/types/src/testCheck.d.ts +3 -0
- package/dist/types/src/testCheck.test.d.ts +1 -0
- package/dist/types/src/testEnforce.d.ts +2 -0
- package/dist/types/src/testEnforce.test.d.ts +1 -0
- package/dist/types/src/testMethod.d.ts +20 -0
- package/dist/types/src/testMethod.test.d.ts +1 -0
- package/dist/types/src/utility/difference.d.ts +2 -0
- package/dist/types/src/utility/difference.test.d.ts +1 -0
- package/package.json +24 -42
- package/index.js +0 -17
- package/src/data/TestClass.js +0 -11
- package/src/data/coercible.js +0 -85
- package/src/data/testData.js +0 -417
- package/src/data/testValues.js +0 -241
- package/src/multiTest.js +0 -125
- package/src/testCheck.js +0 -67
- package/src/testEnforce.js +0 -143
- package/src/testMethod.js +0 -439
- package/src/utility/difference.js +0 -4
- package/types/index.d.ts +0 -8
- package/types/index.d.ts.map +0 -1
- package/types/src/data/TestClass.d.ts +0 -11
- package/types/src/data/TestClass.d.ts.map +0 -1
- package/types/src/data/coercible.d.ts +0 -7
- package/types/src/data/coercible.d.ts.map +0 -1
- package/types/src/data/testData.d.ts +0 -289
- package/types/src/data/testData.d.ts.map +0 -1
- package/types/src/data/testValues.d.ts +0 -26
- package/types/src/data/testValues.d.ts.map +0 -1
- package/types/src/multiTest.d.ts +0 -14
- package/types/src/multiTest.d.ts.map +0 -1
- package/types/src/testCheck.d.ts +0 -11
- package/types/src/testCheck.d.ts.map +0 -1
- package/types/src/testEnforce.d.ts +0 -12
- package/types/src/testEnforce.d.ts.map +0 -1
- package/types/src/testMethod.d.ts +0 -27
- package/types/src/testMethod.d.ts.map +0 -1
- package/types/src/utility/difference.d.ts +0 -3
- package/types/src/utility/difference.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
# Type Enforcer Test Helper
|
|
2
2
|
|
|
3
3
|
> Test data and helper functions for type-enforcer and addons
|
|
4
|
-
>
|
|
5
|
-
> [![npm][npm]][npm-url]
|
|
6
|
-
[![deps][deps]][deps-url]
|
|
7
|
-
[![size][size]][size-url]
|
|
8
|
-
[![vulnerabilities][vulnerabilities]][vulnerabilities-url]
|
|
9
|
-
[![license][license]][license-url]
|
|
10
4
|
|
|
11
5
|
<br><a name="Installation"></a>
|
|
12
6
|
|
|
13
7
|
## Installation
|
|
14
8
|
```
|
|
15
|
-
npm install type-enforcer-test-helper
|
|
9
|
+
npm install type-enforcer-test-helper --save-dev
|
|
16
10
|
```
|
|
17
11
|
|
|
18
12
|
<br><a name="About"></a>
|
|
@@ -23,158 +17,10 @@ This library consists of two things. First is a data set of variations of differ
|
|
|
23
17
|
|
|
24
18
|
<br>
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
<dl>
|
|
29
|
-
<dt><a href="docs/TestClass.md">TestClass</a></dt>
|
|
30
|
-
<dd><p>A simple class for testing things like instanceof</p>
|
|
31
|
-
</dd>
|
|
32
|
-
</dl>
|
|
33
|
-
|
|
34
|
-
<br>
|
|
35
|
-
|
|
36
|
-
## Constants
|
|
37
|
-
|
|
38
|
-
<dl>
|
|
39
|
-
<dt><a href="docs/testTypes.md">testTypes</a> : <code>Array</code></dt>
|
|
40
|
-
<dd><p>An array of all the test type objects (arrayData, booleanData, etc.)</p>
|
|
41
|
-
</dd>
|
|
42
|
-
<dt><a href="docs/arrayData.md">arrayData</a> : <code>object</code></dt>
|
|
43
|
-
<dd><p>A data set for testing Arrays</p>
|
|
44
|
-
</dd>
|
|
45
|
-
<dt><a href="docs/booleanData.md">booleanData</a> : <code>object</code></dt>
|
|
46
|
-
<dd><p>A data set for testing Booleans</p>
|
|
47
|
-
</dd>
|
|
48
|
-
<dt><a href="docs/dateData.md">dateData</a> : <code>object</code></dt>
|
|
49
|
-
<dd><p>A data set for testing Dates</p>
|
|
50
|
-
</dd>
|
|
51
|
-
<dt><a href="docs/functionData.md">functionData</a> : <code>object</code></dt>
|
|
52
|
-
<dd><p>A data set for testing Functions</p>
|
|
53
|
-
</dd>
|
|
54
|
-
<dt><a href="docs/instanceData.md">instanceData</a> : <code>object</code></dt>
|
|
55
|
-
<dd><p>A data set for testing instanceOf</p>
|
|
56
|
-
</dd>
|
|
57
|
-
<dt><a href="docs/integerData.md">integerData</a> : <code>object</code></dt>
|
|
58
|
-
<dd><p>A data set for testing integers</p>
|
|
59
|
-
</dd>
|
|
60
|
-
<dt><a href="docs/jsonData.md">jsonData</a> : <code>object</code></dt>
|
|
61
|
-
<dd><p>A data set for testing JSON</p>
|
|
62
|
-
</dd>
|
|
63
|
-
<dt><a href="docs/floatData.md">floatData</a> : <code>object</code></dt>
|
|
64
|
-
<dd><p>A data set for testing integers</p>
|
|
65
|
-
</dd>
|
|
66
|
-
<dt><a href="docs/numberData.md">numberData</a> : <code>object</code></dt>
|
|
67
|
-
<dd><p>A data set for testing numbers</p>
|
|
68
|
-
</dd>
|
|
69
|
-
<dt><a href="docs/mapData.md">mapData</a> : <code>object</code></dt>
|
|
70
|
-
<dd><p>A data set for testing Maps</p>
|
|
71
|
-
</dd>
|
|
72
|
-
<dt><a href="docs/objectData.md">objectData</a> : <code>object</code></dt>
|
|
73
|
-
<dd><p>A data set for testing plain Objects</p>
|
|
74
|
-
</dd>
|
|
75
|
-
<dt><a href="docs/promiseData.md">promiseData</a> : <code>object</code></dt>
|
|
76
|
-
<dd><p>A data set for testing Promises</p>
|
|
77
|
-
</dd>
|
|
78
|
-
<dt><a href="docs/regExpData.md">regExpData</a> : <code>object</code></dt>
|
|
79
|
-
<dd><p>A data set for testing RegExps</p>
|
|
80
|
-
</dd>
|
|
81
|
-
<dt><a href="docs/setData.md">setData</a> : <code>object</code></dt>
|
|
82
|
-
<dd><p>A data set for testing Sets</p>
|
|
83
|
-
</dd>
|
|
84
|
-
<dt><a href="docs/stringData.md">stringData</a> : <code>object</code></dt>
|
|
85
|
-
<dd><p>A data set for testing Strings</p>
|
|
86
|
-
</dd>
|
|
87
|
-
<dt><a href="docs/symbolData.md">symbolData</a> : <code>object</code></dt>
|
|
88
|
-
<dd><p>A data set for testing Symbols</p>
|
|
89
|
-
</dd>
|
|
90
|
-
<dt><a href="docs/weakMapData.md">weakMapData</a> : <code>object</code></dt>
|
|
91
|
-
<dd><p>A data set for testing WeakMaps</p>
|
|
92
|
-
</dd>
|
|
93
|
-
<dt><a href="docs/weakSetData.md">weakSetData</a> : <code>object</code></dt>
|
|
94
|
-
<dd><p>A data set for testing WeakSets</p>
|
|
95
|
-
</dd>
|
|
96
|
-
<dt><a href="docs/testValues.md">testValues</a> : <code>Array</code></dt>
|
|
97
|
-
<dd><p>A concatenated array of all the "valid" arrays.</p>
|
|
98
|
-
</dd>
|
|
99
|
-
<dt><a href="docs/validArrays.md">validArrays</a> : <code>Array</code></dt>
|
|
100
|
-
<dd><p>Arrays instantiated in different ways or with different values.</p>
|
|
101
|
-
</dd>
|
|
102
|
-
<dt><a href="docs/validBooleans.md">validBooleans</a> : <code>Array</code></dt>
|
|
103
|
-
<dd><p>Booleans instantiated in different ways or with different values.</p>
|
|
104
|
-
</dd>
|
|
105
|
-
<dt><a href="docs/validDates.md">validDates</a> : <code>Array</code></dt>
|
|
106
|
-
<dd><p>Dates instantiated in different ways or with different values.</p>
|
|
107
|
-
</dd>
|
|
108
|
-
<dt><a href="docs/validFunctions.md">validFunctions</a> : <code>Array</code></dt>
|
|
109
|
-
<dd><p>Functions instantiated in different ways.</p>
|
|
110
|
-
</dd>
|
|
111
|
-
<dt><a href="docs/validInstances.md">validInstances</a> : <code>Array</code></dt>
|
|
112
|
-
<dd><p>Different instances of TestClass with different values.</p>
|
|
113
|
-
</dd>
|
|
114
|
-
<dt><a href="docs/validIntegers.md">validIntegers</a> : <code>Array</code></dt>
|
|
115
|
-
<dd><p>Integers instantiated in different ways or with different values.</p>
|
|
116
|
-
</dd>
|
|
117
|
-
<dt><a href="docs/validFloats.md">validFloats</a> : <code>Array</code></dt>
|
|
118
|
-
<dd><p>Floats instantiated in different ways or with different values.</p>
|
|
119
|
-
</dd>
|
|
120
|
-
<dt><a href="docs/validInfinities.md">validInfinities</a> : <code>Array</code></dt>
|
|
121
|
-
<dd><p>Infinity and -Infinity</p>
|
|
122
|
-
</dd>
|
|
123
|
-
<dt><a href="docs/validMaps.md">validMaps</a> : <code>Array</code></dt>
|
|
124
|
-
<dd><p>An empty Map and a Map with data.</p>
|
|
125
|
-
</dd>
|
|
126
|
-
<dt><a href="docs/validObjects.md">validObjects</a> : <code>Array</code></dt>
|
|
127
|
-
<dd><p>Plain objects instantiated in different ways or with different values.</p>
|
|
128
|
-
</dd>
|
|
129
|
-
<dt><a href="docs/validPromises.md">validPromises</a> : <code>Array</code></dt>
|
|
130
|
-
<dd><p>A normal Promise and Promise.all.</p>
|
|
131
|
-
</dd>
|
|
132
|
-
<dt><a href="docs/validRegExps.md">validRegExps</a> : <code>Array</code></dt>
|
|
133
|
-
<dd><p>RegExps instantiated in different ways or with different values.</p>
|
|
134
|
-
</dd>
|
|
135
|
-
<dt><a href="docs/validSets.md">validSets</a> : <code>Array</code></dt>
|
|
136
|
-
<dd><p>An empty Set and a Set with data.</p>
|
|
137
|
-
</dd>
|
|
138
|
-
<dt><a href="docs/validStrings.md">validStrings</a> : <code>Array</code></dt>
|
|
139
|
-
<dd><p>Strings instantiated in different ways or with different values.</p>
|
|
140
|
-
</dd>
|
|
141
|
-
<dt><a href="docs/validSymbols.md">validSymbols</a> : <code>Array</code></dt>
|
|
142
|
-
<dd><p>A Symbol with a label and one without.</p>
|
|
143
|
-
</dd>
|
|
144
|
-
<dt><a href="docs/validWeakMaps.md">validWeakMaps</a> : <code>Array</code></dt>
|
|
145
|
-
<dd><p>An empty WeakMap and a WeakMap with data.</p>
|
|
146
|
-
</dd>
|
|
147
|
-
<dt><a href="docs/validWeakSets.md">validWeakSets</a> : <code>Array</code></dt>
|
|
148
|
-
<dd><p>An empty WeakSet and a WeakSet with data.</p>
|
|
149
|
-
</dd>
|
|
150
|
-
<dt><a href="docs/validNots.md">validNots</a> : <code>Array</code></dt>
|
|
151
|
-
<dd><p>Undefined, null, and NaN</p>
|
|
152
|
-
</dd>
|
|
153
|
-
</dl>
|
|
154
|
-
|
|
155
|
-
<br>
|
|
156
|
-
|
|
157
|
-
## Functions
|
|
158
|
-
|
|
159
|
-
<dl>
|
|
160
|
-
<dt><a href="docs/multiTest.md">multiTest(settings)</a></dt>
|
|
161
|
-
<dd><p>Run multiple identical tests over a set of data.</p>
|
|
162
|
-
</dd>
|
|
163
|
-
<dt><a href="docs/testCheck.md">testCheck(data, check, is)</a></dt>
|
|
164
|
-
<dd><p>Test a type-enforcer check function (isArray, isBoolean, etc.).</p>
|
|
165
|
-
</dd>
|
|
166
|
-
<dt><a href="docs/testEnforce.md">testEnforce(data, enforcer, enforce, coercer)</a></dt>
|
|
167
|
-
<dd><p>Test an enforce function (enforceArray, enforceBoolean, etc.).</p>
|
|
168
|
-
</dd>
|
|
169
|
-
<dt><a href="docs/testMethod.md">testMethod(settings, thisMethod, method)</a></dt>
|
|
170
|
-
<dd><p>Test a chainable method function (methodArray, methodBoolean, etc.).</p>
|
|
171
|
-
</dd>
|
|
172
|
-
</dl>
|
|
20
|
+
- [Documentation](https://github.com/DarrenPaulWright/type-enforcer-test-helper/blob/main/docs/README.md)
|
|
173
21
|
|
|
174
22
|
[npm]: https://img.shields.io/npm/v/type-enforcer-test-helper.svg
|
|
175
23
|
[npm-url]: https://npmjs.com/package/type-enforcer-test-helper
|
|
176
|
-
[deps]: https://david-dm.org/DarrenPaulWright/type-enforcer-test-helper.svg
|
|
177
|
-
[deps-url]: https://david-dm.org/DarrenPaulWright/type-enforcer-test-helper
|
|
178
24
|
[size]: https://packagephobia.now.sh/badge?p=type-enforcer-test-helper
|
|
179
25
|
[size-url]: https://packagephobia.now.sh/result?p=type-enforcer-test-helper
|
|
180
26
|
[vulnerabilities]: https://snyk.io/test/github/DarrenPaulWright/type-enforcer-test-helper/badge.svg?targetFile=package.json
|
package/dist/js/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './src/data/testValues.js';
|
|
2
|
+
export { default as TestClass } from './src/data/TestClass.js';
|
|
3
|
+
export * from './src/data/testData.js';
|
|
4
|
+
export { default as multiTest } from './src/multiTest.js';
|
|
5
|
+
export { default as testCheck } from './src/testCheck.js';
|
|
6
|
+
export { default as testEnforce } from './src/testEnforce.js';
|
|
7
|
+
export { default as testMethod } from './src/testMethod.js';
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const coerceArrayTrue = ['["test"]', '[]'];
|
|
2
|
+
export const coerceInfinity = [
|
|
3
|
+
'Infinity',
|
|
4
|
+
'-Infinity'
|
|
5
|
+
];
|
|
6
|
+
export const coerceIntegerTrue = [
|
|
7
|
+
'0',
|
|
8
|
+
'1',
|
|
9
|
+
'1.00',
|
|
10
|
+
'1E2',
|
|
11
|
+
'1E02',
|
|
12
|
+
'1E+02',
|
|
13
|
+
'-1',
|
|
14
|
+
'-1.00',
|
|
15
|
+
'-1E2',
|
|
16
|
+
'-1E02',
|
|
17
|
+
'-1E+02',
|
|
18
|
+
'-0',
|
|
19
|
+
'-0.0',
|
|
20
|
+
'+0',
|
|
21
|
+
'+0.0',
|
|
22
|
+
'0.00',
|
|
23
|
+
'0x0',
|
|
24
|
+
'0xffffffff',
|
|
25
|
+
'0xffffffffffffffff',
|
|
26
|
+
'0xabad1dea',
|
|
27
|
+
'01000',
|
|
28
|
+
'08',
|
|
29
|
+
'09'
|
|
30
|
+
];
|
|
31
|
+
export const coerceFloatTrue = [
|
|
32
|
+
'3.2',
|
|
33
|
+
'10.5'
|
|
34
|
+
];
|
|
35
|
+
export const coerceNumberFalse = [
|
|
36
|
+
'$1.00',
|
|
37
|
+
'1/2',
|
|
38
|
+
'-$1.00',
|
|
39
|
+
'-1/2',
|
|
40
|
+
'1/0',
|
|
41
|
+
'0/0',
|
|
42
|
+
'-2147483648/-1',
|
|
43
|
+
'-9223372036854775808/-1',
|
|
44
|
+
'0..0',
|
|
45
|
+
'.',
|
|
46
|
+
'0.0.0',
|
|
47
|
+
'0,00',
|
|
48
|
+
'0,,0',
|
|
49
|
+
',',
|
|
50
|
+
'0,0,0',
|
|
51
|
+
'0.0/0',
|
|
52
|
+
'1.0/0.0',
|
|
53
|
+
'0.0/0.0',
|
|
54
|
+
'1,0/0,0',
|
|
55
|
+
'0,0/0,0',
|
|
56
|
+
'--1',
|
|
57
|
+
'-',
|
|
58
|
+
'-.',
|
|
59
|
+
'-,',
|
|
60
|
+
'NaN',
|
|
61
|
+
'INF',
|
|
62
|
+
'1#INF',
|
|
63
|
+
'-1#IND',
|
|
64
|
+
'1#QNAN',
|
|
65
|
+
'1#SNAN',
|
|
66
|
+
'1#IND',
|
|
67
|
+
'1,000.00',
|
|
68
|
+
'1 000.00',
|
|
69
|
+
'1\'000.00',
|
|
70
|
+
'1,000,000.00',
|
|
71
|
+
'1 000 000.00',
|
|
72
|
+
'1\'000\'000.00',
|
|
73
|
+
'1.000,00',
|
|
74
|
+
'1 000,00',
|
|
75
|
+
'1\'000,00',
|
|
76
|
+
'1.000.000,00',
|
|
77
|
+
'1 000 000,00',
|
|
78
|
+
'1\'000\'000,00',
|
|
79
|
+
NaN
|
|
80
|
+
];
|
|
81
|
+
export const coerceObjectTrue = ['{}', '{"test":"test"}'];
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import difference from '../utility/difference.js';
|
|
2
|
+
import { coerceArrayTrue, coerceFloatTrue, coerceInfinity, coerceIntegerTrue, coerceNumberFalse, coerceObjectTrue } from './coercible.js';
|
|
3
|
+
import TestClass from './TestClass.js';
|
|
4
|
+
import { testValues, validArrays, validBooleans, validDates, validFloats, validFunctions, validInfinities, validInstances, validIntegers, validMaps, validObjects, validPromises, validRegExps, validSets, validStrings, validSymbols, validWeakMaps, validWeakSets } from './testValues.js';
|
|
5
|
+
export const arrayData = {
|
|
6
|
+
value: Array,
|
|
7
|
+
name: 'array',
|
|
8
|
+
true: validArrays,
|
|
9
|
+
false: difference(testValues, validArrays),
|
|
10
|
+
coerceTrue: coerceArrayTrue,
|
|
11
|
+
coerceFalse: difference(testValues, validArrays)
|
|
12
|
+
};
|
|
13
|
+
export const booleanData = {
|
|
14
|
+
value: Boolean,
|
|
15
|
+
name: 'boolean',
|
|
16
|
+
true: validBooleans,
|
|
17
|
+
false: difference(testValues, validBooleans),
|
|
18
|
+
coerceTrue: difference(testValues, validBooleans),
|
|
19
|
+
coerceFalse: []
|
|
20
|
+
};
|
|
21
|
+
export const dateData = {
|
|
22
|
+
value: Date,
|
|
23
|
+
name: 'date',
|
|
24
|
+
true: validDates,
|
|
25
|
+
false: difference(testValues, validDates),
|
|
26
|
+
coerceTrue: ['10/12/1980', 'January 8, 2014'],
|
|
27
|
+
coerceFalse: difference(testValues, validDates, validArrays, validFloats, validIntegers, validRegExps)
|
|
28
|
+
};
|
|
29
|
+
export const functionData = {
|
|
30
|
+
value: Function,
|
|
31
|
+
name: 'function',
|
|
32
|
+
true: validFunctions,
|
|
33
|
+
false: difference(testValues, validFunctions),
|
|
34
|
+
coerceTrue: [],
|
|
35
|
+
coerceFalse: difference(testValues, validFunctions)
|
|
36
|
+
};
|
|
37
|
+
export const instanceData = {
|
|
38
|
+
value: TestClass,
|
|
39
|
+
name: 'instanceOf',
|
|
40
|
+
true: validInstances,
|
|
41
|
+
false: difference(testValues, validInstances),
|
|
42
|
+
coerceTrue: [],
|
|
43
|
+
coerceFalse: []
|
|
44
|
+
};
|
|
45
|
+
export const integerData = {
|
|
46
|
+
name: 'integer',
|
|
47
|
+
skip: ['number', 'float'],
|
|
48
|
+
true: validIntegers,
|
|
49
|
+
false: difference(testValues, validIntegers, validInfinities),
|
|
50
|
+
coerceTrue: coerceIntegerTrue,
|
|
51
|
+
coerceFalse: coerceNumberFalse.concat(coerceFloatTrue, coerceInfinity)
|
|
52
|
+
};
|
|
53
|
+
export const jsonData = {
|
|
54
|
+
name: 'json',
|
|
55
|
+
true: coerceObjectTrue.concat(coerceArrayTrue, JSON.stringify(testValues)),
|
|
56
|
+
false: ['json'].concat(validDates, validFunctions, validObjects, validRegExps),
|
|
57
|
+
coerceTrue: [],
|
|
58
|
+
coerceFalse: []
|
|
59
|
+
};
|
|
60
|
+
export const floatData = {
|
|
61
|
+
name: 'float',
|
|
62
|
+
skip: ['number', 'integer'],
|
|
63
|
+
true: validFloats,
|
|
64
|
+
false: difference(testValues, validFloats, validIntegers, validInfinities),
|
|
65
|
+
coerceTrue: coerceIntegerTrue.concat(coerceFloatTrue),
|
|
66
|
+
coerceFalse: coerceNumberFalse.concat(coerceInfinity)
|
|
67
|
+
};
|
|
68
|
+
export const numberData = {
|
|
69
|
+
value: Number,
|
|
70
|
+
name: 'number',
|
|
71
|
+
skip: ['integer', 'float'],
|
|
72
|
+
true: validFloats.concat(validIntegers, validInfinities),
|
|
73
|
+
false: difference(testValues, validFloats, validIntegers, validInfinities, [NaN]),
|
|
74
|
+
coerceTrue: coerceIntegerTrue.concat(coerceInfinity),
|
|
75
|
+
coerceFalse: coerceNumberFalse
|
|
76
|
+
};
|
|
77
|
+
export const mapData = {
|
|
78
|
+
value: Map,
|
|
79
|
+
name: 'map',
|
|
80
|
+
true: validMaps,
|
|
81
|
+
false: difference(testValues, validMaps),
|
|
82
|
+
coerceTrue: coerceObjectTrue.concat(validObjects, [[[TestClass, 2],
|
|
83
|
+
[TestClass, 'test']], '[["test 1", 2], ["test 2", "test"]]']),
|
|
84
|
+
coerceFalse: difference(testValues, validMaps, validObjects, validArrays).concat(['test'])
|
|
85
|
+
};
|
|
86
|
+
export const objectData = {
|
|
87
|
+
value: Object,
|
|
88
|
+
name: 'object',
|
|
89
|
+
true: validObjects,
|
|
90
|
+
false: [null, undefined, true, false],
|
|
91
|
+
coerceTrue: coerceObjectTrue,
|
|
92
|
+
coerceFalse: validStrings
|
|
93
|
+
};
|
|
94
|
+
export const promiseData = {
|
|
95
|
+
value: Promise,
|
|
96
|
+
name: 'promise',
|
|
97
|
+
true: validPromises,
|
|
98
|
+
false: difference(testValues, validPromises),
|
|
99
|
+
coerceTrue: validFunctions,
|
|
100
|
+
coerceFalse: difference(testValues, validFunctions, validPromises)
|
|
101
|
+
};
|
|
102
|
+
export const regExpData = {
|
|
103
|
+
value: RegExp,
|
|
104
|
+
name: 'regExp',
|
|
105
|
+
true: validRegExps,
|
|
106
|
+
false: difference(testValues, validRegExps),
|
|
107
|
+
coerceTrue: ['test', '/[a-z]+/', '/[a-z]+/gi'],
|
|
108
|
+
coerceFalse: difference(testValues, validStrings, validRegExps)
|
|
109
|
+
};
|
|
110
|
+
export const setData = {
|
|
111
|
+
value: Set,
|
|
112
|
+
name: 'set',
|
|
113
|
+
true: validSets,
|
|
114
|
+
false: difference(testValues, validSets),
|
|
115
|
+
coerceTrue: validArrays.concat(['[]', '[1, 2]']),
|
|
116
|
+
coerceFalse: difference(testValues, validSets, validArrays)
|
|
117
|
+
};
|
|
118
|
+
export const stringData = {
|
|
119
|
+
value: String,
|
|
120
|
+
name: 'string',
|
|
121
|
+
true: validStrings,
|
|
122
|
+
false: difference(testValues, validStrings),
|
|
123
|
+
coerceTrue: difference(testValues, validStrings, [null, undefined]),
|
|
124
|
+
coerceFalse: [null, undefined]
|
|
125
|
+
};
|
|
126
|
+
export const symbolData = {
|
|
127
|
+
value: Symbol,
|
|
128
|
+
name: 'symbol',
|
|
129
|
+
true: validSymbols,
|
|
130
|
+
false: difference(testValues, validSymbols),
|
|
131
|
+
coerceTrue: stringData.coerceTrue,
|
|
132
|
+
coerceFalse: stringData.coerceFalse
|
|
133
|
+
};
|
|
134
|
+
export const weakMapData = {
|
|
135
|
+
value: WeakMap,
|
|
136
|
+
name: 'weakMap',
|
|
137
|
+
true: validWeakMaps,
|
|
138
|
+
false: difference(testValues, validWeakMaps),
|
|
139
|
+
coerceTrue: [[[TestClass, 2], [TestClass, 'test']]],
|
|
140
|
+
coerceFalse: difference(testValues, validWeakMaps, validArrays).concat(['test'])
|
|
141
|
+
};
|
|
142
|
+
export const weakSetData = {
|
|
143
|
+
value: WeakSet,
|
|
144
|
+
name: 'weakSet',
|
|
145
|
+
true: validWeakSets,
|
|
146
|
+
false: difference(testValues, validWeakSets),
|
|
147
|
+
coerceTrue: [validInstances],
|
|
148
|
+
coerceFalse: difference(testValues, validWeakSets, validArrays)
|
|
149
|
+
};
|
|
150
|
+
export const testTypes = [
|
|
151
|
+
arrayData,
|
|
152
|
+
booleanData,
|
|
153
|
+
dateData,
|
|
154
|
+
functionData,
|
|
155
|
+
instanceData,
|
|
156
|
+
integerData,
|
|
157
|
+
floatData,
|
|
158
|
+
numberData,
|
|
159
|
+
mapData,
|
|
160
|
+
objectData,
|
|
161
|
+
promiseData,
|
|
162
|
+
regExpData,
|
|
163
|
+
setData,
|
|
164
|
+
stringData,
|
|
165
|
+
symbolData,
|
|
166
|
+
weakMapData,
|
|
167
|
+
weakSetData
|
|
168
|
+
];
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import TestClass from './TestClass.js';
|
|
2
|
+
const arrayReference = Array(3);
|
|
3
|
+
export const validArrays = [
|
|
4
|
+
[1],
|
|
5
|
+
[2],
|
|
6
|
+
[],
|
|
7
|
+
new Array(),
|
|
8
|
+
new Array(12),
|
|
9
|
+
Array(),
|
|
10
|
+
arrayReference
|
|
11
|
+
];
|
|
12
|
+
const booleanReference = Boolean();
|
|
13
|
+
export const validBooleans = [
|
|
14
|
+
true,
|
|
15
|
+
false,
|
|
16
|
+
new Boolean(true),
|
|
17
|
+
Boolean(1),
|
|
18
|
+
booleanReference
|
|
19
|
+
];
|
|
20
|
+
const dateReference = new Date();
|
|
21
|
+
export const validDates = [
|
|
22
|
+
dateReference,
|
|
23
|
+
new Date('01/15/2010')
|
|
24
|
+
];
|
|
25
|
+
const namedFunctionExpression = function () {
|
|
26
|
+
};
|
|
27
|
+
export const validFunctions = [
|
|
28
|
+
namedFunctionExpression,
|
|
29
|
+
function namedFunctionDeclaration() {
|
|
30
|
+
},
|
|
31
|
+
function () {
|
|
32
|
+
},
|
|
33
|
+
() => {
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
const classReference = new TestClass(1);
|
|
37
|
+
export const validInstances = [
|
|
38
|
+
classReference,
|
|
39
|
+
new TestClass(1),
|
|
40
|
+
new TestClass(2)
|
|
41
|
+
];
|
|
42
|
+
const integerReference = Number(11);
|
|
43
|
+
export const validIntegers = [
|
|
44
|
+
1,
|
|
45
|
+
5,
|
|
46
|
+
3773586621232700,
|
|
47
|
+
new Number(42),
|
|
48
|
+
integerReference
|
|
49
|
+
];
|
|
50
|
+
const floatReference = Number(11.3);
|
|
51
|
+
export const validFloats = [
|
|
52
|
+
1.3,
|
|
53
|
+
2.5,
|
|
54
|
+
-10.00000001,
|
|
55
|
+
3.14159,
|
|
56
|
+
new Number(42.2),
|
|
57
|
+
floatReference
|
|
58
|
+
];
|
|
59
|
+
const infinityReference = Infinity;
|
|
60
|
+
export const validInfinities = [
|
|
61
|
+
infinityReference,
|
|
62
|
+
-Infinity
|
|
63
|
+
];
|
|
64
|
+
const mapReference = new Map().set('test', 12);
|
|
65
|
+
export const validMaps = [
|
|
66
|
+
new Map(),
|
|
67
|
+
mapReference
|
|
68
|
+
];
|
|
69
|
+
const objectReference = Object();
|
|
70
|
+
export const validObjects = [
|
|
71
|
+
{},
|
|
72
|
+
{ test1: 1 },
|
|
73
|
+
new Object(),
|
|
74
|
+
objectReference
|
|
75
|
+
];
|
|
76
|
+
const promiseReference = new Promise((resolve) => resolve());
|
|
77
|
+
export const validPromises = [
|
|
78
|
+
promiseReference,
|
|
79
|
+
new Promise((resolve) => resolve()),
|
|
80
|
+
Promise.all([promiseReference])
|
|
81
|
+
];
|
|
82
|
+
const regExpReference = RegExp('');
|
|
83
|
+
export const validRegExps = [
|
|
84
|
+
/asdf/g,
|
|
85
|
+
new RegExp('test 2'),
|
|
86
|
+
regExpReference
|
|
87
|
+
];
|
|
88
|
+
const setReference = new Set([1, 2]);
|
|
89
|
+
export const validSets = [
|
|
90
|
+
new Set(),
|
|
91
|
+
setReference
|
|
92
|
+
];
|
|
93
|
+
const stringReference = String('test3');
|
|
94
|
+
export const validStrings = [
|
|
95
|
+
'test',
|
|
96
|
+
'',
|
|
97
|
+
new String('test2'),
|
|
98
|
+
stringReference
|
|
99
|
+
];
|
|
100
|
+
const symbolReference = Symbol('test');
|
|
101
|
+
export const validSymbols = [
|
|
102
|
+
Symbol(),
|
|
103
|
+
symbolReference
|
|
104
|
+
];
|
|
105
|
+
const weakMapReference = new WeakMap().set({}, 12);
|
|
106
|
+
export const validWeakMaps = [
|
|
107
|
+
new WeakMap(),
|
|
108
|
+
weakMapReference
|
|
109
|
+
];
|
|
110
|
+
const weakSetReference = new WeakSet([new TestClass()]);
|
|
111
|
+
export const validWeakSets = [
|
|
112
|
+
new WeakSet(),
|
|
113
|
+
weakSetReference
|
|
114
|
+
];
|
|
115
|
+
export const validNots = [undefined, null, NaN];
|
|
116
|
+
export const testValues = validNots.concat(validArrays, validBooleans, validDates, validFunctions, validInstances, validIntegers, validFloats, validInfinities, validMaps, validObjects, validPromises, validRegExps, validSets, validStrings, validWeakMaps, validWeakSets);
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import displayValue from 'display-value';
|
|
2
|
+
import { forOwn, mix } from 'object-agent';
|
|
3
|
+
import { it, assert } from 'hippogriff';
|
|
4
|
+
const getMessage = (settings, assertion) => {
|
|
5
|
+
if (settings.message) {
|
|
6
|
+
return settings.message;
|
|
7
|
+
}
|
|
8
|
+
if (assertion === 'true') {
|
|
9
|
+
return (input) => `should return true for ${displayValue(input)}`;
|
|
10
|
+
}
|
|
11
|
+
if (assertion === 'false') {
|
|
12
|
+
return (input) => `should return false for ${displayValue(input)}`;
|
|
13
|
+
}
|
|
14
|
+
return (input, output) => `should return ${displayValue(output)} when set to ${input}`;
|
|
15
|
+
};
|
|
16
|
+
const doubleValueMessage = ((input1, input2, expected) => {
|
|
17
|
+
return `should return ${displayValue(expected)} when ${displayValue(input1)} and ${displayValue(input2)} are provided`;
|
|
18
|
+
});
|
|
19
|
+
const isMultiTestSettingsObject = (settings) => {
|
|
20
|
+
return settings.values && settings.values.constructor === Object;
|
|
21
|
+
};
|
|
22
|
+
export default (settings) => {
|
|
23
|
+
let assertion = settings.assertion || 'equal';
|
|
24
|
+
const buildSingleMessage = getMessage(settings, assertion);
|
|
25
|
+
if (assertion === 'true') {
|
|
26
|
+
assertion = 'equal';
|
|
27
|
+
settings.output = true;
|
|
28
|
+
}
|
|
29
|
+
else if (assertion === 'false') {
|
|
30
|
+
assertion = 'equal';
|
|
31
|
+
settings.output = false;
|
|
32
|
+
}
|
|
33
|
+
const buildDoubleMessage = settings.message || doubleValueMessage;
|
|
34
|
+
const testSingleValue = (input, expected, value, filter) => {
|
|
35
|
+
if ((!filter) || filter(value)) {
|
|
36
|
+
it(buildSingleMessage(input, expected), () => {
|
|
37
|
+
assert[assertion](settings.test(input), expected);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const testSingleValueCollection = (input, expected, value, filter) => {
|
|
42
|
+
if ((!filter) || filter(value)) {
|
|
43
|
+
it(buildSingleMessage(input, expected), () => {
|
|
44
|
+
assert[assertion](settings.test(input), expected);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const testDoubleValue = (input1, input2, expected, value1, value2) => {
|
|
49
|
+
if ((!settings.filter) ||
|
|
50
|
+
settings.filter(value1, value2)) {
|
|
51
|
+
it(buildDoubleMessage(input1, input2, expected), () => {
|
|
52
|
+
assert[assertion](settings.test(input1, input2), expected);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const testDoubleValueCollection = (input1, input2, expected, value1, value2) => {
|
|
57
|
+
if ((!settings.filter) ||
|
|
58
|
+
settings.filter(value1, value2)) {
|
|
59
|
+
it(buildDoubleMessage(input1, input2, expected), () => {
|
|
60
|
+
assert[assertion](settings.test(input1, input2), expected);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
if (isMultiTestSettingsObject(settings)) {
|
|
65
|
+
forOwn(settings.values, (value, key) => {
|
|
66
|
+
testSingleValue(key, value, value, settings.filter);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else if ('eachPair' in settings && settings.eachPair) {
|
|
70
|
+
mix(settings.values, settings.values2 || settings.values)
|
|
71
|
+
.forEach((values) => {
|
|
72
|
+
const value1 = values[0];
|
|
73
|
+
const value2 = values[1];
|
|
74
|
+
if ('output' in settings) {
|
|
75
|
+
if ('inputKey' in settings) {
|
|
76
|
+
testDoubleValueCollection(value1[settings.inputKey], value2[settings.inputKey], settings.output, value1, value2);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
testDoubleValue(value1, value2, settings.output, value1, value2);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if ('inputKey' in settings) {
|
|
83
|
+
testDoubleValueCollection(value1[settings.inputKey], value2[settings.inputKey], undefined, value1, value2);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
testDoubleValue(value1, value2, undefined, value1, value2);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
settings.values.forEach((value) => {
|
|
92
|
+
if ('output' in settings) {
|
|
93
|
+
if ('inputKey' in settings) {
|
|
94
|
+
testSingleValueCollection(value[settings.inputKey], settings.output, value, settings.filter);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
testSingleValue(value, settings.output, value, settings.filter);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if ('outputKey' in settings) {
|
|
101
|
+
if ('inputKey' in settings) {
|
|
102
|
+
testSingleValueCollection(value[settings.inputKey], value[settings.outputKey], value, settings.filter);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
testSingleValue(value, value[settings.outputKey], value, settings.filter);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if ('inputKey' in settings) {
|
|
109
|
+
testSingleValueCollection(value[settings.inputKey], undefined, value, settings.filter);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
testSingleValue(value, undefined, value, settings.filter);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
};
|