123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <AzCore/DOM/DomPath.h>
- #include <AzCore/Name/NameDictionary.h>
- #include <Tests/DOM/DomFixtures.h>
- namespace AZ::Dom::Tests
- {
- class DomPathTests : public DomTestFixture
- {
- };
- TEST_F(DomPathTests, EmptyPath_IsEmpty)
- {
- Path path("");
- EXPECT_EQ(path.GetEntries().size(), 0);
- }
- TEST_F(DomPathTests, EmptyPath_IsEqualToDefault)
- {
- EXPECT_EQ(Path(""), Path());
- }
- TEST_F(DomPathTests, Index_IsNumeric)
- {
- EXPECT_EQ(Path("/0")[0], 0);
- EXPECT_EQ(Path("/20")[0], 20);
- EXPECT_EQ(Path("/9999")[0], 9999);
- EXPECT_EQ(Path("/0/4/5/1")[3], 1);
- }
- TEST_F(DomPathTests, Index_ConvertsToString)
- {
- Path p;
- EXPECT_EQ(p.ToString(), "");
- p.Push(0);
- EXPECT_EQ(p.ToString(), "/0");
- p.Push(1);
- EXPECT_EQ(p.ToString(), "/0/1");
- p.Push(10);
- EXPECT_EQ(p.ToString(), "/0/1/10");
- p.Push(9999);
- EXPECT_EQ(p.ToString(), "/0/1/10/9999");
- p.Pop();
- EXPECT_EQ(p.ToString(), "/0/1/10");
- }
- TEST_F(DomPathTests, Key_IsString)
- {
- EXPECT_EQ(Path("/foo")[0], "foo");
- EXPECT_EQ(Path("/bar")[0], "bar");
- EXPECT_EQ(Path("/foo/bar/baz12345")[0], "foo");
- EXPECT_EQ(Path("/foo/bar/baz12345")[2], "baz12345");
- EXPECT_EQ(Path("//foo")[0], "");
- }
- TEST_F(DomPathTests, Key_ConvertsToString)
- {
- Path p;
- p.Push("foo");
- EXPECT_EQ(p.ToString(), "/foo");
- p.Push("bar");
- EXPECT_EQ(p.ToString(), "/foo/bar");
- p.Push("another_key");
- EXPECT_EQ(p.ToString(), "/foo/bar/another_key");
- p.Pop();
- EXPECT_EQ(p.ToString(), "/foo/bar");
- }
- TEST_F(DomPathTests, Key_ConvertsFromEscaped)
- {
- EXPECT_EQ(Path("/foo~0")[0], "foo~");
- EXPECT_EQ(Path("/foo~0bar~0~0")[0], "foo~bar~~");
- EXPECT_EQ(Path("/foo~1bar/baz")[0], "foo/bar");
- EXPECT_EQ(Path("/~1foo~1")[0], "/foo/");
- }
- TEST_F(DomPathTests, Key_ConvertsToEscaped)
- {
- Path p;
- p.Push("with~tilde");
- EXPECT_EQ(p.ToString(), "/with~0tilde");
- p.Push("with/slash");
- EXPECT_EQ(p.ToString(), "/with~0tilde/with~1slash");
- p.Clear();
- p.Push("/~with/mixed/characters~");
- EXPECT_EQ(p.ToString(), "/~1~0with~1mixed~1characters~0");
- }
- TEST_F(DomPathTests, MixedPath_Resolves)
- {
- EXPECT_EQ(Path("/foo/0")[0], "foo");
- EXPECT_EQ(Path("/foo/0")[1], 0);
- EXPECT_EQ(Path("/42/foo/bar/0")[0], 42);
- EXPECT_EQ(Path("/42/foo/bar/0")[1], "foo");
- EXPECT_EQ(Path("/42/foo/bar/0")[2], "bar");
- EXPECT_EQ(Path("/42/foo/bar/0")[3], 0);
- }
- TEST_F(DomPathTests, MixedPath_ConvertsToString)
- {
- Path p;
- p.Push("foo");
- EXPECT_EQ(p.ToString(), "/foo");
- p.Push(0);
- EXPECT_EQ(p.ToString(), "/foo/0");
- p.Push("another_key");
- EXPECT_EQ(p.ToString(), "/foo/0/another_key");
- p.Push(100);
- EXPECT_EQ(p.ToString(), "/foo/0/another_key/100");
- p.Pop();
- EXPECT_EQ(p.ToString(), "/foo/0/another_key");
- }
- TEST_F(DomPathTests, OperatorOverloads_Append)
- {
- EXPECT_EQ(Path("/foo/bar"), Path("/foo") / Path("/bar"));
- EXPECT_EQ(Path("/foo"), Path("/foo") / Path());
- EXPECT_EQ(Path("/foo/1/bar/0"), Path("/foo/1") / Path("/bar/0"));
- EXPECT_EQ(Path("/foo") / 0, Path("/foo/0"));
- EXPECT_EQ(Path() / "foo" / "bar", Path("/foo/bar"));
- EXPECT_EQ(Path("/foo") / "bar" / "baz", Path("/foo/bar/baz"));
- Path p("/foo/bar");
- p /= "baz";
- EXPECT_EQ(p, Path("/foo/bar/baz"));
- p /= Path("0/1");
- EXPECT_EQ(p, Path("/foo/bar/baz/0/1"));
- }
- TEST_F(DomPathTests, EndOfArray_FromString)
- {
- EXPECT_FALSE(Path("/foo/-")[0].IsEndOfArray());
- EXPECT_TRUE(Path("/foo/-")[1].IsEndOfArray());
- EXPECT_TRUE(Path("/foo/-/-")[2].IsEndOfArray());
- }
- TEST_F(DomPathTests, EndOfArray_ToString)
- {
- EXPECT_EQ(Path("/-").ToString(), "/-");
- EXPECT_EQ(Path("/0/-").ToString(), "/0/-");
- }
- TEST_F(DomPathTests, MixedPath_AppendToString)
- {
- Path p("/foo/0");
- AZStd::string s;
- p.AppendToString(s);
- EXPECT_EQ(s, "/foo/0");
- p.AppendToString(s);
- EXPECT_EQ(s, "/foo/0/foo/0");
- }
- TEST_F(DomPathTests, MixedPath_AppendToFixedString)
- {
- Path p("/foo/0");
- {
- AZStd::fixed_string<7> s;
- p.AppendToString(s);
- EXPECT_EQ(s, "/foo/0");
- }
- {
- AZStd::fixed_string<9> s;
- p.AppendToString(s);
- EXPECT_EQ(s, "/foo/0");
- p.AppendToString(s);
- EXPECT_EQ(s, "/foo/0/fo");
- }
- }
- } // namespace AZ::Dom::Tests
|