mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[Fiber] Fix TestUtils.findAllInRenderedTree (#8147)
* [Fiber] Fix TestUtils.findAllInRenderedTree * Add a comment about coroutines
This commit is contained in:
@@ -20,6 +20,7 @@ var ReactDOM = require('ReactDOM');
|
||||
var ReactDOMComponentTree = require('ReactDOMComponentTree');
|
||||
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
|
||||
var ReactInstanceMap = require('ReactInstanceMap');
|
||||
var ReactTypeOfWork = require('ReactTypeOfWork');
|
||||
var ReactUpdates = require('ReactUpdates');
|
||||
var SyntheticEvent = require('SyntheticEvent');
|
||||
var ReactShallowRenderer = require('ReactShallowRenderer');
|
||||
@@ -28,6 +29,11 @@ var findDOMNode = require('findDOMNode');
|
||||
var invariant = require('invariant');
|
||||
|
||||
var topLevelTypes = EventConstants.topLevelTypes;
|
||||
var {
|
||||
ClassComponent,
|
||||
HostComponent,
|
||||
HostText,
|
||||
} = ReactTypeOfWork;
|
||||
|
||||
function Event(suffix) {}
|
||||
|
||||
@@ -35,7 +41,7 @@ function Event(suffix) {}
|
||||
* @class ReactTestUtils
|
||||
*/
|
||||
|
||||
function findAllInRenderedTreeInternal(inst, test) {
|
||||
function findAllInRenderedStackTreeInternal(inst, test) {
|
||||
if (!inst || !inst.getPublicInstance) {
|
||||
return [];
|
||||
}
|
||||
@@ -50,7 +56,7 @@ function findAllInRenderedTreeInternal(inst, test) {
|
||||
continue;
|
||||
}
|
||||
ret = ret.concat(
|
||||
findAllInRenderedTreeInternal(
|
||||
findAllInRenderedStackTreeInternal(
|
||||
renderedChildren[key],
|
||||
test
|
||||
)
|
||||
@@ -61,12 +67,39 @@ function findAllInRenderedTreeInternal(inst, test) {
|
||||
typeof currentElement.type === 'function'
|
||||
) {
|
||||
ret = ret.concat(
|
||||
findAllInRenderedTreeInternal(inst._renderedComponent, test)
|
||||
findAllInRenderedStackTreeInternal(inst._renderedComponent, test)
|
||||
);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function findAllInRenderedFiberTreeInternal(fiber, test) {
|
||||
if (!fiber) {
|
||||
return [];
|
||||
}
|
||||
if (
|
||||
fiber.tag !== ClassComponent &&
|
||||
fiber.tag !== HostComponent &&
|
||||
fiber.tag !== HostText
|
||||
) {
|
||||
return [];
|
||||
}
|
||||
var publicInst = fiber.stateNode;
|
||||
var ret = publicInst && test(publicInst) ? [publicInst] : [];
|
||||
var child = fiber.child;
|
||||
while (child) {
|
||||
ret = ret.concat(
|
||||
findAllInRenderedFiberTreeInternal(
|
||||
child,
|
||||
test
|
||||
)
|
||||
);
|
||||
child = child.sibling;
|
||||
}
|
||||
// TODO: visit stateNode for coroutines
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Utilities for making it easy to test React components.
|
||||
*
|
||||
@@ -170,7 +203,12 @@ var ReactTestUtils = {
|
||||
ReactTestUtils.isCompositeComponent(inst),
|
||||
'findAllInRenderedTree(...): instance must be a composite component'
|
||||
);
|
||||
return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test);
|
||||
var internalInstance = ReactInstanceMap.get(inst);
|
||||
if (internalInstance && typeof internalInstance.tag === 'number') {
|
||||
return findAllInRenderedFiberTreeInternal(internalInstance, test);
|
||||
} else {
|
||||
return findAllInRenderedStackTreeInternal(internalInstance, test);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user