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.
Files changed (59) hide show
  1. package/README.md +2 -156
  2. package/dist/js/index.js +7 -0
  3. package/dist/js/src/data/TestClass.js +12 -0
  4. package/dist/js/src/data/coercible.js +81 -0
  5. package/dist/js/src/data/testData.js +168 -0
  6. package/dist/js/src/data/testValues.js +116 -0
  7. package/dist/js/src/multiTest.js +116 -0
  8. package/dist/js/src/testCheck.js +39 -0
  9. package/dist/js/src/testEnforce.js +121 -0
  10. package/dist/js/src/testMethod.js +337 -0
  11. package/dist/js/src/utility/difference.js +7 -0
  12. package/dist/types/index.d.ts +7 -0
  13. package/dist/types/src/data/TestClass.d.ts +6 -0
  14. package/dist/types/src/data/coercible.d.ts +6 -0
  15. package/dist/types/src/data/testData.d.ts +30 -0
  16. package/dist/types/src/data/testData.test.d.ts +1 -0
  17. package/dist/types/src/data/testValues.d.ts +19 -0
  18. package/dist/types/src/data/testValues.test.d.ts +1 -0
  19. package/dist/types/src/multiTest.d.ts +58 -0
  20. package/dist/types/src/multiTest.test.d.ts +1 -0
  21. package/dist/types/src/testCheck.d.ts +3 -0
  22. package/dist/types/src/testCheck.test.d.ts +1 -0
  23. package/dist/types/src/testEnforce.d.ts +2 -0
  24. package/dist/types/src/testEnforce.test.d.ts +1 -0
  25. package/dist/types/src/testMethod.d.ts +20 -0
  26. package/dist/types/src/testMethod.test.d.ts +1 -0
  27. package/dist/types/src/utility/difference.d.ts +2 -0
  28. package/dist/types/src/utility/difference.test.d.ts +1 -0
  29. package/package.json +24 -42
  30. package/index.js +0 -17
  31. package/src/data/TestClass.js +0 -11
  32. package/src/data/coercible.js +0 -85
  33. package/src/data/testData.js +0 -417
  34. package/src/data/testValues.js +0 -241
  35. package/src/multiTest.js +0 -125
  36. package/src/testCheck.js +0 -67
  37. package/src/testEnforce.js +0 -143
  38. package/src/testMethod.js +0 -439
  39. package/src/utility/difference.js +0 -4
  40. package/types/index.d.ts +0 -8
  41. package/types/index.d.ts.map +0 -1
  42. package/types/src/data/TestClass.d.ts +0 -11
  43. package/types/src/data/TestClass.d.ts.map +0 -1
  44. package/types/src/data/coercible.d.ts +0 -7
  45. package/types/src/data/coercible.d.ts.map +0 -1
  46. package/types/src/data/testData.d.ts +0 -289
  47. package/types/src/data/testData.d.ts.map +0 -1
  48. package/types/src/data/testValues.d.ts +0 -26
  49. package/types/src/data/testValues.d.ts.map +0 -1
  50. package/types/src/multiTest.d.ts +0 -14
  51. package/types/src/multiTest.d.ts.map +0 -1
  52. package/types/src/testCheck.d.ts +0 -11
  53. package/types/src/testCheck.d.ts.map +0 -1
  54. package/types/src/testEnforce.d.ts +0 -12
  55. package/types/src/testEnforce.d.ts.map +0 -1
  56. package/types/src/testMethod.d.ts +0 -27
  57. package/types/src/testMethod.d.ts.map +0 -1
  58. package/types/src/utility/difference.d.ts +0 -3
  59. 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
- ## Classes
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 &quot;valid&quot; 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&#x3D;type-enforcer-test-helper
179
25
  [size-url]: https://packagephobia.now.sh/result?p&#x3D;type-enforcer-test-helper
180
26
  [vulnerabilities]: https://snyk.io/test/github/DarrenPaulWright/type-enforcer-test-helper/badge.svg?targetFile&#x3D;package.json
@@ -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,12 @@
1
+ export default class TestClass {
2
+ _value;
3
+ constructor(value) {
4
+ this._value = value;
5
+ }
6
+ get value() {
7
+ return this._value;
8
+ }
9
+ set value(value) {
10
+ this._value = value;
11
+ }
12
+ }
@@ -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
+ };