iOS: added fabric/core ComponentDescriptor tests

Summary: Basic test for ComponentDescriptor mechanism.

Reviewed By: shergin

Differential Revision: D7388297

fbshipit-source-id: 3b0c625656e31df03d71a2e036388621a5e2e21d
This commit is contained in:
Kevin Gozali 2018-03-23 16:46:10 -07:00 committed by Facebook Github Bot
parent e254474d4c
commit 408a5f264b
6 changed files with 122 additions and 22 deletions

View File

@ -61,6 +61,7 @@ if not IS_OSS_BUILD:
cxx_test(
name = "tests",
srcs = glob(["tests/**/*.cpp"]),
headers = glob(["tests/**/*.h"]),
contacts = ["oncall+react_native@xmail.facebook.com"],
compiler_flags = [
"-fexceptions",

View File

@ -9,8 +9,9 @@
#include <memory>
#include <fabric/core/ShadowNode.h>
#include <fabric/core/ComponentDescriptor.h>
#include <fabric/core/Props.h>
#include <fabric/core/ShadowNode.h>
namespace facebook {
namespace react {

View File

@ -39,6 +39,7 @@ ShadowNode::ShadowNode(
SharedShadowNodeSharedList children
):
tag_(shadowNode->tag_),
rootTag_(shadowNode->rootTag_),
instanceHandle_(shadowNode->instanceHandle_),
props_(props ? props : shadowNode->props_),
children_(children ? children : shadowNode->children_),

View File

@ -0,0 +1,66 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include <gtest/gtest.h>
#include "TestComponent.h"
using namespace facebook::react;
TEST(ComponentDescriptorTest, createShadowNode) {
SharedComponentDescriptor descriptor = std::make_shared<TestComponentDescriptor>();
ASSERT_EQ(descriptor->getComponentHandle(), typeid(TestShadowNode).hash_code());
ASSERT_STREQ(descriptor->getComponentName().c_str(), "Test");
RawProps raw;
raw["nativeID"] = "abc";
SharedShadowNode node = descriptor->createShadowNode(9, 1, (void *)NULL, raw);
ASSERT_EQ(node->getComponentHandle(), typeid(TestShadowNode).hash_code());
ASSERT_STREQ(node->getComponentName().c_str(), "Test");
ASSERT_EQ(node->getTag(), 9);
ASSERT_EQ(node->getRootTag(), 1);
// TODO(#27369757): getProps() doesn't work
// ASSERT_STREQ(node->getProps()->getNativeId().c_str(), "testNativeID");
}
TEST(ComponentDescriptorTest, cloneShadowNode) {
SharedComponentDescriptor descriptor = std::make_shared<TestComponentDescriptor>();
RawProps raw;
raw["nativeID"] = "abc";
SharedShadowNode node = descriptor->createShadowNode(9, 1, (void *)NULL, raw);
SharedShadowNode cloned = descriptor->cloneShadowNode(node);
ASSERT_EQ(cloned->getComponentHandle(), typeid(TestShadowNode).hash_code());
ASSERT_STREQ(cloned->getComponentName().c_str(), "Test");
ASSERT_EQ(cloned->getTag(), 9);
ASSERT_EQ(cloned->getRootTag(), 1);
// TODO(#27369757): getProps() doesn't work
// ASSERT_STREQ(cloned->getProps()->getNativeId().c_str(), "testNativeID");
}
TEST(ComponentDescriptorTest, appendChild) {
SharedComponentDescriptor descriptor = std::make_shared<TestComponentDescriptor>();
RawProps raw;
raw["nativeID"] = "abc";
SharedShadowNode node1 = descriptor->createShadowNode(1, 1, (void *)NULL, raw);
SharedShadowNode node2 = descriptor->createShadowNode(2, 1, (void *)NULL, raw);
SharedShadowNode node3 = descriptor->createShadowNode(3, 1, (void *)NULL, raw);
descriptor->appendChild(node1, node2);
descriptor->appendChild(node1, node3);
SharedShadowNodeSharedList node1Children = node1->getChildren();
ASSERT_EQ(node1Children->size(), 2);
ASSERT_EQ(node1Children->at(0), node2);
ASSERT_EQ(node1Children->at(1), node3);
}

View File

@ -11,29 +11,10 @@
#include <fabric/core/ShadowNode.h>
#include <gtest/gtest.h>
#include "TestComponent.h"
using namespace facebook::react;
class TestProps : public Props {
public:
TestProps() {
RawProps raw;
raw["nativeID"] = "testNativeID";
apply(raw);
}
};
using SharedTestProps = std::shared_ptr<const TestProps>;
class TestShadowNode;
using SharedTestShadowNode = std::shared_ptr<const TestShadowNode>;
class TestShadowNode : public ConcreteShadowNode<TestProps> {
public:
using ConcreteShadowNode::ConcreteShadowNode;
ComponentName getComponentName() const override {
return ComponentName("Test");
}
};
TEST(ShadowNodeTest, handleProps) {
RawProps raw;
raw["nativeID"] = "abc";

View File

@ -0,0 +1,50 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <memory>
#include <fabric/core/ConcreteComponentDescriptor.h>
#include <fabric/core/ConcreteShadowNode.h>
#include <fabric/core/ShadowNode.h>
using namespace facebook::react;
/**
* This defines a set of TestComponent classes: Props, ShadowNode, ComponentDescriptor.
* To be used for testing purpose.
*/
class TestProps : public Props {
public:
TestProps() {
RawProps raw;
raw["nativeID"] = "testNativeID";
apply(raw);
}
};
using SharedTestProps = std::shared_ptr<const TestProps>;
class TestShadowNode;
using SharedTestShadowNode = std::shared_ptr<const TestShadowNode>;
class TestShadowNode : public ConcreteShadowNode<TestProps> {
public:
using ConcreteShadowNode::ConcreteShadowNode;
ComponentName getComponentName() const override {
return ComponentName("Test");
}
};
class TestComponentDescriptor: public ConcreteComponentDescriptor<TestShadowNode> {
public:
// TODO (shergin): Why does this gets repeated here and the shadow node class?
ComponentName getComponentName() const override {
return "Test";
}
};