From bfcad9614ad6bebe6bbfbaa75fb121e1bad20f64 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Fri, 5 Jun 2015 14:53:30 -0700 Subject: [PATCH] Warn when accessing .props, .setProps on DOM components --- .../children/__tests__/sliceChildren-test.js | 45 +------- .../dom/client/__tests__/ReactDOM-test.js | 32 +++--- .../wrappers/__tests__/ReactDOMButton-test.js | 38 +++++-- .../wrappers/__tests__/ReactDOMInput-test.js | 25 +++-- .../wrappers/__tests__/ReactDOMSelect-test.js | 103 ++++++++++++------ .../__tests__/ReactDOMTextarea-test.js | 50 ++++++--- .../dom/shared/ReactDefaultInjection.js | 64 ++++++++++- .../__tests__/ReactDOMComponent-test.js | 37 +++++++ .../reconciler/ReactCompositeComponent.js | 25 +++-- .../__tests__/ReactComponent-test.js | 7 +- .../__tests__/ReactComponentLifeCycle-test.js | 9 +- .../__tests__/ReactCompositeComponent-test.js | 7 +- .../__tests__/ReactMultiChildText-test.js | 15 +-- src/test/ReactTestUtils.js | 18 ++- 14 files changed, 324 insertions(+), 151 deletions(-) diff --git a/src/isomorphic/children/__tests__/sliceChildren-test.js b/src/isomorphic/children/__tests__/sliceChildren-test.js index 265f5b0f78..385e4ea142 100644 --- a/src/isomorphic/children/__tests__/sliceChildren-test.js +++ b/src/isomorphic/children/__tests__/sliceChildren-test.js @@ -15,45 +15,16 @@ describe('sliceChildren', function() { var React; var ReactFragment; - var ReactTestUtils; var sliceChildren; - var reactComponentExpect; - - var Partial; beforeEach(function() { React = require('React'); ReactFragment = require('ReactFragment'); - ReactTestUtils = require('ReactTestUtils'); sliceChildren = require('sliceChildren'); - reactComponentExpect = require('reactComponentExpect'); - - Partial = React.createClass({ - render: function() { - return ( -
- {sliceChildren( - this.props.children, - this.props.start, - this.props.end - )} -
- ); - }, - }); }); - function renderAndSlice(set, start, end) { - var instance = {set}; - instance = ReactTestUtils.renderIntoDocument(instance); - var rendered = reactComponentExpect(instance) - .expectRenderedChild() - .instance(); - return rendered.props.children; - } - function testKeyValuePairs(children, expectedPairs) { var obj = ReactFragment.extract(children); expect(obj).toEqual(expectedPairs); @@ -65,7 +36,7 @@ describe('sliceChildren', function() {
,
, ]; - var children = renderAndSlice(fullSet, 0); + var children = sliceChildren(fullSet, 0); testKeyValuePairs(children, { '.$A': fullSet[0], '.$B': fullSet[1], @@ -79,7 +50,7 @@ describe('sliceChildren', function() {
,
, ]; - var children = renderAndSlice(fullSet, 1); + var children = sliceChildren(fullSet, 1); testKeyValuePairs(children, { '.$B': fullSet[1], '.$C': fullSet[2], @@ -93,7 +64,7 @@ describe('sliceChildren', function() {
,
, ]; - var children = renderAndSlice(fullSet, 1, 2); + var children = sliceChildren(fullSet, 1, 2); testKeyValuePairs(children, { '.$B': fullSet[1], }); @@ -104,13 +75,9 @@ describe('sliceChildren', function() { var b =
; var c =
; - var instance = {a}{b}{c}; - instance = ReactTestUtils.renderIntoDocument(instance); - var rendered = reactComponentExpect(instance) - .expectRenderedChild() - .instance(); - - testKeyValuePairs(rendered.props.children, { + var el =
{a}{b}{c}
; + var children = sliceChildren(el.props.children, 1, 2); + testKeyValuePairs(children, { '.1': b, }); }); diff --git a/src/renderers/dom/client/__tests__/ReactDOM-test.js b/src/renderers/dom/client/__tests__/ReactDOM-test.js index 1ba170e01f..84fdccb99e 100644 --- a/src/renderers/dom/client/__tests__/ReactDOM-test.js +++ b/src/renderers/dom/client/__tests__/ReactDOM-test.js @@ -79,32 +79,32 @@ describe('ReactDOM', function() {
); // Warm the cache with theDog - myDiv.setProps({ - children: [ + myDiv = ReactTestUtils.renderIntoDocument( +
,
, - ], - }); +
+ ); // Remove theDog - this should purge the cache - myDiv.setProps({ - children: [ + myDiv = ReactTestUtils.renderIntoDocument( +
, - ], - }); +
+ ); // Now, put theDog back. It's now a different DOM node. - myDiv.setProps({ - children: [ + myDiv = ReactTestUtils.renderIntoDocument( +
,
, - ], - }); +
+ ); // Change the className of theDog. It will use the same element - myDiv.setProps({ - children: [ + myDiv = ReactTestUtils.renderIntoDocument( +
,
, - ], - }); +
+ ); var root = React.findDOMNode(myDiv); var dog = root.childNodes[0]; expect(dog.className).toBe('bigdog'); diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMButton-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMButton-test.js index 3e28a9b35f..757b8cd97f 100644 --- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMButton-test.js +++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMButton-test.js @@ -53,27 +53,41 @@ describe('ReactDOMButton', function() { }); it('should forward clicks when it becomes not disabled', function() { - var btn = mounted(