diff --git a/ReactCommon/react/renderer/attributedstring/tests/AttributedStringBoxTest.cpp b/ReactCommon/react/renderer/attributedstring/tests/AttributedStringBoxTest.cpp new file mode 100644 index 00000000000..493598b2c42 --- /dev/null +++ b/ReactCommon/react/renderer/attributedstring/tests/AttributedStringBoxTest.cpp @@ -0,0 +1,105 @@ +/* + * 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 + +#include +#include + +namespace facebook { +namespace react { + +TEST(AttributedStringBoxTest, testDefaultConstructor) { + auto attributedStringBox = AttributedStringBox{}; + + EXPECT_EQ(attributedStringBox.getMode(), AttributedStringBox::Mode::Value); + EXPECT_EQ(attributedStringBox.getValue(), AttributedString{}); +} + +TEST(AttributedStringBoxTest, testValueConstructor) { + auto attributedString = AttributedString{}; + auto fragment = AttributedString::Fragment{}; + fragment.string = "test string"; + attributedString.appendFragment(fragment); + auto attributedStringBox = AttributedStringBox{attributedString}; + + EXPECT_EQ(attributedStringBox.getMode(), AttributedStringBox::Mode::Value); + EXPECT_EQ(attributedStringBox.getValue(), attributedString); +} + +TEST(AttributedStringBoxTest, testOpaquePointerConstructor) { + auto string = std::make_shared("test string"); + auto attributedStringBox = AttributedStringBox{string}; + + EXPECT_EQ( + attributedStringBox.getMode(), AttributedStringBox::Mode::OpaquePointer); + EXPECT_EQ(attributedStringBox.getOpaquePointer(), string); + EXPECT_EQ(string.use_count(), 2); +} + +TEST(AttributedStringBoxTest, testMoveConstructor) { + { + auto string = std::make_shared("test string"); + auto movedFromAttributedStringBox = AttributedStringBox{string}; + + auto moveToAttributedStringBox = + AttributedStringBox{std::move(movedFromAttributedStringBox)}; + + EXPECT_EQ( + moveToAttributedStringBox.getMode(), + AttributedStringBox::Mode::OpaquePointer); + EXPECT_EQ(moveToAttributedStringBox.getOpaquePointer(), string); + EXPECT_EQ(string.use_count(), 2); + } + { + auto attributedString = AttributedString{}; + auto fragment = AttributedString::Fragment{}; + fragment.string = "test string"; + attributedString.appendFragment(fragment); + auto movedFromAttributedStringBox = AttributedStringBox{attributedString}; + + auto moveToAttributedStringBox = + AttributedStringBox{std::move(movedFromAttributedStringBox)}; + + EXPECT_EQ( + moveToAttributedStringBox.getMode(), AttributedStringBox::Mode::Value); + EXPECT_EQ(moveToAttributedStringBox.getValue(), attributedString); + } +} + +TEST(AttributedStringBoxTest, testMoveAssignment) { + { + auto string = std::make_shared("test string"); + auto movedFromAttributedStringBox = AttributedStringBox{string}; + + auto movedToAttributedStringBox = AttributedStringBox{}; + movedToAttributedStringBox = std::move(movedFromAttributedStringBox); + + EXPECT_EQ( + movedToAttributedStringBox.getMode(), + AttributedStringBox::Mode::OpaquePointer); + EXPECT_EQ(movedToAttributedStringBox.getOpaquePointer(), string); + EXPECT_EQ(string.use_count(), 2); + } + { + auto attributedString = AttributedString{}; + auto fragment = AttributedString::Fragment{}; + fragment.string = "test string"; + attributedString.appendFragment(fragment); + auto movedFromAttributedStringBox = AttributedStringBox{attributedString}; + + auto moveToAttributedStringBox = AttributedStringBox{}; + moveToAttributedStringBox = std::move(movedFromAttributedStringBox); + + EXPECT_EQ( + moveToAttributedStringBox.getMode(), AttributedStringBox::Mode::Value); + EXPECT_EQ(moveToAttributedStringBox.getValue(), attributedString); + } +} + +} // namespace react +} // namespace facebook