diff options
Diffstat (limited to 'modules/gdscript/tests')
7 files changed, 141 insertions, 17 deletions
diff --git a/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd new file mode 100644 index 0000000000..707e4532cc --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd @@ -0,0 +1,13 @@ +# https://github.com/godotengine/godot/pull/61666 + +func test(): +	var dict := {"key": "value"} +	match dict: +		{"key": var value}: +			print(value) # used, no warning +	match dict: +		{"key": var value}: +			pass # unused, warning +	match dict: +		{"key": var _value}: +			pass # unused, suppressed warning from underscore diff --git a/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out new file mode 100644 index 0000000000..057c1b11e5 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out @@ -0,0 +1,6 @@ +GDTEST_OK +>> WARNING +>> Line: 9 +>> UNUSED_VARIABLE +>> The local variable 'value' is declared but never used in the block. If this is intended, prefix it with an underscore: '_value' +value diff --git a/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd b/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd new file mode 100644 index 0000000000..377dd25e9e --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd @@ -0,0 +1,43 @@ +func foo(x): +    match x: +        {"key1": "value1", "key2": "value2"}: +            print('{"key1": "value1", "key2": "value2"}') +        {"key1": "value1", "key2"}: +            print('{"key1": "value1", "key2"}') +        {"key1", "key2": "value2"}: +            print('{"key1", "key2": "value2"}') +        {"key1", "key2"}: +            print('{"key1", "key2"}') +        {"key1": "value1"}: +            print('{"key1": "value1"}') +        {"key1"}: +            print('{"key1"}') +        _: +            print("wildcard") + +func bar(x): +    match x: +        {0}: +            print("0") +        {1}: +            print("1") +        {2}: +            print("2") +        _: +            print("wildcard") + +func test(): +    foo({"key1": "value1", "key2": "value2"}) +    foo({"key1": "value1", "key2": ""}) +    foo({"key1": "", "key2": "value2"}) +    foo({"key1": "", "key2": ""}) +    foo({"key1": "value1"}) +    foo({"key1": ""}) +    foo({"key1": "value1", "key2": "value2", "key3": "value3"}) +    foo({"key1": "value1", "key3": ""}) +    foo({"key2": "value2"}) +    foo({"key3": ""}) +    bar({0: "0"}) +    bar({1: "1"}) +    bar({2: "2"}) +    bar({3: "3"}) diff --git a/modules/gdscript/tests/scripts/parser/features/match_dictionary.out b/modules/gdscript/tests/scripts/parser/features/match_dictionary.out new file mode 100644 index 0000000000..4dee886927 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_dictionary.out @@ -0,0 +1,15 @@ +GDTEST_OK +{"key1": "value1", "key2": "value2"} +{"key1": "value1", "key2"} +{"key1", "key2": "value2"} +{"key1", "key2"} +{"key1": "value1"} +{"key1"} +wildcard +wildcard +wildcard +wildcard +0 +1 +2 +wildcard diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd new file mode 100644 index 0000000000..dbe223f5f5 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd @@ -0,0 +1,26 @@ +func foo(x): +    match x: +        1, [2]: +            print('1, [2]') +        _: +            print('wildcard') + +func bar(x): +    match x: +        [1], [2], [3]: +            print('[1], [2], [3]') +        [4]: +            print('[4]') +        _: +            print('wildcard') + +func test(): +    foo(1) +    foo([2]) +    foo(2) +    bar([1]) +    bar([2]) +    bar([3]) +    bar([4]) +    bar([5]) + diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out new file mode 100644 index 0000000000..a12b934d67 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out @@ -0,0 +1,9 @@ +GDTEST_OK +1, [2] +1, [2] +wildcard +[1], [2], [3] +[1], [2], [3] +[1], [2], [3] +[4] +wildcard diff --git a/modules/gdscript/tests/test_gdscript.cpp b/modules/gdscript/tests/test_gdscript.cpp index d8f60d5e9b..cbcd7b2955 100644 --- a/modules/gdscript/tests/test_gdscript.cpp +++ b/modules/gdscript/tests/test_gdscript.cpp @@ -134,6 +134,34 @@ static void test_parser(const String &p_code, const String &p_script_path, const  #endif  } +static void recursively_disassemble_functions(const Ref<GDScript> script, const Vector<String> &p_lines) { +	for (const KeyValue<StringName, GDScriptFunction *> &E : script->get_member_functions()) { +		const GDScriptFunction *func = E.value; + +		String signature = "Disassembling " + func->get_name().operator String() + "("; +		for (int i = 0; i < func->get_argument_count(); i++) { +			if (i > 0) { +				signature += ", "; +			} +			signature += func->get_argument_name(i); +		} +		print_line(signature + ")"); +#ifdef TOOLS_ENABLED +		func->disassemble(p_lines); +#endif +		print_line(""); +		print_line(""); +	} + +	for (const KeyValue<StringName, Ref<GDScript>> &F : script->get_subclasses()) { +		const Ref<GDScript> inner_script = F.value; +		print_line(""); +		print_line(vformat("Inner Class: %s", inner_script->get_script_class_name())); +		print_line(""); +		recursively_disassemble_functions(inner_script, p_lines); +	} +} +  static void test_compiler(const String &p_code, const String &p_script_path, const Vector<String> &p_lines) {  	GDScriptParser parser;  	Error err = parser.parse(p_code, p_script_path, false); @@ -172,23 +200,7 @@ static void test_compiler(const String &p_code, const String &p_script_path, con  		return;  	} -	for (const KeyValue<StringName, GDScriptFunction *> &E : script->get_member_functions()) { -		const GDScriptFunction *func = E.value; - -		String signature = "Disassembling " + func->get_name().operator String() + "("; -		for (int i = 0; i < func->get_argument_count(); i++) { -			if (i > 0) { -				signature += ", "; -			} -			signature += func->get_argument_name(i); -		} -		print_line(signature + ")"); -#ifdef TOOLS_ENABLED -		func->disassemble(p_lines); -#endif -		print_line(""); -		print_line(""); -	} +	recursively_disassemble_functions(script, p_lines);  }  void test(TestType p_type) {  |