Files
jiapuapp/tests/n01-module-baseline-contract.ps1
T

47 lines
1.6 KiB
PowerShell

$ErrorActionPreference = 'Stop'
$source = Get-Content 'pages/notification/n01-message-center.vue' -Raw -Encoding UTF8
$profiles = Get-Content 'styles/adaptive-frame-profiles.scss' -Raw -Encoding UTF8
$unread = [string]([char]0x672A) + [char]0x8BFB
$read = [string]([char]0x5DF2) + [char]0x8BFB
$markAllRead = [string]([char]0x5168) + [char]0x90E8 + $read
$goToReview = [string]([char]0x524D) + [char]0x5F80 + [char]0x5165 + [char]0x8C31 + [char]0x5BA1 + [char]0x6838
$required = @(
'@include adaptive.adaptive-notification-content;',
'AppLoading',
'AppToast',
'notice-state--loading',
'notice-state--list',
'notice-state--empty',
'notice-state--error',
$unread,
$read,
$markAllRead,
$goToReview
)
foreach ($token in $required) {
if (-not $source.Contains($token)) {
throw "N01 missing contract token: $token"
}
}
if ($source.Contains('application-status-card.png')) {
throw 'N01 must not reuse the genealogy application card'
}
if ($source -match '<image\s+(?:[^>]*\s)?class="notice-(?:card|state-card)__skin"') {
throw 'N01 decorative frames must be container backgrounds instead of positioned image layers'
}
if ($source -match 'position\s*:') {
throw 'N01 must keep ordinary content in document flow'
}
if ($profiles -notmatch '(?s)@mixin\s+adaptive-notification-content\s*\{.*?n01-notice-card\.png') {
throw 'The adaptive profile owner must retain the N01 notice-card artwork'
}
if ($source -match '100%\s+100%\s+no-repeat|border-image-slice\s*:') {
throw 'N01 must consume adaptive frame geometry without page-local stretching or slicing'
}
Write-Output 'N01-MODULE-BASELINE-CONTRACT PASS'