netfishing/scripts/test_player_data_root_paths.gd

130 lines
2.8 KiB
GDScript

extends SceneTree
const PROJECT_PATH := "/tmp/netfishing"
const INSTALL_PATH := "/opt/NETfishing"
func _initialize() -> void:
var root_to_create: String = OS.get_environment("NETFISHING_TEST_CREATE_ROOT")
if not root_to_create.is_empty():
_create_validation_root(root_to_create)
return
var failures: PackedStringArray = []
_expect(
"external temporary directory",
"/tmp/NETfishing-test-data",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"external trailing slash",
"/tmp/NETfishing-test-data/",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"similar project-name sibling",
"/tmp/netfishing-data",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"documents directory",
"/home/player/Documents/NETfishing",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect("source project", PROJECT_PATH, PlayerDataRoot.PATH_SOURCE_PROJECT, failures)
_expect(
"source project child",
PROJECT_PATH.path_join("player-data"),
PlayerDataRoot.PATH_SOURCE_PROJECT,
failures,
)
_expect(
"installation directory",
INSTALL_PATH,
PlayerDataRoot.PATH_INSTALLATION,
failures,
)
_expect(
"installation child",
INSTALL_PATH.path_join("portable-data"),
PlayerDataRoot.PATH_INSTALLATION,
failures,
)
_expect_with_references(
"empty project reference",
"/tmp/NETfishing-test-data",
"",
INSTALL_PATH,
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect_with_references(
"root project reference",
"/tmp/NETfishing-test-data",
"/",
INSTALL_PATH,
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect_with_references(
"Windows component and case normalization",
"C:\\Games\\NETfishing Data",
"C:\\Games\\NETfishing",
"C:\\Program Files\\NETfishing",
PlayerDataRoot.PATH_ALLOWED,
failures,
true,
)
if failures.is_empty():
print("PlayerDataRoot path validation: PASS")
quit(0)
return
for failure: String in failures:
push_error(failure)
quit(1)
func _create_validation_root(path: String) -> void:
var data_root := PlayerDataRoot.new()
get_root().add_child(data_root)
if data_root.select_new_root(path):
print("PlayerDataRoot validation root created: ", data_root.root_path)
quit(0)
return
push_error(data_root.error_message)
quit(1)
func _expect(
label: String,
candidate: String,
expected: StringName,
failures: PackedStringArray,
) -> void:
_expect_with_references(
label,
candidate,
PROJECT_PATH,
INSTALL_PATH,
expected,
failures,
)
func _expect_with_references(
label: String,
candidate: String,
project: String,
installation: String,
expected: StringName,
failures: PackedStringArray,
case_insensitive: bool = false,
) -> void:
var actual: StringName = PlayerDataRoot.classify_candidate_path(
candidate, project, installation, case_insensitive
)
if actual != expected:
failures.append("%s: expected %s, got %s" % [label, expected, actual])