MaterialPropertyIdTests.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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 <AzTest/AzTest.h>
  9. #include <Common/RPITestFixture.h>
  10. #include <Common/ErrorMessageFinder.h>
  11. #include <Atom/RPI.Edit/Material/MaterialPropertyId.h>
  12. #include <Atom/RPI.Edit/Material/MaterialUtils.h>
  13. namespace UnitTest
  14. {
  15. using namespace AZ;
  16. using namespace RPI;
  17. class MaterialPropertyIdTests
  18. : public RPITestFixture
  19. {
  20. };
  21. TEST_F(MaterialPropertyIdTests, TestConstructWithPropertyName)
  22. {
  23. MaterialPropertyId id{"color"};
  24. EXPECT_TRUE(id.IsValid());
  25. EXPECT_STREQ(id.GetCStr(), "color");
  26. AZ::Name idCastedToName = id;
  27. EXPECT_EQ(idCastedToName, AZ::Name{"color"});
  28. }
  29. TEST_F(MaterialPropertyIdTests, TestConstructWithPropertyName_BadName)
  30. {
  31. ErrorMessageFinder errorMessageFinder;
  32. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  33. MaterialPropertyId id{"color?"};
  34. EXPECT_FALSE(id.IsValid());
  35. errorMessageFinder.CheckExpectedErrorsFound();
  36. }
  37. TEST_F(MaterialPropertyIdTests, TestConstructWithTwoNames)
  38. {
  39. MaterialPropertyId id{"baseColor", "factor"};
  40. EXPECT_TRUE(id.IsValid());
  41. EXPECT_STREQ(id.GetCStr(), "baseColor.factor");
  42. AZ::Name idCastedToName = id;
  43. EXPECT_EQ(idCastedToName, AZ::Name{"baseColor.factor"});
  44. }
  45. TEST_F(MaterialPropertyIdTests, TestConstructWithTwoNames_BadGroupName)
  46. {
  47. ErrorMessageFinder errorMessageFinder;
  48. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  49. MaterialPropertyId id{"layer1.baseColor", "factor"};
  50. EXPECT_FALSE(id.IsValid());
  51. errorMessageFinder.CheckExpectedErrorsFound();
  52. }
  53. TEST_F(MaterialPropertyIdTests, TestConstructWithTwoNames_BadPropertyName)
  54. {
  55. ErrorMessageFinder errorMessageFinder;
  56. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  57. MaterialPropertyId id{"baseColor", ".factor"};
  58. EXPECT_FALSE(id.IsValid());
  59. errorMessageFinder.CheckExpectedErrorsFound();
  60. }
  61. TEST_F(MaterialPropertyIdTests, TestConstructWithMultipleNames)
  62. {
  63. AZStd::vector<AZStd::string> names{"layer1", "clearCoat", "normal", "factor"};
  64. MaterialPropertyId id{names};
  65. EXPECT_TRUE(id.IsValid());
  66. EXPECT_STREQ(id.GetCStr(), "layer1.clearCoat.normal.factor");
  67. AZ::Name idCastedToName = id;
  68. EXPECT_EQ(idCastedToName, AZ::Name{"layer1.clearCoat.normal.factor"});
  69. }
  70. TEST_F(MaterialPropertyIdTests, TestConstructWithMultipleNames_BadName)
  71. {
  72. ErrorMessageFinder errorMessageFinder;
  73. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  74. AZStd::vector<AZStd::string> names{"layer1", "clear-coat", "normal", "factor"};
  75. MaterialPropertyId id{names};
  76. EXPECT_FALSE(id.IsValid());
  77. errorMessageFinder.CheckExpectedErrorsFound();
  78. }
  79. TEST_F(MaterialPropertyIdTests, TestConstructWithMultipleParentNamesSeparateFromPropertyName)
  80. {
  81. AZStd::vector<AZStd::string> names{"layer1", "clearCoat", "normal"};
  82. MaterialPropertyId id{names, "factor"};
  83. EXPECT_TRUE(id.IsValid());
  84. EXPECT_STREQ(id.GetCStr(), "layer1.clearCoat.normal.factor");
  85. AZ::Name idCastedToName = id;
  86. EXPECT_EQ(idCastedToName, AZ::Name{"layer1.clearCoat.normal.factor"});
  87. }
  88. TEST_F(MaterialPropertyIdTests, TestConstructWithMultipleParentNamesSeparateFromPropertyName_BadParentName)
  89. {
  90. ErrorMessageFinder errorMessageFinder;
  91. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  92. AZStd::vector<AZStd::string> names{"layer1", "clear-coat", "normal"};
  93. MaterialPropertyId id{names, "factor"};
  94. EXPECT_FALSE(id.IsValid());
  95. errorMessageFinder.CheckExpectedErrorsFound();
  96. }
  97. TEST_F(MaterialPropertyIdTests, TestConstructWithMultipleParentNamesSeparateFromPropertyName_BadPropertyName)
  98. {
  99. ErrorMessageFinder errorMessageFinder;
  100. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  101. AZStd::vector<AZStd::string> names{"layer1", "clearCoat", "normal"};
  102. MaterialPropertyId id{names, "#factor"};
  103. EXPECT_FALSE(id.IsValid());
  104. errorMessageFinder.CheckExpectedErrorsFound();
  105. }
  106. TEST_F(MaterialPropertyIdTests, TestParse)
  107. {
  108. MaterialPropertyId id = MaterialPropertyId::Parse("layer1.clearCoat.normal.factor");
  109. EXPECT_TRUE(id.IsValid());
  110. EXPECT_STREQ(id.GetCStr(), "layer1.clearCoat.normal.factor");
  111. AZ::Name idCastedToName = id;
  112. EXPECT_EQ(idCastedToName, AZ::Name{"layer1.clearCoat.normal.factor"});
  113. }
  114. TEST_F(MaterialPropertyIdTests, TestParse_BadName)
  115. {
  116. ErrorMessageFinder errorMessageFinder;
  117. errorMessageFinder.AddExpectedErrorMessage("not a valid identifier");
  118. MaterialPropertyId id = MaterialPropertyId::Parse("layer1.clearCoat.normal,factor");
  119. EXPECT_FALSE(id.IsValid());
  120. errorMessageFinder.CheckExpectedErrorsFound();
  121. }
  122. TEST_F(MaterialPropertyIdTests, TestNameValidity)
  123. {
  124. EXPECT_TRUE(MaterialUtils::IsValidName("a"));
  125. EXPECT_TRUE(MaterialUtils::IsValidName("z"));
  126. EXPECT_TRUE(MaterialUtils::IsValidName("A"));
  127. EXPECT_TRUE(MaterialUtils::IsValidName("Z"));
  128. EXPECT_TRUE(MaterialUtils::IsValidName("_"));
  129. EXPECT_TRUE(MaterialUtils::IsValidName("m_layer10bazBAZ"));
  130. EXPECT_FALSE(MaterialUtils::IsValidName(""));
  131. EXPECT_FALSE(MaterialUtils::IsValidName("1layer"));
  132. EXPECT_FALSE(MaterialUtils::IsValidName("base-color"));
  133. EXPECT_FALSE(MaterialUtils::IsValidName("base.color"));
  134. EXPECT_FALSE(MaterialUtils::IsValidName("base/color"));
  135. }
  136. }