[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
/**