@instructure/ui-utils 8.52.1-snapshot-6 → 8.52.1-snapshot-11
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +1 -1
- package/es/__new-tests__/camelize.test.js +40 -0
- package/es/__new-tests__/cloneArray.test.js +52 -0
- package/es/__new-tests__/createChainedFunction.test.js +50 -0
- package/es/__new-tests__/generateId.test.js +60 -0
- package/es/__new-tests__/hash.test.js +415 -0
- package/es/__new-tests__/mergeDeep.test.js +196 -0
- package/es/__new-tests__/ms.test.js +40 -0
- package/es/__new-tests__/parseUnit.test.js +69 -0
- package/es/__new-tests__/pascalize.test.js +48 -0
- package/es/__new-tests__/px.test.js +51 -0
- package/es/__new-tests__/within.test.js +41 -0
- package/lib/__new-tests__/camelize.test.js +43 -0
- package/lib/__new-tests__/cloneArray.test.js +55 -0
- package/lib/__new-tests__/createChainedFunction.test.js +52 -0
- package/lib/__new-tests__/generateId.test.js +63 -0
- package/lib/__new-tests__/hash.test.js +417 -0
- package/lib/__new-tests__/mergeDeep.test.js +198 -0
- package/lib/__new-tests__/ms.test.js +42 -0
- package/lib/__new-tests__/parseUnit.test.js +71 -0
- package/lib/__new-tests__/pascalize.test.js +50 -0
- package/lib/__new-tests__/px.test.js +53 -0
- package/lib/__new-tests__/within.test.js +43 -0
- package/package.json +6 -5
- package/src/__new-tests__/camelize.test.tsx +42 -0
- package/src/__new-tests__/cloneArray.test.tsx +62 -0
- package/src/__new-tests__/createChainedFunction.test.tsx +54 -0
- package/src/__new-tests__/generateId.test.tsx +69 -0
- package/src/__new-tests__/hash.test.tsx +547 -0
- package/src/__new-tests__/mergeDeep.test.tsx +133 -0
- package/src/__new-tests__/ms.test.tsx +44 -0
- package/src/__new-tests__/parseUnit.test.tsx +80 -0
- package/src/__new-tests__/pascalize.test.tsx +51 -0
- package/src/__new-tests__/px.test.tsx +59 -0
- package/src/__new-tests__/within.test.tsx +44 -0
- package/tsconfig.build.json +0 -3
- package/tsconfig.build.tsbuildinfo +1 -1
- package/types/__new-tests__/camelize.test.d.ts +2 -0
- package/types/__new-tests__/camelize.test.d.ts.map +1 -0
- package/types/__new-tests__/cloneArray.test.d.ts +2 -0
- package/types/__new-tests__/cloneArray.test.d.ts.map +1 -0
- package/types/__new-tests__/createChainedFunction.test.d.ts +2 -0
- package/types/__new-tests__/createChainedFunction.test.d.ts.map +1 -0
- package/types/__new-tests__/generateId.test.d.ts +2 -0
- package/types/__new-tests__/generateId.test.d.ts.map +1 -0
- package/types/__new-tests__/hash.test.d.ts +2 -0
- package/types/__new-tests__/hash.test.d.ts.map +1 -0
- package/types/__new-tests__/mergeDeep.test.d.ts +2 -0
- package/types/__new-tests__/mergeDeep.test.d.ts.map +1 -0
- package/types/__new-tests__/ms.test.d.ts +2 -0
- package/types/__new-tests__/ms.test.d.ts.map +1 -0
- package/types/__new-tests__/parseUnit.test.d.ts +2 -0
- package/types/__new-tests__/parseUnit.test.d.ts.map +1 -0
- package/types/__new-tests__/pascalize.test.d.ts +2 -0
- package/types/__new-tests__/pascalize.test.d.ts.map +1 -0
- package/types/__new-tests__/px.test.d.ts +2 -0
- package/types/__new-tests__/px.test.d.ts.map +1 -0
- package/types/__new-tests__/within.test.d.ts +2 -0
- package/types/__new-tests__/within.test.d.ts.map +1 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
require("@testing-library/jest-dom");
|
4
|
+
var _parseUnit = require("../parseUnit");
|
5
|
+
/*
|
6
|
+
* The MIT License (MIT)
|
7
|
+
*
|
8
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
9
|
+
*
|
10
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
|
+
* of this software and associated documentation files (the "Software"), to deal
|
12
|
+
* in the Software without restriction, including without limitation the rights
|
13
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
14
|
+
* copies of the Software, and to permit persons to whom the Software is
|
15
|
+
* furnished to do so, subject to the following conditions:
|
16
|
+
*
|
17
|
+
* The above copyright notice and this permission notice shall be included in all
|
18
|
+
* copies or substantial portions of the Software.
|
19
|
+
*
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
22
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
23
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
24
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
25
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
26
|
+
* SOFTWARE.
|
27
|
+
*/
|
28
|
+
|
29
|
+
describe('parseUnit', () => {
|
30
|
+
it('unitless', () => {
|
31
|
+
expect((0, _parseUnit.parseUnit)('50')[0]).toEqual(50);
|
32
|
+
});
|
33
|
+
it('integer', () => {
|
34
|
+
expect((0, _parseUnit.parseUnit)(50)[0]).toEqual(50);
|
35
|
+
});
|
36
|
+
it('decimal', () => {
|
37
|
+
expect((0, _parseUnit.parseUnit)(47.89101)[0]).toEqual(47.89101);
|
38
|
+
});
|
39
|
+
it('negative', () => {
|
40
|
+
expect((0, _parseUnit.parseUnit)('-20px')[0]).toEqual(-20);
|
41
|
+
expect((0, _parseUnit.parseUnit)('-20px')[1]).toEqual('px');
|
42
|
+
});
|
43
|
+
it('px', () => {
|
44
|
+
expect((0, _parseUnit.parseUnit)('100.0792px')[0]).toEqual(100.0792);
|
45
|
+
expect((0, _parseUnit.parseUnit)('100.0792px')[1]).toEqual('px');
|
46
|
+
});
|
47
|
+
it('rem', () => {
|
48
|
+
expect((0, _parseUnit.parseUnit)('4000rem')[0]).toEqual(4000);
|
49
|
+
expect((0, _parseUnit.parseUnit)('4000rem')[1]).toEqual('rem');
|
50
|
+
});
|
51
|
+
it('em', () => {
|
52
|
+
expect((0, _parseUnit.parseUnit)('300em')[0]).toEqual(300);
|
53
|
+
expect((0, _parseUnit.parseUnit)('300em')[1]).toEqual('em');
|
54
|
+
});
|
55
|
+
it('s', () => {
|
56
|
+
expect((0, _parseUnit.parseUnit)('5s')[0]).toEqual(5);
|
57
|
+
expect((0, _parseUnit.parseUnit)('5s')[1]).toEqual('s');
|
58
|
+
});
|
59
|
+
it('ms', () => {
|
60
|
+
expect((0, _parseUnit.parseUnit)('20ms')[0]).toEqual(20);
|
61
|
+
expect((0, _parseUnit.parseUnit)('20ms')[1]).toEqual('ms');
|
62
|
+
});
|
63
|
+
it('vh', () => {
|
64
|
+
expect((0, _parseUnit.parseUnit)('327vh')[0]).toEqual(327);
|
65
|
+
expect((0, _parseUnit.parseUnit)('327vh')[1]).toEqual('vh');
|
66
|
+
});
|
67
|
+
it('vmin', () => {
|
68
|
+
expect((0, _parseUnit.parseUnit)('70vmin')[0]).toEqual(70);
|
69
|
+
expect((0, _parseUnit.parseUnit)('70vmin')[1]).toEqual('vmin');
|
70
|
+
});
|
71
|
+
});
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
require("@testing-library/jest-dom");
|
4
|
+
var _pascalize = require("../pascalize");
|
5
|
+
/*
|
6
|
+
* The MIT License (MIT)
|
7
|
+
*
|
8
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
9
|
+
*
|
10
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
|
+
* of this software and associated documentation files (the "Software"), to deal
|
12
|
+
* in the Software without restriction, including without limitation the rights
|
13
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
14
|
+
* copies of the Software, and to permit persons to whom the Software is
|
15
|
+
* furnished to do so, subject to the following conditions:
|
16
|
+
*
|
17
|
+
* The above copyright notice and this permission notice shall be included in all
|
18
|
+
* copies or substantial portions of the Software.
|
19
|
+
*
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
22
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
23
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
24
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
25
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
26
|
+
* SOFTWARE.
|
27
|
+
*/
|
28
|
+
|
29
|
+
describe('convertCase', () => {
|
30
|
+
describe('pascalize', () => {
|
31
|
+
it('handles hyphenated strings', () => {
|
32
|
+
expect((0, _pascalize.pascalize)('foo-bar')).toEqual('FooBar');
|
33
|
+
expect((0, _pascalize.pascalize)('baz-qux-foo')).toEqual('BazQuxFoo');
|
34
|
+
expect((0, _pascalize.pascalize)('x-large')).toEqual('XLarge');
|
35
|
+
expect((0, _pascalize.pascalize)('x-x-small')).toEqual('XXSmall');
|
36
|
+
});
|
37
|
+
it('handles camel cased strings', () => {
|
38
|
+
expect((0, _pascalize.pascalize)('fooBar')).toEqual('FooBar');
|
39
|
+
expect((0, _pascalize.pascalize)('bazQuxFoo')).toEqual('BazQuxFoo');
|
40
|
+
expect((0, _pascalize.pascalize)('xLarge')).toEqual('XLarge');
|
41
|
+
expect((0, _pascalize.pascalize)('borderRadiusLarge')).toEqual('BorderRadiusLarge');
|
42
|
+
});
|
43
|
+
it('does not modify already pascal cased strings', () => {
|
44
|
+
expect((0, _pascalize.pascalize)('FooBar')).toEqual('FooBar');
|
45
|
+
expect((0, _pascalize.pascalize)('BazQuxFoo')).toEqual('BazQuxFoo');
|
46
|
+
expect((0, _pascalize.pascalize)('XLarge')).toEqual('XLarge');
|
47
|
+
expect((0, _pascalize.pascalize)('BorderRadiusLarge')).toEqual('BorderRadiusLarge');
|
48
|
+
});
|
49
|
+
});
|
50
|
+
});
|
@@ -0,0 +1,53 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
require("@testing-library/jest-dom");
|
4
|
+
var _getFontSize = require("@instructure/ui-dom-utils/lib/getFontSize.js");
|
5
|
+
var _px = require("../px");
|
6
|
+
/*
|
7
|
+
* The MIT License (MIT)
|
8
|
+
*
|
9
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
10
|
+
*
|
11
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12
|
+
* of this software and associated documentation files (the "Software"), to deal
|
13
|
+
* in the Software without restriction, including without limitation the rights
|
14
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15
|
+
* copies of the Software, and to permit persons to whom the Software is
|
16
|
+
* furnished to do so, subject to the following conditions:
|
17
|
+
*
|
18
|
+
* The above copyright notice and this permission notice shall be included in all
|
19
|
+
* copies or substantial portions of the Software.
|
20
|
+
*
|
21
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
24
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
25
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
26
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
27
|
+
* SOFTWARE.
|
28
|
+
*/
|
29
|
+
|
30
|
+
describe('px', () => {
|
31
|
+
let node;
|
32
|
+
beforeEach(() => {
|
33
|
+
node = document.createElement('div');
|
34
|
+
document.body.appendChild(node);
|
35
|
+
});
|
36
|
+
afterEach(() => {
|
37
|
+
node && node.parentNode && node.parentNode.removeChild(node);
|
38
|
+
node = null;
|
39
|
+
});
|
40
|
+
it('handles px units', () => {
|
41
|
+
expect((0, _px.px)('30px')).toEqual(30);
|
42
|
+
});
|
43
|
+
it('converts rem to px', () => {
|
44
|
+
expect((0, _px.px)('50rem')).toEqual(50 * (0, _getFontSize.getFontSize)());
|
45
|
+
});
|
46
|
+
it('converts em to px', () => {
|
47
|
+
node.style.fontSize = '24px';
|
48
|
+
expect((0, _px.px)('10em', node)).toEqual(10 * (0, _getFontSize.getFontSize)(node));
|
49
|
+
});
|
50
|
+
it('handles unitless input', () => {
|
51
|
+
expect((0, _px.px)('4')).toEqual(4);
|
52
|
+
});
|
53
|
+
});
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
require("@testing-library/jest-dom");
|
4
|
+
var _within = require("../within");
|
5
|
+
/*
|
6
|
+
* The MIT License (MIT)
|
7
|
+
*
|
8
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
9
|
+
*
|
10
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
|
+
* of this software and associated documentation files (the "Software"), to deal
|
12
|
+
* in the Software without restriction, including without limitation the rights
|
13
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
14
|
+
* copies of the Software, and to permit persons to whom the Software is
|
15
|
+
* furnished to do so, subject to the following conditions:
|
16
|
+
*
|
17
|
+
* The above copyright notice and this permission notice shall be included in all
|
18
|
+
* copies or substantial portions of the Software.
|
19
|
+
*
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
22
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
23
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
24
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
25
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
26
|
+
* SOFTWARE.
|
27
|
+
*/
|
28
|
+
|
29
|
+
describe('within', () => {
|
30
|
+
it('returns true when values are within range', () => {
|
31
|
+
expect((0, _within.within)(10, 8, 2)).toBe(true);
|
32
|
+
expect((0, _within.within)(10, 11, 1)).toBe(true);
|
33
|
+
expect((0, _within.within)(10, 10, 0)).toBe(true);
|
34
|
+
expect((0, _within.within)(10, 9.999, 0.001)).toBe(true);
|
35
|
+
expect((0, _within.within)(-10, -15, 5)).toBe(true);
|
36
|
+
});
|
37
|
+
it('returns false when values are out of range', () => {
|
38
|
+
expect((0, _within.within)(10, 8, 1)).toBe(false);
|
39
|
+
expect((0, _within.within)(12, 10, 1.9999)).toBe(false);
|
40
|
+
expect((0, _within.within)(8.705, 8.7, 0.004)).toBe(false);
|
41
|
+
expect((0, _within.within)(-2, -1.5, 0.4)).toBe(false);
|
42
|
+
});
|
43
|
+
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@instructure/ui-utils",
|
3
|
-
"version": "8.52.1-snapshot-
|
3
|
+
"version": "8.52.1-snapshot-11",
|
4
4
|
"description": "A collection of utilities for UI components",
|
5
5
|
"author": "Instructure, Inc. Engineering and Product Design",
|
6
6
|
"module": "./es/index.js",
|
@@ -22,14 +22,15 @@
|
|
22
22
|
},
|
23
23
|
"license": "MIT",
|
24
24
|
"devDependencies": {
|
25
|
-
"@instructure/ui-babel-preset": "8.52.1-snapshot-
|
26
|
-
"@
|
25
|
+
"@instructure/ui-babel-preset": "8.52.1-snapshot-11",
|
26
|
+
"@testing-library/jest-dom": "^6.1.4",
|
27
|
+
"@testing-library/react": "^14.0.0",
|
27
28
|
"@types/json-stable-stringify": "^1.0.34"
|
28
29
|
},
|
29
30
|
"dependencies": {
|
30
31
|
"@babel/runtime": "^7.23.2",
|
31
|
-
"@instructure/console": "8.52.1-snapshot-
|
32
|
-
"@instructure/ui-dom-utils": "8.52.1-snapshot-
|
32
|
+
"@instructure/console": "8.52.1-snapshot-11",
|
33
|
+
"@instructure/ui-dom-utils": "8.52.1-snapshot-11",
|
33
34
|
"@types/ua-parser-js": "^0.7.37",
|
34
35
|
"bowser": "^2.11.0",
|
35
36
|
"fast-deep-equal": "^3.1.3",
|
@@ -0,0 +1,42 @@
|
|
1
|
+
/*
|
2
|
+
* The MIT License (MIT)
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
14
|
+
* copies or substantial portions of the Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*/
|
24
|
+
import '@testing-library/jest-dom'
|
25
|
+
import { camelize } from '../camelize'
|
26
|
+
|
27
|
+
describe('convertCase', () => {
|
28
|
+
describe('camelize', () => {
|
29
|
+
it('handles hyphenated strings', () => {
|
30
|
+
expect(camelize('foo-bar')).toEqual('fooBar')
|
31
|
+
expect(camelize('baz-qux-foo')).toEqual('bazQuxFoo')
|
32
|
+
expect(camelize('xx-small')).toEqual('xxSmall')
|
33
|
+
expect(camelize('border-radius-x-large')).toEqual('borderRadiusXLarge')
|
34
|
+
expect(camelize('margin-xxLarge')).toEqual('marginXxLarge')
|
35
|
+
})
|
36
|
+
|
37
|
+
it('does not modify already camel cased strings', () => {
|
38
|
+
expect(camelize('fooBar')).toEqual('fooBar')
|
39
|
+
expect(camelize('bazQuxFoo')).toEqual('bazQuxFoo')
|
40
|
+
})
|
41
|
+
})
|
42
|
+
})
|
@@ -0,0 +1,62 @@
|
|
1
|
+
/*
|
2
|
+
* The MIT License (MIT)
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
14
|
+
* copies or substantial portions of the Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*/
|
24
|
+
import '@testing-library/jest-dom'
|
25
|
+
|
26
|
+
import { cloneArray } from '../cloneArray'
|
27
|
+
import { deepEqual } from '../deepEqual'
|
28
|
+
|
29
|
+
describe('cloneArray', () => {
|
30
|
+
it('should return an array', () => {
|
31
|
+
const arr = [['one', 'two'], ['three']]
|
32
|
+
|
33
|
+
const newArr = cloneArray(arr)
|
34
|
+
|
35
|
+
expect(Array.isArray(newArr)).toBeTruthy()
|
36
|
+
})
|
37
|
+
|
38
|
+
it('should preserve sub arrays', () => {
|
39
|
+
const arr = [['one', 'two'], ['three'], [4, 5, 6], [7, [8, 9, 10], 11, 12]]
|
40
|
+
|
41
|
+
const newArr = cloneArray(arr)
|
42
|
+
|
43
|
+
expect(newArr.length).toEqual(4)
|
44
|
+
expect(newArr[0].length).toEqual(2)
|
45
|
+
expect(newArr[2][1]).toEqual(5)
|
46
|
+
expect(Array.isArray(newArr[3][1])).toEqual(true)
|
47
|
+
expect((newArr[3][1] as number[])[2]).toEqual(10)
|
48
|
+
})
|
49
|
+
|
50
|
+
it('should return a new array', () => {
|
51
|
+
const arr = [['one', 'two'], ['three']]
|
52
|
+
const newArr = cloneArray(arr)
|
53
|
+
|
54
|
+
expect(deepEqual(arr, newArr)).toEqual(true)
|
55
|
+
newArr[0][1] = '2'
|
56
|
+
expect(deepEqual(arr, newArr)).toEqual(false)
|
57
|
+
|
58
|
+
const newArr2 = cloneArray(arr)
|
59
|
+
arr[0][0] = '1'
|
60
|
+
expect(deepEqual(arr, newArr2)).toEqual(false)
|
61
|
+
})
|
62
|
+
})
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*
|
2
|
+
* The MIT License (MIT)
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
14
|
+
* copies or substantial portions of the Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*/
|
24
|
+
|
25
|
+
import '@testing-library/jest-dom'
|
26
|
+
import { createChainedFunction } from '../createChainedFunction'
|
27
|
+
|
28
|
+
describe('createChainedFunction', () => {
|
29
|
+
it('should return null if no function provided', () => {
|
30
|
+
expect(createChainedFunction(null, undefined)).toEqual(null)
|
31
|
+
})
|
32
|
+
|
33
|
+
it('should return a function', () => {
|
34
|
+
expect(typeof createChainedFunction(() => {})).toEqual('function')
|
35
|
+
})
|
36
|
+
|
37
|
+
it('should throw an error if something other than function, null, undefined provided', () => {
|
38
|
+
expect(() => {
|
39
|
+
// @ts-expect-error intentionally bad code
|
40
|
+
createChainedFunction(12345)
|
41
|
+
}).toThrow(Error)
|
42
|
+
})
|
43
|
+
|
44
|
+
it('should execute all the functions', () => {
|
45
|
+
const spies = Array.from({ length: 5 }, () => jest.fn())
|
46
|
+
const chain = createChainedFunction(...spies)
|
47
|
+
|
48
|
+
chain!()
|
49
|
+
|
50
|
+
spies.forEach((spy) => {
|
51
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
52
|
+
})
|
53
|
+
})
|
54
|
+
})
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/*
|
2
|
+
* The MIT License (MIT)
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015 - present Instructure, Inc.
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
14
|
+
* copies or substantial portions of the Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*/
|
24
|
+
import '@testing-library/jest-dom'
|
25
|
+
import { generateId } from '../generateId'
|
26
|
+
|
27
|
+
describe('generateId', () => {
|
28
|
+
it('should generate unique ids for the same instance', () => {
|
29
|
+
const seed = new Map<string, number>()
|
30
|
+
const component = 'TestComponent'
|
31
|
+
|
32
|
+
const inst1 = generateId(component, seed)
|
33
|
+
const inst2 = generateId(component, seed)
|
34
|
+
|
35
|
+
expect(inst1).not.toEqual(inst2)
|
36
|
+
})
|
37
|
+
|
38
|
+
it('should create ids deterministicly', () => {
|
39
|
+
const seed1 = new Map<string, number>()
|
40
|
+
const component = 'TestComponent'
|
41
|
+
|
42
|
+
// Simulate rendering component: TestComponent
|
43
|
+
const render1 = generateId(component, seed1)
|
44
|
+
|
45
|
+
// Suppose we have a refresh, meaning the instanceCounter will be reseted:
|
46
|
+
const seed2 = new Map<string, number>()
|
47
|
+
const render2 = generateId(component, seed2)
|
48
|
+
|
49
|
+
expect(render1).toEqual(render2)
|
50
|
+
})
|
51
|
+
|
52
|
+
it('should not create the same id for the same instance.', () => {
|
53
|
+
const counter = new Map<string, boolean>()
|
54
|
+
const seed = new Map<string, number>()
|
55
|
+
const component = 'TestComponent'
|
56
|
+
|
57
|
+
for (let i = 0; i <= 20000; i++) {
|
58
|
+
const id = generateId(component, seed)
|
59
|
+
|
60
|
+
if (!counter.has(id)) {
|
61
|
+
counter.set(id, false)
|
62
|
+
} else {
|
63
|
+
counter.set(id, true)
|
64
|
+
}
|
65
|
+
|
66
|
+
expect(counter.get(id)).toBe(false)
|
67
|
+
}
|
68
|
+
})
|
69
|
+
})
|