From 1be2541ce2bbe328362d19e3eff65f3e89527105 Mon Sep 17 00:00:00 2001 From: "Andrew Chen (Eng)" Date: Mon, 7 May 2018 14:53:28 -0700 Subject: [PATCH] Add assertion to ensure copied shadow nodes are of the same type as the original Reviewed By: mdvacca Differential Revision: D7664638 fbshipit-source-id: e1b7acbafd8a8fd9d6301d8afbb3e5959dc15b7a --- .../react/uimanager/ReactShadowNodeImpl.java | 6 ++++++ .../react/fabric/ReactShadowNodeTest.java | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java index a8118b1841d..ff009b5b2c2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java @@ -166,6 +166,9 @@ public class ReactShadowNodeImpl implements ReactShadowNode @Override public ReactShadowNodeImpl mutableCopy() { ReactShadowNodeImpl copy = copy(); + Assertions.assertCondition( + getClass() == copy.getClass(), + "Copied shadow node must use the same class"); if (mYogaNode != null) { copy.mYogaNode = mYogaNode.clone(); copy.mYogaNode.setData(copy); @@ -182,6 +185,9 @@ public class ReactShadowNodeImpl implements ReactShadowNode @Override public ReactShadowNodeImpl mutableCopyWithNewChildren() { ReactShadowNodeImpl copy = copy(); + Assertions.assertCondition( + getClass() == copy.getClass(), + "Copied shadow node must use the same class"); if (mYogaNode != null) { copy.mYogaNode = mYogaNode.cloneWithNewChildren(); copy.mYogaNode.setData(copy); diff --git a/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java b/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java new file mode 100644 index 00000000000..1b14c9fc9c4 --- /dev/null +++ b/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java @@ -0,0 +1,20 @@ +// Copyright 2004-present Facebook. All Rights Reserved. +package com.facebook.react.fabric; + +import com.facebook.react.uimanager.ReactShadowNodeImpl; +import com.facebook.testing.robolectric.v3.WithTestDefaultsRunner; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** Tests {@link ReactShadowNode} */ +@RunWith(WithTestDefaultsRunner.class) +public class ReactShadowNodeTest { + + @Test(expected = AssertionError.class) + public void testClonedInstance() { + TestReactShadowNode node = new TestReactShadowNode(); + node.mutableCopy(); + } + + private static class TestReactShadowNode extends ReactShadowNodeImpl {} +}