Test/test.ps1

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

. ..\Core.ps1

$cases = @(
    @("我是一个带有表情👨‍👩‍👧‍👦的目录", 21, 1, "我是一个带有表情👨‍👩‍👧‍👦../"),
    @("我是一个带有表情👨‍👩‍👧‍👦的目录", 22, 1, "我是一个带有表情👨‍👩‍👧‍👦.../"),
    @("我是一个带有表情👨‍👩‍👧‍👦的目录", 23, 1, "我是一个带有表情👨‍👩‍👧‍👦的../"),
    @("我是一个带有表情👨‍👩‍👧‍👦的文件.txt", 22, 0, "我是一个带有表情...txt"),
    @("我是一个带有表情👨‍👩‍👧‍👦的文件.txt", 23, 0, "我是一个带有表情👨‍👩‍👧‍👦..txt"),
    @("我是一个带有表情👨‍👩‍👧‍👦的文件.txt", 24, 0, "我是一个带有表情👨‍👩‍👧‍👦...txt"),
    @("我是一个带有$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 27, 0, "我是一个带有$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦..txt$([char]27)[0m"),
    @("我是一个带有$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 27, 0, "我是一个带有$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦..txt$([char]27)[0m"),
    @("👨‍👩‍👧‍👦的文件.txt", 7, 0, "👨‍👩‍👧‍👦..txt"),
    @("👨‍👩‍👧‍👦的文件.txt", 6, 0, "👨‍👩‍👧‍👦的.."),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 7, 0, "$([char]27)[38;5;196m颜..txt$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 6, 0, "$([char]27)[38;5;196m颜色..$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 4, 0, "$([char]27)[38;5;196m颜..$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 3, 0, "$([char]27)[38;5;196m...$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 2, 0, "$([char]27)[38;5;196m..$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 1, 0, "$([char]27)[38;5;196m.$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", 0, 0, "$([char]27)[38;5;196m$([char]27)[0m"),
    @("$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m", -1, 0, "$([char]27)[38;5;196m颜色表情👨‍👩‍👧‍👦的文件.txt$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir\\\$([char]27)[0m", 4, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir$([char]27)[0m", 4, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir\$([char]27)[0m", 4, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir\$([char]27)[0m", 3, 1, "$([char]27)[38;5;196m../$([char]27)[0m"),
    @("$([char]27)[38;5;196mü  .txt$([char]27)[0m", 4, 0, "$([char]27)[38;5;196mü..$([char]27)[0m"),
    @("$([char]27)[38;5;196m\$([char]27)[0m", -1, 1, "$([char]27)[38;5;196m/$([char]27)[0m"),
    @("$([char]27)[38;5;196m\\$([char]27)[0m", -1, 1, "$([char]27)[38;5;196m/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir\$([char]27)[0m", -1, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir\\\$([char]27)[0m", -1, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196mdir$([char]27)[0m", -1, 1, "$([char]27)[38;5;196mdir/$([char]27)[0m"),
    @("$([char]27)[38;5;196md👨‍👩‍👧‍👦$([char]27)[38;5;208m/\i$([char]27)[38;5;220m\\\\👨‍👩‍👧‍👦$([char]27)[38;5;40mr$([char]27)[0m", -1, 1, "$([char]27)[38;5;196md👨‍👩‍👧‍👦$([char]27)[38;5;208m/i$([char]27)[38;5;220m/👨‍👩‍👧‍👦$([char]27)[38;5;40mr/$([char]27)[0m"),
    @("$([char]27)[38;5;196md👨‍👩‍👧‍👦$([char]27)[38;5;208m/\i\\$([char]27)[38;5;220m\\$([char]27)[38;5;208m\\👨‍👩‍👧‍👦$([char]27)[38;5;40mr$([char]27)[0m", -1, 1, "$([char]27)[38;5;196md👨‍👩‍👧‍👦$([char]27)[38;5;208m/i/👨‍👩‍👧‍👦$([char]27)[38;5;40mr/$([char]27)[0m")
)
foreach ($c in $cases) {
    $o = VisualWidthTruncate -Text $c[0] -MaxWidth $c[1] -Mode $c[2]
    $ok = ($o -ceq $c[3])
    if ($ok) { $status = 'PASS' }else { $status = 'FAIL' }
    $bO = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($o))
    $bE = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($c[3]))
    Write-Output ("CASE: m=" + $c[1] + " d=" + $c[2] + " => " + $status)
    Write-Output ("OUT_BASE64=" + $bO)
    Write-Output ("EXP_BASE64=" + $bE)
    Write-Output ("OUT=" + $o)
    Write-Output ("EXP=" + $c[3])
    Write-Output '---'
}