ElementTest.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #include <memory>
  8. #include <gtest/gtest.h>
  9. #include <react/components/root/RootComponentDescriptor.h>
  10. #include <react/components/view/ViewComponentDescriptor.h>
  11. #include <react/element/ComponentBuilder.h>
  12. #include <react/element/Element.h>
  13. #include <react/element/testUtils.h>
  14. #include <react/uimanager/ComponentDescriptorProviderRegistry.h>
  15. using namespace facebook::react;
  16. TEST(ElementTest, testNormalCases) {
  17. auto builder = simpleComponentBuilder();
  18. auto shadowNodeA = std::shared_ptr<RootShadowNode>{};
  19. auto shadowNodeAA = std::shared_ptr<ViewShadowNode>{};
  20. auto shadowNodeAB = std::shared_ptr<ViewShadowNode>{};
  21. auto shadowNodeABA = std::shared_ptr<ViewShadowNode>{};
  22. auto propsAA = std::make_shared<ViewProps>();
  23. propsAA->nativeId = "node AA";
  24. // clang-format off
  25. auto element =
  26. Element<RootShadowNode>()
  27. .reference(shadowNodeA)
  28. .tag(1)
  29. .props([]() {
  30. auto props = std::make_shared<RootProps>();
  31. props->nativeId = "node A";
  32. return props;
  33. })
  34. .finalize([](RootShadowNode &shadowNode){
  35. shadowNode.sealRecursive();
  36. })
  37. .children({
  38. Element<ViewShadowNode>()
  39. .reference(shadowNodeAA)
  40. .tag(2)
  41. .props(propsAA),
  42. Element<ViewShadowNode>()
  43. .reference(shadowNodeAB)
  44. .tag(3)
  45. .props([]() {
  46. auto props = std::make_shared<ViewProps>();
  47. props->nativeId = "node AB";
  48. return props;
  49. })
  50. .children({
  51. Element<ViewShadowNode>()
  52. .reference(shadowNodeABA)
  53. .tag(4)
  54. .props([]() {
  55. auto props = std::make_shared<ViewProps>();
  56. props->nativeId = "node ABA";
  57. return props;
  58. })
  59. })
  60. });
  61. // clang-format on
  62. auto shadowNode = builder.build(element);
  63. EXPECT_EQ(shadowNode, shadowNodeA);
  64. // Tags
  65. EXPECT_EQ(shadowNodeA->getTag(), 1);
  66. EXPECT_EQ(shadowNodeAA->getTag(), 2);
  67. EXPECT_EQ(shadowNodeAB->getTag(), 3);
  68. EXPECT_EQ(shadowNodeABA->getTag(), 4);
  69. // Children
  70. EXPECT_EQ(shadowNodeA->getChildren().size(), 2);
  71. EXPECT_EQ(shadowNodeAA->getChildren().size(), 0);
  72. EXPECT_EQ(shadowNodeAB->getChildren().size(), 1);
  73. EXPECT_EQ(shadowNodeABA->getChildren().size(), 0);
  74. EXPECT_EQ(
  75. shadowNodeA->getChildren(),
  76. (ShadowNode::ListOfShared{shadowNodeAA, shadowNodeAB}));
  77. EXPECT_EQ(
  78. shadowNodeAB->getChildren(), (ShadowNode::ListOfShared{shadowNodeABA}));
  79. // Props
  80. EXPECT_EQ(shadowNodeA->getProps()->nativeId, "node A");
  81. EXPECT_EQ(shadowNodeABA->getProps()->nativeId, "node ABA");
  82. EXPECT_EQ(shadowNodeAA->getProps(), propsAA);
  83. // Finalize
  84. EXPECT_TRUE(shadowNodeA->getSealed());
  85. EXPECT_TRUE(shadowNodeAA->getSealed());
  86. EXPECT_TRUE(shadowNodeAB->getSealed());
  87. EXPECT_TRUE(shadowNodeABA->getSealed());
  88. }