-
-
Notifications
You must be signed in to change notification settings - Fork 589
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add automated tests that run a GDExtension (rather than just building…
… it)
- Loading branch information
Showing
17 changed files
with
274 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,4 @@ | |
|
||
[resource] | ||
background_mode = 2 | ||
sky = SubResource( "1" ) | ||
sky = SubResource("1") |
File renamed without changes.
File renamed without changes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
extends "res://test_base.gd" | ||
|
||
var custom_signal_emitted = null | ||
|
||
|
||
func _ready(): | ||
# Signal. | ||
$Example.emit_custom_signal("Button", 42) | ||
assert_equal(custom_signal_emitted, ["Button", 42]) | ||
|
||
# To string. | ||
assert_equal($Example.to_string(),'Example:[ GDExtension::Example <--> Instance ID:%s ]' % $Example.get_instance_id()) | ||
# It appears there's a bug with instance ids :-( | ||
#assert_equal($Example/ExampleMin.to_string(), 'ExampleMin:[Wrapped:%s]' % $Example/ExampleMin.get_instance_id()) | ||
|
||
# Call static methods. | ||
assert_equal($Example.test_static(9, 100), 109); | ||
# It's void and static, so all we know is that it didn't crash. | ||
$Example.test_static2() | ||
|
||
# Property list. | ||
$Example.property_from_list = Vector3(100, 200, 300) | ||
assert_equal($Example.property_from_list, Vector3(100, 200, 300)) | ||
|
||
# Call simple methods. | ||
$Example.simple_func() | ||
assert_equal(custom_signal_emitted, ['simple_func', 3]) | ||
($Example as Example).simple_const_func() # Force use of ptrcall | ||
assert_equal(custom_signal_emitted, ['simple_const_func', 4]) | ||
|
||
# Pass custom reference. | ||
assert_equal($Example.custom_ref_func(null), -1) | ||
var ref1 = ExampleRef.new() | ||
ref1.id = 27 | ||
assert_equal($Example.custom_ref_func(ref1), 27) | ||
ref1.id += 1; | ||
assert_equal($Example.custom_const_ref_func(ref1), 28) | ||
|
||
# Pass core reference. | ||
assert_equal($Example.image_ref_func(null), "invalid") | ||
assert_equal($Example.image_const_ref_func(null), "invalid") | ||
var image = Image.new() | ||
assert_equal($Example.image_ref_func(image), "valid") | ||
assert_equal($Example.image_const_ref_func(image), "valid") | ||
|
||
# Return values. | ||
assert_equal($Example.return_something("some string"), "some string42") | ||
assert_equal($Example.return_something_const(), get_viewport()) | ||
var null_ref = $Example.return_empty_ref() | ||
assert_equal(null_ref, null) | ||
var ret_ref = $Example.return_extended_ref() | ||
assert_not_equal(ret_ref.get_instance_id(), 0) | ||
assert_equal(ret_ref.get_id(), 0) | ||
assert_equal($Example.get_v4(), Vector4(1.2, 3.4, 5.6, 7.8)) | ||
assert_equal($Example.test_node_argument($Example), $Example) | ||
|
||
# VarArg method calls. | ||
var var_ref = ExampleRef.new() | ||
assert_not_equal($Example.extended_ref_checks(var_ref).get_instance_id(), var_ref.get_instance_id()) | ||
assert_equal($Example.varargs_func("some", "arguments", "to", "test"), 4) | ||
assert_equal($Example.varargs_func_nv("some", "arguments", "to", "test"), 46) | ||
$Example.varargs_func_void("some", "arguments", "to", "test") | ||
assert_equal(custom_signal_emitted, ["varargs_func_void", 5]) | ||
|
||
# Method calls with default values. | ||
assert_equal($Example.def_args(), 300) | ||
assert_equal($Example.def_args(50), 250) | ||
assert_equal($Example.def_args(50, 100), 150) | ||
|
||
# Array and Dictionary | ||
assert_equal($Example.test_array(), [1, 2]) | ||
assert_equal($Example.test_tarray(), [ Vector2(1, 2), Vector2(2, 3) ]) | ||
assert_equal($Example.test_dictionary(), {"hello": "world", "foo": "bar"}) | ||
var array: Array[int] = [1, 2, 3] | ||
assert_equal($Example.test_tarray_arg(array), 6) | ||
|
||
# String += operator | ||
assert_equal($Example.test_string_ops(), "ABCĎE") | ||
|
||
# PackedArray iterators | ||
assert_equal($Example.test_vector_ops(), 105) | ||
|
||
# Properties. | ||
assert_equal($Example.group_subgroup_custom_position, Vector2(0, 0)) | ||
$Example.group_subgroup_custom_position = Vector2(50, 50) | ||
assert_equal($Example.group_subgroup_custom_position, Vector2(50, 50)) | ||
|
||
# Constants. | ||
assert_equal($Example.FIRST, 0) | ||
assert_equal($Example.ANSWER_TO_EVERYTHING, 42) | ||
assert_equal($Example.CONSTANT_WITHOUT_ENUM, 314) | ||
|
||
# BitFields. | ||
assert_equal(Example.FLAG_ONE, 1) | ||
assert_equal(Example.FLAG_TWO, 2) | ||
assert_equal($Example.test_bitfield(0), 0) | ||
assert_equal($Example.test_bitfield(Example.FLAG_ONE | Example.FLAG_TWO), 3) | ||
|
||
exit_with_status() | ||
|
||
func _on_Example_custom_signal(signal_name, value): | ||
custom_signal_emitted = [signal_name, value] |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
extends Node | ||
|
||
var test_passes := 0 | ||
var test_failures := 0 | ||
|
||
func __get_stack_frame(): | ||
var me = get_script() | ||
for s in get_stack(): | ||
if s.source == me.resource_path: | ||
return s | ||
return null | ||
|
||
func __assert_pass(): | ||
test_passes += 1 | ||
|
||
func __assert_fail(): | ||
test_failures += 1 | ||
var s = __get_stack_frame() | ||
if s != null: | ||
print_rich ("[color=red] == FAILURE: In function %s() from '%s' on line %s[/color]" % [s.function, s.source, s.line]) | ||
else: | ||
print_rich ("[color=red] == FAILURE (run with --debug to get more information!) ==[/color]") | ||
|
||
func assert_equal(actual, expected): | ||
if actual == expected: | ||
__assert_pass() | ||
else: | ||
__assert_fail() | ||
print (" |-> Expected '%s' but got '%s'" % [expected, actual]) | ||
|
||
func assert_true(v): | ||
assert_equal(v, true) | ||
|
||
func assert_false(v): | ||
assert_equal(v, false) | ||
|
||
func assert_not_equal(actual, expected): | ||
if actual != expected: | ||
__assert_pass() | ||
else: | ||
__assert_fail() | ||
print (" |-> Expected '%s' NOT to equal '%s'" % [expected, actual]) | ||
|
||
func exit_with_status() -> void: | ||
var success: bool = (test_failures == 0) | ||
print ("") | ||
print_rich ("[color=%s] ==== TESTS FINISHED ==== [/color]" % ("green" if success else "red")) | ||
print ("") | ||
print_rich (" PASSES: [color=green]%s[/color]" % test_passes) | ||
print_rich (" FAILURES: [color=red]%s[/color]" % test_failures) | ||
print ("") | ||
|
||
if success: | ||
print_rich("[color=green] ******** PASSED ******** [/color]") | ||
else: | ||
print_rich("[color=red] ******** FAILED ********[/color]") | ||
print("") | ||
|
||
get_tree().quit(0 if success else 1) |
Oops, something went wrong.