Ver código fonte

Added tests for expression matching

ThreeRhinosInAnElephantCostume 4 anos atrás
pai
commit
15ccd83ada

+ 2 - 1
modules/gdscript/gdscript_parser.cpp

@@ -1746,8 +1746,9 @@ GDScriptParser::MatchBranchNode *GDScriptParser::parse_match_branch() {
 		push_error(R"(No pattern found for "match" branch.)");
 	}
 
-	if (!consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after "match" patterns.)"))
+	if (!consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after "match" patterns.)")) {
 		return nullptr;
+	}
 
 	// Save continue state.
 	bool could_continue = can_continue;

+ 34 - 0
modules/gdscript/tests/scripts/parser/features/advanced_expression_matching.gd

@@ -0,0 +1,34 @@
+func foo(x):
+    match x:
+        1 + 1:
+            print("1+1")
+        [1,2,[1,{1:2,2:var z,..}]]:
+            print("[1,2,[1,{1:2,2:var z,..}]]")
+            print(z)
+        1 if true else 2:
+            print("1 if true else 2")
+        1 < 2:
+            print("1 < 2")
+        1 or 2 and 1:
+            print("1 or 2 and 1")
+        6 | 1:
+            print("1 | 1")
+        1 >> 1:
+            print("1 >> 1")
+        1, 2 or 3, 4:
+            print("1, 2 or 3, 4")
+        _:
+            print("wildcard")
+
+func test():
+    foo(6 | 1)
+    foo(1 >> 1)
+    foo(2)
+    foo(1)
+    foo(1+1)
+    foo(1 < 2)
+    foo([2, 1])
+    foo(4)
+    foo([1, 2, [1, {1 : 2, 2:3}]])
+    foo([1, 2, [1, {1 : 2, 2:[1,3,5, "123"], 4:2}]])
+    foo([1, 2, [1, {1 : 2}]])

+ 14 - 0
modules/gdscript/tests/scripts/parser/features/advanced_expression_matching.out

@@ -0,0 +1,14 @@
+GDTEST_OK
+1 | 1
+1 >> 1
+1+1
+1 if true else 2
+1+1
+1 < 2
+wildcard
+1, 2 or 3, 4
+[1,2,[1,{1:2,2:var z,..}]]
+3
+[1,2,[1,{1:2,2:var z,..}]]
+[1, 3, 5, 123]
+wildcard

+ 27 - 0
modules/gdscript/tests/scripts/parser/features/basic_expression_matching.gd

@@ -0,0 +1,27 @@
+func foo(x):
+    match x:
+        1:
+            print("1")
+        2:
+            print("2")
+        [1, 2]:
+            print("[1, 2]")
+        3 or 4:
+            print("3 or 4")
+        4:
+            print("4")
+        {1 : 2, 2 : 3}:
+            print("{1 : 2, 2 : 3}")
+        _:
+            print("wildcard")
+
+func test():
+    foo(0)
+    foo(1)
+    foo(2)
+    foo([1, 2])
+    foo(3)
+    foo(4)
+    foo([4,4])
+    foo({1 : 2, 2 : 3})
+    foo({1 : 2, 4 : 3})

+ 10 - 0
modules/gdscript/tests/scripts/parser/features/basic_expression_matching.out

@@ -0,0 +1,10 @@
+GDTEST_OK
+wildcard
+1
+2
+[1, 2]
+wildcard
+4
+wildcard
+{1 : 2, 2 : 3}
+wildcard