124 lines
3.9 KiB
GDScript
124 lines
3.9 KiB
GDScript
extends SceneTree
|
|
|
|
const SettingsPanelScene: PackedScene = preload(
|
|
"res://ui/settings_panel.tscn"
|
|
)
|
|
|
|
const EXPORT_SIZE := Vector2(600.0, 385.0)
|
|
const IMPORT_SIZE := Vector2(600.0, 310.0)
|
|
|
|
|
|
func _initialize() -> void:
|
|
_run.call_deferred()
|
|
|
|
|
|
func _run() -> void:
|
|
root.size = Vector2i(1280, 720)
|
|
await _validate_identity_dialog_lifecycle()
|
|
print("Data management dialog validation: PASS")
|
|
quit(0)
|
|
|
|
|
|
func _validate_identity_dialog_lifecycle() -> void:
|
|
var stage := Control.new()
|
|
stage.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
root.add_child(stage)
|
|
var settings := SettingsPanelScene.instantiate() as Control
|
|
settings.set_anchors_preset(Control.PRESET_CENTER)
|
|
settings.position = Vector2(280.0, 60.0)
|
|
settings.size = Vector2(720.0, 600.0)
|
|
stage.add_child(settings)
|
|
for _frame: int in 3:
|
|
await process_frame
|
|
var overlay := settings.get("_data_management_dialog") as Control
|
|
assert(overlay != null)
|
|
assert(overlay.get_parent() == stage)
|
|
assert(overlay.position.is_equal_approx(Vector2.ZERO))
|
|
assert(overlay.size.is_equal_approx(Vector2(root.size)))
|
|
assert(overlay.scale.is_equal_approx(Vector2.ONE))
|
|
|
|
settings.set("_pending_identity_type", "player")
|
|
settings.call(
|
|
"_identity_export_file_selected", "/tmp/player-identity.nfidentity"
|
|
)
|
|
await _wait_for_layout()
|
|
var first_fields := overlay.find_child(
|
|
"PassphraseFields", true, false
|
|
) as VBoxContainer
|
|
assert(first_fields != null)
|
|
var first_layout: Dictionary = _capture_layout(overlay, first_fields)
|
|
_assert_dialog_layout(overlay, first_fields, EXPORT_SIZE)
|
|
|
|
overlay.call("dismiss")
|
|
settings.set("_pending_identity_type", "host")
|
|
settings.call(
|
|
"_identity_import_file_selected", "/tmp/host-identity.nfidentity"
|
|
)
|
|
await _wait_for_layout()
|
|
var import_fields := overlay.find_child(
|
|
"PassphraseFields", true, false
|
|
) as VBoxContainer
|
|
assert(import_fields != null)
|
|
_assert_dialog_layout(overlay, import_fields, IMPORT_SIZE)
|
|
assert(import_fields.find_child("ConfirmPassphrase", true, false) == null)
|
|
|
|
overlay.call("dismiss")
|
|
settings.call(
|
|
"_identity_export_file_selected", "/tmp/host-identity.nfidentity"
|
|
)
|
|
await _wait_for_layout()
|
|
var second_fields := overlay.find_child(
|
|
"PassphraseFields", true, false
|
|
) as VBoxContainer
|
|
assert(second_fields != null)
|
|
_assert_dialog_layout(overlay, second_fields, EXPORT_SIZE)
|
|
var second_layout: Dictionary = _capture_layout(overlay, second_fields)
|
|
assert(first_layout["panel_size"] == second_layout["panel_size"])
|
|
assert(first_layout["field_offsets"] == second_layout["field_offsets"])
|
|
|
|
settings.queue_free()
|
|
for _frame: int in 2:
|
|
await process_frame
|
|
stage.queue_free()
|
|
await process_frame
|
|
|
|
|
|
func _wait_for_layout() -> void:
|
|
for _frame: int in 3:
|
|
await process_frame
|
|
|
|
|
|
func _capture_layout(
|
|
dialog: Control,
|
|
fields: VBoxContainer,
|
|
) -> Dictionary:
|
|
var panel := dialog.get("_panel") as PanelContainer
|
|
var offsets: Array[float] = []
|
|
for child: Control in fields.get_children():
|
|
offsets.append(child.global_position.y - panel.global_position.y)
|
|
return {
|
|
"panel_size": panel.size,
|
|
"field_offsets": offsets,
|
|
}
|
|
|
|
|
|
func _assert_dialog_layout(
|
|
dialog: Control,
|
|
fields: VBoxContainer,
|
|
expected_size: Vector2,
|
|
) -> void:
|
|
var panel := dialog.get("_panel") as PanelContainer
|
|
var title := dialog.get("_title_label") as Label
|
|
var body_scroll := dialog.get("_body_scroll") as ScrollContainer
|
|
var actions := dialog.get("_actions") as VBoxContainer
|
|
assert(dialog.visible)
|
|
assert(panel.size.is_equal_approx(expected_size))
|
|
assert(title.get_global_rect().end.y <= body_scroll.get_global_rect().position.y)
|
|
assert(body_scroll.get_global_rect().end.y <= actions.get_global_rect().position.y)
|
|
var previous_bottom: float = -INF
|
|
for child: Control in fields.get_children():
|
|
var rect: Rect2 = child.get_global_rect()
|
|
assert(rect.position.y >= previous_bottom)
|
|
assert(rect.position.x >= panel.global_position.x)
|
|
assert(rect.end.x <= panel.get_global_rect().end.x)
|
|
previous_bottom = rect.end.y
|