You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Merge pull request #100954 from Bromeon/bugfix/nodepath-slice
Fix `NodePath::slice()` incorrect behavior for subname indexing
This commit is contained in:
@@ -255,7 +255,7 @@ NodePath NodePath::slice(int p_begin, int p_end) const {
|
|||||||
if (end < 0) {
|
if (end < 0) {
|
||||||
end += total_count;
|
end += total_count;
|
||||||
}
|
}
|
||||||
const int sub_begin = MAX(begin - name_count - 1, 0);
|
const int sub_begin = MAX(begin - name_count, 0);
|
||||||
const int sub_end = MAX(end - name_count, 0);
|
const int sub_end = MAX(end - name_count, 0);
|
||||||
|
|
||||||
const Vector<StringName> names = get_names().slice(begin, end);
|
const Vector<StringName> names = get_names().slice(begin, end);
|
||||||
|
|||||||
@@ -169,28 +169,31 @@ TEST_CASE("[NodePath] Empty path") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[NodePath] Slice") {
|
TEST_CASE("[NodePath] Slice") {
|
||||||
const NodePath node_path_relative = NodePath("Parent/Child:prop");
|
const NodePath node_path_relative = NodePath("Parent/Child:prop:subprop");
|
||||||
const NodePath node_path_absolute = NodePath("/root/Parent/Child:prop");
|
const NodePath node_path_absolute = NodePath("/root/Parent/Child:prop");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(0, 2) == NodePath("Parent/Child"),
|
node_path_relative.slice(0, 2) == NodePath("Parent/Child"),
|
||||||
"The slice lower bound should be inclusive and the slice upper bound should be exclusive.");
|
"The slice lower bound should be inclusive and the slice upper bound should be exclusive.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(3) == NodePath(":prop"),
|
node_path_relative.slice(3) == NodePath(":subprop"),
|
||||||
"Slicing on the length of the path should return the last entry.");
|
"Slicing on the last index (length - 1) should return the last entry.");
|
||||||
|
CHECK_MESSAGE(
|
||||||
|
node_path_relative.slice(1) == NodePath("Child:prop:subprop"),
|
||||||
|
"Slicing without upper bound should return remaining entries after index.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(1, 3) == NodePath("Child:prop"),
|
node_path_relative.slice(1, 3) == NodePath("Child:prop"),
|
||||||
"Slicing should include names and subnames.");
|
"Slicing should include names and subnames.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(-1) == NodePath(":prop"),
|
node_path_relative.slice(-1) == NodePath(":subprop"),
|
||||||
"Slicing on -1 should return the last entry.");
|
"Slicing on -1 should return the last entry.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(0, -1) == NodePath("Parent/Child"),
|
node_path_relative.slice(0, -1) == NodePath("Parent/Child:prop"),
|
||||||
"Slicing up to -1 should include the second-to-last entry.");
|
"Slicing up to -1 should include the second-to-last entry.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(-2, -1) == NodePath("Child"),
|
node_path_relative.slice(-2, -1) == NodePath(":prop"),
|
||||||
"Slicing from negative to negative should treat lower bound as inclusive and upper bound as exclusive.");
|
"Slicing from negative to negative should treat lower bound as inclusive and upper bound as exclusive.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(0, 10) == NodePath("Parent/Child:prop"),
|
node_path_relative.slice(0, 10) == NodePath("Parent/Child:prop:subprop"),
|
||||||
"Slicing past the length of the path should work like slicing up to the last entry.");
|
"Slicing past the length of the path should work like slicing up to the last entry.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
node_path_relative.slice(-10, 2) == NodePath("Parent/Child"),
|
node_path_relative.slice(-10, 2) == NodePath("Parent/Child"),
|
||||||
|
|||||||
Reference in New Issue
Block a user