Skip to content

Commit e1f87ed

Browse files
author
Brian Vaughn
committed
Merge branch 'master' into test-renderer-portal-warning
2 parents db42945 + 83f76e4 commit e1f87ed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+962
-1217
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929

3030
- run:
3131
name: Install Packages
32-
command: yarn install
32+
command: yarn install --frozen-lockfile
3333

3434
- run:
3535
name: Test Packages

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ install:
3030
test_script:
3131
- node --version
3232
- yarn lint
33-
- yarn flow-ci
33+
# - yarn flow-ci
3434
- yarn build
3535
- yarn test
3636
- yarn prettier

fixtures/dom/src/components/fixtures/text-inputs/index.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,36 @@ class TextInputFixtures extends React.Component {
6464
<Fixture>
6565
<form className="control-box">
6666
<fieldset>
67-
<legend>Text</legend>
67+
<legend>Empty value prop string</legend>
68+
<input value="" required={true} />
69+
</fieldset>
70+
<fieldset>
71+
<legend>No value prop</legend>
6872
<input required={true} />
6973
</fieldset>
7074
<fieldset>
71-
<legend>Date</legend>
75+
<legend>Empty defaultValue prop string</legend>
76+
<input required={true} defaultValue="" />
77+
</fieldset>
78+
<fieldset>
79+
<legend>No value prop date input</legend>
7280
<input type="date" required={true} />
7381
</fieldset>
82+
<fieldset>
83+
<legend>Empty value prop date input</legend>
84+
<input type="date" value="" required={true} />
85+
</fieldset>
7486
</form>
7587
</Fixture>
7688

7789
<p className="footnote">
7890
Checking the date type is also important because of a prior fix for
7991
iOS Safari that involved assigning over value/defaultValue
80-
properties of the input to prevent a display bug. This also
81-
triggered input validation.
92+
properties of the input to prevent a display bug. This also triggers
93+
input validation.
94+
</p>
95+
<p className="footnote">
96+
The date inputs should be blank in iOS. This is not a bug.
8297
</p>
8398
</TestCase>
8499

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"babel-code-frame": "^6.26.0",
1212
"babel-core": "^6.0.0",
1313
"babel-eslint": "^8.0.0",
14-
"babel-jest": "^22.4.4",
14+
"babel-jest": "^23.0.1",
1515
"babel-plugin-check-es2015-constants": "^6.5.0",
1616
"babel-plugin-external-helpers": "^6.22.0",
1717
"babel-plugin-syntax-trailing-function-commas": "^6.5.0",
@@ -69,8 +69,8 @@
6969
"gzip-js": "~0.3.2",
7070
"gzip-size": "^3.0.0",
7171
"jasmine-check": "^1.0.0-rc.0",
72-
"jest": "^22.4.4",
73-
"jest-diff": "^22.4.3",
72+
"jest": "^23.0.1",
73+
"jest-diff": "^23.0.1",
7474
"merge-stream": "^1.0.0",
7575
"minimatch": "^3.0.4",
7676
"minimist": "^1.2.0",

packages/react-dom/src/__tests__/DOMPropertyOperations-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ describe('DOMPropertyOperations', () => {
123123
spyOnDevAndProd(container.firstChild, 'setAttribute');
124124
ReactDOM.render(<progress value={30} />, container);
125125
ReactDOM.render(<progress value="30" />, container);
126-
expect(container.firstChild.setAttribute.calls.count()).toBe(2);
126+
expect(container.firstChild.setAttribute).toHaveBeenCalledTimes(2);
127127
});
128128
});
129129

packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,17 @@ describe('ReactBrowserEventEmitter', () => {
151151
it('should invoke a simple handler registered on a node', () => {
152152
registerSimpleTestHandler();
153153
ReactTestUtils.Simulate.click(CHILD);
154-
expect(LISTENER.mock.calls.length).toBe(1);
154+
expect(LISTENER).toHaveBeenCalledTimes(1);
155155
});
156156

157157
it('should not invoke handlers if ReactBrowserEventEmitter is disabled', () => {
158158
registerSimpleTestHandler();
159159
ReactBrowserEventEmitter.setEnabled(false);
160160
ReactTestUtils.SimulateNative.click(CHILD);
161-
expect(LISTENER.mock.calls.length).toBe(0);
161+
expect(LISTENER).toHaveBeenCalledTimes(0);
162162
ReactBrowserEventEmitter.setEnabled(true);
163163
ReactTestUtils.SimulateNative.click(CHILD);
164-
expect(LISTENER.mock.calls.length).toBe(1);
164+
expect(LISTENER).toHaveBeenCalledTimes(1);
165165
});
166166

167167
it('should bubble simply', () => {
@@ -301,7 +301,7 @@ describe('ReactBrowserEventEmitter', () => {
301301
putListener(CHILD, ON_CLICK_KEY, handleChildClick);
302302
putListener(PARENT, ON_CLICK_KEY, handleParentClick);
303303
ReactTestUtils.Simulate.click(CHILD);
304-
expect(handleParentClick.mock.calls.length).toBe(1);
304+
expect(handleParentClick).toHaveBeenCalledTimes(1);
305305
});
306306

307307
it('should not invoke newly inserted handlers while bubbling', () => {
@@ -311,7 +311,7 @@ describe('ReactBrowserEventEmitter', () => {
311311
};
312312
putListener(CHILD, ON_CLICK_KEY, handleChildClick);
313313
ReactTestUtils.Simulate.click(CHILD);
314-
expect(handleParentClick.mock.calls.length).toBe(0);
314+
expect(handleParentClick).toHaveBeenCalledTimes(0);
315315
});
316316

317317
it('should have mouse enter simulated by test utils', () => {
@@ -325,7 +325,7 @@ describe('ReactBrowserEventEmitter', () => {
325325
spyOnDevAndProd(EventTarget.prototype, 'addEventListener');
326326
ReactBrowserEventEmitter.listenTo(ON_CLICK_KEY, document);
327327
ReactBrowserEventEmitter.listenTo(ON_CLICK_KEY, document);
328-
expect(EventTarget.prototype.addEventListener.calls.count()).toBe(1);
328+
expect(EventTarget.prototype.addEventListener).toHaveBeenCalledTimes(1);
329329
});
330330

331331
it('should work with event plugins without dependencies', () => {

packages/react-dom/src/__tests__/ReactComponent-test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -387,11 +387,11 @@ describe('ReactComponent', () => {
387387
const callback = jest.fn();
388388
const container = document.createElement('div');
389389
ReactDOM.render(<div />, container, callback);
390-
expect(callback.mock.calls.length).toBe(1);
390+
expect(callback).toHaveBeenCalledTimes(1);
391391
ReactDOM.render(<div className="foo" />, container, callback);
392-
expect(callback.mock.calls.length).toBe(2);
392+
expect(callback).toHaveBeenCalledTimes(2);
393393
ReactDOM.render(<span />, container, callback);
394-
expect(callback.mock.calls.length).toBe(3);
394+
expect(callback).toHaveBeenCalledTimes(3);
395395
});
396396

397397
it('throws usefully when rendering badly-typed elements', () => {

packages/react-dom/src/__tests__/ReactDOMComponent-test.js

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -738,28 +738,28 @@ describe('ReactDOMComponent', () => {
738738
node.removeAttribute.mockImplementation(nodeRemoveAttribute);
739739

740740
ReactDOM.render(<div id="" />, container);
741-
expect(node.setAttribute.mock.calls.length).toBe(0);
742-
expect(node.removeAttribute.mock.calls.length).toBe(0);
741+
expect(node.setAttribute).toHaveBeenCalledTimes(0);
742+
expect(node.removeAttribute).toHaveBeenCalledTimes(0);
743743

744744
ReactDOM.render(<div id="foo" />, container);
745-
expect(node.setAttribute.mock.calls.length).toBe(1);
746-
expect(node.removeAttribute.mock.calls.length).toBe(0);
745+
expect(node.setAttribute).toHaveBeenCalledTimes(1);
746+
expect(node.removeAttribute).toHaveBeenCalledTimes(0);
747747

748748
ReactDOM.render(<div id="foo" />, container);
749-
expect(node.setAttribute.mock.calls.length).toBe(1);
750-
expect(node.removeAttribute.mock.calls.length).toBe(0);
749+
expect(node.setAttribute).toHaveBeenCalledTimes(1);
750+
expect(node.removeAttribute).toHaveBeenCalledTimes(0);
751751

752752
ReactDOM.render(<div />, container);
753-
expect(node.setAttribute.mock.calls.length).toBe(1);
754-
expect(node.removeAttribute.mock.calls.length).toBe(1);
753+
expect(node.setAttribute).toHaveBeenCalledTimes(1);
754+
expect(node.removeAttribute).toHaveBeenCalledTimes(1);
755755

756756
ReactDOM.render(<div id="" />, container);
757-
expect(node.setAttribute.mock.calls.length).toBe(2);
758-
expect(node.removeAttribute.mock.calls.length).toBe(1);
757+
expect(node.setAttribute).toHaveBeenCalledTimes(2);
758+
expect(node.removeAttribute).toHaveBeenCalledTimes(1);
759759

760760
ReactDOM.render(<div />, container);
761-
expect(node.setAttribute.mock.calls.length).toBe(2);
762-
expect(node.removeAttribute.mock.calls.length).toBe(2);
761+
expect(node.setAttribute).toHaveBeenCalledTimes(2);
762+
expect(node.removeAttribute).toHaveBeenCalledTimes(2);
763763
});
764764

765765
it('should not incur unnecessary DOM mutations for string properties', () => {
@@ -768,7 +768,7 @@ describe('ReactDOMComponent', () => {
768768

769769
const node = container.firstChild;
770770

771-
const nodeValueSetter = jest.genMockFn();
771+
const nodeValueSetter = jest.fn();
772772

773773
const oldSetAttribute = node.setAttribute.bind(node);
774774
node.setAttribute = function(key, value) {
@@ -777,22 +777,22 @@ describe('ReactDOMComponent', () => {
777777
};
778778

779779
ReactDOM.render(<div value="foo" />, container);
780-
expect(nodeValueSetter.mock.calls.length).toBe(1);
780+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
781781

782782
ReactDOM.render(<div value="foo" />, container);
783-
expect(nodeValueSetter.mock.calls.length).toBe(1);
783+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
784784

785785
ReactDOM.render(<div />, container);
786-
expect(nodeValueSetter.mock.calls.length).toBe(1);
786+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
787787

788788
ReactDOM.render(<div value={null} />, container);
789-
expect(nodeValueSetter.mock.calls.length).toBe(1);
789+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
790790

791791
ReactDOM.render(<div value="" />, container);
792-
expect(nodeValueSetter.mock.calls.length).toBe(2);
792+
expect(nodeValueSetter).toHaveBeenCalledTimes(2);
793793

794794
ReactDOM.render(<div />, container);
795-
expect(nodeValueSetter.mock.calls.length).toBe(2);
795+
expect(nodeValueSetter).toHaveBeenCalledTimes(2);
796796
});
797797

798798
it('should not incur unnecessary DOM mutations for boolean properties', () => {
@@ -812,16 +812,16 @@ describe('ReactDOMComponent', () => {
812812
});
813813

814814
ReactDOM.render(<div checked={true} />, container);
815-
expect(nodeValueSetter.mock.calls.length).toBe(0);
815+
expect(nodeValueSetter).toHaveBeenCalledTimes(0);
816816

817817
ReactDOM.render(<div />, container);
818-
expect(nodeValueSetter.mock.calls.length).toBe(1);
818+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
819819

820820
ReactDOM.render(<div checked={false} />, container);
821-
expect(nodeValueSetter.mock.calls.length).toBe(2);
821+
expect(nodeValueSetter).toHaveBeenCalledTimes(2);
822822

823823
ReactDOM.render(<div checked={true} />, container);
824-
expect(nodeValueSetter.mock.calls.length).toBe(3);
824+
expect(nodeValueSetter).toHaveBeenCalledTimes(3);
825825
});
826826

827827
it('should ignore attribute whitelist for elements with the "is" attribute', () => {
@@ -850,9 +850,9 @@ describe('ReactDOMComponent', () => {
850850
ReactDOM.render(<div dir={null} />, container);
851851
ReactDOM.render(<div dir={undefined} />, container);
852852
ReactDOM.render(<div />, container);
853-
expect(setter.mock.calls.length).toBe(0);
853+
expect(setter).toHaveBeenCalledTimes(0);
854854
ReactDOM.render(<div dir="ltr" />, container);
855-
expect(setter.mock.calls.length).toBe(1);
855+
expect(setter).toHaveBeenCalledTimes(1);
856856
});
857857

858858
it('handles multiple child updates without interference', () => {
@@ -984,7 +984,7 @@ describe('ReactDOMComponent', () => {
984984
container.getElementsByTagName('source')[0].dispatchEvent(errorEvent);
985985

986986
if (__DEV__) {
987-
expect(console.log.calls.count()).toBe(1);
987+
expect(console.log).toHaveBeenCalledTimes(1);
988988
expect(console.log.calls.argsFor(0)[0]).toContain('onError called');
989989
}
990990
});
@@ -1315,7 +1315,7 @@ describe('ReactDOMComponent', () => {
13151315
container.getElementsByTagName('image')[0].dispatchEvent(loadEvent);
13161316

13171317
if (__DEV__) {
1318-
expect(console.log.calls.count()).toBe(2);
1318+
expect(console.log).toHaveBeenCalledTimes(2);
13191319
expect(console.log.calls.argsFor(0)[0]).toContain('onError called');
13201320
expect(console.log.calls.argsFor(1)[0]).toContain('onLoad called');
13211321
}

packages/react-dom/src/__tests__/ReactDOMEventListener-test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('ReactDOMEventListener', () => {
6161
childNode.dispatchEvent(nativeEvent);
6262

6363
expect(mouseOut).toBeCalled();
64-
expect(mouseOut.mock.calls.length).toBe(2);
64+
expect(mouseOut).toHaveBeenCalledTimes(2);
6565
expect(mouseOut.mock.calls[0][0]).toEqual(childNode);
6666
expect(mouseOut.mock.calls[1][0]).toEqual(parentNode);
6767

@@ -97,7 +97,7 @@ describe('ReactDOMEventListener', () => {
9797
childNode.dispatchEvent(nativeEvent);
9898

9999
expect(mouseOut).toBeCalled();
100-
expect(mouseOut.mock.calls.length).toBe(3);
100+
expect(mouseOut).toHaveBeenCalledTimes(3);
101101
expect(mouseOut.mock.calls[0][0]).toEqual(childNode);
102102
expect(mouseOut.mock.calls[1][0]).toEqual(parentNode);
103103
expect(mouseOut.mock.calls[2][0]).toEqual(grandParentNode);
@@ -169,7 +169,7 @@ describe('ReactDOMEventListener', () => {
169169
childNode.dispatchEvent(nativeEvent);
170170

171171
// Child and parent should both call from event handlers.
172-
expect(mock.mock.calls.length).toBe(2);
172+
expect(mock).toHaveBeenCalledTimes(2);
173173
// The first call schedules a render of '1' into the 'Child'.
174174
// However, we're batching so it isn't flushed yet.
175175
expect(mock.mock.calls[0][0]).toBe('Child');
@@ -213,7 +213,7 @@ describe('ReactDOMEventListener', () => {
213213
instance.getInner().dispatchEvent(nativeEvent);
214214

215215
expect(mouseOut).toBeCalled();
216-
expect(mouseOut.mock.calls.length).toBe(1);
216+
expect(mouseOut).toHaveBeenCalledTimes(1);
217217
expect(mouseOut.mock.calls[0][0]).toEqual(instance.getInner());
218218
document.body.removeChild(container);
219219
});

packages/react-dom/src/__tests__/ReactDOMIframe-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('ReactDOMIframe', () => {
2121
});
2222

2323
it('should trigger load events', () => {
24-
const onLoadSpy = jasmine.createSpy();
24+
const onLoadSpy = jest.fn();
2525
let iframe = React.createElement('iframe', {onLoad: onLoadSpy});
2626
iframe = ReactTestUtils.renderIntoDocument(iframe);
2727

packages/react-dom/src/__tests__/ReactDOMInput-test.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ describe('ReactDOMInput', () => {
535535

536536
const node = container.firstChild;
537537
let nodeValue = 'a';
538-
const nodeValueSetter = jest.genMockFn();
538+
const nodeValueSetter = jest.fn();
539539
Object.defineProperty(node, 'value', {
540540
get: function() {
541541
return nodeValue;
@@ -546,10 +546,10 @@ describe('ReactDOMInput', () => {
546546
});
547547

548548
ReactDOM.render(<input value="a" onChange={() => {}} />, container);
549-
expect(nodeValueSetter.mock.calls.length).toBe(0);
549+
expect(nodeValueSetter).toHaveBeenCalledTimes(0);
550550

551551
ReactDOM.render(<input value="b" onChange={() => {}} />, container);
552-
expect(nodeValueSetter.mock.calls.length).toBe(1);
552+
expect(nodeValueSetter).toHaveBeenCalledTimes(1);
553553
});
554554

555555
it('should not incur unnecessary DOM mutations for numeric type conversion', () => {
@@ -558,7 +558,7 @@ describe('ReactDOMInput', () => {
558558

559559
const node = container.firstChild;
560560
let nodeValue = '0';
561-
const nodeValueSetter = jest.genMockFn();
561+
const nodeValueSetter = jest.fn();
562562
Object.defineProperty(node, 'value', {
563563
get: function() {
564564
return nodeValue;
@@ -569,7 +569,7 @@ describe('ReactDOMInput', () => {
569569
});
570570

571571
ReactDOM.render(<input value={0} onChange={() => {}} />, container);
572-
expect(nodeValueSetter.mock.calls.length).toBe(0);
572+
expect(nodeValueSetter).toHaveBeenCalledTimes(0);
573573
});
574574

575575
it('should not incur unnecessary DOM mutations for the boolean type conversion', () => {
@@ -578,7 +578,7 @@ describe('ReactDOMInput', () => {
578578

579579
const node = container.firstChild;
580580
let nodeValue = 'true';
581-
const nodeValueSetter = jest.genMockFn();
581+
const nodeValueSetter = jest.fn();
582582
Object.defineProperty(node, 'value', {
583583
get: function() {
584584
return nodeValue;
@@ -589,7 +589,7 @@ describe('ReactDOMInput', () => {
589589
});
590590

591591
ReactDOM.render(<input value={true} onChange={() => {}} />, container);
592-
expect(nodeValueSetter.mock.calls.length).toBe(0);
592+
expect(nodeValueSetter).toHaveBeenCalledTimes(0);
593593
});
594594

595595
it('should properly control a value of number `0`', () => {

0 commit comments

Comments
 (0)