fix(tui): 单键序列被 [pscustomobject] 拆成字符串(驱动器改 List[string])
根因:`[pscustomobject]@{ Script = $scriptKeys }` 里,**单元素数组会被 PowerShell 拆成字符串**,于是 `$Driver.Script[0]` 取到的是字符串首字母 —— @('Esc') 变成 'E',键名不再匹配任何分支,循环继续往下读,最后"序列用尽"报错。
这个坑只在"恰好一个键"时出现,所以块 ② 当时的断言(两键序列按顺序消费)看不见它;而菜单循环那块因此连着两次"看着对、跑起来不对"。修法是改用 List[string]:不会被拆、可按索引取、两个版本行为一致。
补一条正是为它立的断言:单键序列必须整键返回(不是首字母)。这类"只在边界数量上出现"的错,只能靠把边界数量本身写进断言来防。
验收:test.ps1 9/9 全绿(5.1 与 7)。
This commit is contained in:
1 parent
347959d677
commit
6315c72f69
2 files changed
+12
-6
No files matched your search
@@ -1447,6 +1447,7 @@ Test-Case '按键归一化与输入缝:映射可无控制台测,序列用尽
|
||||
# 驱动:按序列顺序消费(这一条曾经因为 Script 被折进注释而静默变成"没有序列")
|
||||
$driver = New-BakNRetInputDriver -Script @('Down', 'Enter')
|
||||
Assert-Equal 2 $driver.Script.Count '驱动里应当有两个键'
|
||||
# 单键序列:单元素数组会被 [pscustomobject] 拆成字符串,于是 [0] 变成首字母 —— 这条断言就是 # 为那个坑立的(块 ② 当时只覆盖了两键序列,所以它溜过去了)。 $single = New-BakNRetInputDriver -Script @('Esc') Assert-Equal 'Esc' (Read-BakNRetKey -Driver $single) '单键序列必须整键返回(不是首字母)'
|
||||
Assert-Equal 'Down' (Read-BakNRetKey -Driver $driver) '第一个键'
|
||||
Assert-Equal 'Enter' (Read-BakNRetKey -Driver $driver) '第二个键'
|
||||
|
||||
@@ -1520,6 +1521,8 @@ Test-Case '菜单状态机:绕回、空格切换、确认/取消、空菜单
|
||||
Assert-Equal 'cancel' (Update-BakNRetMenuState -Items $empty -Key 'Esc').Action '空菜单仍然能退出'
|
||||
}
|
||||
|
||||
|
||||
|
||||
# ============================================================================
|
||||
Remove-Item -LiteralPath $sandbox -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item -LiteralPath $itemSandbox -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
Reference in new issue
Block a user