Files
MusicPlayer/addons/gdUnit4/src/update/GdUnitUpdateClient.gd
T
Sansan c985a6ce5b Replace the broken test suite with working GdUnit4 tests
The previous tests never compiled: they used GUT's assert functions,
Godot 3 APIs and reassigned autoload functions, so no test ran.

- 90 tests: unit tests for the playlist, songs, player scoring, time
  formatting, search and the server client, plus integration tests
  that run MainWindow and SyncWindow against a fake server
- Keybind tests check that Alt+<number> and Ctrl+Alt+<number> keep
  following the player rows while players are added and removed
- run_tests.sh finds Godot and runs the suite headless (~10 seconds)
- CI runs the tests before the build job in gitea-build.yaml; the
  separate test.yml used a GitHub action that does not exist
- GdUnit4 is committed instead of ignored, since the project enables
  it, and .gitea/ is no longer ignored
- Exported builds leave out tests/ and addons/gdUnit4/
2026-10-06 08:32:56 +02:00

99 lines
3.0 KiB
GDScript

@tool
extends Node
signal request_completed(response: HttpResponse)
class HttpResponse:
var _http_status: int
var _body: PackedByteArray
func _init(http_status: int, body: PackedByteArray) -> void:
_http_status = http_status
_body = body
func status() -> int:
return _http_status
func response() -> Variant:
if _http_status != 200:
return _body.get_string_from_utf8()
var test_json_conv := JSON.new()
@warning_ignore("return_value_discarded")
var error := test_json_conv.parse(_body.get_string_from_utf8())
if error != OK:
return "HttpResponse: %s Error: %s" % [error_string(error), _body.get_string_from_utf8()]
return test_json_conv.get_data()
func get_body() -> PackedByteArray:
return _body
var _http_request := HTTPRequest.new()
func _ready() -> void:
add_child(_http_request)
@warning_ignore("return_value_discarded")
_http_request.request_completed.connect(_on_request_completed)
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
if is_instance_valid(_http_request):
_http_request.queue_free()
#func list_tags() -> void:
# _http_request.connect("request_completed",Callable(self,"_response_request_tags"))
# var error = _http_request.request("https://api.github.com/repos/MikeSchulze/gdUnit4/tags")
# if error != OK:
# push_error("An error occurred in the HTTP request.")
func request_latest_version() -> HttpResponse:
var error := _http_request.request("https://api.github.com/repos/MikeSchulze/gdUnit4/tags")
if error != OK:
var message := "Request latest version failed, %s" % error_string(error)
return HttpResponse.new(error, message.to_utf8_buffer())
return await self.request_completed
func request_releases() -> HttpResponse:
var error := _http_request.request("https://api.github.com/repos/MikeSchulze/gdUnit4/releases")
if error != OK:
var message := "request_releases failed: %d" % error
return HttpResponse.new(error, message.to_utf8_buffer())
return await self.request_completed
func request_image(url: String) -> HttpResponse:
var error := _http_request.request(url)
if error != OK:
var message := "request_image failed: %d" % error
return HttpResponse.new(error, message.to_utf8_buffer())
return await self.request_completed
func request_zip_package(url: String, file: String) -> HttpResponse:
_http_request.set_download_file(file)
var error := _http_request.request(url)
if error != OK:
var message := "request_zip_package failed: %d" % error
return HttpResponse.new(error, message.to_utf8_buffer())
return await self.request_completed
func extract_latest_version(response: HttpResponse) -> GdUnit4Version:
var body: Array = response.response()
return GdUnit4Version.parse(str(body[0]["name"]))
func _on_request_completed(_result: int, response_http_status: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
if _http_request.get_http_client_status() != HTTPClient.STATUS_DISCONNECTED:
_http_request.set_download_file("")
request_completed.emit(HttpResponse.new(response_http_status, body))