From c9b0c26966dd336e72aaa17fcd2d3ec4aac03122 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Mon, 15 Jun 2015 19:08:16 -0700 Subject: [PATCH] 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. --- src/test/ReactTestUtils.js | 59 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/src/test/ReactTestUtils.js b/src/test/ReactTestUtils.js index e207ea8140..6202a74e76 100644 --- a/src/test/ReactTestUtils.js +++ b/src/test/ReactTestUtils.js @@ -37,6 +37,34 @@ function Event(suffix) {} * @class ReactTestUtils */ +function findAllInRenderedTreeInternal(inst, test) { + if (!inst || !inst.getPublicInstance) { + return []; + } + var publicInst = inst.getPublicInstance() + var ret = test(publicInst) ? [publicInst] : []; + if (ReactTestUtils.isDOMComponent(publicInst)) { + var renderedChildren = inst._renderedComponent._renderedChildren; + var key; + for (key in renderedChildren) { + if (!renderedChildren.hasOwnProperty(key)) { + continue; + } + ret = ret.concat( + findAllInRenderedTreeInternal( + renderedChildren[key], + test + ) + ); + } + } else if (ReactTestUtils.isCompositeComponent(publicInst)) { + ret = ret.concat( + findAllInRenderedTreeInternal(inst._renderedComponent, test) + ); + } + return ret; +} + /** * Todo: Support the entire DOM.scry query syntax. For now, these simple * utilities will suffice for testing purposes. @@ -131,36 +159,7 @@ var ReactTestUtils = { if (!inst) { return []; } - var ret = test(inst) ? [inst] : []; - if (ReactTestUtils.isDOMComponent(inst)) { - var internalInstance = ReactInstanceMap.get(inst); - var renderedChildren = internalInstance - ._renderedComponent - ._renderedChildren; - var key; - for (key in renderedChildren) { - if (!renderedChildren.hasOwnProperty(key)) { - continue; - } - if (!renderedChildren[key].getPublicInstance) { - continue; - } - ret = ret.concat( - ReactTestUtils.findAllInRenderedTree( - renderedChildren[key].getPublicInstance(), - test - ) - ); - } - } else if (ReactTestUtils.isCompositeComponent(inst)) { - ret = ret.concat( - ReactTestUtils.findAllInRenderedTree( - ReactTestUtils.getRenderedChildOfCompositeComponent(inst), - test - ) - ); - } - return ret; + return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test); }, /**