# run-tests.ps1 - 批量生成 tests/.html + tests/index.html # 读 .design_library/aurora-admin/components/index.json 与 frameworks/*.html 派生每组件测试页 # 零依赖、与现有 build-site.ps1 互不影响 # 注:使用 here-string + ascii-safe 转义避免 PS5.1 在 < 而报错 $ErrorActionPreference = 'Stop' $lib = ".design_library/aurora-admin" $idx = Get-Content "$lib/components/index.json" -Raw -Encoding UTF8 | ConvertFrom-Json $catMap = @{} $catMap['general'] = @('button','buttongroup','tag','card') $catMap['navigation']= @('tabs','steps','breadcrumb','sidemenu','topmenu','mixednavigation','quicknav','anchornav','enhancedtabnav','dropdown') $catMap['input'] = @('input','select','cascader','colorpicker','rangequickpicker','numberrangeinput','switchgroup','dragupload','signaturepad','codeinput','passwordinput','phoneinput','bankcardinput','idcardinput','plateinput','autocomplete','mention','transfer','rate','slider','listpicker','radiocard','checkboxcard','segmented') $catMap['display'] = @('table','treetable','expandabletable','mergedcelltable','summaryrowtable','fixedcolumntable','cardlist','timelinelist','steplist','chartpanel','dashboardcard','calendar','carousel','imagepreview','qrcode','countdown','tree','collapse','watermark','employeecard') $catMap['feedback'] = @('modal','confirmmodal','alertmodal','formmodal','fullscreenmodal','messagepro','notificationpro','progressvariants','skeletonpro','emptypro','loadingoverlay','resultvariants','exceptionvariants','popconfirm','bottomsheet') $catMap['system'] = @('themeswitcher','layoutswitcher','densityswitcher','shortcutpanel','backtotop','pagetransition') $slugCat = @{} foreach ($ck in $catMap.Keys) { foreach ($s in $catMap[$ck]) { $slugCat[$s] = $ck } } $catZh = @{ general='通用'; navigation='导航'; input='数据录入'; display='数据展示'; feedback='反馈'; system='工具与系统' } function Get-Snapshot([string]$prefix) { $fw = Get-ChildItem "frameworks" -File -Filter ($prefix + ".html") -ErrorAction SilentlyContinue | Select-Object -First 1 if (-not $fw) { return '

\uff08\u65e0 H5 \u6f14\u793a\u9875\uff09

' } $raw = Get-Content $fw.FullName -Raw -Encoding UTF8 # 简化:用纯字符串方法抽取 body 块 $startTag = "\uff08\u65e0 body \u5185\u5bb9\uff09

' } $bodyStart = $raw.IndexOf(">", $si) + 1 $ei = $raw.IndexOf($endTag, $bodyStart) if ($ei -lt 0) { $ei = $raw.Length } $body = $raw.Substring($bodyStart, $ei - $bodyStart) # 移除 script/style 块(极简) $body = [regex]::Replace($body, "", "", "Singleline") $body = [regex]::Replace($body, "", "", "Singleline") $body = [regex]::Replace($body, " on[a-z]+=`"[^`"]*`"", "", "IgnoreCase") if ($body.Length -gt 1200) { $body = $body.Substring(0, 1200) + "..." } return $body } # 通用 HTML 模板(用 ASCII-safe placeholder,避免 < 解析问题) $templatePath = "tests/_template.html" $template = Get-Content $templatePath -Raw -Encoding UTF8 New-Item -ItemType Directory -Force -Path tests | Out-Null $count = 0 foreach ($c in $idx.components) { $slug = $c.slug $name = $c.name $parts = $name -split ' ' $zh = $parts[0] $en = $parts[-1] $cat = if ($slugCat.ContainsKey($slug)) { $slugCat[$slug] } else { 'general' } $batch = [int]$c.specBatch $prefix = $c.frameworksPrefix $demo = Get-Snapshot $prefix $html = $template $html = $html.Replace('SLUG_PLACEHOLDER', $slug) $html = $html.Replace('SLUG_ZH_PLACEHOLDER', $zh) $html = $html.Replace('

\uff08\u751f\u6210\u5668\u5c06\u586b\u5145\uff09

', $demo) $html = $html.Replace('slug\uff1aSLUG_PLACEHOLDER \u00b7 \u7c7b\u76ee\uff1ageneral \u00b7 \u89c4\u683c\u6279\u6b21\uff1a\u7b2c 1 \u6279', "slug\uff1a$slug \u00b7 \u7c7b\u76ee\uff1a$cat \u00b7 \u89c4\u683c\u6279\u6b21\uff1a\u7b2c $batch \u6279") Set-Content -Path "tests/$slug.html" -Value $html -Encoding UTF8 $count++ } Write-Output ("generated {0} test pages" -f $count) # 总览页 $byCat = @{} foreach ($c in $idx.components) { $cat = if ($slugCat.ContainsKey($c.slug)) { $slugCat[$c.slug] } else { 'general' } if (-not $byCat.ContainsKey($cat)) { $byCat[$cat] = @() } $byCat[$cat] += $c } $catOrder = @('general','navigation','input','display','feedback','system') # 这里字符串用 @'...'@ 保留 < > 原样 $idxHead = @' 测试总览 — Aurora Admin 组件库

测试总览 ← 文档站

为每个组件生成独立测试页(断言协议 + 通用测试矩阵)。点击卡片进入测试页;通过率会写 localStorage[aa-test-log]。

__COUNT__ 个组件测试 通过:— 失败:—
'@ $idxBody = '' foreach ($cat in $catOrder) { if (-not $byCat.ContainsKey($cat)) { continue } $items = $byCat[$cat] $zhCat = $catZh[$cat] $idxBody += '
' + "`n

$zhCat $cat

`n
`n" foreach ($c in $items) { $slug = $c.slug $name = $c.name $parts = $name -split ' ' $zh2 = $parts[0] $en2 = $parts[-1] $idxBody += '
' + $zh2 + '
' + $en2 + '
' + "`n" } $idxBody += "
`n
`n" } $idxFoot = @'
'@ $idxFinal = $idxHead -replace '__COUNT__', $count $idxFinal = $idxFinal + "`n" + $idxBody + "`n" + $idxFoot Set-Content -Path "tests/index.html" -Value $idxFinal -Encoding UTF8 Write-Output ("generated tests/index.html") Write-Output ("done.")