130 lines
2.8 KiB
GDScript
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])
|