Physics test cases, cancel previous running test properly

Allows canceling running test cases (including all tests cases) properly and without error.
This commit is contained in:
PouleyKetchoupp
2021-03-08 12:12:16 -07:00
parent 35687c3ead
commit 7f095a6092
5 changed files with 71 additions and 5 deletions

View File

@@ -115,7 +115,7 @@ func cancel_timer():
func is_timer_canceled():
return _timer.paused
return _timer and _timer.paused
func wait_for_physics_ticks(tick_count):

View File

@@ -127,6 +127,8 @@ func _on_option_changed(option, checked):
func _start_test():
cancel_timer()
if _moving_body:
_body_parent.remove_child(_moving_body)
_moving_body.queue_free()

View File

@@ -101,10 +101,14 @@ func _test_all():
# Test floor detection with no snapping.
yield(_start_test_case(OPTION_TEST_CASE_DETECT_FLOOR_NO_SNAP), "completed")
if is_timer_canceled():
return
# Test floor detection with no snapping.
# In this test case, motion alternates different speeds.
yield(_start_test_case(OPTION_TEST_CASE_DETECT_FLOOR_MOTION_CHANGES), "completed")
if is_timer_canceled():
return
Log.print_log("* Done.")

View File

@@ -88,12 +88,25 @@ func _test_all():
# RigidBody tests.
yield(_start_test_case(OPTION_TEST_CASE_JUMP_ONE_WAY_RIGID), "completed")
if is_timer_canceled():
return
yield(_start_test_case(OPTION_TEST_CASE_JUMP_ONE_WAY_CORNER_RIGID), "completed")
if is_timer_canceled():
return
# KinematicBody tests.
yield(_start_test_case(OPTION_TEST_CASE_JUMP_ONE_WAY_KINEMATIC), "completed")
if is_timer_canceled():
return
yield(_start_test_case(OPTION_TEST_CASE_JUMP_ONE_WAY_CORNER_KINEMATIC), "completed")
if is_timer_canceled():
return
yield(_start_test_case(OPTION_TEST_CASE_FALL_ONE_WAY_KINEMATIC), "completed")
if is_timer_canceled():
return
Log.print_log("* Done.")

View File

@@ -44,6 +44,8 @@ var _test_step = 0
var _test_all_angles = false
var _lock_controls = false
var _test_canceled = false
func _ready():
if not Engine.editor_hint:
@@ -225,16 +227,24 @@ func _test_all_rigid_body():
_set_platform_size(64.0, false)
_set_rigidbody_angle(0.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_RIGID), "completed")
if _test_canceled:
return
_set_platform_size(64.0, false)
_set_rigidbody_angle(45.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_RIGID), "completed")
if _test_canceled:
return
_set_platform_size(32.0, false)
_set_rigidbody_angle(45.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_RIGID), "completed")
if _test_canceled:
return
yield(_start_test_case(OPTION_TEST_CASE_MOVING_PLATFORM_RIGID), "completed")
if _test_canceled:
return
func _test_all_kinematic_body():
@@ -243,16 +253,24 @@ func _test_all_kinematic_body():
_set_platform_size(64.0, false)
_set_rigidbody_angle(0.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_KINEMATIC), "completed")
if _test_canceled:
return
_set_platform_size(64.0, false)
_set_rigidbody_angle(45.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_KINEMATIC), "completed")
if _test_canceled:
return
_set_platform_size(32.0, false)
_set_rigidbody_angle(45.0, false)
yield(_start_test_case(OPTION_TEST_CASE_ALL_ANGLES_KINEMATIC), "completed")
if _test_canceled:
return
yield(_start_test_case(OPTION_TEST_CASE_MOVING_PLATFORM_KINEMATIC), "completed")
if _test_canceled:
return
func _test_moving_platform():
@@ -265,9 +283,13 @@ func _test_moving_platform():
_set_platform_angle(90.0, false)
yield(_wait_for_test(), "completed")
if _test_canceled:
return
_set_platform_angle(-90.0, false)
yield(_wait_for_test(), "completed")
if _test_canceled:
return
Log.print_log("* Platform moving towards body...")
_set_platform_size(64.0, false)
@@ -276,9 +298,13 @@ func _test_moving_platform():
_set_platform_angle(90.0, false)
yield(_wait_for_test(), "completed")
if _test_canceled:
return
_set_platform_angle(-90.0, false)
yield(_wait_for_test(), "completed")
if _test_canceled:
return
_platform_speed = 0.0
emit_signal("all_tests_done")
@@ -288,7 +314,12 @@ func _test_all():
Log.print_log("* TESTING ALL...")
yield(_test_all_rigid_body(), "completed")
if _test_canceled:
return
yield(_test_all_kinematic_body(), "completed")
if _test_canceled:
return
Log.print_log("* Done.")
@@ -342,7 +373,9 @@ func _start_test():
func _reset_test(cancel_test = true):
$Timer.stop()
_test_canceled = true
_on_timeout()
_test_canceled = false
_test_step = 0
@@ -415,13 +448,27 @@ func _should_collide():
func _on_timeout():
cancel_timer()
if $Timer.is_stopped():
return
$Timer.stop()
if _test_canceled:
emit_signal("test_done")
emit_signal("all_tests_done")
return
if not _contact_detected and not _target_entered:
Log.print_log("Test TIMEOUT")
_set_result()
$Timer.stop()
yield(get_tree().create_timer(0.5), "timeout")
yield(start_timer(0.5), "timeout")
if _test_canceled:
emit_signal("test_done")
emit_signal("all_tests_done")
return
var was_all_angles = _test_all_angles