summaryrefslogtreecommitdiffstats
path: root/tests/core
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-02-29 13:53:34 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-02-29 13:53:34 +0100
commit1cc9190c70ac1a1b0e460353f291c1c661fafc9e (patch)
tree493cbc68cc45172d20cd069434dff9595281bf41 /tests/core
parent05b44f3ef285d518da61c0f3a307c43c41b5ec8e (diff)
parentcd221c1816fe1ffa9c0e730667ade2940dd14632 (diff)
downloadredot-engine-1cc9190c70ac1a1b0e460353f291c1c661fafc9e.tar.gz
Merge pull request #81822 from nlupugla/nodepath-slice
Add `NodePath::slice` method
Diffstat (limited to 'tests/core')
-rw-r--r--tests/core/string/test_node_path.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/core/string/test_node_path.h b/tests/core/string/test_node_path.h
index 031a33c570..bdbc578e85 100644
--- a/tests/core/string/test_node_path.h
+++ b/tests/core/string/test_node_path.h
@@ -167,6 +167,59 @@ TEST_CASE("[NodePath] Empty path") {
node_path_empty.is_empty(),
"The node path should be considered empty.");
}
+
+TEST_CASE("[NodePath] Slice") {
+ const NodePath node_path_relative = NodePath("Parent/Child:prop");
+ const NodePath node_path_absolute = NodePath("/root/Parent/Child:prop");
+ CHECK_MESSAGE(
+ node_path_relative.slice(0, 2) == NodePath("Parent/Child"),
+ "The slice lower bound should be inclusive and the slice upper bound should be exclusive.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(3) == NodePath(":prop"),
+ "Slicing on the length of the path should return the last entry.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(1, 3) == NodePath("Child:prop"),
+ "Slicing should include names and subnames.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(-1) == NodePath(":prop"),
+ "Slicing on -1 should return the last entry.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(0, -1) == NodePath("Parent/Child"),
+ "Slicing up to -1 should include the second-to-last entry.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(-2, -1) == NodePath("Child"),
+ "Slicing from negative to negative should treat lower bound as inclusive and upper bound as exclusive.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(0, 10) == NodePath("Parent/Child:prop"),
+ "Slicing past the length of the path should work like slicing up to the last entry.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(-10, 2) == NodePath("Parent/Child"),
+ "Slicing negatively past the length of the path should work like slicing from the first entry.");
+ CHECK_MESSAGE(
+ node_path_relative.slice(1, 1) == NodePath(""),
+ "Slicing with a lower bound equal to upper bound should return empty path.");
+
+ CHECK_MESSAGE(
+ node_path_absolute.slice(0, 2) == NodePath("/root/Parent"),
+ "Slice from beginning of an absolute path should be an absolute path.");
+ CHECK_MESSAGE(
+ node_path_absolute.slice(1, 4) == NodePath("Parent/Child:prop"),
+ "Slice of an absolute path that does not start at the beginning should be a relative path.");
+ CHECK_MESSAGE(
+ node_path_absolute.slice(3, 4) == NodePath(":prop"),
+ "Slice of an absolute path that does not start at the beginning should be a relative path.");
+
+ CHECK_MESSAGE(
+ NodePath("").slice(0, 1) == NodePath(""),
+ "Slice of an empty path should be an empty path.");
+ CHECK_MESSAGE(
+ NodePath("").slice(-1, 2) == NodePath(""),
+ "Slice of an empty path should be an empty path.");
+ CHECK_MESSAGE(
+ NodePath("/").slice(-1, 2) == NodePath("/"),
+ "Slice of an empty absolute path should be an empty absolute path.");
+}
+
} // namespace TestNodePath
#endif // TEST_NODE_PATH_H