@samitouri / QOS-React / commits / 928541dc9e

[Fiber] Fix TestUtils.findAllInRenderedTree (#8147)

* [Fiber] Fix TestUtils.findAllInRenderedTree * Add a comment about coroutines

Dan Abramov committed Oct 29, 2016 at 22:02 UTC 928541dc9ee1df266d621541922f71bb6e4b770f
1 file changed +42 -4
src/test/ReactTestUtils.js
+42 -4
@@ -20,6 +20,7 @@ var ReactDOM = require('ReactDOM');
20 var ReactDOMComponentTree = require('ReactDOMComponentTree');
21 var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
22 var ReactInstanceMap = require('ReactInstanceMap');
23 +var ReactTypeOfWork = require('ReactTypeOfWork');
24 var ReactUpdates = require('ReactUpdates');
25 var SyntheticEvent = require('SyntheticEvent');
26 var ReactShallowRenderer = require('ReactShallowRenderer');
@@ -28,6 +29,11 @@ var findDOMNode = require('findDOMNode');
29 var invariant = require('invariant');
30
31 var topLevelTypes = EventConstants.topLevelTypes;
32 +var {
33 + ClassComponent,
34 + HostComponent,
35 + HostText,
36 +} = ReactTypeOfWork;
37
38 function Event(suffix) {}
39
@@ -35,7 +41,7 @@ function Event(suffix) {}
41 * @class ReactTestUtils
42 */
43
38 -function findAllInRenderedTreeInternal(inst, test) {
44 +function findAllInRenderedStackTreeInternal(inst, test) {
45 if (!inst || !inst.getPublicInstance) {
46 return [];
47 }
@@ -50,7 +56,7 @@ function findAllInRenderedTreeInternal(inst, test) {
56 continue;
57 }
58 ret = ret.concat(
53 - findAllInRenderedTreeInternal(
59 + findAllInRenderedStackTreeInternal(
60 renderedChildren[key],
61 test
62 )
@@ -61,12 +67,39 @@ function findAllInRenderedTreeInternal(inst, test) {
67 typeof currentElement.type === 'function'
68 ) {
69 ret = ret.concat(
64 - findAllInRenderedTreeInternal(inst._renderedComponent, test)
70 + findAllInRenderedStackTreeInternal(inst._renderedComponent, test)
71 );
72 }
73 return ret;
74 }
75
76 +function findAllInRenderedFiberTreeInternal(fiber, test) {
77 + if (!fiber) {
78 + return [];
79 + }
80 + if (
81 + fiber.tag !== ClassComponent &&
82 + fiber.tag !== HostComponent &&
83 + fiber.tag !== HostText
84 + ) {
85 + return [];
86 + }
87 + var publicInst = fiber.stateNode;
88 + var ret = publicInst && test(publicInst) ? [publicInst] : [];
89 + var child = fiber.child;
90 + while (child) {
91 + ret = ret.concat(
92 + findAllInRenderedFiberTreeInternal(
93 + child,
94 + test
95 + )
96 + );
97 + child = child.sibling;
98 + }
99 + // TODO: visit stateNode for coroutines
100 + return ret;
101 +}
102 +
103 /**
104 * Utilities for making it easy to test React components.
105 *
@@ -170,7 +203,12 @@ var ReactTestUtils = {
203 ReactTestUtils.isCompositeComponent(inst),
204 'findAllInRenderedTree(...): instance must be a composite component'
205 );
173 - return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test);
206 + var internalInstance = ReactInstanceMap.get(inst);
207 + if (internalInstance && typeof internalInstance.tag === 'number') {
208 + return findAllInRenderedFiberTreeInternal(internalInstance, test);
209 + } else {
210 + return findAllInRenderedStackTreeInternal(internalInstance, test);
211 + }
212 },
213
214 /**