Files
react-native/ReactCommon/react/renderer/core/tests/DynamicPropsUtilitiesTest.cpp
T
Samuel Susla f303266d69 Correctly handle null values in dynamic props in prop forwarding
Summary:
Changelog: [internal]

shergin found that folly's merge_patch implementation doesn't propagate `null` correctly (details in D26435620 (https://github.com/facebook/react-native/commit/1e9f63fe277c42d812ef007ced7eff1688602b62)). This is a requirement and needs to be adjusted in props forwarding on Android.

As far as we know this isn't causing any bugs but it is an error that should be fixed.

Reviewed By: shergin

Differential Revision: D26545821

fbshipit-source-id: 9edd24aecfcde17f5d9c1197f65db0e0f3f9e364
2021-02-22 05:53:24 -08:00

67 lines
1.9 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* 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 <react/renderer/core/DynamicPropsUtilities.h>
using namespace folly;
using namespace facebook::react;
/*
Tests that verify expected behaviour from `folly::dynamic::merge_patch`.
`merge_patch` is used for props forwarding on Android to enable Background
Executor and will be removed once JNI layer is reimplmeneted.
*/
TEST(DynamicPropsUtilitiesTest, handleNestedObjects) {
dynamic map1 = dynamic::object;
map1["style"] = dynamic::object("backgroundColor", "red");
dynamic map2 = dynamic::object;
map2["style"] = dynamic::object("backgroundColor", "blue")("color", "black");
map2["height"] = 100;
auto result = mergeDynamicProps(map1, map2);
EXPECT_TRUE(result["style"].isObject());
EXPECT_TRUE(result["style"]["backgroundColor"].isString());
EXPECT_TRUE(result["style"]["color"].isString());
EXPECT_TRUE(result["height"].isInt());
EXPECT_EQ(result["style"]["backgroundColor"].asString(), "blue");
EXPECT_EQ(result["style"]["color"], "black");
EXPECT_EQ(result["height"], 100);
}
TEST(DynamicPropsUtilitiesTest, handleEmptyObject) {
dynamic map1 = dynamic::object;
dynamic map2 = dynamic::object;
map2["height"] = 100;
auto result = mergeDynamicProps(map1, map2);
EXPECT_TRUE(result["height"].isInt());
EXPECT_EQ(result["height"], 100);
result = mergeDynamicProps(map1, map2);
EXPECT_TRUE(result["height"].isInt());
EXPECT_EQ(result["height"], 100);
}
TEST(DynamicPropsUtilitiesTest, handleNull) {
dynamic map1 = dynamic::object;
map1["height"] = 100;
dynamic map2 = dynamic::object;
map2["height"] = nullptr;
auto result = mergeDynamicProps(map1, map2);
EXPECT_TRUE(result["height"].isNull());
}