57 lines
3.0 KiB
GDScript
57 lines
3.0 KiB
GDScript
# tests/unit/presentation/seal_mark_params_test.gd — 封印印记参数化绘制守门(卡④ R1–R4)
|
||
# 断言面:五常量取值逐项相等(ui_kit ↔ art-bible §8.2 对照);着色器文件存在且七个 uniform 名在文;
|
||
# 迷雾门控(seal_on × fog_state → 封印子件可见性)〔seal批 V1–V4〕。
|
||
# 运行:godot --headless --path game --script res://tests/unit/presentation/seal_mark_params_test.gd
|
||
extends SceneTree
|
||
|
||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||
const SEAL_SHADER := "res://presentation/views/seal_mark.gdshader"
|
||
const CELL_UNIT := preload("res://presentation/views/board_cell_unit.gd")
|
||
|
||
|
||
func _init() -> void:
|
||
# oracle: design/gdd/ux/battle.md:128 (封印印记参数宿主——装载组)
|
||
_test_param_values()
|
||
_test_shader_uniforms()
|
||
_test_fog_gate()
|
||
quit(Kit.finish("seal_mark_params_test"))
|
||
|
||
|
||
# R1–R3/R7 前置:五常量取值逐项相等(art-bible §8.2 定值)
|
||
func _test_param_values() -> void:
|
||
# oracle: design/gdd/ux/battle.md:128 (环径与法阵定值组)
|
||
Kit.check("SEAL_RING_FRAC = 0.82〔seal批 V1〕", UiKit.SEAL_RING_FRAC == 0.82)
|
||
Kit.check("SEAL_WALL_FRAC = 0.11〔seal批 V2〕", UiKit.SEAL_WALL_FRAC == 0.11)
|
||
Kit.check("SEAL_ARM_FRAC = 0.156〔seal批 V2〕", UiKit.SEAL_ARM_FRAC == 0.156)
|
||
Kit.check("SEAL_HALO_ALPHA = 0.50〔seal批 V3〕", UiKit.SEAL_HALO_ALPHA == 0.50)
|
||
Kit.check("SEAL_HALO_GAMMA = 1.6〔seal批 V3〕", UiKit.SEAL_HALO_GAMMA == 1.6)
|
||
|
||
|
||
# R1–R3/R7:着色器存在+七个 uniform 名在文(参数注入面契约)
|
||
func _test_shader_uniforms() -> void:
|
||
# oracle: design/gdd/ux/battle.md:128 (着色器参数化绘制组)
|
||
var src := FileAccess.get_file_as_string(SEAL_SHADER)
|
||
Kit.check("着色器文件存在且非空:%s〔seal批 V1〕" % SEAL_SHADER, src.length() > 0)
|
||
if src.length() == 0:
|
||
return
|
||
for uniform in ["cell_px", "ring_frac", "wall_frac", "arm_frac", "halo_frac", "halo_alpha", "halo_gamma", "mark_col"]:
|
||
Kit.check("着色器 uniform 在文:%s〔seal批 V1〕" % uniform, src.contains(uniform))
|
||
Kit.check("着色器含光圈半径夹取行(r ≤ cell_px/2——光圈不出格)〔seal批 V3〕",
|
||
src.contains("min(r, cell_px * 0.5)"))
|
||
|
||
|
||
# R4 迷雾门控:seal_on × fog_state → 封印子件可见性(内部字段直查=受控例外——子件可见性无公开可观测面,
|
||
# 卡面 R4 断言即 prescribe 子件 visible 直查;对照表该行注记理由)
|
||
func _test_fog_gate() -> void:
|
||
# oracle: design/gdd/ux/battle.md:128 (迷雾联动门控组)
|
||
var u: Node2D = CELL_UNIT.new()
|
||
u.seal_on = true
|
||
Kit.check("seal_on 即挂封印子件〔seal批 V4〕", u._seal_layer != null)
|
||
u.fog_state = 1
|
||
Kit.check("雾态(fog_state=1)封印子件不可见〔seal批 V4〕", u._seal_layer.visible == false)
|
||
u.fog_state = 0
|
||
Kit.check("非雾态(fog_state=0)封印子件可见〔seal批 V4〕", u._seal_layer.visible == true)
|
||
u.seal_on = false
|
||
Kit.check("撤 seal_on 即撤子件〔seal批 V4〕", u._seal_layer == null)
|
||
u.free()
|