chore(client): add gdUnit4 test framework addon
Vendor gdUnit4 for Godot 4 client testing (D-030). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
class_name GdUnitPatcher
|
||||
extends RefCounted
|
||||
|
||||
|
||||
const _base_dir := "res://addons/gdUnit4/src/update/patches/"
|
||||
|
||||
var _patches := Dictionary()
|
||||
|
||||
|
||||
func scan(current :GdUnit4Version) -> void:
|
||||
_scan(_base_dir, current)
|
||||
|
||||
|
||||
func _scan(scan_path :String, current :GdUnit4Version) -> void:
|
||||
_patches = Dictionary()
|
||||
var patch_paths := _collect_patch_versions(scan_path, current)
|
||||
for path in patch_paths:
|
||||
prints("scan for patches checked '%s'" % path)
|
||||
_patches[path] = _scan_patches(path)
|
||||
|
||||
|
||||
func patch_count() -> int:
|
||||
var count := 0
|
||||
for key :String in _patches.keys():
|
||||
@warning_ignore("unsafe_method_access")
|
||||
count += _patches[key].size()
|
||||
return count
|
||||
|
||||
|
||||
func execute() -> void:
|
||||
for key :String in _patches.keys():
|
||||
for path :String in _patches[key]:
|
||||
var patch :GdUnitPatch = (load(key + "/" + path) as GDScript).new()
|
||||
if patch:
|
||||
prints("execute patch", patch.version(), patch.get_script().resource_path)
|
||||
if not patch.execute():
|
||||
prints("error checked execution patch %s" % key + "/" + path)
|
||||
|
||||
|
||||
func _collect_patch_versions(scan_path :String, current :GdUnit4Version) -> PackedStringArray:
|
||||
if not DirAccess.dir_exists_absolute(scan_path):
|
||||
return PackedStringArray()
|
||||
var patches := Array()
|
||||
var dir := DirAccess.open(scan_path)
|
||||
if dir != null:
|
||||
@warning_ignore("return_value_discarded")
|
||||
dir.list_dir_begin() # TODO GODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
|
||||
var next := "."
|
||||
while next != "":
|
||||
next = dir.get_next()
|
||||
if next.is_empty() or next == "." or next == "..":
|
||||
continue
|
||||
var version := GdUnit4Version.parse(next)
|
||||
if version.is_greater(current):
|
||||
patches.append(scan_path + next)
|
||||
patches.sort()
|
||||
return PackedStringArray(patches)
|
||||
|
||||
|
||||
func _scan_patches(path :String) -> PackedStringArray:
|
||||
var patches := Array()
|
||||
var dir := DirAccess.open(path)
|
||||
if dir != null:
|
||||
@warning_ignore("return_value_discarded")
|
||||
dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
|
||||
var next := "."
|
||||
while next != "":
|
||||
next = dir.get_next()
|
||||
# step over directory links and .uid files
|
||||
if next.is_empty() or next == "." or next == ".." or next.ends_with(".uid"):
|
||||
continue
|
||||
patches.append(next)
|
||||
# make sorted from lowest to high version
|
||||
patches.sort()
|
||||
return PackedStringArray(patches)
|
||||
Reference in New Issue
Block a user