MaterialVersionUpdateTests.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Common/RPITestFixture.h>
  9. #include <Common/ErrorMessageFinder.h>
  10. #include <Atom/RPI.Reflect/Material/MaterialVersionUpdate.h>
  11. namespace UnitTest
  12. {
  13. using namespace AZ;
  14. using namespace RPI;
  15. //! Test suite for the internal components of MaterialVersionUpdates.
  16. //! Testing full update functionality in combination with MaterialTypeAssets
  17. //! and MaterialAssets is performed in their respective test suites.
  18. class MaterialVersionUpdateTests
  19. : public RPITestFixture
  20. {
  21. protected:
  22. const MaterialPropertyValue m_invalidValue = MaterialVersionUpdate::Action::s_invalidValue;
  23. const AZ::Name m_invalidName = MaterialVersionUpdate::MaterialPropertyValueWrapper::s_invalidName;
  24. };
  25. TEST_F(MaterialVersionUpdateTests, MaterialPropertyValueWrapper)
  26. {
  27. const MaterialPropertyValue intValue(123);
  28. MaterialVersionUpdate::MaterialPropertyValueWrapper intWrapper(intValue);
  29. EXPECT_EQ(intWrapper.Get(), intValue);
  30. const MaterialPropertyValue strValue(AZStd::string("myString"));
  31. MaterialVersionUpdate::MaterialPropertyValueWrapper strWrapper(strValue);
  32. EXPECT_EQ(strWrapper.Get(), strValue);
  33. EXPECT_EQ(strWrapper.GetAsName(), AZ::Name(strValue.GetValue<AZStd::string>()));
  34. }
  35. TEST_F(MaterialVersionUpdateTests, MaterialPropertyValueWrapper_Error_GetAsName)
  36. {
  37. // Empty string should not trigger error
  38. const MaterialPropertyValue strValue(AZStd::string(""));
  39. MaterialVersionUpdate::MaterialPropertyValueWrapper strWrapper(strValue);
  40. EXPECT_EQ(strWrapper.GetAsName(), AZ::Name(strValue.GetValue<AZStd::string>()));
  41. // Non-string value should trigger error
  42. ErrorMessageFinder errorMessageFinder;
  43. errorMessageFinder.AddExpectedErrorMessage("GetAsName() expects a valid string value");
  44. const MaterialPropertyValue intValue(123);
  45. MaterialVersionUpdate::MaterialPropertyValueWrapper intWrapper(intValue);
  46. EXPECT_EQ(intWrapper.GetAsName(), m_invalidName);
  47. errorMessageFinder.CheckExpectedErrorsFound();
  48. }
  49. TEST_F(MaterialVersionUpdateTests, Action_Rename)
  50. {
  51. // Test alternative ways of creating the same action
  52. const AZStd::string fromStr = "oldName";
  53. const AZStd::string toStr = "newName";
  54. MaterialVersionUpdate::Action action(
  55. AZ::Name{ "rename" },
  56. {
  57. { Name{ "from" }, fromStr },
  58. { Name{ "to" }, toStr }
  59. } );
  60. MaterialVersionUpdate::Action action2(
  61. {
  62. { AZStd::string("op"), AZStd::string("rename") },
  63. { AZStd::string("from"), fromStr },
  64. { AZStd::string("to"), toStr }
  65. } );
  66. MaterialVersionUpdate::Action action3(AZ::Name("rename"), {});
  67. action3.AddArg(Name{ "from" }, fromStr);
  68. action3.AddArg(Name{ "to" }, toStr);
  69. EXPECT_EQ(action, action2);
  70. EXPECT_EQ(action, action3);
  71. EXPECT_TRUE(action.Validate());
  72. // Test properties
  73. EXPECT_EQ(action.GetArgCount(), 2);
  74. EXPECT_EQ(action.GetArg(Name{ "from" }), fromStr);
  75. EXPECT_EQ(action.GetArg(Name{ "to" }), toStr);
  76. EXPECT_EQ(action.GetArgAsName(Name{ "from" }), AZ::Name(fromStr));
  77. EXPECT_EQ(action.GetArgAsName(Name{ "to" }), AZ::Name(toStr));
  78. }
  79. TEST_F(MaterialVersionUpdateTests, Action_RenamePrefix)
  80. {
  81. // Test alternative ways of creating the same action
  82. const AZStd::string fromStr = "oldPrefix_";
  83. const AZStd::string toStr = "newPrefix.";
  84. MaterialVersionUpdate::Action action(
  85. AZ::Name{"renamePrefix"},
  86. {
  87. { Name{ "from" }, fromStr },
  88. { Name{ "to" }, toStr }
  89. });
  90. MaterialVersionUpdate::Action action2(
  91. {
  92. { AZStd::string("op"), AZStd::string("renamePrefix") },
  93. { AZStd::string("from"), fromStr },
  94. { AZStd::string("to"), toStr }
  95. });
  96. MaterialVersionUpdate::Action action3(AZ::Name("renamePrefix"), {});
  97. action3.AddArg(Name{"from"}, fromStr);
  98. action3.AddArg(Name{"to"}, toStr);
  99. EXPECT_EQ(action, action2);
  100. EXPECT_EQ(action, action3);
  101. EXPECT_TRUE(action.Validate());
  102. // Test properties
  103. EXPECT_EQ(action.GetArgCount(), 2);
  104. EXPECT_EQ(action.GetArg(Name{"from"}), fromStr);
  105. EXPECT_EQ(action.GetArg(Name{"to"}), toStr);
  106. EXPECT_EQ(action.GetArgAsName(Name{"from"}), AZ::Name(fromStr));
  107. EXPECT_EQ(action.GetArgAsName(Name{"to"}), AZ::Name(toStr));
  108. }
  109. TEST_F(MaterialVersionUpdateTests, Action_SetValue)
  110. {
  111. // Test alternative ways of creating the same action
  112. const AZStd::string nameStr = "myInt";
  113. const MaterialPropertyValue theValue(123);
  114. MaterialVersionUpdate::Action action(
  115. AZ::Name{ "setValue" },
  116. {
  117. { Name{ "name" }, nameStr },
  118. { Name{ "value" }, theValue }
  119. } );
  120. MaterialVersionUpdate::Action action2(
  121. {
  122. { AZStd::string("op"), AZStd::string("setValue") },
  123. { AZStd::string("name"), nameStr },
  124. { AZStd::string("value"), theValue }
  125. } );
  126. MaterialVersionUpdate::Action action3(AZ::Name("setValue"), {});
  127. action3.AddArg(Name{ "name" }, nameStr);
  128. action3.AddArg(Name{ "value" }, theValue);
  129. EXPECT_EQ(action, action2);
  130. EXPECT_EQ(action, action3);
  131. EXPECT_TRUE(action.Validate());
  132. // Test properties
  133. EXPECT_EQ(action.GetArgCount(), 2);
  134. EXPECT_EQ(action.GetArg(Name{ "name" }), nameStr);
  135. EXPECT_EQ(action.GetArg(Name{ "value" }), theValue);
  136. EXPECT_EQ(action.GetArgAsName(Name{ "name" }), AZ::Name(nameStr));
  137. }
  138. TEST_F(MaterialVersionUpdateTests, Action_Error_GetArg)
  139. {
  140. const AZStd::string nameStr = "myInt";
  141. const MaterialPropertyValue theValue(123);
  142. MaterialVersionUpdate::Action action(
  143. AZ::Name{ "setValue" },
  144. {
  145. { Name{ "name" }, nameStr },
  146. { Name{ "value" }, theValue }
  147. } );
  148. // Non-existent key
  149. EXPECT_EQ(action.GetArg(AZ::Name("invalidKey")), m_invalidValue);
  150. // GetArgAsName with non-string value
  151. ErrorMessageFinder errorMessageFinder;
  152. errorMessageFinder.AddExpectedErrorMessage("expects a valid string value");
  153. EXPECT_EQ(action.GetArgAsName(AZ::Name("value")), m_invalidName);
  154. }
  155. }