DomPathTests.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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 <AzCore/DOM/DomPath.h>
  9. #include <AzCore/Name/NameDictionary.h>
  10. #include <Tests/DOM/DomFixtures.h>
  11. namespace AZ::Dom::Tests
  12. {
  13. class DomPathTests : public DomTestFixture
  14. {
  15. };
  16. TEST_F(DomPathTests, EmptyPath_IsEmpty)
  17. {
  18. Path path("");
  19. EXPECT_EQ(path.GetEntries().size(), 0);
  20. }
  21. TEST_F(DomPathTests, EmptyPath_IsEqualToDefault)
  22. {
  23. EXPECT_EQ(Path(""), Path());
  24. }
  25. TEST_F(DomPathTests, Index_IsNumeric)
  26. {
  27. EXPECT_EQ(Path("/0")[0], 0);
  28. EXPECT_EQ(Path("/20")[0], 20);
  29. EXPECT_EQ(Path("/9999")[0], 9999);
  30. EXPECT_EQ(Path("/0/4/5/1")[3], 1);
  31. }
  32. TEST_F(DomPathTests, Index_ConvertsToString)
  33. {
  34. Path p;
  35. EXPECT_EQ(p.ToString(), "");
  36. p.Push(0);
  37. EXPECT_EQ(p.ToString(), "/0");
  38. p.Push(1);
  39. EXPECT_EQ(p.ToString(), "/0/1");
  40. p.Push(10);
  41. EXPECT_EQ(p.ToString(), "/0/1/10");
  42. p.Push(9999);
  43. EXPECT_EQ(p.ToString(), "/0/1/10/9999");
  44. p.Pop();
  45. EXPECT_EQ(p.ToString(), "/0/1/10");
  46. }
  47. TEST_F(DomPathTests, Key_IsString)
  48. {
  49. EXPECT_EQ(Path("/foo")[0], "foo");
  50. EXPECT_EQ(Path("/bar")[0], "bar");
  51. EXPECT_EQ(Path("/foo/bar/baz12345")[0], "foo");
  52. EXPECT_EQ(Path("/foo/bar/baz12345")[2], "baz12345");
  53. EXPECT_EQ(Path("//foo")[0], "");
  54. }
  55. TEST_F(DomPathTests, Key_ConvertsToString)
  56. {
  57. Path p;
  58. p.Push("foo");
  59. EXPECT_EQ(p.ToString(), "/foo");
  60. p.Push("bar");
  61. EXPECT_EQ(p.ToString(), "/foo/bar");
  62. p.Push("another_key");
  63. EXPECT_EQ(p.ToString(), "/foo/bar/another_key");
  64. p.Pop();
  65. EXPECT_EQ(p.ToString(), "/foo/bar");
  66. }
  67. TEST_F(DomPathTests, Key_ConvertsFromEscaped)
  68. {
  69. EXPECT_EQ(Path("/foo~0")[0], "foo~");
  70. EXPECT_EQ(Path("/foo~0bar~0~0")[0], "foo~bar~~");
  71. EXPECT_EQ(Path("/foo~1bar/baz")[0], "foo/bar");
  72. EXPECT_EQ(Path("/~1foo~1")[0], "/foo/");
  73. }
  74. TEST_F(DomPathTests, Key_ConvertsToEscaped)
  75. {
  76. Path p;
  77. p.Push("with~tilde");
  78. EXPECT_EQ(p.ToString(), "/with~0tilde");
  79. p.Push("with/slash");
  80. EXPECT_EQ(p.ToString(), "/with~0tilde/with~1slash");
  81. p.Clear();
  82. p.Push("/~with/mixed/characters~");
  83. EXPECT_EQ(p.ToString(), "/~1~0with~1mixed~1characters~0");
  84. }
  85. TEST_F(DomPathTests, MixedPath_Resolves)
  86. {
  87. EXPECT_EQ(Path("/foo/0")[0], "foo");
  88. EXPECT_EQ(Path("/foo/0")[1], 0);
  89. EXPECT_EQ(Path("/42/foo/bar/0")[0], 42);
  90. EXPECT_EQ(Path("/42/foo/bar/0")[1], "foo");
  91. EXPECT_EQ(Path("/42/foo/bar/0")[2], "bar");
  92. EXPECT_EQ(Path("/42/foo/bar/0")[3], 0);
  93. }
  94. TEST_F(DomPathTests, MixedPath_ConvertsToString)
  95. {
  96. Path p;
  97. p.Push("foo");
  98. EXPECT_EQ(p.ToString(), "/foo");
  99. p.Push(0);
  100. EXPECT_EQ(p.ToString(), "/foo/0");
  101. p.Push("another_key");
  102. EXPECT_EQ(p.ToString(), "/foo/0/another_key");
  103. p.Push(100);
  104. EXPECT_EQ(p.ToString(), "/foo/0/another_key/100");
  105. p.Pop();
  106. EXPECT_EQ(p.ToString(), "/foo/0/another_key");
  107. }
  108. TEST_F(DomPathTests, OperatorOverloads_Append)
  109. {
  110. EXPECT_EQ(Path("/foo/bar"), Path("/foo") / Path("/bar"));
  111. EXPECT_EQ(Path("/foo"), Path("/foo") / Path());
  112. EXPECT_EQ(Path("/foo/1/bar/0"), Path("/foo/1") / Path("/bar/0"));
  113. EXPECT_EQ(Path("/foo") / 0, Path("/foo/0"));
  114. EXPECT_EQ(Path() / "foo" / "bar", Path("/foo/bar"));
  115. EXPECT_EQ(Path("/foo") / "bar" / "baz", Path("/foo/bar/baz"));
  116. Path p("/foo/bar");
  117. p /= "baz";
  118. EXPECT_EQ(p, Path("/foo/bar/baz"));
  119. p /= Path("0/1");
  120. EXPECT_EQ(p, Path("/foo/bar/baz/0/1"));
  121. }
  122. TEST_F(DomPathTests, EndOfArray_FromString)
  123. {
  124. EXPECT_FALSE(Path("/foo/-")[0].IsEndOfArray());
  125. EXPECT_TRUE(Path("/foo/-")[1].IsEndOfArray());
  126. EXPECT_TRUE(Path("/foo/-/-")[2].IsEndOfArray());
  127. }
  128. TEST_F(DomPathTests, EndOfArray_ToString)
  129. {
  130. EXPECT_EQ(Path("/-").ToString(), "/-");
  131. EXPECT_EQ(Path("/0/-").ToString(), "/0/-");
  132. }
  133. TEST_F(DomPathTests, MixedPath_AppendToString)
  134. {
  135. Path p("/foo/0");
  136. AZStd::string s;
  137. p.AppendToString(s);
  138. EXPECT_EQ(s, "/foo/0");
  139. p.AppendToString(s);
  140. EXPECT_EQ(s, "/foo/0/foo/0");
  141. }
  142. TEST_F(DomPathTests, MixedPath_AppendToFixedString)
  143. {
  144. Path p("/foo/0");
  145. {
  146. AZStd::fixed_string<7> s;
  147. p.AppendToString(s);
  148. EXPECT_EQ(s, "/foo/0");
  149. }
  150. {
  151. AZStd::fixed_string<9> s;
  152. p.AppendToString(s);
  153. EXPECT_EQ(s, "/foo/0");
  154. p.AppendToString(s);
  155. EXPECT_EQ(s, "/foo/0/fo");
  156. }
  157. }
  158. } // namespace AZ::Dom::Tests