summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/core/config/test_project_settings.h2
-rw-r--r--tests/core/io/test_marshalls.h99
-rw-r--r--tests/core/math/test_aabb.h2
-rw-r--r--tests/core/math/test_color.h2
-rw-r--r--tests/core/math/test_rect2.h2
-rw-r--r--tests/core/object/test_object.h4
-rw-r--r--tests/core/string/test_fuzzy_search.h83
-rw-r--r--tests/core/string/test_string.h61
-rw-r--r--tests/core/string/test_translation.h2
-rw-r--r--tests/core/string/test_translation_server.h88
-rw-r--r--tests/core/templates/test_a_hash_map.h295
-rw-r--r--tests/core/variant/test_variant_utility.h2
-rw-r--r--tests/data/fuzzy_search/project_dir_tree.txt999
-rw-r--r--tests/scene/test_audio_stream_wav.h2
-rw-r--r--tests/scene/test_primitives.h18
-rw-r--r--tests/scene/test_tree.h126
-rw-r--r--tests/scene/test_viewport.h2
-rw-r--r--tests/servers/test_navigation_server_3d.h2
-rw-r--r--tests/test_macros.h2
-rw-r--r--tests/test_main.cpp2
20 files changed, 1742 insertions, 53 deletions
diff --git a/tests/core/config/test_project_settings.h b/tests/core/config/test_project_settings.h
index 0e1058a626..5a000b19a0 100644
--- a/tests/core/config/test_project_settings.h
+++ b/tests/core/config/test_project_settings.h
@@ -40,7 +40,7 @@ class TestProjectSettingsInternalsAccessor {
public:
static String &resource_path() {
return ProjectSettings::get_singleton()->resource_path;
- };
+ }
};
namespace TestProjectSettings {
diff --git a/tests/core/io/test_marshalls.h b/tests/core/io/test_marshalls.h
index de8d6e1406..6716984681 100644
--- a/tests/core/io/test_marshalls.h
+++ b/tests/core/io/test_marshalls.h
@@ -160,7 +160,7 @@ TEST_CASE("[Marshalls] NIL Variant encoding") {
uint8_t buffer[4];
CHECK(encode_variant(variant, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 4, "Length == 4 bytes for header");
+ CHECK_MESSAGE(r_len == 4, "Length == 4 bytes for header.");
CHECK_MESSAGE(buffer[0] == 0x00, "Variant::NIL");
CHECK(buffer[1] == 0x00);
CHECK(buffer[2] == 0x00);
@@ -174,7 +174,7 @@ TEST_CASE("[Marshalls] INT 32 bit Variant encoding") {
uint8_t buffer[8];
CHECK(encode_variant(variant, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for header + 4 bytes for int32_t");
+ CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for header + 4 bytes for `int32_t`.");
CHECK_MESSAGE(buffer[0] == 0x02, "Variant::INT");
CHECK(buffer[1] == 0x00);
CHECK(buffer[2] == 0x00);
@@ -192,7 +192,7 @@ TEST_CASE("[Marshalls] INT 64 bit Variant encoding") {
uint8_t buffer[12];
CHECK(encode_variant(variant, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for header + 8 bytes for int64_t");
+ CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for header + 8 bytes for `int64_t`.");
CHECK_MESSAGE(buffer[0] == 0x02, "Variant::INT");
CHECK(buffer[1] == 0x00);
CHECK_MESSAGE(buffer[2] == 0x01, "HEADER_DATA_FLAG_64");
@@ -214,7 +214,7 @@ TEST_CASE("[Marshalls] FLOAT single precision Variant encoding") {
uint8_t buffer[8];
CHECK(encode_variant(variant, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for header + 4 bytes for float");
+ CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for header + 4 bytes for `float`.");
CHECK_MESSAGE(buffer[0] == 0x03, "Variant::FLOAT");
CHECK(buffer[1] == 0x00);
CHECK(buffer[2] == 0x00);
@@ -232,7 +232,7 @@ TEST_CASE("[Marshalls] FLOAT double precision Variant encoding") {
uint8_t buffer[12];
CHECK(encode_variant(variant, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for header + 8 bytes for double");
+ CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for header + 8 bytes for `double`.");
CHECK_MESSAGE(buffer[0] == 0x03, "Variant::FLOAT");
CHECK(buffer[1] == 0x00);
CHECK_MESSAGE(buffer[2] == 0x01, "HEADER_DATA_FLAG_64");
@@ -335,10 +335,10 @@ TEST_CASE("[Marshalls] Typed array encoding") {
uint8_t buffer[24];
CHECK(encode_variant(array, buffer, r_len) == OK);
- CHECK_MESSAGE(r_len == 24, "Length == 4 bytes for header + 4 bytes for array type + 4 bytes for array size + 12 bytes for element");
+ CHECK_MESSAGE(r_len == 24, "Length == 4 bytes for header + 4 bytes for array type + 4 bytes for array size + 12 bytes for element.");
CHECK_MESSAGE(buffer[0] == 0x1c, "Variant::ARRAY");
CHECK(buffer[1] == 0x00);
- CHECK_MESSAGE(buffer[2] == 0x01, "HEADER_DATA_FIELD_TYPED_ARRAY_BUILTIN");
+ CHECK_MESSAGE(buffer[2] == 0x01, "CONTAINER_TYPE_KIND_BUILTIN");
CHECK(buffer[3] == 0x00);
// Check array type.
CHECK_MESSAGE(buffer[4] == 0x02, "Variant::INT");
@@ -370,7 +370,7 @@ TEST_CASE("[Marshalls] Typed array decoding") {
Variant variant;
int r_len;
uint8_t buffer[] = {
- 0x1c, 0x00, 0x01, 0x00, // Variant::ARRAY, HEADER_DATA_FIELD_TYPED_ARRAY_BUILTIN
+ 0x1c, 0x00, 0x01, 0x00, // Variant::ARRAY, CONTAINER_TYPE_KIND_BUILTIN
0x02, 0x00, 0x00, 0x00, // Array type (Variant::INT).
0x01, 0x00, 0x00, 0x00, // Array size.
0x02, 0x00, 0x01, 0x00, // Element type (Variant::INT, HEADER_DATA_FLAG_64).
@@ -386,6 +386,89 @@ TEST_CASE("[Marshalls] Typed array decoding") {
CHECK(array[0] == Variant(uint64_t(0x0f123456789abcdef)));
}
+TEST_CASE("[Marshalls] Typed dicttionary encoding") {
+ int r_len;
+ Dictionary dictionary;
+ dictionary.set_typed(Variant::INT, StringName(), Ref<Script>(), Variant::INT, StringName(), Ref<Script>());
+ dictionary[Variant(uint64_t(0x0f123456789abcdef))] = Variant(uint64_t(0x0f123456789abcdef));
+ uint8_t buffer[40];
+
+ CHECK(encode_variant(dictionary, buffer, r_len) == OK);
+ CHECK_MESSAGE(r_len == 40, "Length == 4 bytes for header + 8 bytes for dictionary type + 4 bytes for dictionary size + 24 bytes for key-value pair.");
+ CHECK_MESSAGE(buffer[0] == 0x1b, "Variant::DICTIONARY");
+ CHECK(buffer[1] == 0x00);
+ CHECK_MESSAGE(buffer[2] == 0x05, "key: CONTAINER_TYPE_KIND_BUILTIN | value: CONTAINER_TYPE_KIND_BUILTIN");
+ CHECK(buffer[3] == 0x00);
+ // Check dictionary key type.
+ CHECK_MESSAGE(buffer[4] == 0x02, "Variant::INT");
+ CHECK(buffer[5] == 0x00);
+ CHECK(buffer[6] == 0x00);
+ CHECK(buffer[7] == 0x00);
+ // Check dictionary value type.
+ CHECK_MESSAGE(buffer[8] == 0x02, "Variant::INT");
+ CHECK(buffer[9] == 0x00);
+ CHECK(buffer[10] == 0x00);
+ CHECK(buffer[11] == 0x00);
+ // Check dictionary size.
+ CHECK(buffer[12] == 0x01);
+ CHECK(buffer[13] == 0x00);
+ CHECK(buffer[14] == 0x00);
+ CHECK(buffer[15] == 0x00);
+ // Check key type.
+ CHECK_MESSAGE(buffer[16] == 0x02, "Variant::INT");
+ CHECK(buffer[17] == 0x00);
+ CHECK_MESSAGE(buffer[18] == 0x01, "HEADER_DATA_FLAG_64");
+ CHECK(buffer[19] == 0x00);
+ // Check key value.
+ CHECK(buffer[20] == 0xef);
+ CHECK(buffer[21] == 0xcd);
+ CHECK(buffer[22] == 0xab);
+ CHECK(buffer[23] == 0x89);
+ CHECK(buffer[24] == 0x67);
+ CHECK(buffer[25] == 0x45);
+ CHECK(buffer[26] == 0x23);
+ CHECK(buffer[27] == 0xf1);
+ // Check value type.
+ CHECK_MESSAGE(buffer[28] == 0x02, "Variant::INT");
+ CHECK(buffer[29] == 0x00);
+ CHECK_MESSAGE(buffer[30] == 0x01, "HEADER_DATA_FLAG_64");
+ CHECK(buffer[31] == 0x00);
+ // Check value value.
+ CHECK(buffer[32] == 0xef);
+ CHECK(buffer[33] == 0xcd);
+ CHECK(buffer[34] == 0xab);
+ CHECK(buffer[35] == 0x89);
+ CHECK(buffer[36] == 0x67);
+ CHECK(buffer[37] == 0x45);
+ CHECK(buffer[38] == 0x23);
+ CHECK(buffer[39] == 0xf1);
+}
+
+TEST_CASE("[Marshalls] Typed dictionary decoding") {
+ Variant variant;
+ int r_len;
+ uint8_t buffer[] = {
+ 0x1b, 0x00, 0x05, 0x00, // Variant::DICTIONARY, key: CONTAINER_TYPE_KIND_BUILTIN | value: CONTAINER_TYPE_KIND_BUILTIN
+ 0x02, 0x00, 0x00, 0x00, // Dictionary key type (Variant::INT).
+ 0x02, 0x00, 0x00, 0x00, // Dictionary value type (Variant::INT).
+ 0x01, 0x00, 0x00, 0x00, // Dictionary size.
+ 0x02, 0x00, 0x01, 0x00, // Key type (Variant::INT, HEADER_DATA_FLAG_64).
+ 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0xf1, // Key value.
+ 0x02, 0x00, 0x01, 0x00, // Value type (Variant::INT, HEADER_DATA_FLAG_64).
+ 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0xf1, // Value value.
+ };
+
+ CHECK(decode_variant(variant, buffer, 40, &r_len) == OK);
+ CHECK(r_len == 40);
+ CHECK(variant.get_type() == Variant::DICTIONARY);
+ Dictionary dictionary = variant;
+ CHECK(dictionary.get_typed_key_builtin() == Variant::INT);
+ CHECK(dictionary.get_typed_value_builtin() == Variant::INT);
+ CHECK(dictionary.size() == 1);
+ CHECK(dictionary.has(Variant(uint64_t(0x0f123456789abcdef))));
+ CHECK(dictionary[Variant(uint64_t(0x0f123456789abcdef))] == Variant(uint64_t(0x0f123456789abcdef)));
+}
+
} // namespace TestMarshalls
#endif // TEST_MARSHALLS_H
diff --git a/tests/core/math/test_aabb.h b/tests/core/math/test_aabb.h
index 741e6af5d4..eb6977fd69 100644
--- a/tests/core/math/test_aabb.h
+++ b/tests/core/math/test_aabb.h
@@ -48,7 +48,7 @@ TEST_CASE("[AABB] Constructor methods") {
TEST_CASE("[AABB] String conversion") {
CHECK_MESSAGE(
- String(AABB(Vector3(-1.5, 2, -2.5), Vector3(4, 5, 6))) == "[P: (-1.5, 2, -2.5), S: (4, 5, 6)]",
+ String(AABB(Vector3(-1.5, 2, -2.5), Vector3(4, 5, 6))) == "[P: (-1.5, 2.0, -2.5), S: (4.0, 5.0, 6.0)]",
"The string representation should match the expected value.");
}
diff --git a/tests/core/math/test_color.h b/tests/core/math/test_color.h
index bd2d4f40e5..3d36079102 100644
--- a/tests/core/math/test_color.h
+++ b/tests/core/math/test_color.h
@@ -140,7 +140,7 @@ TEST_CASE("[Color] Conversion methods") {
cyan.to_rgba64() == 0x0000'ffff'ffff'ffff,
"The returned 64-bit BGR number should match the expected value.");
CHECK_MESSAGE(
- String(cyan) == "(0, 1, 1, 1)",
+ String(cyan) == "(0.0, 1.0, 1.0, 1.0)",
"The string representation should match the expected value.");
}
diff --git a/tests/core/math/test_rect2.h b/tests/core/math/test_rect2.h
index c4368808a6..a93bfeb71b 100644
--- a/tests/core/math/test_rect2.h
+++ b/tests/core/math/test_rect2.h
@@ -57,7 +57,7 @@ TEST_CASE("[Rect2] Constructor methods") {
TEST_CASE("[Rect2] String conversion") {
// Note: This also depends on the Vector2 string representation.
CHECK_MESSAGE(
- String(Rect2(0, 100, 1280, 720)) == "[P: (0, 100), S: (1280, 720)]",
+ String(Rect2(0, 100, 1280, 720)) == "[P: (0.0, 100.0), S: (1280.0, 720.0)]",
"The string representation should match the expected value.");
}
diff --git a/tests/core/object/test_object.h b/tests/core/object/test_object.h
index e703698ec6..55c53e2d03 100644
--- a/tests/core/object/test_object.h
+++ b/tests/core/object/test_object.h
@@ -95,10 +95,10 @@ public:
}
bool property_can_revert(const StringName &p_name) const override {
return false;
- };
+ }
bool property_get_revert(const StringName &p_name, Variant &r_ret) const override {
return false;
- };
+ }
void get_method_list(List<MethodInfo> *p_list) const override {
}
bool has_method(const StringName &p_method) const override {
diff --git a/tests/core/string/test_fuzzy_search.h b/tests/core/string/test_fuzzy_search.h
new file mode 100644
index 0000000000..d647ebdd1a
--- /dev/null
+++ b/tests/core/string/test_fuzzy_search.h
@@ -0,0 +1,83 @@
+/**************************************************************************/
+/* test_fuzzy_search.h */
+/**************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/**************************************************************************/
+/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
+/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/**************************************************************************/
+
+#ifndef TEST_FUZZY_SEARCH_H
+#define TEST_FUZZY_SEARCH_H
+
+#include "core/string/fuzzy_search.h"
+#include "tests/test_macros.h"
+
+namespace TestFuzzySearch {
+
+struct FuzzySearchTestCase {
+ String query;
+ String expected;
+};
+
+// Ideally each of these test queries should represent a different aspect, and potentially bottleneck, of the search process.
+const FuzzySearchTestCase test_cases[] = {
+ // Short query, many matches, few adjacent characters
+ { "///gd", "./menu/hud/hud.gd" },
+ // Filename match with typo
+ { "sm.png", "./entity/blood_sword/sam.png" },
+ // Multipart filename word matches
+ { "ham ", "./entity/game_trap/ha_missed_me.wav" },
+ // Single word token matches
+ { "push background", "./entity/background_zone1/background/push.png" },
+ // Long token matches
+ { "background_freighter background png", "./entity/background_freighter/background/background.png" },
+ // Many matches, many short tokens
+ { "menu menu characters wav", "./menu/menu/characters/smoker/0.wav" },
+ // Maximize total matches
+ { "entity gd", "./entity/entity_man.gd" }
+};
+
+Vector<String> load_test_data() {
+ Ref<FileAccess> fp = FileAccess::open(TestUtils::get_data_path("fuzzy_search/project_dir_tree.txt"), FileAccess::READ);
+ REQUIRE(fp.is_valid());
+ return fp->get_as_utf8_string().split("\n");
+}
+
+TEST_CASE("[FuzzySearch] Test fuzzy search results") {
+ FuzzySearch search;
+ Vector<FuzzySearchResult> results;
+ Vector<String> targets = load_test_data();
+
+ for (FuzzySearchTestCase test_case : test_cases) {
+ search.set_query(test_case.query);
+ search.search_all(targets, results);
+ CHECK_GT(results.size(), 0);
+ CHECK_EQ(results[0].target, test_case.expected);
+ }
+}
+
+} //namespace TestFuzzySearch
+
+#endif // TEST_FUZZY_SEARCH_H
diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h
index 8559737e74..9adc97e845 100644
--- a/tests/core/string/test_string.h
+++ b/tests/core/string/test_string.h
@@ -389,6 +389,19 @@ TEST_CASE("[String] Find") {
MULTICHECK_STRING_INT_EQ(s, rfind, "", 15, -1);
}
+TEST_CASE("[String] Find character") {
+ String s = "racecar";
+ CHECK_EQ(s.find_char('r'), 0);
+ CHECK_EQ(s.find_char('r', 1), 6);
+ CHECK_EQ(s.find_char('e'), 3);
+ CHECK_EQ(s.find_char('e', 4), -1);
+
+ CHECK_EQ(s.rfind_char('r'), 6);
+ CHECK_EQ(s.rfind_char('r', 5), 0);
+ CHECK_EQ(s.rfind_char('e'), 3);
+ CHECK_EQ(s.rfind_char('e', 2), -1);
+}
+
TEST_CASE("[String] Find case insensitive") {
String s = "Pretty Whale Whale";
MULTICHECK_STRING_EQ(s, findn, "WHA", 7);
@@ -455,16 +468,32 @@ TEST_CASE("[String] Erasing") {
}
TEST_CASE("[String] Number to string") {
- CHECK(String::num(0) == "0");
- CHECK(String::num(0.0) == "0"); // No trailing zeros.
- CHECK(String::num(-0.0) == "-0"); // Includes sign even for zero.
+ CHECK(String::num(0) == "0.0"); // The method takes double, so always add zeros.
+ CHECK(String::num(0.0) == "0.0");
+ CHECK(String::num(-0.0) == "-0.0"); // Includes sign even for zero.
CHECK(String::num(3.141593) == "3.141593");
CHECK(String::num(3.141593, 3) == "3.142");
+ CHECK(String::num(42.100023, 4) == "42.1"); // No trailing zeros.
CHECK(String::num_scientific(30000000) == "3e+07");
+
+ // String::num_int64 tests.
CHECK(String::num_int64(3141593) == "3141593");
+ CHECK(String::num_int64(-3141593) == "-3141593");
CHECK(String::num_int64(0xA141593, 16) == "a141593");
CHECK(String::num_int64(0xA141593, 16, true) == "A141593");
- CHECK(String::num(42.100023, 4) == "42.1"); // No trailing zeros.
+ ERR_PRINT_OFF;
+ CHECK(String::num_int64(3141593, 1) == ""); // Invalid base < 2.
+ CHECK(String::num_int64(3141593, 37) == ""); // Invalid base > 36.
+ ERR_PRINT_ON;
+
+ // String::num_uint64 tests.
+ CHECK(String::num_uint64(4294967295) == "4294967295");
+ CHECK(String::num_uint64(0xF141593, 16) == "f141593");
+ CHECK(String::num_uint64(0xF141593, 16, true) == "F141593");
+ ERR_PRINT_OFF;
+ CHECK(String::num_uint64(4294967295, 1) == ""); // Invalid base < 2.
+ CHECK(String::num_uint64(4294967295, 37) == ""); // Invalid base > 36.
+ ERR_PRINT_ON;
// String::num_real tests.
CHECK(String::num_real(1.0) == "1.0");
@@ -476,15 +505,15 @@ TEST_CASE("[String] Number to string") {
CHECK(String::num_real(3.141593) == "3.141593");
CHECK(String::num_real(3.141) == "3.141"); // No trailing zeros.
#ifdef REAL_T_IS_DOUBLE
- CHECK_MESSAGE(String::num_real(123.456789) == "123.456789", "Prints the appropriate amount of digits for real_t = double.");
- CHECK_MESSAGE(String::num_real(-123.456789) == "-123.456789", "Prints the appropriate amount of digits for real_t = double.");
- CHECK_MESSAGE(String::num_real(Math_PI) == "3.14159265358979", "Prints the appropriate amount of digits for real_t = double.");
- CHECK_MESSAGE(String::num_real(3.1415f) == "3.1414999961853", "Prints more digits of 32-bit float when real_t = double (ones that would be reliable for double) and no trailing zero.");
+ CHECK_MESSAGE(String::num_real(real_t(123.456789)) == "123.456789", "Prints the appropriate amount of digits for real_t = double.");
+ CHECK_MESSAGE(String::num_real(real_t(-123.456789)) == "-123.456789", "Prints the appropriate amount of digits for real_t = double.");
+ CHECK_MESSAGE(String::num_real(real_t(Math_PI)) == "3.14159265358979", "Prints the appropriate amount of digits for real_t = double.");
+ CHECK_MESSAGE(String::num_real(real_t(3.1415f)) == "3.1414999961853", "Prints more digits of 32-bit float when real_t = double (ones that would be reliable for double) and no trailing zero.");
#else
- CHECK_MESSAGE(String::num_real(123.456789) == "123.4568", "Prints the appropriate amount of digits for real_t = float.");
- CHECK_MESSAGE(String::num_real(-123.456789) == "-123.4568", "Prints the appropriate amount of digits for real_t = float.");
- CHECK_MESSAGE(String::num_real(Math_PI) == "3.141593", "Prints the appropriate amount of digits for real_t = float.");
- CHECK_MESSAGE(String::num_real(3.1415f) == "3.1415", "Prints only reliable digits of 32-bit float when real_t = float.");
+ CHECK_MESSAGE(String::num_real(real_t(123.456789)) == "123.4568", "Prints the appropriate amount of digits for real_t = float.");
+ CHECK_MESSAGE(String::num_real(real_t(-123.456789)) == "-123.4568", "Prints the appropriate amount of digits for real_t = float.");
+ CHECK_MESSAGE(String::num_real(real_t(Math_PI)) == "3.141593", "Prints the appropriate amount of digits for real_t = float.");
+ CHECK_MESSAGE(String::num_real(real_t(3.1415f)) == "3.1415", "Prints only reliable digits of 32-bit float when real_t = float.");
#endif // REAL_T_IS_DOUBLE
// Checks doubles with many decimal places.
@@ -493,7 +522,7 @@ TEST_CASE("[String] Number to string") {
CHECK(String::num(-0.0000012345432123454321) == "-0.00000123454321");
CHECK(String::num(-10000.0000012345432123454321) == "-10000.0000012345");
CHECK(String::num(0.0000000000012345432123454321) == "0.00000000000123");
- CHECK(String::num(0.0000000000012345432123454321, 3) == "0");
+ CHECK(String::num(0.0000000000012345432123454321, 3) == "0.0");
// Note: When relevant (remainder > 0.5), the last digit gets rounded up,
// which can also lead to not include a trailing zero, e.g. "...89" -> "...9".
@@ -1238,6 +1267,12 @@ TEST_CASE("[String] is_subsequence_of") {
CHECK(String("Sub").is_subsequence_ofn(a));
}
+TEST_CASE("[String] is_lowercase") {
+ CHECK(String("abcd1234 !@#$%^&*()_-=+,.<>/\\|[]{};':\"`~").is_lowercase());
+ CHECK(String("").is_lowercase());
+ CHECK(!String("abc_ABC").is_lowercase());
+}
+
TEST_CASE("[String] match") {
CHECK(String("img1.png").match("*.png"));
CHECK(!String("img1.jpeg").match("*.png"));
diff --git a/tests/core/string/test_translation.h b/tests/core/string/test_translation.h
index 7c389191e3..2b1069d40c 100644
--- a/tests/core/string/test_translation.h
+++ b/tests/core/string/test_translation.h
@@ -161,7 +161,7 @@ TEST_CASE("[TranslationCSV] CSV import") {
List<String> gen_files;
- Error result = import_csv_translation->import(TestUtils::get_data_path("translations.csv"),
+ Error result = import_csv_translation->import(0, TestUtils::get_data_path("translations.csv"),
"", options, nullptr, &gen_files);
CHECK(result == OK);
CHECK(gen_files.size() == 4);
diff --git a/tests/core/string/test_translation_server.h b/tests/core/string/test_translation_server.h
index ac1599f2e8..6668a7b57b 100644
--- a/tests/core/string/test_translation_server.h
+++ b/tests/core/string/test_translation_server.h
@@ -37,27 +37,37 @@
namespace TestTranslationServer {
TEST_CASE("[TranslationServer] Translation operations") {
- Ref<Translation> t = memnew(Translation);
- t->set_locale("uk");
- t->add_message("Good Morning", String::utf8("Добрий ранок"));
+ Ref<Translation> t1 = memnew(Translation);
+ t1->set_locale("uk");
+ t1->add_message("Good Morning", String(U"Добрий ранок"));
+
+ Ref<Translation> t2 = memnew(Translation);
+ t2->set_locale("uk");
+ t2->add_message("Hello Godot", String(U"你好戈多"));
TranslationServer *ts = TranslationServer::get_singleton();
+ // Adds translation for UK locale for the first time.
int l_count_before = ts->get_loaded_locales().size();
- ts->add_translation(t);
+ ts->add_translation(t1);
int l_count_after = ts->get_loaded_locales().size();
- // Newly created Translation object should be added to the list, so the counter should increase, too.
CHECK(l_count_after > l_count_before);
- Ref<Translation> trans = ts->get_translation_object("uk");
- CHECK(trans.is_valid());
+ // Adds translation for UK locale again.
+ ts->add_translation(t2);
+ CHECK_EQ(ts->get_loaded_locales().size(), l_count_after);
+
+ // Removing that translation.
+ ts->remove_translation(t2);
+ CHECK_EQ(ts->get_loaded_locales().size(), l_count_after);
+
+ CHECK(ts->get_translation_object("uk").is_valid());
ts->set_locale("uk");
CHECK(ts->translate("Good Morning") == String::utf8("Добрий ранок"));
- ts->remove_translation(t);
- trans = ts->get_translation_object("uk");
- CHECK(trans.is_null());
+ ts->remove_translation(t1);
+ CHECK(ts->get_translation_object("uk").is_null());
// If no suitable Translation object has been found - the original message should be returned.
CHECK(ts->translate("Good Morning") == "Good Morning");
}
@@ -110,18 +120,50 @@ TEST_CASE("[TranslationServer] Comparing locales") {
locale_a = "sr-Latn-CS";
locale_b = "sr-Latn-RS";
- // Two elements from locales match.
+ // Script matches (+1) but country doesn't (-1).
res = ts->compare_locales(locale_a, locale_b);
- CHECK(res == 2);
+ CHECK(res == 5);
locale_a = "uz-Cyrl-UZ";
locale_b = "uz-Latn-UZ";
- // Two elements match, but they are not sequentual.
+ // Country matches (+1) but script doesn't (-1).
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 5);
+
+ locale_a = "aa-Latn-ER";
+ locale_b = "aa-Latn-ER-saaho";
+
+ // Script and country match (+2) with variant on one locale (+0).
res = ts->compare_locales(locale_a, locale_b);
- CHECK(res == 2);
+ CHECK(res == 7);
+
+ locale_a = "uz-Cyrl-UZ";
+ locale_b = "uz-Latn-KG";
+
+ // Both script and country mismatched (-2).
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 3);
+
+ locale_a = "es-ES";
+ locale_b = "es-AR";
+
+ // Mismatched country (-1).
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 4);
+
+ locale_a = "es";
+ locale_b = "es-AR";
+
+ // No country for one locale (+0).
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 5);
locale_a = "es-EC";
locale_b = "fr-LU";
@@ -130,6 +172,24 @@ TEST_CASE("[TranslationServer] Comparing locales") {
res = ts->compare_locales(locale_a, locale_b);
CHECK(res == 0);
+
+ locale_a = "zh-HK";
+ locale_b = "zh";
+
+ // In full standardization, zh-HK becomes zh_Hant_HK and zh becomes
+ // zh_Hans_CN. Both script and country mismatch (-2).
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 3);
+
+ locale_a = "zh-CN";
+ locale_b = "zh";
+
+ // In full standardization, zh and zh-CN both become zh_Hans_CN for an
+ // exact match.
+ res = ts->compare_locales(locale_a, locale_b);
+
+ CHECK(res == 10);
}
} // namespace TestTranslationServer
diff --git a/tests/core/templates/test_a_hash_map.h b/tests/core/templates/test_a_hash_map.h
new file mode 100644
index 0000000000..e67ee7b441
--- /dev/null
+++ b/tests/core/templates/test_a_hash_map.h
@@ -0,0 +1,295 @@
+/**************************************************************************/
+/* test_a_hash_map.h */
+/**************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/**************************************************************************/
+/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
+/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/**************************************************************************/
+
+#ifndef TEST_A_HASH_MAP_H
+#define TEST_A_HASH_MAP_H
+
+#include "core/templates/a_hash_map.h"
+
+#include "tests/test_macros.h"
+
+namespace TestAHashMap {
+
+TEST_CASE("[AHashMap] Insert element") {
+ AHashMap<int, int> map;
+ AHashMap<int, int>::Iterator e = map.insert(42, 84);
+
+ CHECK(e);
+ CHECK(e->key == 42);
+ CHECK(e->value == 84);
+ CHECK(map[42] == 84);
+ CHECK(map.has(42));
+ CHECK(map.find(42));
+}
+
+TEST_CASE("[AHashMap] Overwrite element") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(42, 1234);
+
+ CHECK(map[42] == 1234);
+}
+
+TEST_CASE("[AHashMap] Erase via element") {
+ AHashMap<int, int> map;
+ AHashMap<int, int>::Iterator e = map.insert(42, 84);
+ map.remove(e);
+ CHECK(!map.has(42));
+ CHECK(!map.find(42));
+}
+
+TEST_CASE("[AHashMap] Erase via key") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.erase(42);
+ CHECK(!map.has(42));
+ CHECK(!map.find(42));
+}
+
+TEST_CASE("[AHashMap] Size") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(123, 84);
+ map.insert(123, 84);
+ map.insert(0, 84);
+ map.insert(123485, 84);
+
+ CHECK(map.size() == 4);
+}
+
+TEST_CASE("[AHashMap] Iteration") {
+ AHashMap<int, int> map;
+
+ map.insert(42, 84);
+ map.insert(123, 12385);
+ map.insert(0, 12934);
+ map.insert(123485, 1238888);
+ map.insert(123, 111111);
+
+ Vector<Pair<int, int>> expected;
+ expected.push_back(Pair<int, int>(42, 84));
+ expected.push_back(Pair<int, int>(123, 111111));
+ expected.push_back(Pair<int, int>(0, 12934));
+ expected.push_back(Pair<int, int>(123485, 1238888));
+
+ int idx = 0;
+ for (const KeyValue<int, int> &E : map) {
+ CHECK(expected[idx] == Pair<int, int>(E.key, E.value));
+ idx++;
+ }
+
+ idx--;
+ for (AHashMap<int, int>::Iterator it = map.last(); it; --it) {
+ CHECK(expected[idx] == Pair<int, int>(it->key, it->value));
+ idx--;
+ }
+}
+
+TEST_CASE("[AHashMap] Const iteration") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(123, 12385);
+ map.insert(0, 12934);
+ map.insert(123485, 1238888);
+ map.insert(123, 111111);
+
+ const AHashMap<int, int> const_map = map;
+
+ Vector<Pair<int, int>> expected;
+ expected.push_back(Pair<int, int>(42, 84));
+ expected.push_back(Pair<int, int>(123, 111111));
+ expected.push_back(Pair<int, int>(0, 12934));
+ expected.push_back(Pair<int, int>(123485, 1238888));
+ expected.push_back(Pair<int, int>(123, 111111));
+
+ int idx = 0;
+ for (const KeyValue<int, int> &E : const_map) {
+ CHECK(expected[idx] == Pair<int, int>(E.key, E.value));
+ idx++;
+ }
+
+ idx--;
+ for (AHashMap<int, int>::ConstIterator it = const_map.last(); it; --it) {
+ CHECK(expected[idx] == Pair<int, int>(it->key, it->value));
+ idx--;
+ }
+}
+
+TEST_CASE("[AHashMap] Replace key") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(0, 12934);
+ CHECK(map.replace_key(0, 1));
+ CHECK(map.has(1));
+ CHECK(map[1] == 12934);
+}
+
+TEST_CASE("[AHashMap] Clear") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(123, 12385);
+ map.insert(0, 12934);
+
+ map.clear();
+ CHECK(!map.has(42));
+ CHECK(map.size() == 0);
+ CHECK(map.is_empty());
+}
+
+TEST_CASE("[AHashMap] Get") {
+ AHashMap<int, int> map;
+ map.insert(42, 84);
+ map.insert(123, 12385);
+ map.insert(0, 12934);
+
+ CHECK(map.get(123) == 12385);
+ map.get(123) = 10;
+ CHECK(map.get(123) == 10);
+
+ CHECK(*map.getptr(0) == 12934);
+ *map.getptr(0) = 1;
+ CHECK(*map.getptr(0) == 1);
+
+ CHECK(map.get(42) == 84);
+ CHECK(map.getptr(-10) == nullptr);
+}
+
+TEST_CASE("[AHashMap] Insert, iterate and remove many elements") {
+ const int elem_max = 1234;
+ AHashMap<int, int> map;
+ for (int i = 0; i < elem_max; i++) {
+ map.insert(i, i);
+ }
+
+ //insert order should have been kept
+ int idx = 0;
+ for (auto &K : map) {
+ CHECK(idx == K.key);
+ CHECK(idx == K.value);
+ CHECK(map.has(idx));
+ idx++;
+ }
+
+ Vector<int> elems_still_valid;
+
+ for (int i = 0; i < elem_max; i++) {
+ if ((i % 5) == 0) {
+ map.erase(i);
+ } else {
+ elems_still_valid.push_back(i);
+ }
+ }
+
+ CHECK(elems_still_valid.size() == map.size());
+
+ for (int i = 0; i < elems_still_valid.size(); i++) {
+ CHECK(map.has(elems_still_valid[i]));
+ }
+}
+
+TEST_CASE("[AHashMap] Insert, iterate and remove many strings") {
+ const int elem_max = 432;
+ AHashMap<String, String> map;
+ for (int i = 0; i < elem_max; i++) {
+ map.insert(itos(i), itos(i));
+ }
+
+ //insert order should have been kept
+ int idx = 0;
+ for (auto &K : map) {
+ CHECK(itos(idx) == K.key);
+ CHECK(itos(idx) == K.value);
+ CHECK(map.has(itos(idx)));
+ idx++;
+ }
+
+ Vector<String> elems_still_valid;
+
+ for (int i = 0; i < elem_max; i++) {
+ if ((i % 5) == 0) {
+ map.erase(itos(i));
+ } else {
+ elems_still_valid.push_back(itos(i));
+ }
+ }
+
+ CHECK(elems_still_valid.size() == map.size());
+
+ for (int i = 0; i < elems_still_valid.size(); i++) {
+ CHECK(map.has(elems_still_valid[i]));
+ }
+
+ elems_still_valid.clear();
+}
+
+TEST_CASE("[AHashMap] Copy constructor") {
+ AHashMap<int, int> map0;
+ const uint32_t count = 5;
+ for (uint32_t i = 0; i < count; i++) {
+ map0.insert(i, i);
+ }
+ AHashMap<int, int> map1(map0);
+ CHECK(map0.size() == map1.size());
+ CHECK(map0.get_capacity() == map1.get_capacity());
+ CHECK(*map0.getptr(0) == *map1.getptr(0));
+}
+
+TEST_CASE("[AHashMap] Operator =") {
+ AHashMap<int, int> map0;
+ AHashMap<int, int> map1;
+ const uint32_t count = 5;
+ map1.insert(1234, 1234);
+ for (uint32_t i = 0; i < count; i++) {
+ map0.insert(i, i);
+ }
+ map1 = map0;
+ CHECK(map0.size() == map1.size());
+ CHECK(map0.get_capacity() == map1.get_capacity());
+ CHECK(*map0.getptr(0) == *map1.getptr(0));
+}
+
+TEST_CASE("[AHashMap] Array methods") {
+ AHashMap<int, int> map;
+ for (int i = 0; i < 100; i++) {
+ map.insert(100 - i, i);
+ }
+ for (int i = 0; i < 100; i++) {
+ CHECK(map.get_by_index(i).value == i);
+ }
+ int index = map.get_index(1);
+ CHECK(map.get_by_index(index).value == 99);
+ CHECK(map.erase_by_index(index));
+ CHECK(!map.erase_by_index(index));
+ CHECK(map.get_index(1) == -1);
+}
+
+} // namespace TestAHashMap
+
+#endif // TEST_A_HASH_MAP_H
diff --git a/tests/core/variant/test_variant_utility.h b/tests/core/variant/test_variant_utility.h
index 93458b63f4..34b4880d51 100644
--- a/tests/core/variant/test_variant_utility.h
+++ b/tests/core/variant/test_variant_utility.h
@@ -89,7 +89,7 @@ TEST_CASE("[VariantUtility] Type conversion") {
converted = VariantUtilityFunctions::type_convert(basis, Variant::Type::STRING);
CHECK(converted.get_type() == Variant::Type::STRING);
- CHECK(converted == Variant("[X: (1.2, 0, 0), Y: (0, 3.4, 0), Z: (0, 0, 5.6)]"));
+ CHECK(converted == Variant("[X: (1.2, 0.0, 0.0), Y: (0.0, 3.4, 0.0), Z: (0.0, 0.0, 5.6)]"));
}
{
diff --git a/tests/data/fuzzy_search/project_dir_tree.txt b/tests/data/fuzzy_search/project_dir_tree.txt
new file mode 100644
index 0000000000..153dd8802a
--- /dev/null
+++ b/tests/data/fuzzy_search/project_dir_tree.txt
@@ -0,0 +1,999 @@
+./menu/home/home_menu.tscn
+./menu/tooltips/tooltip_server.tscn
+./menu/tooltips/tooltip_server.gd
+./menu/tooltips/tooltip.gd
+./menu/menu/characters/smoker/4.wav
+./menu/menu/characters/smoker/6.wav
+./menu/menu/characters/smoker/10.wav
+./menu/menu/characters/smoker/smoker.tscn
+./menu/menu/characters/smoker/8.wav
+./menu/menu/characters/smoker/type.gd
+./menu/menu/characters/smoker/9.wav
+./menu/menu/characters/smoker/5.wav
+./menu/menu/characters/smoker/0.wav
+./menu/menu/characters/smoker/back_light.png
+./menu/menu/characters/smoker/glasses.png
+./menu/menu/characters/smoker/smoker.gd
+./menu/menu/characters/smoker/cig.gd
+./menu/menu/characters/smoker/eyes.png
+./menu/menu/characters/smoker/3.wav
+./menu/menu/characters/smoker/to_pixelate.gd
+./menu/menu/characters/smoker/7.wav
+./menu/menu/characters/smoker/cig.png
+./menu/menu/characters/smoker/2.wav
+./menu/menu/characters/smoker/1.wav
+./menu/menu/characters/smoke.png
+./menu/menu/characters/space_bandit.tres
+./menu/menu/characters/dead_guy/blood_texture.png
+./menu/menu/characters/dead_guy/head_gibbed.png
+./menu/menu/characters/dead_guy/back_light.png
+./menu/menu/characters/dead_guy/smoker.gd
+./menu/menu/characters/dead_guy/eyes.png
+./menu/menu/characters/dead_guy/to_pixelate.gd
+./menu/menu/characters/dead_guy/dead_guy.gd
+./menu/menu/characters/dead_guy/eyes.gd
+./menu/menu/characters/dead_guy/x.png
+./menu/menu/characters/dead_guy/dead_guy.tscn
+./menu/menu/characters/dead_guy/mouth.png
+./menu/menu/characters/dead_guy/dead_guy.tres
+./menu/menu/characters/Label.gd
+./menu/menu/characters/guns2.png
+./menu/menu/characters/c.gd
+./menu/menu/characters/smoke.gd
+./menu/menu/characters/character.gd
+./menu/menu/characters/space_bandit/eyes.tres
+./menu/menu/characters/space_bandit/space_bandit_face_happy.png
+./menu/menu/characters/space_bandit/space_bandit.gd
+./menu/menu/characters/space_bandit/space_bandit.tscn
+./menu/menu/characters/boss/smoker.tscn
+./menu/menu/characters/boss/back_light.png
+./menu/menu/characters/boss/glasses.png
+./menu/menu/characters/boss/smoker.gd
+./menu/menu/characters/boss/cig.gd
+./menu/menu/characters/boss/eyes.png
+./menu/menu/characters/boss/to_pixelate.gd
+./menu/menu/characters/boss/x.png
+./menu/menu/characters/boss/cig.png
+./menu/menu/characters/eye.gd
+./menu/menu/characters/space_bandit_face_happy.png
+./menu/menu/characters/face.gd
+./menu/menu/characters/color.tres
+./menu/menu/characters/space_bandit.tscn
+./menu/menu/characters/space_bandit_face_bloody.png
+./menu/menu/characters/guns.png
+./menu/menu/characters/eyes2.tres
+./menu/options/controls/use.tres
+./menu/options/controls/input_map_button.gd
+./menu/options/controls/swap.tres
+./menu/options/controls/teleport.tres
+./menu/options/controls/joy_controls.tscn
+./menu/options/controls/mouse_and_keyboard_controls.tscn
+./menu/options/controls/input_map_button.tscn
+./menu/options/controls/special.tres
+./menu/options/controls/throw.tres
+./menu/options/controls/center.tres
+./menu/options/controls/input_action.gd
+./menu/options/controls/move.tres
+./menu/options/controls/melee.tres
+./menu/options/controls/controls.gd
+./menu/options/options.gd
+./menu/options/options.tscn
+./menu/options/graphics/graphics.tscn
+./menu/options/graphics/graphics.gd
+./menu/options/audio/audio.gd
+./menu/options/audio/audio.tscn
+./menu/options/game/game.gd
+./menu/options/game/game.tscn
+./menu/circle.tres
+./menu/fonts/keys.png
+./menu/fonts/rainbow_font.tres
+./menu/fonts/fallback_font.tres
+./menu/fonts/taxi_Driver.png
+./menu/fonts/NotoSansJP-Regular.ttf
+./menu/fonts/taxi_Driver_noise.png
+./menu/fonts/rainbow_font_shader.tres
+./menu/fonts/m5x7.ttf
+./menu/colors.gd
+./menu/toast_enter.wav
+./menu/ui_colors.tres
+./menu/pause/pause.gd
+./menu/pause/rainbow.tres
+./menu/pause/Label.gd
+./menu/pause/label.tscn
+./menu/pause/pause.tscn
+./menu/hoola.wav
+./menu/in_game_fallback.tres
+./menu/widgets/next_unlock.gd
+./menu/widgets/slider.gd
+./menu/widgets/fade.tscn
+./menu/widgets/background_hint.gd
+./menu/widgets/panel_container_smoke.gd
+./menu/widgets/wishlist_sticker.gd
+./menu/widgets/smoke.tres
+./menu/widgets/color_grade.gd
+./menu/widgets/rich_text_button.gd
+./menu/widgets/panel_container_smok2.tscn
+./menu/widgets/slider.tscn
+./menu/widgets/rich_text_heading.gd
+./menu/widgets/background_hint.tscn
+./menu/widgets/tip.tscn
+./menu/widgets/rich_text_button.tscn
+./menu/widgets/toggle.tscn
+./menu/widgets/heading.tscn
+./menu/widgets/hover.tscn
+./menu/widgets/toggle.gd
+./menu/widgets/smoke_panel_material.tres
+./menu/widgets/confirm.gd
+./menu/widgets/tip.gd
+./menu/widgets/panel.gd
+./menu/widgets/modal.gd
+./menu/widgets/NinePatchRect.gd
+./menu/widgets/smoke.shader
+./menu/widgets/9patch.png
+./menu/widgets/big_hint.gd
+./menu/widgets/TDVB1i.png
+./menu/widgets/color_grade.tscn
+./menu/widgets/text.gd
+./menu/widgets/panel_container_smoke.tscn
+./menu/widgets/1x1.png
+./menu/widgets/confirm.tscn
+./menu/widgets/RichTextPanel.tscn
+./menu/hud/cursor.png
+./menu/hud/inventory/draggable.gd
+./menu/hud/inventory/menu/characters/color.tres
+./menu/hud/inventory/drop_zone.tscn
+./menu/hud/inventory/RichTextLabel.gd
+./menu/hud/inventory/hud_icon_mutation.tscn
+./menu/hud/inventory/use_count.gd
+./menu/hud/inventory/draggable.tscn
+./menu/hud/inventory/black_shadow_font.tres
+./menu/hud/inventory/x.png
+./menu/hud/inventory/hud_icon_mutation.gd
+./menu/hud/inventory/flash_parent.gd
+./menu/hud/inventory/TextureRect4.gd
+./menu/hud/cursor.tscn
+./menu/hud/hud.tscn
+./menu/hud/cursor.gd
+./menu/hud/hud.gd
+./menu/metal_text.tres
+./menu/rich_text_effects/RichTextType.gd
+./menu/rich_text_effects/RichTextPanel.gd
+./menu/rich_text_effects/RichTextFlash.gd
+./menu/rich_text_effects/RichTextTranslate.gd
+./menu/in_game.tres
+./menu/lcd_screen_font.tres
+./menu/toast_exit.wav
+./menu/stack/ahses_material.tres
+./menu/stack/home.kra
+./menu/stack/fade.gd
+./menu/stack/stack.tscn
+./menu/stack/stack.gd
+./menu/stack/version.gd
+./menu/stack/art.kra
+./entity/unlock_skin_classic/icon.png
+./entity/use.gd
+./entity/chair/entity.tscn
+./entity/chair/icon.png
+./entity/chair/data.gd
+./entity/man_desert/entity.tscn
+./entity/man_desert/icon.png
+./entity/man_desert/teleprompts/need_medbay.wav
+./entity/man_desert/teleprompts/me_too.wav
+./entity/man_desert/teleprompts/get_up_alt.wav
+./entity/man_desert/teleprompts/getting_a_medpack.wav
+./entity/man_desert/teleprompts/firstaid-incoming.wav
+./entity/man_desert/teleprompts/batch_name.py
+./entity/man_desert/teleprompts/what.wav
+./entity/man_desert/teleprompts/oo.wav
+./entity/man_desert/teleprompts/yell.wav
+./entity/man_desert/teleprompts/rushing.wav
+./entity/man_desert/teleprompts/ooo.wav
+./entity/man_desert/teleprompts/coming_to_heal_ya.wav
+./entity/man_desert/teleprompts/where_is_the_medpack.wav
+./entity/man_desert/teleprompts/ah.wav
+./entity/man_desert/teleprompts/no.wav
+./entity/man_desert/teleprompts/going_to_camp_medbay.wav
+./entity/man_desert/teleprompts/aa.wav
+./entity/man_desert/teleprompts/pirate_alt.wav
+./entity/man_desert/teleprompts/take_morphine.wav
+./entity/man_desert/teleprompts/ee.wav
+./entity/man_desert/teleprompts/get_up.wav
+./entity/man_desert/teleprompts/aw.wav
+./entity/man_desert/teleprompts/easy.wav
+./entity/man_desert/teleprompts/intruder.wav
+./entity/man_desert/teleprompts/amateur.wav
+./entity/man_desert/teleprompts/hes_not_moving.wav
+./entity/man_desert/teleprompts/pirate.wav
+./entity/man_desert/teleprompts/i_dont_know.wav
+./entity/man_desert/teleprompts/index.txt
+./entity/man_desert/teleprompts/move.wav
+./entity/man_desert/teleprompts/hes_stuck.wav
+./entity/man_desert/teleprompts/how.wav
+./entity/man_desert/teleprompts/uu.wav
+./entity/man_desert/teleprompts/where_is_the_gun.wav
+./entity/man_desert/teleprompts/getting_a_gun.wav
+./entity/man_desert/data.gd
+./entity/man_desert/hand.png
+./entity/barrel_side_smoke/entity.tscn
+./entity/barrel_side_smoke/icon.png
+./entity/barrel_side_smoke/data.gd
+./entity/barrel_smoke/entity.tscn
+./entity/barrel_smoke/icon.png
+./entity/barrel_smoke/data.gd
+./entity/project_box/entity.tscn
+./entity/project_box/icon.png
+./entity/project_box/data.gd
+./entity/mutation_saw/entity.tscn
+./entity/mutation_saw/icon.png
+./entity/mutation_saw/special.gd
+./entity/mutation_saw/data.gd
+./entity/lift_entrance/entity.tscn
+./entity/lift_entrance/icon.png
+./entity/lift_entrance/special.gd
+./entity/lift_entrance/data.gd
+./entity/mutation_accuracy_boost_DELETE/entity.tscn
+./entity/mutation_accuracy_boost_DELETE/icon.png
+./entity/mutation_accuracy_boost_DELETE/special.gd
+./entity/mutation_accuracy_boost_DELETE/data.gd
+./entity/skin_ruffle/entity.tscn
+./entity/skin_ruffle/icon.png
+./entity/skin_ruffle/carried.png
+./entity/skin_ruffle/data.gd
+./entity/editor_only_icon.gd
+./entity/console_dark/entity.tscn
+./entity/console_dark/icon.png
+./entity/console_dark/data.gd
+./entity/console_dark/animation.png
+./entity/smg2/entity.tscn
+./entity/smg2/used.wav
+./entity/smg2/icon.png
+./entity/smg2/data.gd
+./entity/smg2/debug.gd
+./entity/grenade_launcher/entity.tscn
+./entity/grenade_launcher/used.wav
+./entity/grenade_launcher/icon.png
+./entity/grenade_launcher/special.gd
+./entity/grenade_launcher/data.gd
+./entity/floor_tile_full_square/entity.tscn
+./entity/floor_tile_full_square/icon.png
+./entity/floor_tile_full_square/data.gd
+./entity/grate_1/entity.tscn
+./entity/grate_1/icon.png
+./entity/grate_1/data.gd
+./entity/bed_bunk_corner/entity.tscn
+./entity/bed_bunk_corner/icon.png
+./entity/bed_bunk_corner/data.gd
+./entity/kill_streak_rail_gun_level_3/entity.tscn
+./entity/kill_streak_rail_gun_level_3/data.gd
+./entity/teleporter_random_weak/entity.tscn
+./entity/teleporter_random_weak/teleporter_model.gd
+./entity/teleporter_random_weak/used.wav
+./entity/teleporter_random_weak/icon.png
+./entity/teleporter_random_weak/special.gd
+./entity/teleporter_random_weak/ray.gd
+./entity/teleporter_random_weak/data.gd
+./entity/teleporter_random_weak/flap.png
+./entity/entities.kra
+./entity/jerry_can/entity.tscn
+./entity/jerry_can/icon.png
+./entity/jerry_can/data.gd
+./entity/kill_streak_helmet_full/entity.tscn
+./entity/kill_streak_helmet_full/data.gd
+./entity/background_derelict/background2.gd
+./entity/background_derelict/entity.tscn
+./entity/background_derelict/icon.png
+./entity/background_derelict/background/space.png
+./entity/background_derelict/background/line.png
+./entity/background_derelict/background/overlay.png
+./entity/background_derelict/background/background2.png
+./entity/background_derelict/background/background.png
+./entity/background_derelict/background/engine_glow.tscn
+./entity/background_derelict/background/lines3.png
+./entity/background_derelict/background/background.tscn
+./entity/background_derelict/background/lines.tres
+./entity/background_derelict/background/xx.gd
+./entity/background_derelict/background/background.gd
+./entity/background_derelict/background/bayer16tile2.png
+./entity/background_derelict/background/push.png
+./entity/background_derelict/background/palette_mono.png
+./entity/background_derelict/background/stars.gd
+./entity/background_derelict/background/lines2.png
+./entity/background_derelict/background/lines.shader
+./entity/background_derelict/background/ambience.gd
+./entity/background_derelict/background/space_ship_ambience.ogg
+./entity/background_derelict/background/stars.png
+./entity/background_derelict/data.gd
+./entity/smoker/entity.tscn
+./entity/smoker/right_hand.png
+./entity/smoker/eyes.png
+./entity/smoker/data.gd
+./entity/smoker/animate.gd
+./entity/smoker/left_hand.png
+./entity/EntityStatic.gd
+./entity/level_model.gd
+./entity/class_teleporter_drop_chance/entity.tscn
+./entity/class_teleporter_drop_chance/icon.png
+./entity/class_teleporter_drop_chance/special.gd
+./entity/class_teleporter_drop_chance/data.gd
+./entity/smg4/entity.tscn
+./entity/smg4/used.wav
+./entity/smg4/icon.png
+./entity/smg4/data.gd
+./entity/medpack/entity.tscn
+./entity/medpack/icon.png
+./entity/medpack/dead.png
+./entity/medpack/data.gd
+./entity/model.gd
+./entity/doom_transition/entity.tscn
+./entity/doom_transition/icon.png
+./entity/doom_transition/special.gd
+./entity/doom_transition/Screenshot from 2021-12-08 18-25-03.png
+./entity/doom_transition/data.gd
+./entity/glass_block_exploding/entity.tscn
+./entity/glass_block_exploding/icon.png
+./entity/glass_block_exploding/special.gd
+./entity/glass_block_exploding/dead.png
+./entity/glass_block_exploding/data.gd
+./entity/floor_ting/entity.tscn
+./entity/floor_ting/icon.png
+./entity/floor_ting/data.gd
+./entity/background_crashed_ship/entity.tscn
+./entity/background_crashed_ship/icon.png
+./entity/background_crashed_ship/background/background2.kra
+./entity/background_crashed_ship/background/dust_storm_negative.png
+./entity/background_crashed_ship/background/background2.png
+./entity/background_crashed_ship/background/background2 (copy 1).png
+./entity/background_crashed_ship/background/dust_bowl.ogg
+./entity/background_crashed_ship/background/background.tscn
+./entity/background_crashed_ship/background/background.kra
+./entity/background_crashed_ship/data.gd
+./entity/game_aim_hack_boss/entity.tscn
+./entity/game_aim_hack_boss/icon.png
+./entity/game_aim_hack_boss/special.gd
+./entity/game_aim_hack_boss/give_my_arm_back.wav
+./entity/game_aim_hack_boss/my_arm_came_off.wav
+./entity/game_aim_hack_boss/data.gd
+./entity/sink/entity.tscn
+./entity/sink/icon.png
+./entity/sink/data.gd
+./entity/grate_2/entity.tscn
+./entity/grate_2/icon.png
+./entity/grate_2/data.gd
+./entity/barrel_side/entity.tscn
+./entity/barrel_side/icon.png
+./entity/barrel_side/data.gd
+./entity/oxygen/entity.tscn
+./entity/oxygen/icon.png
+./entity/oxygen/shadow.png
+./entity/oxygen/data.gd
+./entity/oxygen/normal.png
+./entity/unlock_skin_robo/entity.tscn
+./entity/unlock_skin_robo/icon.png
+./entity/unlock_skin_robo/special.gd
+./entity/unlock_skin_robo/data.gd
+./entity/entity_agency_model.gd
+./entity/floor_tile_wood/entity.tscn
+./entity/floor_tile_wood/icon.png
+./entity/floor_tile_wood/data.gd
+./entity/qr_code/entity.tscn
+./entity/qr_code/icon.png
+./entity/qr_code/data.gd
+./entity/background_sun/overlay.png
+./entity/background_sun/entity.tscn
+./entity/background_sun/c.gd
+./entity/background_sun/kill.tscn
+./entity/background_sun/icon.png
+./entity/background_sun/special.gd
+./entity/background_sun/wtf.tres
+./entity/background_sun/background/background2.png
+./entity/background_sun/background/background.tscn
+./entity/background_sun/background/color2s.tres
+./entity/background_sun/background/background_glow.png
+./entity/background_sun/data.gd
+./entity/background_sun/kill.gd
+./entity/background_sun/stars.png
+./entity/background_zone_intro/overlay.png
+./entity/background_zone_intro/entity.tscn
+./entity/background_zone_intro/icon.png
+./entity/background_zone_intro/special.gd
+./entity/background_zone_intro/background/space.png
+./entity/background_zone_intro/background/line.png
+./entity/background_zone_intro/background/background2.png
+./entity/background_zone_intro/background/background.png
+./entity/background_zone_intro/background/engine_glow.tscn
+./entity/background_zone_intro/background/lines3.png
+./entity/background_zone_intro/background/background.tscn
+./entity/background_zone_intro/background/lines.tres
+./entity/background_zone_intro/background/background.gd
+./entity/background_zone_intro/background/bayer16tile2.png
+./entity/background_zone_intro/background/push.png
+./entity/background_zone_intro/background/palette_mono.png
+./entity/background_zone_intro/background/stars.gd
+./entity/background_zone_intro/background/lines2.png
+./entity/background_zone_intro/background/lines.shader
+./entity/background_zone_intro/background/ambience.gd
+./entity/background_zone_intro/background/space_ship_ambience.ogg
+./entity/background_zone_intro/background/stars.png
+./entity/background_zone_intro/background_end.png
+./entity/background_zone_intro/data.gd
+./entity/background_zone_intro/tinge.png
+./entity/closet_alt/entity.tscn
+./entity/closet_alt/icon.png
+./entity/closet_alt/data.gd
+./entity/meta_random_sound/entity.tscn
+./entity/meta_random_sound/giberish.wav
+./entity/meta_random_sound/icon.png
+./entity/meta_random_sound/special.gd
+./entity/meta_random_sound/who.wav
+./entity/meta_random_sound/data.gd
+./entity/meta_random_sound/hoola_boola.wav
+./entity/meta_random_sound/space_bandit.wav
+./entity/lines/entity.tscn
+./entity/lines/icon.png
+./entity/lines/data.gd
+./entity/teleporter_random_avoid_ray/entity.tscn
+./entity/teleporter_random_avoid_ray/used.wav
+./entity/teleporter_random_avoid_ray/icon.png
+./entity/teleporter_random_avoid_ray/ray.gd
+./entity/teleporter_random_avoid_ray/data.gd
+./entity/teleporter_random_avoid_ray/flap.png
+./entity/teleporter_random_avoid_ray/RayCast2D.gd
+./entity/teleporter_random_avoid_ray/area.gd
+./entity/teleporter_random_avoid_ray/flap.gd
+./entity/saw/blades.gd
+./entity/saw/entity.tscn
+./entity/saw/used.wav
+./entity/saw/icon.png
+./entity/saw/special.gd
+./entity/saw/carried.png
+./entity/saw/data.gd
+./entity/saw/used (copy 1).wav
+./entity/saw/saw.wav
+./entity/saw/carried_blades.png
+./entity/floor_tile_checkerdboard/damage.png
+./entity/floor_tile_checkerdboard/entity.tscn
+./entity/floor_tile_checkerdboard/icon.png
+./entity/floor_tile_checkerdboard/entity.tres
+./entity/floor_tile_checkerdboard/data.gd
+./entity/mutation_smoke_grenade_upgrade/entity.tscn
+./entity/mutation_smoke_grenade_upgrade/icon.png
+./entity/mutation_smoke_grenade_upgrade/special.gd
+./entity/mutation_smoke_grenade_upgrade/data.gd
+./entity/mutation_smoke_grenade_upgrade/mutation_model.gd
+./entity/helmet_full/entity.tscn
+./entity/helmet_full/pick_up.wav
+./entity/helmet_full/icon.png
+./entity/helmet_full/data.gd
+./entity/helmet_full/helmet-ping.wav
+./entity/barrel_explosive/entity.tscn
+./entity/barrel_explosive/icon.png
+./entity/barrel_explosive/data.gd
+./entity/bank/entity.tscn
+./entity/bank/icon.png
+./entity/bank/special.gd
+./entity/bank/data.gd
+./entity/kick/entity.tscn
+./entity/kick/swipe.png
+./entity/kick/used.wav
+./entity/kick/icon.png
+./entity/kick/AnimatedSprite.gd
+./entity/kick/data.gd
+./entity/battery/entity.tscn
+./entity/battery/icon.png
+./entity/battery/data.gd
+./entity/lift/entity.tscn
+./entity/lift/opening.wav
+./entity/lift/doors_open.png
+./entity/lift/RichTextLabel.gd
+./entity/lift/icon.png
+./entity/lift/open.wav
+./entity/lift/elevator_end.wav
+./entity/lift/lift_model.gd
+./entity/lift/label.tscn
+./entity/lift/rumble.gd
+./entity/lift/level_portal_model.gd
+./entity/lift/data.gd
+./entity/lift/doors.png
+./entity/lift/area.gd
+./entity/snes/entity.tscn
+./entity/snes/icon.png
+./entity/snes/data.gd
+./entity/passive_disarm/entity.tscn
+./entity/passive_disarm/icon.png
+./entity/passive_disarm/special.gd
+./entity/passive_disarm/data.gd
+./entity/mutation_lots_of_shot/entity.tscn
+./entity/mutation_lots_of_shot/icon.png
+./entity/mutation_lots_of_shot/special.gd
+./entity/mutation_lots_of_shot/data.gd
+./entity/pallet2/entity.tscn
+./entity/pallet2/icon.png
+./entity/pallet2/data.gd
+./entity/kill_streak_sword/entity.tscn
+./entity/kill_streak_sword/data.gd
+./entity/rain/entity.tscn
+./entity/rain/icon.png
+./entity/rain/special.gd
+./entity/rain/rain.png
+./entity/rain/rain.tscn
+./entity/rain/data.gd
+./entity/rain/rain.gd
+./entity/white_line/entity.tscn
+./entity/white_line/icon.png
+./entity/white_line/data.gd
+./entity/game_break_sword/entity.tscn
+./entity/game_break_sword/icon.png
+./entity/game_break_sword/special.gd
+./entity/game_break_sword/data.gd
+./entity/background_zone1/overlay.png
+./entity/background_zone1/entity.tscn
+./entity/background_zone1/icon.png
+./entity/background_zone1/special.gd
+./entity/background_zone1/background/space.png
+./entity/background_zone1/background/line.png
+./entity/background_zone1/background/background2.png
+./entity/background_zone1/background/background.png
+./entity/background_zone1/background/engine_glow.tscn
+./entity/background_zone1/background/lines3.png
+./entity/background_zone1/background/background.tscn
+./entity/background_zone1/background/lines.tres
+./entity/background_zone1/background/background.gd
+./entity/background_zone1/background/bayer16tile2.png
+./entity/background_zone1/background/push.png
+./entity/background_zone1/background/palette_mono.png
+./entity/background_zone1/background/stars.gd
+./entity/background_zone1/background/lines2.png
+./entity/background_zone1/background/lines.shader
+./entity/background_zone1/background/ambience.gd
+./entity/background_zone1/background/space_ship_ambience.ogg
+./entity/background_zone1/background/stars.png
+./entity/background_zone1/data.gd
+./entity/background_zone1/tinge.png
+./entity/mutation_throw_trap_DELETE/entity.tscn
+./entity/mutation_throw_trap_DELETE/icon.png
+./entity/mutation_throw_trap_DELETE/special.gd
+./entity/mutation_throw_trap_DELETE/data.gd
+./entity/agency.gd
+./entity/skin_cheese/entity.tscn
+./entity/skin_cheese/icon.png
+./entity/skin_cheese/carried.png
+./entity/skin_cheese/data.gd
+./entity/toilet/entity.tscn
+./entity/toilet/icon.png
+./entity/toilet/special.gd
+./entity/toilet/water.png
+./entity/toilet/drink.wav
+./entity/toilet/data.gd
+./entity/smg3/entity.tscn
+./entity/smg3/used.wav
+./entity/smg3/icon.png
+./entity/smg3/dead.png
+./entity/smg3/data.gd
+./entity/smg3/debug.gd
+./entity/teleporter_super/entity.tscn
+./entity/teleporter_super/icon.png
+./entity/teleporter_super/data.gd
+./entity/background_zone_end/overlay.png
+./entity/background_zone_end/entity.tscn
+./entity/background_zone_end/icon.png
+./entity/background_zone_end/special.gd
+./entity/background_zone_end/stars2.png
+./entity/background_zone_end/background_end.png
+./entity/background_zone_end/data.gd
+./entity/background_zone_end/tinge.png
+./entity/kill_streak_barricade/entity.tscn
+./entity/kill_streak_barricade/data.gd
+./entity/game_zone_4_boss_1/entity.tscn
+./entity/game_zone_4_boss_1/icon.png
+./entity/game_zone_4_boss_1/special.gd
+./entity/game_zone_4_boss_1/data.gd
+./entity/game_zone_4_boss_1/kill_me_and_explode_ship.wav
+./entity/mutation_remove_melee/entity.tscn
+./entity/mutation_remove_melee/icon.png
+./entity/mutation_remove_melee/special.gd
+./entity/mutation_remove_melee/data.gd
+./entity/he_grenade_level_2/entity.tscn
+./entity/he_grenade_level_2/icon.png
+./entity/he_grenade_level_2/data.gd
+./entity/background_zone_2/entity.tscn
+./entity/background_zone_2/icon.png
+./entity/background_zone_2/background/background2.kra
+./entity/background_zone_2/background/grad.png
+./entity/background_zone_2/background/background2.png
+./entity/background_zone_2/background/background.png
+./entity/background_zone_2/background/background2 (copy 1).png
+./entity/background_zone_2/background/backgrounds.gd
+./entity/background_zone_2/background/wall_overlay.png
+./entity/background_zone_2/background/background.tscn
+./entity/background_zone_2/background/Screenshot from 2022-07-07 10-58-48.png
+./entity/background_zone_2/background/background.gd
+./entity/background_zone_2/background/shadow.png
+./entity/background_zone_2/background/engine smoke.png
+./entity/background_zone_2/background/background.kra
+./entity/background_zone_2/background/sea.ogg
+./entity/background_zone_2/background/background2blur.png
+./entity/background_zone_2/background/test.gd
+./entity/background_zone_2/background/grad3.png
+./entity/background_zone_2/background/lines2.png
+./entity/background_zone_2/background/smoke.tscn
+./entity/background_zone_2/background/left_water.tscn
+./entity/background_zone_2/background/grad2.png
+./entity/background_zone_2/background/para.png
+./entity/background_zone_2/data.gd
+./entity/pipe_corner/entity.tscn
+./entity/pipe_corner/icon.png
+./entity/pipe_corner/data.gd
+./entity/floor_tile_metal_cow_trap/entity.tscn
+./entity/floor_tile_metal_cow_trap/icon.png
+./entity/floor_tile_metal_cow_trap/data.gd
+./entity/skin_naked/entity.tscn
+./entity/skin_naked/icon.png
+./entity/skin_naked/carried.png
+./entity/skin_naked/data.gd
+./entity/valve/entity.tscn
+./entity/valve/icon.png
+./entity/valve/.icon.png-autosave.kra
+./entity/valve/data.gd
+./entity/bed/entity.tscn
+./entity/bed/icon.png
+./entity/bed/data.gd
+./entity/game_invisible_guy/entity.tscn
+./entity/game_invisible_guy/icon.png
+./entity/game_invisible_guy/special.gd
+./entity/game_invisible_guy/data.gd
+./entity/smg/entity.tscn
+./entity/smg/used.wav
+./entity/smg/icon.png
+./entity/smg/data.gd
+./entity/skin_robo/entity.tscn
+./entity/skin_robo/icon.png
+./entity/skin_robo/carried.png
+./entity/skin_robo/data.gd
+./entity/bandana/entity.tscn
+./entity/bandana/bob.gd
+./entity/bandana/icon.png
+./entity/bandana/special.gd
+./entity/bandana/carried.png
+./entity/bandana/data.gd
+./entity/bandana/pixel.png
+./entity/floor_plug/entity.tscn
+./entity/floor_plug/icon.png
+./entity/floor_plug/data.gd
+./entity/bench/entity.tscn
+./entity/bench/icon.png
+./entity/bench/data.gd
+./entity/meta_strip_items/entity.tscn
+./entity/meta_strip_items/special.gd
+./entity/meta_strip_items/meta_strip_items_model.gd
+./entity/meta_strip_items/data.gd
+./entity/crate_teleporter/entity.tscn
+./entity/crate_teleporter/icon.png
+./entity/crate_teleporter/data.gd
+./entity/crate_teleporter/satellite.kra
+./entity/crate_garbage/entity.tscn
+./entity/crate_garbage/icon.png
+./entity/crate_garbage/data.gd
+./entity/crate_garbage/gibbed.png
+./entity/meta_stats/entity.tscn
+./entity/meta_stats/letters.tres
+./entity/meta_stats/icon.png
+./entity/meta_stats/special.gd
+./entity/meta_stats/data.gd
+./entity/meta_stats/meta_stats_model.gd
+./entity/rail_gun/entity.tscn
+./entity/rail_gun/used.wav
+./entity/rail_gun/icon.png
+./entity/rail_gun/special.gd
+./entity/rail_gun/carried.png
+./entity/rail_gun/data.gd
+./entity/drop_ship_door/entity.tscn
+./entity/drop_ship_door/icon.png
+./entity/drop_ship_door/data.gd
+./entity/floor_lines/entity.tscn
+./entity/floor_lines/icon.png
+./entity/floor_lines/data.gd
+./entity/game_trap/entity.tscn
+./entity/game_trap/you_blew_up_my_force_field.wav
+./entity/game_trap/droped_my_grenade_2.wav
+./entity/game_trap/icon.png
+./entity/game_trap/special.gd
+./entity/game_trap/droped_my_grenade_0.wav
+./entity/game_trap/shock.wav
+./entity/game_trap/uh_my_helmet.wav
+./entity/game_trap/ha_missed_me.wav
+./entity/game_trap/data.gd
+./entity/game_trap/try_beat_this_force_field.wav
+./entity/game_trap/droped_my_grenade_1.wav
+./entity/blood_sword/entity.tscn
+./entity/blood_sword/pick_up.wav
+./entity/blood_sword/used.wav
+./entity/blood_sword/sam2.png
+./entity/blood_sword/icon.png
+./entity/blood_sword/special.gd
+./entity/blood_sword/hit_bar.gd
+./entity/blood_sword/data.gd
+./entity/blood_sword/sam.png
+./entity/blood_sword/dead.wav
+./entity/blood_sword/animation.png
+./entity/auto_cables_thick/entity.tscn
+./entity/auto_cables_thick/data.gd
+./entity/auto_cables_thick/wires2.png
+./entity/shield/entity.tscn
+./entity/shield/pick_up.wav
+./entity/shield/icon.png
+./entity/shield/carried.png
+./entity/shield/data.gd
+./entity/shield/helmet-ping.wav
+./entity/game_teleport_in/entity.tscn
+./entity/game_teleport_in/icon.png
+./entity/game_teleport_in/special.gd
+./entity/game_teleport_in/data.gd
+./entity/shotgun_super/entity.tscn
+./entity/shotgun_super/icon.png
+./entity/shotgun_super/data.gd
+./entity/bottle/entity.tscn
+./entity/bottle/icon.png
+./entity/bottle/data.gd
+./entity/bottle/normal.png
+./entity/bottle/icon_shadow.png
+./entity/kill_streak_p90/entity.tscn
+./entity/kill_streak_p90/data.gd
+./entity/drain/entity.tscn
+./entity/drain/icon.png
+./entity/drain/data.gd
+./entity/auto_wires_three/entity.tscn
+./entity/auto_wires_three/data.gd
+./entity/light/entity.tscn
+./entity/light/icon.png
+./entity/light/special.gd
+./entity/light/light.wav
+./entity/light/data.gd
+./entity/debris/entity.tscn
+./entity/debris/icon.png
+./entity/debris/data.gd
+./entity/debris/gibbed.png
+./entity/mutation_rail_gun_upgrade/entity.tscn
+./entity/mutation_rail_gun_upgrade/icon.png
+./entity/mutation_rail_gun_upgrade/special.gd
+./entity/mutation_rail_gun_upgrade/data.gd
+./entity/mutation_rail_gun_upgrade/mutation_model.gd
+./entity/auto_cables/entity.tscn
+./entity/auto_cables/data.gd
+./entity/auto_cables/wires2.png
+./entity/stealth_camo/entity.tscn
+./entity/stealth_camo/special.gd
+./entity/stealth_camo/data.gd
+./entity/colt_45/entity.tscn
+./entity/colt_45/used.wav
+./entity/colt_45/icon.png
+./entity/colt_45/dead.png
+./entity/colt_45/data.gd
+./entity/quantum_suicide_drive/entity.tscn
+./entity/quantum_suicide_drive/heart.ogg
+./entity/quantum_suicide_drive/icon.png
+./entity/quantum_suicide_drive/special.gd
+./entity/quantum_suicide_drive/qsd_model.gd
+./entity/quantum_suicide_drive/multi.gd
+./entity/quantum_suicide_drive/multi.tscn
+./entity/quantum_suicide_drive/CenterContainer.gd
+./entity/quantum_suicide_drive/carried.png
+./entity/quantum_suicide_drive/data.gd
+./entity/helmet/entity.tscn
+./entity/helmet/pick_up.wav
+./entity/helmet/icon.png
+./entity/helmet/special.gd
+./entity/helmet/die.wav
+./entity/helmet/carried.png
+./entity/helmet/data.gd
+./entity/helmet/helmet-ping.wav
+./entity/ammo_box/entity.tscn
+./entity/ammo_box/icon.png
+./entity/ammo_box/data.gd
+./entity/rail_gun_level_2/entity.tscn
+./entity/rail_gun_level_2/icon.png
+./entity/rail_gun_level_2/data.gd
+./entity/glass_block_backup/entity.tscn
+./entity/glass_block_backup/icon.png
+./entity/glass_block_backup/data.gd
+./entity/closet/entity.tscn
+./entity/closet/icon.png
+./entity/closet/data.gd
+./entity/little_boxes/entity.tscn
+./entity/little_boxes/icon.png
+./entity/little_boxes/data.gd
+./entity/meta_health_bar/entity.tscn
+./entity/meta_health_bar/health_bar_model.gd
+./entity/meta_health_bar/icon.png
+./entity/meta_health_bar/special.gd
+./entity/meta_health_bar/invunerable.png
+./entity/meta_health_bar/data.gd
+./entity/night_stand/entity.tscn
+./entity/night_stand/icon_normal.png
+./entity/night_stand/icon.png
+./entity/night_stand/shadow.png
+./entity/night_stand/data.gd
+./entity/fan/entity.tscn
+./entity/fan/flap2.png
+./entity/fan/flaps.gd
+./entity/fan/icon.png
+./entity/fan/data.gd
+./entity/fan/flap.png
+./entity/fan/icon_shadow.png
+./entity/fan/animation.png
+./entity/fan/gibbed.png
+./entity/game_tutorial_end/entity.tscn
+./entity/game_tutorial_end/icon.png
+./entity/game_tutorial_end/special.gd
+./entity/game_tutorial_end/data.gd
+./entity/mutation_disarmament/entity.tscn
+./entity/mutation_disarmament/icon.png
+./entity/mutation_disarmament/special.gd
+./entity/mutation_disarmament/data.gd
+./entity/air_lock/icon_open.png
+./entity/air_lock/entity.tscn
+./entity/air_lock/door_close.wav
+./entity/air_lock/icon.png
+./entity/air_lock/special.gd
+./entity/air_lock/air_lock_model.gd
+./entity/air_lock/data.gd
+./entity/scorpion/entity.tscn
+./entity/scorpion/used.wav
+./entity/scorpion/laser.gd
+./entity/scorpion/icon.png
+./entity/scorpion/data.gd
+./entity/kill_streak_aim_hack/entity.tscn
+./entity/kill_streak_aim_hack/data.gd
+./entity/dungeon_proc_debug/entity.tscn
+./entity/dungeon_proc_debug/icon.png
+./entity/dungeon_proc_debug/data.gd
+./entity/dungeon_proc_debug/debug.gd
+./entity/dungeon_proc_debug/debug.tscn
+./entity/tarp/entity.tscn
+./entity/tarp/icon.png
+./entity/tarp/data.gd
+./entity/hit_indicator/entity.tscn
+./entity/hit_indicator/data.gd
+./entity/console_corner/entity.tscn
+./entity/console_corner/animation2.tscn
+./entity/console_corner/icon.png
+./entity/console_corner/data.gd
+./entity/console_corner/animation.tscn
+./entity/icon.png
+./entity/couch_corner/entity.tscn
+./entity/couch_corner/icon.png
+./entity/couch_corner/data.gd
+./entity/m4/entity.tscn
+./entity/m4/used.wav
+./entity/m4/icon.png
+./entity/m4/data.gd
+./entity/game_hud/entity.tscn
+./entity/game_hud/icon.png
+./entity/game_hud/data.gd
+./entity/game_hud/inventory_game.tscn
+./entity/prototypes.gd
+./entity/agent_chicken/emotes.png
+./entity/agent_chicken/entity.tscn
+./entity/agent_chicken/sound_board.gd
+./entity/agent_chicken/bones.tscn
+./entity/agent_chicken/bones.gd
+./entity/agent_chicken/barks.gd
+./entity/agent_chicken/emote.gd
+./entity/agent_chicken/icon.png
+./entity/agent_chicken/special.gd
+./entity/agent_chicken/bark.gd
+./entity/agent_chicken/deaad.png
+./entity/agent_chicken/icon.gd
+./entity/agent_chicken/data.gd
+./entity/agent_chicken/animation.tscn
+./entity/agent_chicken/emote.tscn
+./entity/agent_chicken/hand.png
+./entity/velocity/entity.tscn
+./entity/velocity/icon.png
+./entity/velocity/special.gd
+./entity/velocity/data.gd
+./entity/aircon/entity.tscn
+./entity/aircon/grate.png
+./entity/aircon/icon.png
+./entity/aircon/data.gd
+./entity/aircon/animation.png
+./entity/floor_tile_bricks/entity.tscn
+./entity/floor_tile_bricks/icon.png
+./entity/floor_tile_bricks/data.gd
+./entity/pallet/entity.tscn
+./entity/pallet/icon.png
+./entity/pallet/data.gd
+./entity/barricade_deployed/debug.png
+./entity/barricade_deployed/field.tscn
+./entity/barricade_deployed/entity.tscn
+./entity/barricade_deployed/ambience.ogg
+./entity/barricade_deployed/icon.png
+./entity/barricade_deployed/field.gd
+./entity/barricade_deployed/field_material.tres
+./entity/barricade_deployed/debug2.png
+./entity/barricade_deployed/data.gd
+./entity/barricade_deployed/field_material_invert.tres
+./entity/barricade_deployed/field_material.gd
+./entity/barricade_deployed/gibbed.png
+./entity/helmet_nv/entity.tscn
+./entity/helmet_nv/pick_up.wav
+./entity/helmet_nv/icon.png
+./entity/helmet_nv/special.gd
+./entity/helmet_nv/carried.png
+./entity/helmet_nv/eyes.png
+./entity/helmet_nv/data.gd
+./entity/helmet_nv/helmet-ping.wav
+./entity/helmet_nv/eyes.gd
+./entity/mutation_sword/entity.tscn
+./entity/mutation_sword/icon.png
+./entity/mutation_sword/special.gd
+./entity/mutation_sword/data.gd
+./entity/field_full_super/entity.tscn
+./entity/field_full_super/icon.png
+./entity/field_full_super/special.gd
+./entity/field_full_super/carried.png
+./entity/field_full_super/data.gd
+./entity/entity_man.gd
+./entity/couch/entity.tscn
+./entity/couch/icon.png
+./entity/couch/data.gd
+./entity/teleporter_lil_hunter/entity.tscn
+./entity/teleporter_lil_hunter/icon.png
+./entity/teleporter_lil_hunter/tubes.png
+./entity/teleporter_lil_hunter/osc_shader.tres
+./entity/teleporter_lil_hunter/eyes.png
+./entity/teleporter_lil_hunter/data.gd
+./entity/teleporter_lil_hunter/osc.tres
+./entity/game_tutorial_melee_zone/entity.tscn
+./entity/game_tutorial_melee_zone/icon.png
+./entity/game_tutorial_melee_zone/special.gd
+./entity/game_tutorial_melee_zone/data.gd
+./entity/kill_streak_glock/entity.tscn
+./entity/kill_streak_glock/data.gd
+./entity/skin_mime/entity.tscn
+./entity/skin_mime/icon.png
+./entity/skin_mime/special.gd
+./entity/skin_mime/carried.png
+./entity/skin_mime/data.gd
+./entity/medpack_hard/entity.tscn
+./entity/medpack_hard/icon.png
+./entity/medpack_hard/data.gd
+./entity/teleporter_overload/entity.tscn
+./entity/teleporter_overload/icon.png
+./entity/teleporter_overload/special.gd
+./entity/teleporter_overload/carried.png
+./entity/teleporter_overload/data.gd
+./entity/background_freighter/overlay.png
+./entity/background_freighter/entity.tscn
+./entity/background_freighter/icon.png
+./entity/background_freighter/Master.ogg
+./entity/background_freighter/background/space.png
+./entity/background_freighter/background/line.png
+./entity/background_freighter/background/background2.gd
+./entity/background_freighter/background/good create.png
+./entity/background_freighter/background/backgip.png
+./entity/background_freighter/background/background2.png
+./entity/background_freighter/background/background.png
+./entity/background_freighter/background/engine_glow.tscn
+./entity/background_freighter/background/gra2d.png
+./entity/background_freighter/background/lines3.png
+./entity/background_freighter/background/background.tscn
+./entity/background_freighter/background/lines.tres
+./entity/background_freighter/background/background.gd
+./entity/background_freighter/background/bayer16tile2.png
+./entity/background_freighter/background/goodcrate.png
+./entity/background_freighter/background/push.png
+./entity/background_freighter/background/background_floor.png
+./entity/background_freighter/background/palette_mono.png
+./entity/background_freighter/background/stars.gd
+./entity/background_freighter/background/lines2.png
+./entity/background_freighter/background/lines.shader
+./entity/background_freighter/background/ambience.gd
+./entity/background_freighter/background/bacsdas.png
+./entity/background_freighter/background/space_ship_ambience.ogg
+./entity/background_freighter/background/stars.png
+./entity/background_freighter/data.gd
+./entity/auto_wires/entity.tscn
+./entity/auto_wires/data.gd
+./entity/kill_streak/entity.tscn
+./entity/kill_streak/kill_streak_toast.tscn
+./entity/kill_streak/icon.png
diff --git a/tests/scene/test_audio_stream_wav.h b/tests/scene/test_audio_stream_wav.h
index d3d5cc8a30..7276dd0878 100644
--- a/tests/scene/test_audio_stream_wav.h
+++ b/tests/scene/test_audio_stream_wav.h
@@ -162,7 +162,7 @@ void run_test(String file_name, AudioStreamWAV::Format data_format, bool stereo,
// Compressed streams can't be saved, disable compression.
options_map["compress/mode"] = 0;
- REQUIRE(wav_importer->import(save_path, save_path, options_map, nullptr) == OK);
+ REQUIRE(wav_importer->import(0, save_path, save_path, options_map, nullptr) == OK);
String load_path = save_path + "." + wav_importer->get_save_extension();
Ref<AudioStreamWAV> loaded_stream = ResourceLoader::load(load_path, "AudioStreamWAV", ResourceFormatImporter::CACHE_MODE_IGNORE, &error);
diff --git a/tests/scene/test_primitives.h b/tests/scene/test_primitives.h
index 59f23983e5..7426a9ce29 100644
--- a/tests/scene/test_primitives.h
+++ b/tests/scene/test_primitives.h
@@ -104,8 +104,9 @@ TEST_CASE("[SceneTree][Primitive][Capsule] Capsule Primitive") {
float dist_to_yaxis = 0.f;
for (Vector3 point : points) {
float new_dist_to_y = point.x * point.x + point.z * point.z;
- if (new_dist_to_y > dist_to_yaxis)
+ if (new_dist_to_y > dist_to_yaxis) {
dist_to_yaxis = new_dist_to_y;
+ }
}
CHECK(dist_to_yaxis <= radius * radius);
@@ -114,10 +115,12 @@ TEST_CASE("[SceneTree][Primitive][Capsule] Capsule Primitive") {
float max_y{ 0.f };
float min_y{ 0.f };
for (Vector3 point : points) {
- if (point.y > max_y)
+ if (point.y > max_y) {
max_y = point.y;
- if (point.y < min_y)
+ }
+ if (point.y < min_y) {
min_y = point.y;
+ }
}
CHECK(max_y - min_y <= height);
@@ -196,12 +199,14 @@ TEST_CASE("[SceneTree][Primitive][Box] Box Primitive") {
for (const Vector3 &normal : normals) {
bool add_normal{ true };
for (const Vector3 &vec : distinct_normals) {
- if (vec.is_equal_approx(normal))
+ if (vec.is_equal_approx(normal)) {
add_normal = false;
+ }
}
- if (add_normal)
+ if (add_normal) {
distinct_normals.push_back(normal);
+ }
}
CHECK_MESSAGE(distinct_normals.size() == 6,
@@ -218,8 +223,9 @@ TEST_CASE("[SceneTree][Primitive][Box] Box Primitive") {
break;
}
}
- if (!normal_correct_direction)
+ if (!normal_correct_direction) {
break;
+ }
}
CHECK_MESSAGE(normal_correct_direction,
diff --git a/tests/scene/test_tree.h b/tests/scene/test_tree.h
index e19f8311e2..a74158d328 100644
--- a/tests/scene/test_tree.h
+++ b/tests/scene/test_tree.h
@@ -139,18 +139,30 @@ TEST_CASE("[SceneTree][Tree]") {
TreeItem *child1 = tree->create_item();
TreeItem *child2 = tree->create_item();
TreeItem *child3 = tree->create_item();
+ CHECK_EQ(root->get_next(), nullptr);
+ CHECK_EQ(root->get_next_visible(), child1);
+ CHECK_EQ(root->get_next_in_tree(), child1);
CHECK_EQ(child1->get_next(), child2);
+ CHECK_EQ(child1->get_next_visible(), child2);
CHECK_EQ(child1->get_next_in_tree(), child2);
CHECK_EQ(child2->get_next(), child3);
+ CHECK_EQ(child2->get_next_visible(), child3);
CHECK_EQ(child2->get_next_in_tree(), child3);
CHECK_EQ(child3->get_next(), nullptr);
+ CHECK_EQ(child3->get_next_visible(), nullptr);
CHECK_EQ(child3->get_next_in_tree(), nullptr);
+ CHECK_EQ(root->get_prev(), nullptr);
+ CHECK_EQ(root->get_prev_visible(), nullptr);
+ CHECK_EQ(root->get_prev_in_tree(), nullptr);
CHECK_EQ(child1->get_prev(), nullptr);
+ CHECK_EQ(child1->get_prev_visible(), root);
CHECK_EQ(child1->get_prev_in_tree(), root);
CHECK_EQ(child2->get_prev(), child1);
+ CHECK_EQ(child2->get_prev_visible(), child1);
CHECK_EQ(child2->get_prev_in_tree(), child1);
CHECK_EQ(child3->get_prev(), child2);
+ CHECK_EQ(child3->get_prev_visible(), child2);
CHECK_EQ(child3->get_prev_in_tree(), child2);
TreeItem *nested1 = tree->create_item(child2);
@@ -158,13 +170,127 @@ TEST_CASE("[SceneTree][Tree]") {
TreeItem *nested3 = tree->create_item(child2);
CHECK_EQ(child1->get_next(), child2);
+ CHECK_EQ(child1->get_next_visible(), child2);
CHECK_EQ(child1->get_next_in_tree(), child2);
CHECK_EQ(child2->get_next(), child3);
+ CHECK_EQ(child2->get_next_visible(), nested1);
CHECK_EQ(child2->get_next_in_tree(), nested1);
CHECK_EQ(child3->get_prev(), child2);
+ CHECK_EQ(child3->get_prev_visible(), nested3);
CHECK_EQ(child3->get_prev_in_tree(), nested3);
CHECK_EQ(nested1->get_prev_in_tree(), child2);
CHECK_EQ(nested1->get_next_in_tree(), nested2);
+ CHECK_EQ(nested3->get_next_in_tree(), child3);
+
+ memdelete(tree);
+ }
+
+ SUBCASE("[Tree] Previous and Next items with hide root.") {
+ Tree *tree = memnew(Tree);
+ tree->set_hide_root(true);
+ TreeItem *root = tree->create_item();
+
+ TreeItem *child1 = tree->create_item();
+ TreeItem *child2 = tree->create_item();
+ TreeItem *child3 = tree->create_item();
+ CHECK_EQ(root->get_next(), nullptr);
+ CHECK_EQ(root->get_next_visible(), child1);
+ CHECK_EQ(root->get_next_in_tree(), child1);
+ CHECK_EQ(child1->get_next(), child2);
+ CHECK_EQ(child1->get_next_visible(), child2);
+ CHECK_EQ(child1->get_next_in_tree(), child2);
+ CHECK_EQ(child2->get_next(), child3);
+ CHECK_EQ(child2->get_next_visible(), child3);
+ CHECK_EQ(child2->get_next_in_tree(), child3);
+ CHECK_EQ(child3->get_next(), nullptr);
+ CHECK_EQ(child3->get_next_visible(), nullptr);
+ CHECK_EQ(child3->get_next_in_tree(), nullptr);
+
+ CHECK_EQ(root->get_prev(), nullptr);
+ CHECK_EQ(root->get_prev_visible(), nullptr);
+ CHECK_EQ(root->get_prev_in_tree(), nullptr);
+ CHECK_EQ(child1->get_prev(), nullptr);
+ CHECK_EQ(child1->get_prev_visible(), nullptr);
+ CHECK_EQ(child1->get_prev_in_tree(), nullptr);
+ CHECK_EQ(child2->get_prev(), child1);
+ CHECK_EQ(child2->get_prev_visible(), child1);
+ CHECK_EQ(child2->get_prev_in_tree(), child1);
+ CHECK_EQ(child3->get_prev(), child2);
+ CHECK_EQ(child3->get_prev_visible(), child2);
+ CHECK_EQ(child3->get_prev_in_tree(), child2);
+
+ memdelete(tree);
+ }
+
+ SUBCASE("[Tree] Previous and Next items wrapping.") {
+ Tree *tree = memnew(Tree);
+ TreeItem *root = tree->create_item();
+
+ TreeItem *child1 = tree->create_item();
+ TreeItem *child2 = tree->create_item();
+ TreeItem *child3 = tree->create_item();
+ CHECK_EQ(root->get_next_visible(true), child1);
+ CHECK_EQ(root->get_next_in_tree(true), child1);
+ CHECK_EQ(child1->get_next_visible(true), child2);
+ CHECK_EQ(child1->get_next_in_tree(true), child2);
+ CHECK_EQ(child2->get_next_visible(true), child3);
+ CHECK_EQ(child2->get_next_in_tree(true), child3);
+ CHECK_EQ(child3->get_next_visible(true), root);
+ CHECK_EQ(child3->get_next_in_tree(true), root);
+
+ CHECK_EQ(root->get_prev_visible(true), child3);
+ CHECK_EQ(root->get_prev_in_tree(true), child3);
+ CHECK_EQ(child1->get_prev_visible(true), root);
+ CHECK_EQ(child1->get_prev_in_tree(true), root);
+ CHECK_EQ(child2->get_prev_visible(true), child1);
+ CHECK_EQ(child2->get_prev_in_tree(true), child1);
+ CHECK_EQ(child3->get_prev_visible(true), child2);
+ CHECK_EQ(child3->get_prev_in_tree(true), child2);
+
+ TreeItem *nested1 = tree->create_item(child2);
+ TreeItem *nested2 = tree->create_item(child2);
+ TreeItem *nested3 = tree->create_item(child2);
+
+ CHECK_EQ(child1->get_next_visible(true), child2);
+ CHECK_EQ(child1->get_next_in_tree(true), child2);
+ CHECK_EQ(child2->get_next_visible(true), nested1);
+ CHECK_EQ(child2->get_next_in_tree(true), nested1);
+ CHECK_EQ(nested3->get_next_visible(true), child3);
+ CHECK_EQ(nested3->get_next_in_tree(true), child3);
+ CHECK_EQ(child3->get_prev_visible(true), nested3);
+ CHECK_EQ(child3->get_prev_in_tree(true), nested3);
+ CHECK_EQ(nested1->get_prev_in_tree(true), child2);
+ CHECK_EQ(nested1->get_next_in_tree(true), nested2);
+ CHECK_EQ(nested3->get_next_in_tree(true), child3);
+
+ memdelete(tree);
+ }
+
+ SUBCASE("[Tree] Previous and Next items wrapping with hide root.") {
+ Tree *tree = memnew(Tree);
+ tree->set_hide_root(true);
+ TreeItem *root = tree->create_item();
+
+ TreeItem *child1 = tree->create_item();
+ TreeItem *child2 = tree->create_item();
+ TreeItem *child3 = tree->create_item();
+ CHECK_EQ(root->get_next_visible(true), child1);
+ CHECK_EQ(root->get_next_in_tree(true), child1);
+ CHECK_EQ(child1->get_next_visible(true), child2);
+ CHECK_EQ(child1->get_next_in_tree(true), child2);
+ CHECK_EQ(child2->get_next_visible(true), child3);
+ CHECK_EQ(child2->get_next_in_tree(true), child3);
+ CHECK_EQ(child3->get_next_visible(true), root);
+ CHECK_EQ(child3->get_next_in_tree(true), root);
+
+ CHECK_EQ(root->get_prev_visible(true), child3);
+ CHECK_EQ(root->get_prev_in_tree(true), child3);
+ CHECK_EQ(child1->get_prev_visible(true), child3);
+ CHECK_EQ(child1->get_prev_in_tree(true), child3);
+ CHECK_EQ(child2->get_prev_visible(true), child1);
+ CHECK_EQ(child2->get_prev_in_tree(true), child1);
+ CHECK_EQ(child3->get_prev_visible(true), child2);
+ CHECK_EQ(child3->get_prev_in_tree(true), child2);
memdelete(tree);
}
diff --git a/tests/scene/test_viewport.h b/tests/scene/test_viewport.h
index dde37944ec..06a38f234b 100644
--- a/tests/scene/test_viewport.h
+++ b/tests/scene/test_viewport.h
@@ -1577,7 +1577,7 @@ TEST_CASE("[SceneTree][Viewport] Physics Picking 2D") {
PickingCollider pc;
pc.a = memnew(TestArea2D);
pc.c = memnew(CollisionShape2D);
- pc.r = Ref<RectangleShape2D>(memnew(RectangleShape2D));
+ pc.r.instantiate();
pc.r->set_size(Size2(150, 150));
pc.c->set_shape(pc.r);
pc.a->add_child(pc.c);
diff --git a/tests/servers/test_navigation_server_3d.h b/tests/servers/test_navigation_server_3d.h
index 4411b1aae5..1b2a5e0db2 100644
--- a/tests/servers/test_navigation_server_3d.h
+++ b/tests/servers/test_navigation_server_3d.h
@@ -49,7 +49,7 @@ public:
}
unsigned function1_calls{ 0 };
- Variant function1_latest_arg0{};
+ Variant function1_latest_arg0;
};
static inline Array build_array() {
diff --git a/tests/test_macros.h b/tests/test_macros.h
index d32b26f111..9cc075b6d3 100644
--- a/tests/test_macros.h
+++ b/tests/test_macros.h
@@ -474,6 +474,6 @@ public:
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
- } while (0)
+ } while (false)
#endif // TEST_MACROS_H
diff --git a/tests/test_main.cpp b/tests/test_main.cpp
index 465484d605..65d45ae92f 100644
--- a/tests/test_main.cpp
+++ b/tests/test_main.cpp
@@ -82,10 +82,12 @@
#include "tests/core/object/test_object.h"
#include "tests/core/object/test_undo_redo.h"
#include "tests/core/os/test_os.h"
+#include "tests/core/string/test_fuzzy_search.h"
#include "tests/core/string/test_node_path.h"
#include "tests/core/string/test_string.h"
#include "tests/core/string/test_translation.h"
#include "tests/core/string/test_translation_server.h"
+#include "tests/core/templates/test_a_hash_map.h"
#include "tests/core/templates/test_command_queue.h"
#include "tests/core/templates/test_hash_map.h"
#include "tests/core/templates/test_hash_set.h"