Skip to content

Commit afc879e

Browse files
authored
Test onChange callback (#97)
1 parent e11d73a commit afc879e

File tree

10 files changed

+122
-23
lines changed

10 files changed

+122
-23
lines changed

.size-snapshot.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
{
22
"dist/react-powerplug.umd.js": {
3-
"bundled": 24183,
4-
"minified": 9975,
5-
"gzipped": 2574
3+
"bundled": 24334,
4+
"minified": 10031,
5+
"gzipped": 2590
66
},
77
"dist/react-powerplug.cjs.js": {
8-
"bundled": 21066,
9-
"minified": 10851,
10-
"gzipped": 2438
8+
"bundled": 21207,
9+
"minified": 10907,
10+
"gzipped": 2453
1111
},
1212
"dist/react-powerplug.esm.js": {
13-
"bundled": 20420,
14-
"minified": 10302,
15-
"gzipped": 2310,
13+
"bundled": 20561,
14+
"minified": 10358,
15+
"gzipped": 2328,
1616
"treeshaked": {
1717
"rollup": 1489,
1818
"webpack": 1939

src/components/FocusManager.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import State from './State'
33
import renderProps from '../utils/renderProps'
44

55
const FocusManager = ({ onChange, ...props }) => (
6-
<State initial={{ isFocused: false, timeoutId: null }} onChange={onChange}>
6+
<State
7+
initial={{ isFocused: false, timeoutId: null }}
8+
onChange={({ isFocused }) => onChange && onChange({ isFocused })}
9+
>
710
{({ state, setState }) =>
811
renderProps(props, {
912
isFocused: state.isFocused,

tests/components/Counter.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<Counter />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<Counter render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<Counter render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212
expect(lastCalled().count).toBe(0)
@@ -23,3 +23,16 @@ test('<Counter />', () => {
2323
lastCalled().decBy(3)
2424
expect(lastCalled().count).toBe(2)
2525
})
26+
27+
test('<Counter onChange />', () => {
28+
const renderFn = jest.fn().mockReturnValue(null)
29+
const onChangeFn = jest.fn()
30+
const lastCalled = () => last(renderFn.mock.calls)[0]
31+
TestRenderer.create(<Counter onChange={onChangeFn} render={renderFn} />)
32+
33+
expect(onChangeFn).toHaveBeenCalledTimes(0)
34+
35+
lastCalled().inc()
36+
expect(onChangeFn).toHaveBeenCalledTimes(1)
37+
expect(onChangeFn).lastCalledWith({ count: 1 })
38+
})

tests/components/FocusManager.test.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,16 @@ test('keep focus when click on menu', async () => {
8181
test('restore focus after calling blur on inner component', async () => {
8282
const page = await bootstrap()
8383
const renderFn = jest.fn()
84+
const onChangeFn = jest.fn()
8485
await page.exposeFunction('renderFn', renderFn)
86+
await page.exposeFunction('onChangeFn', onChangeFn)
8587

8688
await page.evaluate(() => {
8789
const React = window.React
8890
const FocusManager = window.ReactPowerPlug.FocusManager
8991

9092
const App = () => (
91-
<FocusManager>
93+
<FocusManager onChange={window.onChangeFn}>
9294
{({ isFocused, blur, bind }) => {
9395
window.renderFn({ isFocused })
9496
const stopPropagation = e => e.stopPropagation()
@@ -115,8 +117,11 @@ test('restore focus after calling blur on inner component', async () => {
115117
expect(renderFn).lastCalledWith({ isFocused: false })
116118
await page.click('#outer')
117119
expect(renderFn).lastCalledWith({ isFocused: true })
120+
expect(onChangeFn).lastCalledWith({ isFocused: true })
118121
await page.click('#inner')
119122
expect(renderFn).lastCalledWith({ isFocused: false })
123+
expect(onChangeFn).lastCalledWith({ isFocused: false })
120124
await page.click('#outer')
121125
expect(renderFn).lastCalledWith({ isFocused: true })
126+
expect(onChangeFn).lastCalledWith({ isFocused: true })
122127
})

tests/components/List.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<List />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<List initial={[1]} render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<List initial={[1]} render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212
expect(lastCalled().list).toEqual([1])
@@ -39,3 +39,16 @@ test('<List />', () => {
3939
lastCalled().push(1, 2, 3)
4040
expect(lastCalled().list).toEqual([1, 2, 3])
4141
})
42+
43+
test('<List onChange />', () => {
44+
const renderFn = jest.fn().mockReturnValue(null)
45+
const onChangeFn = jest.fn()
46+
const lastCalled = () => last(renderFn.mock.calls)[0]
47+
TestRenderer.create(<List onChange={onChangeFn} render={renderFn} />)
48+
49+
expect(onChangeFn).toHaveBeenCalledTimes(0)
50+
51+
lastCalled().set([1])
52+
expect(onChangeFn).toHaveBeenCalledTimes(1)
53+
expect(onChangeFn).lastCalledWith({ list: [1] })
54+
})

tests/components/Map.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<Map />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<Map initial={{ a: 0 }} render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<Map initial={{ a: 0 }} render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212

@@ -18,3 +18,16 @@ test('<Map />', () => {
1818
lastCalled().over('a', d => d + 10)
1919
expect(lastCalled().get('a')).toBe(11)
2020
})
21+
22+
test('<Map onChange />', () => {
23+
const renderFn = jest.fn().mockReturnValue(null)
24+
const onChangeFn = jest.fn()
25+
const lastCalled = () => last(renderFn.mock.calls)[0]
26+
TestRenderer.create(<Map onChange={onChangeFn} render={renderFn} />)
27+
28+
expect(onChangeFn).toHaveBeenCalledTimes(0)
29+
30+
lastCalled().set('a', 1)
31+
expect(onChangeFn).toHaveBeenCalledTimes(1)
32+
expect(onChangeFn).lastCalledWith({ a: 1 })
33+
})

tests/components/Set.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<Set />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<Set initial={[1, 2, 3, 1, 3]} render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<Set initial={[1, 2, 3, 1, 3]} render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212

@@ -29,3 +29,16 @@ test('<Set />', () => {
2929
expect(lastCalled().has(4)).toBe(false)
3030
expect(lastCalled().values).toEqual([])
3131
})
32+
33+
test('<Set onChange />', () => {
34+
const renderFn = jest.fn().mockReturnValue(null)
35+
const onChangeFn = jest.fn()
36+
const lastCalled = () => last(renderFn.mock.calls)[0]
37+
TestRenderer.create(<Set onChange={onChangeFn} render={renderFn} />)
38+
39+
expect(onChangeFn).toHaveBeenCalledTimes(0)
40+
41+
lastCalled().add(1)
42+
expect(onChangeFn).toHaveBeenCalledTimes(1)
43+
expect(onChangeFn).lastCalledWith({ values: [1] })
44+
})

tests/components/State.test.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,8 @@ import { State } from '../../src'
44
import { last } from './utils'
55

66
test('<State />', () => {
7-
const onChangeFn = jest.fn()
87
const renderFn = jest.fn().mockReturnValue(null)
9-
TestRenderer.create(
10-
<State initial={{ myValue: 1 }} onChange={onChangeFn}>
11-
{renderFn}
12-
</State>
13-
)
8+
TestRenderer.create(<State initial={{ myValue: 1 }} render={renderFn} />)
149

1510
// Initial values
1611
expect(renderFn).lastCalledWith({
@@ -25,5 +20,19 @@ test('<State />', () => {
2520
state: { myValue: 2 },
2621
setState: expect.any(Function),
2722
})
23+
})
24+
25+
test('<State onChange />', () => {
26+
const onChangeFn = jest.fn()
27+
const renderFn = jest.fn().mockReturnValue(null)
28+
const lastCalled = () => last(renderFn.mock.calls)[0]
29+
TestRenderer.create(
30+
<State initial={{ myValue: 1 }} onChange={onChangeFn} render={renderFn} />
31+
)
32+
33+
expect(onChangeFn).toHaveBeenCalledTimes(0)
34+
35+
lastCalled().setState({ myValue: 2 })
36+
expect(onChangeFn).toHaveBeenCalledTimes(1)
2837
expect(onChangeFn).toBeCalledWith({ myValue: 2 })
2938
})

tests/components/Toggle.test.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<Toggle />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<Toggle render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<Toggle render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212
expect(lastCalled().on).toBe(false)
@@ -20,3 +20,18 @@ test('<Toggle />', () => {
2020
lastCalled().set(on => !on)
2121
expect(lastCalled().on).toBe(true)
2222
})
23+
24+
test('<Toggle onChange />', () => {
25+
const renderFn = jest.fn().mockReturnValue(null)
26+
const onChangeFn = jest.fn()
27+
const lastCalled = () => last(renderFn.mock.calls)[0]
28+
TestRenderer.create(
29+
<Toggle initial={false} onChange={onChangeFn} render={renderFn} />
30+
)
31+
32+
expect(onChangeFn).toHaveBeenCalledTimes(0)
33+
34+
lastCalled().set(true)
35+
expect(onChangeFn).toHaveBeenCalledTimes(1)
36+
expect(onChangeFn).lastCalledWith({ on: true })
37+
})

tests/components/Value.test.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { last } from './utils'
55

66
test('<Value />', () => {
77
const renderFn = jest.fn().mockReturnValue(null)
8-
TestRenderer.create(<Value initial={{ a: 1 }} render={renderFn} />)
98
const lastCalled = () => last(renderFn.mock.calls)[0]
9+
TestRenderer.create(<Value initial={{ a: 1 }} render={renderFn} />)
1010

1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212

@@ -21,3 +21,18 @@ test('<Value />', () => {
2121
lastCalled().set(0)
2222
expect(lastCalled().value).toEqual(0)
2323
})
24+
25+
test('<Value onChange />', () => {
26+
const renderFn = jest.fn().mockReturnValue(null)
27+
const onChangeFn = jest.fn()
28+
const lastCalled = () => last(renderFn.mock.calls)[0]
29+
TestRenderer.create(
30+
<Value initial={0} onChange={onChangeFn} render={renderFn} />
31+
)
32+
33+
expect(onChangeFn).toHaveBeenCalledTimes(0)
34+
35+
lastCalled().set(1)
36+
expect(onChangeFn).toHaveBeenCalledTimes(1)
37+
expect(onChangeFn).lastCalledWith({ value: 1 })
38+
})

0 commit comments

Comments
 (0)