tests/cases/20-locale.ps1
|
# locale 测试:各语言数据键一致、可加载;帮助渲染覆盖所有参数键。 Add-Test @{ Name = 'locale.data-consistency' Group = 'locale' Deps = @('src/locale/', 'src/LocaleLoader.ps1') Run = { param($ctx) function Get-KeyTree($ht, $prefix) { $out = @() foreach ($k in $ht.Keys) { $path = if ($prefix) { "$prefix.$k" } else { "$k" } if ($ht[$k] -is [System.Collections.IDictionary]) { $out += Get-KeyTree $ht[$k] $path } else { $out += $path } } return $out } $localeDir = Join-Path $ctx.RepoRoot 'src/locale' $files = @(Get-ChildItem -LiteralPath $localeDir -Filter '??-??.ps1' -File) Assert-True ($files.Count -ge 6) "locale 文件过少:$($files.Count)" $dataMap = @{} foreach ($f in $files) { $dataMap[$f.BaseName] = & $f.FullName } Assert-True $dataMap.ContainsKey('en-US') 'en-US locale 缺失' $ref = $dataMap['en-US'] $refTop = @($ref.Keys) $refHelp = @(Get-KeyTree $ref.ConsoleHelpData.PrarmsData '') foreach ($name in $dataMap.Keys) { $d = $dataMap[$name] Assert-Equal $name $d.LangID "LangID 应为文件名" Assert-True ($d.ContainsKey('ConsoleHelpData')) "$name 缺少 ConsoleHelpData" foreach ($key in $refTop) { Assert-True ($d.ContainsKey($key)) "$name 缺少顶层键 $key" } $curHelp = @(Get-KeyTree $d.ConsoleHelpData.PrarmsData '') $missing = @($refHelp | Where-Object { $_ -notin $curHelp }) $extra = @($curHelp | Where-Object { $_ -notin $refHelp }) Assert-True ($missing.Count -eq 0) "$name 缺少帮助键:$($missing -join ',')" Assert-True ($extra.Count -eq 0) "$name 多出帮助键:$($extra -join ',')" Assert-True ([bool]$d.ConsoleHelpData.Usage) "$name 的 Usage 为空" } } } Add-Test @{ Name = 'locale.help-renders' Group = 'locale' Deps = @('src/locale/', 'src/HelpShower.ps1', 'src/VirtualTerminal.ps1') Run = { param($ctx) $localeDir = Join-Path $ctx.RepoRoot 'src/locale' $shower = Join-Path $ctx.RepoRoot 'src/HelpShower.ps1' foreach ($f in (Get-ChildItem -LiteralPath $localeDir -Filter '??-??.ps1' -File)) { $data = & $f.FullName $helpData = $data.ConsoleHelpData $out = (. $shower -HelpData $helpData) -join "`n" Assert-True ($out.Length -gt 200) "$($f.BaseName) 帮助渲染过短" foreach ($key in $helpData.PrarmsData.Keys) { Assert-Match $out ([regex]::Escape([string]$key)) "$($f.BaseName) 帮助缺少参数 $key" } } } } |