Invert logic in findAllInRenderedTreeInternal
With DOM components we won't be able to go from public instance to internal instance reliably, so do the traversal on internal instances.
Ben Alpert committed
Jun 15, 2015 at 19:08 UTC
c9b0c26966dd336e72aaa17fcd2d3ec4aac03122
1 file changed
+29
-30
src/test/ReactTestUtils.js
+29
-30
@@ -37,6 +37,34 @@ function Event(suffix) {}
37
* @class ReactTestUtils
38
*/
39
40
+function findAllInRenderedTreeInternal(inst, test) {
41
+ if (!inst || !inst.getPublicInstance) {
42
+ return [];
43
+ }
44
+ var publicInst = inst.getPublicInstance()
45
+ var ret = test(publicInst) ? [publicInst] : [];
46
+ if (ReactTestUtils.isDOMComponent(publicInst)) {
47
+ var renderedChildren = inst._renderedComponent._renderedChildren;
48
+ var key;
49
+ for (key in renderedChildren) {
50
+ if (!renderedChildren.hasOwnProperty(key)) {
51
+ continue;
52
+ }
53
+ ret = ret.concat(
54
+ findAllInRenderedTreeInternal(
55
+ renderedChildren[key],
56
+ test
57
+ )
58
+ );
59
+ }
60
+ } else if (ReactTestUtils.isCompositeComponent(publicInst)) {
61
+ ret = ret.concat(
62
+ findAllInRenderedTreeInternal(inst._renderedComponent, test)
63
+ );
64
+ }
65
+ return ret;
66
+}
67
+
68
/**
69
* Todo: Support the entire DOM.scry query syntax. For now, these simple
70
* utilities will suffice for testing purposes.
@@ -131,36 +159,7 @@ var ReactTestUtils = {
159
if (!inst) {
160
return [];
161
}
134
- var ret = test(inst) ? [inst] : [];
135
- if (ReactTestUtils.isDOMComponent(inst)) {
136
- var internalInstance = ReactInstanceMap.get(inst);
137
- var renderedChildren = internalInstance
138
- ._renderedComponent
139
- ._renderedChildren;
140
- var key;
141
- for (key in renderedChildren) {
142
- if (!renderedChildren.hasOwnProperty(key)) {
143
- continue;
144
- }
145
- if (!renderedChildren[key].getPublicInstance) {
146
- continue;
147
- }
148
- ret = ret.concat(
149
- ReactTestUtils.findAllInRenderedTree(
150
- renderedChildren[key].getPublicInstance(),
151
- test
152
- )
153
- );
154
- }
155
- } else if (ReactTestUtils.isCompositeComponent(inst)) {
156
- ret = ret.concat(
157
- ReactTestUtils.findAllInRenderedTree(
158
- ReactTestUtils.getRenderedChildOfCompositeComponent(inst),
159
- test
160
- )
161
- );
162
- }
163
- return ret;
162
+ return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test);
163
},
164
165
/**