summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-04-11 11:02:27 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-04-11 11:02:27 +0200
commit5a386287d3ff8ca08fdaca14cd11ab9a0dec12f8 (patch)
tree2c4cc7eaf1cf61f5af9b2c27a63361cea9bab393
parent76c4ed95d20d7e894a272adf3ed2ec0d8ae13d8a (diff)
parentb7de8e2c29d0ef1414f29c6b1cbf2b90fbc7e790 (diff)
downloadredot-engine-5a386287d3ff8ca08fdaca14cd11ab9a0dec12f8.tar.gz
Merge pull request #81742 from toastedbreadandomelette/regex_additional_tests
Add additional tests for RegEx
-rw-r--r--modules/regex/tests/test_regex.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/regex/tests/test_regex.h b/modules/regex/tests/test_regex.h
index 1c305f70f7..af58e2487b 100644
--- a/modules/regex/tests/test_regex.h
+++ b/modules/regex/tests/test_regex.h
@@ -184,6 +184,48 @@ TEST_CASE("[RegEx] Empty pattern") {
CHECK(re.is_valid());
}
+TEST_CASE("[RegEx] Complex Grouping") {
+ const String test = "https://docs.godotengine.org/en/latest/contributing/";
+
+ // Ignored protocol in grouping.
+ RegEx re("^(?:https?://)([a-zA-Z]{2,4})\\.([a-zA-Z][a-zA-Z0-9_\\-]{2,64})\\.([a-zA-Z]{2,4})");
+ REQUIRE(re.is_valid());
+ Ref<RegExMatch> expr = re.search(test);
+
+ CHECK(expr->get_group_count() == 3);
+
+ CHECK(expr->get_string(0) == "https://docs.godotengine.org");
+
+ CHECK(expr->get_string(1) == "docs");
+ CHECK(expr->get_string(2) == "godotengine");
+ CHECK(expr->get_string(3) == "org");
+}
+
+TEST_CASE("[RegEx] Number Expression") {
+ const String test = "(2.5e-3 + 35 + 46) / 2.8e0 = 28.9294642857";
+
+ // Not an exact regex for number but a good test.
+ RegEx re("([+-]?\\d+)(\\.\\d+([eE][+-]?\\d+)?)?");
+ REQUIRE(re.is_valid());
+ Array number_match = re.search_all(test);
+
+ CHECK(number_match.size() == 5);
+
+ Ref<RegExMatch> number = number_match[0];
+ CHECK(number->get_string(0) == "2.5e-3");
+ CHECK(number->get_string(1) == "2");
+ number = number_match[1];
+ CHECK(number->get_string(0) == "35");
+ number = number_match[2];
+ CHECK(number->get_string(0) == "46");
+ number = number_match[3];
+ CHECK(number->get_string(0) == "2.8e0");
+ number = number_match[4];
+ CHECK(number->get_string(0) == "28.9294642857");
+ CHECK(number->get_string(1) == "28");
+ CHECK(number->get_string(2) == ".9294642857");
+}
+
TEST_CASE("[RegEx] Invalid end position") {
const String s = "Godot";