@procore/core-react 11.25.1 → 11.26.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/babel.config.js +1 -1
- package/dist/Avatar/Avatar.styles.js +5 -5
- package/dist/AvatarStack/AvatarStack.styles.js +7 -7
- package/dist/Badge/Badge.styles.js +2 -2
- package/dist/Banner/Banner.d.ts +8 -0
- package/dist/Banner/Banner.js +13 -2
- package/dist/Banner/Banner.js.map +1 -1
- package/dist/Banner/Banner.styles.js +16 -11
- package/dist/Banner/Banner.styles.js.map +1 -1
- package/dist/Banner/Banner.types.d.ts +4 -2
- package/dist/Banner/Banner.types.js.map +1 -1
- package/dist/Banner/index.d.ts +1 -1
- package/dist/Banner/index.js +1 -1
- package/dist/Banner/index.js.map +1 -1
- package/dist/Box/Box.styles.js +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
- package/dist/Button/Button.styles.js +5 -5
- package/dist/Calendar/Calendar.styles.js +8 -8
- package/dist/Card/Card.styles.js +1 -1
- package/dist/Checkbox/Checkbox.styles.js +6 -6
- package/dist/ContactItem/ContactItem.styles.js +5 -5
- package/dist/Content/Content.styles.js +2 -2
- package/dist/DateInput/DateInput.styles.js +6 -6
- package/dist/DetailPage/DetailPage.styles.js +10 -10
- package/dist/DetailPage/DetailPage.styles.js.map +1 -1
- package/dist/DetailPage/examples/TableExample.d.ts +2 -0
- package/dist/DetailPage/examples/TableExample.js +141 -0
- package/dist/DetailPage/examples/TableExample.js.map +1 -0
- package/dist/Dropdown/Dropdown.styles.js +3 -3
- package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
- package/dist/Dropzone/Dropzone.js +1 -1
- package/dist/Dropzone/Dropzone.styles.js +9 -9
- package/dist/EmptyState/EmptyState.styles.js +6 -6
- package/dist/Field/Field.styles.js +3 -3
- package/dist/FileList/FileList.styles.js +4 -4
- package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
- package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
- package/dist/FileSelect/FileSelect.styles.js +2 -2
- package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
- package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +2 -2
- package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
- package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
- package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
- package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
- package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
- package/dist/FileToken/FileToken.styles.js +4 -4
- package/dist/FilterToken/FilterToken.styles.js +2 -2
- package/dist/FlexList/FlexList.styles.js +1 -1
- package/dist/Form/Form.styles.js +16 -16
- package/dist/Grid/Grid.styles.js +2 -2
- package/dist/GroupSelect/GroupSelect.styles.js +1 -1
- package/dist/Input/Input.styles.js +1 -1
- package/dist/Link/Link.styles.js +2 -2
- package/dist/Link/Link.styles.js.map +1 -1
- package/dist/ListPage/ListPage.styles.js +8 -8
- package/dist/Loader/Loader.styles.js +2 -2
- package/dist/MenuImperative/MenuImperative.styles.js +10 -10
- package/dist/Modal/Modal.styles.js +13 -13
- package/dist/MultiSelect/MultiSelect.styles.js +6 -6
- package/dist/NextMenu/NextMenu.styles.js +3 -3
- package/dist/Notation/Notation.js +1 -1
- package/dist/NumberInput/NumberInput.styles.js +7 -7
- package/dist/Overlay/OverlayArrow.styles.js +1 -1
- package/dist/PageLayout/PageLayout.styles.js +14 -14
- package/dist/PageLayout/PageLayout.styles.js.map +1 -1
- package/dist/Pagination/Pagination.styles.js +5 -5
- package/dist/Panel/Panel.styles.js +11 -11
- package/dist/Pill/Pill.styles.js +2 -2
- package/dist/PillSelect/PillSelect.styles.js +4 -4
- package/dist/Popover/Popover.styles.js +2 -2
- package/dist/Portal/Portal.styles.js +1 -1
- package/dist/ProgressBar/ProgressBar.styles.js +2 -2
- package/dist/RadioButton/RadioButton.styles.js +3 -3
- package/dist/Required/Required.styles.js +3 -3
- package/dist/Search/Search.styles.js +5 -5
- package/dist/Section/Section.styles.d.ts +1 -1
- package/dist/Section/Section.styles.js +6 -6
- package/dist/SegmentedController/SegmentedController.styles.js +4 -4
- package/dist/Select/Select.styles.js +7 -7
- package/dist/Semantic/Semantic.d.ts +6 -1
- package/dist/Semantic/Semantic.js +7 -1
- package/dist/Semantic/Semantic.js.map +1 -1
- package/dist/Semantic/Semantic.styles.d.ts +14 -4
- package/dist/Semantic/Semantic.styles.js +20 -10
- package/dist/Semantic/Semantic.styles.js.map +1 -1
- package/dist/Semantic/index.d.ts +1 -1
- package/dist/Semantic/index.js +1 -1
- package/dist/Semantic/index.js.map +1 -1
- package/dist/Sidebar/Sidebar.styles.js +7 -7
- package/dist/Slider/Slider.styles.js +5 -5
- package/dist/Spinner/Spinner.styles.js +7 -7
- package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
- package/dist/SuperSelect/SuperSelect.styles.js +37 -37
- package/dist/Switch/Switch.styles.js +4 -4
- package/dist/Table/Table.styles.js +28 -28
- package/dist/TableShelf/TableShelf.styles.js +5 -5
- package/dist/Tabs/Tabs.styles.js +8 -8
- package/dist/Tearsheet/Tearsheet.styles.js +5 -5
- package/dist/TextArea/TextArea.styles.js +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
- package/dist/Thumbnail/Thumbnail.styles.js +17 -17
- package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
- package/dist/TieredSelect/TieredSelect.js +6 -1
- package/dist/TieredSelect/TieredSelect.js.map +1 -1
- package/dist/TieredSelect/TieredSelect.styles.js +9 -9
- package/dist/Tile/Tile.styles.js +8 -8
- package/dist/Title/Title.d.ts +2 -2
- package/dist/Title/Title.js.map +1 -1
- package/dist/Title/Title.styles.d.ts +2 -1
- package/dist/Title/Title.styles.js +13 -10
- package/dist/Title/Title.styles.js.map +1 -1
- package/dist/Title/Title.types.d.ts +7 -0
- package/dist/Title/Title.types.js.map +1 -1
- package/dist/Toast/Toast.styles.js +3 -3
- package/dist/ToggleButton/ToggleButton.styles.js +1 -1
- package/dist/Token/Token.styles.js +3 -3
- package/dist/ToolHeader/ToolHeader.styles.js +6 -6
- package/dist/Tooltip/Tooltip.styles.js +2 -2
- package/dist/Tree/Tree.styles.js +9 -9
- package/dist/Typeahead/Typeahead.styles.js +3 -3
- package/dist/Typography/Typography.styles.js +1 -1
- package/dist/Typography/Typography.table.story.js +2 -2
- package/dist/_hooks/ScrollLock.js +11 -0
- package/dist/_hooks/ScrollLock.js.map +1 -1
- package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
- package/dist/_typedoc/AvatarStack/AvatarStack.types.json +23 -23
- package/dist/_typedoc/Badge/Badge.types.json +6 -6
- package/dist/_typedoc/Banner/Banner.types.json +16 -16
- package/dist/_typedoc/Box/Box.types.json +68 -68
- package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
- package/dist/_typedoc/Button/Button.types.json +11 -11
- package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
- package/dist/_typedoc/Card/Card.types.json +6 -6
- package/dist/_typedoc/Checkbox/Checkbox.types.json +9 -9
- package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
- package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
- package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
- package/dist/_typedoc/DetailPage/DetailPage.types.json +4 -4
- package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
- package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +29 -29
- package/dist/_typedoc/Dropzone/Dropzone.types.json +41 -41
- package/dist/_typedoc/EmptyState/EmptyState.types.json +14 -14
- package/dist/_typedoc/FileList/FileList.types.json +9 -9
- package/dist/_typedoc/FileSelect/FileSelect.types.json +26 -26
- package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
- package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
- package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
- package/dist/_typedoc/Flex/Flex.types.json +27 -27
- package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
- package/dist/_typedoc/Form/Form.types.json +726 -726
- package/dist/_typedoc/Grid/Grid.types.json +8 -8
- package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
- package/dist/_typedoc/Input/Input.types.json +2 -2
- package/dist/_typedoc/Link/Link.types.json +4 -4
- package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
- package/dist/_typedoc/Menu/Menu.types.json +62 -62
- package/dist/_typedoc/MenuImperative/MenuImperative.types.json +74 -74
- package/dist/_typedoc/Modal/Modal.types.json +41 -41
- package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
- package/dist/_typedoc/Notation/Notation.types.json +4 -4
- package/dist/_typedoc/NumberInput/NumberInput.types.json +38 -38
- package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +31 -31
- package/dist/_typedoc/PageLayout/PageLayout.types.json +22 -22
- package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
- package/dist/_typedoc/Panel/Panel.types.json +27 -27
- package/dist/_typedoc/Pill/Pill.types.json +2 -2
- package/dist/_typedoc/PillSelect/PillSelect.types.json +47 -47
- package/dist/_typedoc/Popover/Popover.types.json +14 -14
- package/dist/_typedoc/ProgressBar/ProgressBar.types.json +6 -6
- package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
- package/dist/_typedoc/Required/Required.types.json +5 -5
- package/dist/_typedoc/Search/Search.types.json +18 -18
- package/dist/_typedoc/Section/Section.types.json +14 -14
- package/dist/_typedoc/SegmentedController/SegmentedController.types.json +20 -20
- package/dist/_typedoc/Select/Select.types.json +57 -57
- package/dist/_typedoc/Slider/Slider.types.json +6 -6
- package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
- package/dist/_typedoc/Switch/Switch.types.json +3 -3
- package/dist/_typedoc/Table/Table.types.json +97 -97
- package/dist/_typedoc/Tabs/Tabs.types.json +17 -17
- package/dist/_typedoc/Tearsheet/Tearsheet.types.json +16 -16
- package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
- package/dist/_typedoc/TextEditor/TextEditor.types.json +9 -9
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
- package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
- package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +42 -42
- package/dist/_typedoc/TieredSelect/TieredSelect.types.json +28 -28
- package/dist/_typedoc/Tile/Tile.types.json +30 -30
- package/dist/_typedoc/Title/Title.types.json +23 -0
- package/dist/_typedoc/Toast/Toast.types.json +4 -4
- package/dist/_typedoc/ToggleButton/ToggleButton.types.json +3 -3
- package/dist/_typedoc/Token/Token.types.json +4 -4
- package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
- package/dist/_typedoc/Tooltip/Tooltip.types.json +13 -13
- package/dist/_typedoc/Tree/Tree.types.json +86 -86
- package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
- package/dist/_typedoc/Typography/Typography.types.json +8 -8
- package/dist/_typedoc/_utils/types.json +3 -3
- package/dist/_utils/propsTypedoc.d.ts +1 -0
- package/dist/_utils/propsTypedoc.js +1 -0
- package/dist/_utils/propsTypedoc.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -10
- package/tsconfig.prod.json +7 -1
- package/dist/FileSelect/SourceItem/SourceItem.test.js +0 -53
- package/dist/MultiSelect/MultiSelect.test.js +0 -250
- package/dist/OverlayTrigger/OverlayTrigger.test.js +0 -483
- package/dist/SuperSelect/SuperSelect.utils.test.js +0 -717
- package/dist/SuperSelect/useSuperSelect.test.js +0 -1284
- package/dist/_hooks/OverflowObserver/OverflowObserver.test.js +0 -110
- package/dist/_hooks/__tests__/Anchor.test.js +0 -109
- package/dist/_hooks/__tests__/BoundingRect.test.js +0 -85
- package/dist/_hooks/__tests__/Buffer.test.js +0 -76
- package/dist/_hooks/__tests__/DateTime.test.js +0 -136
- package/dist/_hooks/__tests__/DelayedCallback.test.js +0 -119
- package/dist/_hooks/__tests__/DelayedToggle.test.js +0 -50
- package/dist/_hooks/__tests__/Deprecation.test.js +0 -58
- package/dist/_hooks/__tests__/Event.test.js +0 -46
- package/dist/_hooks/__tests__/EventListener.test.js +0 -124
- package/dist/_hooks/__tests__/Hotkey.test.js +0 -18
- package/dist/_hooks/__tests__/InjectedScript.test.js +0 -80
- package/dist/_hooks/__tests__/ListNavigation.test.js +0 -101
- package/dist/_hooks/__tests__/TextEntry.test.js +0 -92
- package/dist/_hooks/__tests__/Timer.test.js +0 -60
- package/dist/_hooks/__tests__/Trigger.test.js +0 -52
- package/dist/_hooks/__tests__/Visibility.test.js +0 -86
- package/dist/_hooks/__tests__/ZIndex.test.js +0 -76
- package/dist/_utils/__tests__/CalendarHelpers.test.js +0 -64
- package/dist/_utils/__tests__/filename.test.js +0 -27
- package/dist/_utils/__tests__/getAnchorPosition.test.js +0 -250
- package/dist/_utils/__tests__/mergeRefs.test.js +0 -58
- package/dist/_utils/__tests__/slotify.test.js +0 -152
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { act, renderHook } from '@testing-library/react-hooks'
|
|
2
|
-
import { useOverflowObserver } from './OverflowObserver'
|
|
3
|
-
|
|
4
|
-
describe('useOverflowObserver', () => {
|
|
5
|
-
const hookApi = () => renderHook(() => useOverflowObserver()).result
|
|
6
|
-
|
|
7
|
-
const runDefaulValueAssertions = (api) => {
|
|
8
|
-
expect(api.isOverflowingY).toBe(false)
|
|
9
|
-
expect(api.isOverflowingX).toBe(false)
|
|
10
|
-
expect(api.isOverflowing).toBe(false)
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
it('should detect vertical content overflow', () => {
|
|
14
|
-
const api = hookApi()
|
|
15
|
-
|
|
16
|
-
const domNode = {
|
|
17
|
-
clientHeight: 100,
|
|
18
|
-
scrollHeight: 102,
|
|
19
|
-
clientWidth: 50,
|
|
20
|
-
scrollWidth: 50,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
runDefaulValueAssertions(api.current)
|
|
24
|
-
|
|
25
|
-
act(() => api.current.ref(domNode))
|
|
26
|
-
|
|
27
|
-
expect(api.current.isOverflowingY).toBe(true)
|
|
28
|
-
expect(api.current.isOverflowingX).toBe(false)
|
|
29
|
-
expect(api.current.isOverflowing).toBe(true)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('should detect horizontal content overflow', () => {
|
|
33
|
-
const api = hookApi()
|
|
34
|
-
|
|
35
|
-
const domNode = {
|
|
36
|
-
clientHeight: 100,
|
|
37
|
-
scrollHeight: 100,
|
|
38
|
-
clientWidth: 50,
|
|
39
|
-
scrollWidth: 52,
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
runDefaulValueAssertions(api.current)
|
|
43
|
-
|
|
44
|
-
act(() => api.current.ref(domNode))
|
|
45
|
-
|
|
46
|
-
expect(api.current.isOverflowingY).toBe(false)
|
|
47
|
-
expect(api.current.isOverflowingX).toBe(true)
|
|
48
|
-
expect(api.current.isOverflowing).toBe(true)
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('should detect vertical and horizontal content overflow', () => {
|
|
52
|
-
const api = hookApi()
|
|
53
|
-
|
|
54
|
-
const domNode = {
|
|
55
|
-
clientHeight: 100,
|
|
56
|
-
scrollHeight: 102,
|
|
57
|
-
clientWidth: 50,
|
|
58
|
-
scrollWidth: 52,
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
runDefaulValueAssertions(api.current)
|
|
62
|
-
|
|
63
|
-
act(() => api.current.ref(domNode))
|
|
64
|
-
|
|
65
|
-
expect(api.current.isOverflowingY).toBe(true)
|
|
66
|
-
expect(api.current.isOverflowingX).toBe(true)
|
|
67
|
-
expect(api.current.isOverflowing).toBe(true)
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
describe('Given that the browser miscalculates content dimensions', () => {
|
|
71
|
-
;[
|
|
72
|
-
{
|
|
73
|
-
clientHeight: 100,
|
|
74
|
-
scrollHeight: 100,
|
|
75
|
-
clientWidth: 99,
|
|
76
|
-
scrollWidth: 100,
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
clientHeight: 99,
|
|
80
|
-
scrollHeight: 100,
|
|
81
|
-
clientWidth: 50,
|
|
82
|
-
scrollWidth: 50,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
clientHeight: 100,
|
|
86
|
-
scrollHeight: 100,
|
|
87
|
-
clientWidth: 50,
|
|
88
|
-
scrollWidth: 49,
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
clientHeight: 100,
|
|
92
|
-
scrollHeight: 99,
|
|
93
|
-
clientWidth: 50,
|
|
94
|
-
scrollWidth: 50,
|
|
95
|
-
},
|
|
96
|
-
].forEach((domNode) => {
|
|
97
|
-
it('should ignore dimension variance in 1 pixel range', () => {
|
|
98
|
-
const api = hookApi()
|
|
99
|
-
|
|
100
|
-
runDefaulValueAssertions(api.current)
|
|
101
|
-
|
|
102
|
-
act(() => api.current.ref(domNode))
|
|
103
|
-
|
|
104
|
-
expect(api.current.isOverflowingY).toBe(false)
|
|
105
|
-
expect(api.current.isOverflowingX).toBe(false)
|
|
106
|
-
expect(api.current.isOverflowing).toBe(false)
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
})
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { renderHook } from '@testing-library/react-hooks'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { defaultRect } from '../../_utils/dom'
|
|
4
|
-
import {
|
|
5
|
-
testContext,
|
|
6
|
-
testHook,
|
|
7
|
-
testRenderProp,
|
|
8
|
-
} from '../../__tests__/helpers/state'
|
|
9
|
-
import { Anchor, AnchorProvider, useAnchor, useAnchorContext } from '../Anchor'
|
|
10
|
-
|
|
11
|
-
const validateAPI = (api) => {
|
|
12
|
-
expect(typeof api.left).toBe('number')
|
|
13
|
-
expect(typeof api.minWidth).toBe('number')
|
|
14
|
-
expect(typeof api.placement).toBe('string')
|
|
15
|
-
expect(typeof api.top).toBe('number')
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const apiTest = {
|
|
19
|
-
test: 'api',
|
|
20
|
-
config: {
|
|
21
|
-
overlayRef: React.createRef(),
|
|
22
|
-
targetRef: React.createRef(),
|
|
23
|
-
},
|
|
24
|
-
callback: validateAPI,
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
describe('Anchor', () => {
|
|
28
|
-
const mockGetBoundingClientRect = jest
|
|
29
|
-
.spyOn(Element.prototype, 'getBoundingClientRect')
|
|
30
|
-
.mockImplementation(() => ({
|
|
31
|
-
...defaultRect,
|
|
32
|
-
}))
|
|
33
|
-
|
|
34
|
-
testHook(useAnchor, [apiTest])
|
|
35
|
-
|
|
36
|
-
describe('useAnchor', () => {
|
|
37
|
-
describe('shrinkOverlay', () => {
|
|
38
|
-
let overlayGetBoundingClientRectSpy
|
|
39
|
-
let targetRef
|
|
40
|
-
let overlayRef
|
|
41
|
-
beforeEach(() => {
|
|
42
|
-
const target = document.createElement('div')
|
|
43
|
-
target.getBoundingClientRect = jest.fn(() => ({
|
|
44
|
-
...defaultRect,
|
|
45
|
-
width: 8.34375,
|
|
46
|
-
}))
|
|
47
|
-
targetRef = { current: target }
|
|
48
|
-
|
|
49
|
-
const overlay = document.createElement('div')
|
|
50
|
-
overlayGetBoundingClientRectSpy = jest.spyOn(
|
|
51
|
-
overlay,
|
|
52
|
-
'getBoundingClientRect'
|
|
53
|
-
)
|
|
54
|
-
overlayRef = {
|
|
55
|
-
current: overlay,
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
describe('when shrinkOverlay is false', () => {
|
|
60
|
-
it('should set minWidth', () => {
|
|
61
|
-
renderHook(() =>
|
|
62
|
-
useAnchor({
|
|
63
|
-
targetRef,
|
|
64
|
-
overlayRef,
|
|
65
|
-
shrinkOverlay: false,
|
|
66
|
-
})
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
expect(
|
|
70
|
-
overlayGetBoundingClientRectSpy.mock.instances[0].style.minWidth
|
|
71
|
-
).toBe('8.34375px')
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
describe('when shrinkOverlay is true', () => {
|
|
76
|
-
it('should not set minWidth', () => {
|
|
77
|
-
renderHook(() =>
|
|
78
|
-
useAnchor({
|
|
79
|
-
targetRef,
|
|
80
|
-
overlayRef,
|
|
81
|
-
shrinkOverlay: true,
|
|
82
|
-
})
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
expect(
|
|
86
|
-
overlayGetBoundingClientRectSpy.mock.instances[0].style.minWidth
|
|
87
|
-
).toBe('')
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
})
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
testRenderProp(Anchor, 'anchor', [apiTest])
|
|
94
|
-
|
|
95
|
-
testContext(AnchorProvider, useAnchorContext, [
|
|
96
|
-
apiTest,
|
|
97
|
-
,
|
|
98
|
-
{
|
|
99
|
-
test: 'missing provider',
|
|
100
|
-
config: {},
|
|
101
|
-
injectProvider: false,
|
|
102
|
-
callback: (context) => {
|
|
103
|
-
validateAPI(context)
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
])
|
|
107
|
-
|
|
108
|
-
mockGetBoundingClientRect.mockRestore()
|
|
109
|
-
})
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { mount } from 'enzyme'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import {
|
|
4
|
-
getProps,
|
|
5
|
-
testContext,
|
|
6
|
-
testRenderProp,
|
|
7
|
-
} from '../../__tests__/helpers/state'
|
|
8
|
-
import {
|
|
9
|
-
BoundingRect,
|
|
10
|
-
BoundingRectProvider,
|
|
11
|
-
DEFAULT_RECT,
|
|
12
|
-
useBoundingRect,
|
|
13
|
-
useBoundingRectContext,
|
|
14
|
-
} from '../BoundingRect'
|
|
15
|
-
|
|
16
|
-
const Component = 'div'
|
|
17
|
-
|
|
18
|
-
const validateAPI = (api) => {
|
|
19
|
-
expect(api.ref).toBeTruthy()
|
|
20
|
-
expect(api.rect).toBeInstanceOf(Object)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const apiTest = {
|
|
24
|
-
test: 'api',
|
|
25
|
-
config: {},
|
|
26
|
-
callback: validateAPI,
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const Enhanced = ({ width, dependencies }) => {
|
|
30
|
-
const mockGetBoundingClientRect = jest
|
|
31
|
-
.spyOn(Element.prototype, 'getBoundingClientRect')
|
|
32
|
-
.mockImplementation(() => ({
|
|
33
|
-
...DEFAULT_RECT,
|
|
34
|
-
width,
|
|
35
|
-
}))
|
|
36
|
-
|
|
37
|
-
const boundingRect = useBoundingRect({ dependencies })
|
|
38
|
-
|
|
39
|
-
React.useLayoutEffect(mockGetBoundingClientRect.mockRestore)
|
|
40
|
-
|
|
41
|
-
return (
|
|
42
|
-
<Component ref={boundingRect.ref} state={boundingRect} style={{ width }} />
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
describe('BoundingRect', () => {
|
|
47
|
-
describe('hook', () => {
|
|
48
|
-
it('provides the correct api', () => {
|
|
49
|
-
const width = 100
|
|
50
|
-
const dom = mount(<Enhanced width={width} />)
|
|
51
|
-
const props = getProps(Component, dom, 'state')()
|
|
52
|
-
|
|
53
|
-
validateAPI(props)
|
|
54
|
-
|
|
55
|
-
expect(props.rect.width).toBe(100)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it('updates rect when changing dependencies', () => {
|
|
59
|
-
const width1 = 100
|
|
60
|
-
const width2 = 200
|
|
61
|
-
const dom = mount(<Enhanced width={width1} dependencies={[true]} />)
|
|
62
|
-
const props = getProps(Component, dom, 'state')
|
|
63
|
-
|
|
64
|
-
expect(props().rect.width).toBe(width1)
|
|
65
|
-
|
|
66
|
-
dom.setProps({ width: width2, dependencies: [false] })
|
|
67
|
-
|
|
68
|
-
expect(props().rect.width).toBe(width2)
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
testRenderProp(BoundingRect, 'boundingRect', [apiTest])
|
|
73
|
-
|
|
74
|
-
testContext(BoundingRectProvider, useBoundingRectContext, [
|
|
75
|
-
apiTest,
|
|
76
|
-
{
|
|
77
|
-
test: 'missing provider',
|
|
78
|
-
config: {},
|
|
79
|
-
injectProvider: false,
|
|
80
|
-
callback: ({ ref, rect }) => {
|
|
81
|
-
expect(ref).toEqual({ current: null })
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
])
|
|
85
|
-
})
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
testContext,
|
|
3
|
-
testHook,
|
|
4
|
-
testRenderProp,
|
|
5
|
-
} from '../../__tests__/helpers/state'
|
|
6
|
-
import { Buffer, BufferProvider, useBuffer, useBufferContext } from '../Buffer'
|
|
7
|
-
|
|
8
|
-
const validateAPI = (api) => {
|
|
9
|
-
expect(api.value).toEqual('')
|
|
10
|
-
expect(api.clear).toBeInstanceOf(Function)
|
|
11
|
-
expect(api.reset).toBeInstanceOf(Function)
|
|
12
|
-
expect(api.update).toBeInstanceOf(Function)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const apiTest = {
|
|
16
|
-
test: 'api',
|
|
17
|
-
config: {},
|
|
18
|
-
callback: validateAPI,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const configTest = {
|
|
22
|
-
test: 'config',
|
|
23
|
-
config: { initialValue: 'foo' },
|
|
24
|
-
callback: ({ value }) => expect(value).toEqual('foo'),
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
describe('Buffer', () => {
|
|
28
|
-
testHook(useBuffer, [
|
|
29
|
-
apiTest,
|
|
30
|
-
configTest,
|
|
31
|
-
{
|
|
32
|
-
test: 'mutations',
|
|
33
|
-
config: { initialValue: 'foo' },
|
|
34
|
-
mutations: [
|
|
35
|
-
['update', 'bar', ['value', 'toBe', 'bar']],
|
|
36
|
-
['clear', null, ['value', 'toBe', '']],
|
|
37
|
-
['reset', null, ['value', 'toBe', 'foo']],
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
])
|
|
41
|
-
|
|
42
|
-
testRenderProp(Buffer, 'buffer', [apiTest, configTest])
|
|
43
|
-
|
|
44
|
-
testContext(BufferProvider, useBufferContext, [
|
|
45
|
-
apiTest,
|
|
46
|
-
configTest,
|
|
47
|
-
{
|
|
48
|
-
test: 'missing provider',
|
|
49
|
-
config: {},
|
|
50
|
-
injectProvider: false,
|
|
51
|
-
callback: (context, { spy }) => {
|
|
52
|
-
spy.mockImplementation(() => {})
|
|
53
|
-
|
|
54
|
-
context.update()
|
|
55
|
-
context.clear()
|
|
56
|
-
context.reset()
|
|
57
|
-
expect(context.value).toBe('')
|
|
58
|
-
expect(spy).toBeCalledTimes(3)
|
|
59
|
-
expect(spy).toHaveBeenNthCalledWith(
|
|
60
|
-
1,
|
|
61
|
-
'Could not call `update`, please wrap your component in a `<BufferProvider>`'
|
|
62
|
-
)
|
|
63
|
-
expect(spy).toHaveBeenNthCalledWith(
|
|
64
|
-
2,
|
|
65
|
-
'Could not call `clear`, please wrap your component in a `<BufferProvider>`'
|
|
66
|
-
)
|
|
67
|
-
expect(spy).toHaveBeenNthCalledWith(
|
|
68
|
-
3,
|
|
69
|
-
'Could not call `reset`, please wrap your component in a `<BufferProvider>`'
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
spy.mockRestore()
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
])
|
|
76
|
-
})
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { mount } from 'enzyme'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { DateTimeProvider, useDateTime } from '../DateTime'
|
|
4
|
-
|
|
5
|
-
const sampleDate = new Date(2020, 9, 31, 14, 30, 42) // Halloween, a Saturday at 2:30 PM
|
|
6
|
-
// Testing is set up to run in time zone "America/Los_Angeles" as local
|
|
7
|
-
const timeZone1 = 'Australia/Sydney' // ahead of California
|
|
8
|
-
const timeZone2 = 'America/Adak' // behind California
|
|
9
|
-
const timeZoneLocalFormatted = '2:30 PM PDT on 10/31/2020'
|
|
10
|
-
const timeZoneLocalTimeFormatted = '2:30 PM PDT'
|
|
11
|
-
const timeZoneLocalTimeFormatted24Hour = '14:30 PDT'
|
|
12
|
-
const timeZone1Formatted = '8:30 AM GMT+11 on 11/1/2020'
|
|
13
|
-
const timeZone2Formatted = '12:30 PM HADT on 10/31/2020'
|
|
14
|
-
const timeZone2TimeFormatted24Hour = '12:30 HADT'
|
|
15
|
-
const timeZone1TimeFormatted = '8:30 AM GMT+11'
|
|
16
|
-
|
|
17
|
-
function ComponentUsingHook({
|
|
18
|
-
date = sampleDate,
|
|
19
|
-
format = 'time-on-numeric-date',
|
|
20
|
-
optionsDate,
|
|
21
|
-
optionsTime,
|
|
22
|
-
}) {
|
|
23
|
-
const dateTime = useDateTime()
|
|
24
|
-
|
|
25
|
-
return dateTime.format(date, format, optionsDate, optionsTime)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
describe('Context and Time Zone Shifting', () => {
|
|
29
|
-
describe('Does not time zone shift', () => {
|
|
30
|
-
it('when no provider', () => {
|
|
31
|
-
const wrapper = mount(<ComponentUsingHook />)
|
|
32
|
-
|
|
33
|
-
expect(wrapper.text()).toEqual(timeZoneLocalFormatted)
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it('when a provider but no time zone', () => {
|
|
37
|
-
const wrapper = mount(
|
|
38
|
-
<DateTimeProvider>
|
|
39
|
-
<ComponentUsingHook />
|
|
40
|
-
</DateTimeProvider>
|
|
41
|
-
)
|
|
42
|
-
expect(wrapper.text()).toEqual(timeZoneLocalFormatted)
|
|
43
|
-
})
|
|
44
|
-
it('when a provider with default time zone is inside a provider with time zone', () => {
|
|
45
|
-
const wrapper = mount(
|
|
46
|
-
<DateTimeProvider timeZone={timeZone1}>
|
|
47
|
-
<DateTimeProvider>
|
|
48
|
-
<ComponentUsingHook />
|
|
49
|
-
</DateTimeProvider>
|
|
50
|
-
</DateTimeProvider>
|
|
51
|
-
)
|
|
52
|
-
expect(wrapper.text()).toEqual(timeZoneLocalFormatted)
|
|
53
|
-
})
|
|
54
|
-
it('when a provider with undefined time zone is inside a provider with time zone', () => {
|
|
55
|
-
const wrapper = mount(
|
|
56
|
-
<DateTimeProvider timeZone={timeZone1}>
|
|
57
|
-
<DateTimeProvider timeZone={undefined}>
|
|
58
|
-
<ComponentUsingHook />
|
|
59
|
-
</DateTimeProvider>
|
|
60
|
-
</DateTimeProvider>
|
|
61
|
-
)
|
|
62
|
-
expect(wrapper.text()).toEqual(timeZoneLocalFormatted)
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
describe('Does time zone shift', () => {
|
|
66
|
-
it('when a provider has time zome', () => {
|
|
67
|
-
const wrapper = mount(
|
|
68
|
-
<DateTimeProvider timeZone={timeZone1}>
|
|
69
|
-
<ComponentUsingHook />
|
|
70
|
-
</DateTimeProvider>
|
|
71
|
-
)
|
|
72
|
-
expect(wrapper.text()).toEqual(timeZone1Formatted)
|
|
73
|
-
})
|
|
74
|
-
it('using the nearest provider', () => {
|
|
75
|
-
const wrapper = mount(
|
|
76
|
-
<DateTimeProvider timeZone={timeZone1}>
|
|
77
|
-
<DateTimeProvider timeZone={timeZone2}>
|
|
78
|
-
<ComponentUsingHook />
|
|
79
|
-
</DateTimeProvider>
|
|
80
|
-
</DateTimeProvider>
|
|
81
|
-
)
|
|
82
|
-
expect(wrapper.text()).toEqual(timeZone2Formatted)
|
|
83
|
-
})
|
|
84
|
-
it('when passed as an option', () => {
|
|
85
|
-
const wrapper = mount(
|
|
86
|
-
<ComponentUsingHook
|
|
87
|
-
format="time"
|
|
88
|
-
optionsDate={{ timeZone: timeZone1 }}
|
|
89
|
-
/>
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
expect(wrapper.text()).toEqual(timeZone1TimeFormatted)
|
|
93
|
-
})
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
describe('Context and 24 Hour Clock', () => {
|
|
98
|
-
it('can change 24 hour clock', () => {
|
|
99
|
-
const wrapper = mount(
|
|
100
|
-
<DateTimeProvider hour12={true}>
|
|
101
|
-
<DateTimeProvider hour12={false}>
|
|
102
|
-
<ComponentUsingHook format="time" />
|
|
103
|
-
</DateTimeProvider>
|
|
104
|
-
</DateTimeProvider>
|
|
105
|
-
)
|
|
106
|
-
expect(wrapper.text()).toEqual(timeZoneLocalTimeFormatted24Hour)
|
|
107
|
-
})
|
|
108
|
-
it('can change 24 hour clock in time zone', () => {
|
|
109
|
-
const wrapper = mount(
|
|
110
|
-
<DateTimeProvider hour12={true}>
|
|
111
|
-
<DateTimeProvider timeZone={timeZone2} hour12={false}>
|
|
112
|
-
<ComponentUsingHook format="time" />
|
|
113
|
-
</DateTimeProvider>
|
|
114
|
-
</DateTimeProvider>
|
|
115
|
-
)
|
|
116
|
-
expect(wrapper.text()).toEqual(timeZone2TimeFormatted24Hour)
|
|
117
|
-
})
|
|
118
|
-
it('when passed as an option can be 24 hours', () => {
|
|
119
|
-
const wrapper = mount(
|
|
120
|
-
<DateTimeProvider hour12={false}>
|
|
121
|
-
<ComponentUsingHook format="time" optionsDate={{ hour12: true }} />
|
|
122
|
-
</DateTimeProvider>
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
expect(wrapper.text()).toEqual(timeZoneLocalTimeFormatted)
|
|
126
|
-
})
|
|
127
|
-
it('when passed as an option can be 12 hours', () => {
|
|
128
|
-
const wrapper = mount(
|
|
129
|
-
<DateTimeProvider hour12={true}>
|
|
130
|
-
<ComponentUsingHook format="time" optionsDate={{ hour12: false }} />
|
|
131
|
-
</DateTimeProvider>
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
expect(wrapper.text()).toEqual(timeZoneLocalTimeFormatted24Hour)
|
|
135
|
-
})
|
|
136
|
-
})
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { render, screen } from '@testing-library/react'
|
|
2
|
-
import userEvent from '@testing-library/user-event'
|
|
3
|
-
import { mount } from 'enzyme'
|
|
4
|
-
import React from 'react'
|
|
5
|
-
import { isPromise, useDelayedCallback, wrapPromise } from '../DelayedCallback'
|
|
6
|
-
|
|
7
|
-
const DELAY = 10
|
|
8
|
-
|
|
9
|
-
const Component = 'button' //
|
|
10
|
-
|
|
11
|
-
const Enhanced = ({ after, before, delay }) => {
|
|
12
|
-
const delayed = useDelayedCallback({ after, before, delay })
|
|
13
|
-
|
|
14
|
-
return <Component onClick={delayed} />
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
describe('isPromise', () => {
|
|
18
|
-
it('returns true if input is a promise object', () => {
|
|
19
|
-
expect(isPromise(new Promise(() => {}))).toBe(true)
|
|
20
|
-
expect(isPromise(0)).toBe(false)
|
|
21
|
-
expect(isPromise('')).toBe(false)
|
|
22
|
-
expect(isPromise(false)).toBe(false)
|
|
23
|
-
expect(isPromise([])).toBe(false)
|
|
24
|
-
expect(isPromise({})).toBe(false)
|
|
25
|
-
})
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
describe('wrapPromise', () => {
|
|
29
|
-
it('passes through if input is a promise', () => {
|
|
30
|
-
wrapPromise(new Promise((resolve) => resolve('foo'))).then((value) =>
|
|
31
|
-
expect(value).toBe('foo')
|
|
32
|
-
)
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('resolves to provided input if input is a boolean', () => {
|
|
36
|
-
wrapPromise(true).then((value) => expect(value).toBe(true))
|
|
37
|
-
wrapPromise(false).then((value) => expect(value).toBe(false))
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('thens to true if input is not a promise or boolean', () => {
|
|
41
|
-
wrapPromise('').then((value) => expect(value).toBe(true))
|
|
42
|
-
wrapPromise({}).then((value) => expect(value).toBe(true))
|
|
43
|
-
wrapPromise([]).then((value) => expect(value).toBe(true))
|
|
44
|
-
})
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
describe('useDelayedCallback', () => {
|
|
48
|
-
describe('api', () => {
|
|
49
|
-
it('provides a delayed function', () => {
|
|
50
|
-
const after = jest.fn()
|
|
51
|
-
const before = jest.fn()
|
|
52
|
-
const delay = DELAY
|
|
53
|
-
const dom = mount(<Enhanced {...{ after, before, delay }} />)
|
|
54
|
-
const onClick = dom.find(Component).prop('onClick')
|
|
55
|
-
expect(typeof onClick).toBe('function')
|
|
56
|
-
})
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
describe('after callback', () => {
|
|
60
|
-
let after, before
|
|
61
|
-
beforeEach(() => {
|
|
62
|
-
after = jest.fn()
|
|
63
|
-
before = jest.fn()
|
|
64
|
-
jest.useFakeTimers()
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
afterEach(() => {
|
|
68
|
-
jest.runOnlyPendingTimers()
|
|
69
|
-
jest.useRealTimers()
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
// remove delay to make it work with FakeTimers
|
|
73
|
-
const user = userEvent.setup({ delay: null })
|
|
74
|
-
|
|
75
|
-
it('gets invoked after the delay has elapsed', async () => {
|
|
76
|
-
render(<Enhanced {...{ after, before, delay: DELAY }} />)
|
|
77
|
-
|
|
78
|
-
await user.click(screen.getByRole('button'))
|
|
79
|
-
expect(after).not.toHaveBeenCalled()
|
|
80
|
-
|
|
81
|
-
jest.advanceTimersByTime(DELAY)
|
|
82
|
-
expect(after).toHaveBeenCalled()
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
it('should not call after if component is unmounted', async () => {
|
|
86
|
-
const { unmount } = render(
|
|
87
|
-
<Enhanced {...{ after, before, delay: DELAY }} />
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
await user.click(screen.getByRole('button'))
|
|
91
|
-
unmount()
|
|
92
|
-
|
|
93
|
-
jest.advanceTimersByTime(DELAY)
|
|
94
|
-
expect(after).not.toHaveBeenCalled()
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
describe('before callback', () => {
|
|
99
|
-
it('gets invoked immediately', () => {
|
|
100
|
-
const after = jest.fn()
|
|
101
|
-
const before = jest.fn()
|
|
102
|
-
const delay = DELAY
|
|
103
|
-
const dom = mount(<Enhanced {...{ after, before, delay }} />)
|
|
104
|
-
dom.simulate('click')
|
|
105
|
-
expect(before).toHaveBeenCalled()
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
it('will not call the after callback when before returns false', (done) => {
|
|
109
|
-
const after = jest.fn()
|
|
110
|
-
const before = jest.fn(() => false)
|
|
111
|
-
const delay = DELAY
|
|
112
|
-
mount(<Enhanced {...{ after, before, delay }} />)
|
|
113
|
-
setTimeout(() => {
|
|
114
|
-
expect(after).toHaveBeenCalledTimes(0)
|
|
115
|
-
done()
|
|
116
|
-
}, DELAY * 2)
|
|
117
|
-
})
|
|
118
|
-
})
|
|
119
|
-
})
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
testContext,
|
|
3
|
-
testHook,
|
|
4
|
-
testRenderProp,
|
|
5
|
-
} from '../../__tests__/helpers/state'
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
DelayedToggle,
|
|
9
|
-
DelayedToggleProvider,
|
|
10
|
-
initDelayedToggle,
|
|
11
|
-
useDelayedToggle,
|
|
12
|
-
useDelayedToggleContext,
|
|
13
|
-
} from '../DelayedToggle'
|
|
14
|
-
|
|
15
|
-
const mockOnEnable = () => {}
|
|
16
|
-
const mockOnDisable = () => {}
|
|
17
|
-
|
|
18
|
-
const validateAPI = (api) => {
|
|
19
|
-
expect(api.enable).toBeInstanceOf(Function)
|
|
20
|
-
expect(api.disable).toBeInstanceOf(Function)
|
|
21
|
-
expect(api.toggle).toBeInstanceOf(Function)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const apiTest = {
|
|
25
|
-
test: 'api',
|
|
26
|
-
config: {
|
|
27
|
-
onEnable: mockOnEnable,
|
|
28
|
-
onDisable: mockOnDisable,
|
|
29
|
-
},
|
|
30
|
-
callback: validateAPI,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
describe('DelayedToggle', () => {
|
|
34
|
-
testHook(useDelayedToggle, [apiTest])
|
|
35
|
-
|
|
36
|
-
testRenderProp(DelayedToggle, 'delayedToggle', [apiTest])
|
|
37
|
-
|
|
38
|
-
testContext(DelayedToggleProvider, useDelayedToggleContext, [
|
|
39
|
-
apiTest,
|
|
40
|
-
,
|
|
41
|
-
{
|
|
42
|
-
test: 'missing provider',
|
|
43
|
-
config: {},
|
|
44
|
-
injectProvider: false,
|
|
45
|
-
callback: (context) => {
|
|
46
|
-
expect(context).toEqual(initDelayedToggle)
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
])
|
|
50
|
-
})
|