글자가 잘리면 CI 가 실패하게 만든다 — 사람이 그림 57장을 보는 대신
재설계 1단계. 화면 픽셀은 하나도 안 옮긴다. 지금까지 이 저장소에서는 글자가 잘렸다는 이유로 실패할 수 있는 것이 하나도 없었다. 테스트 277건은 Core·Data 만 참조해 XAML 을 한 줄도 로드하지 않고, --dialog-shots 는 PNG 56장을 만들면서 단정하는 것은 창 배경색과 스타일 존재 여부 둘뿐이다. 그래서 이번 세션에만 세 건이 눈으로만 잡혔다 — "232 로는 이름이 잘린다", "220 이면 마지막 토글이 잘린다", "0 크기 Grid 가 자식을 폭 0 으로 재서 글자가 사라진다". 글자를 담은 요소만 본다. WPF 에서 DesiredSize > RenderSize 는 정상인 경우가 많아 전부 훑으면 수백 건이 떠서 게이트가 무용지물이 된다. 측정이 검사 방식을 두 번 정정했다. ① "Width 를 좁게 주고 말줄임표를 끄면 잘린다"고 놓았는데 아니었다. TextTrimming=None 이면 TextBlock 은 준 Width 를 지키지 않고 자연폭을 그대로 ActualWidth 로 보고한다(Width=40 인데 ActualWidth=213.3). 즉 WPF 에서 말줄임표 없는 NoWrap 글자는 잘리는 것이 아니라 <b>옆을 침범한다</b>. 그래서 자기 ActualWidth 와 비교하는 대신 <b>자르는 조상의 사각형</b>과 비교한다. 자르는 조상이 없으면 위반으로 세지 않는다 — 겹침은 다른 종류의 결함이고 이 검사기가 판정할 수 있는 것이 아니다. ② 0 폭 칸에 갇힌 글자는 ActualWidth 가 0 이 아니라 9.6 이었다(말줄임표 글리프 몫). 대조군 기대값을 그에 맞게 고쳤다. 자가 점검을 함께 넣었다. 위반 0건은 "화면이 깨끗하다"와 "검사기가 고장났다"를 구분해 주지 않고, 보고서에서 그 둘은 똑같이 생긴다. 이번 세션에 그 함정에 두 번 빠졌다 — --maxrect 가 기본값 0 을 기대값 0 과 비교해 공허하게 통과했고, --modal-check 가 Loaded 보다 먼저 재서 언제나 0 을 셌다. 그래서 일부러 잘린 대조군 4종을 넣고, 검사한 글자 수를 함께 적는다. 실측: 대조군 4/4 · 창 57개에서 글자 1,936개 검사 · 넘침 0건. 기동 화면 밖 문제는 최우선에서 내렸다 — 현장 단말이 1920x1080 이상뿐이라는 답을 받았다. 1440x920 을 1920x1032 에 CenterScreen 하면 Left 240 / Top 56 으로 양수다. MaximizeToWorkArea.cs:251 의 1366x768@125% 주석은 현장 기술이 아니라 방어적 가정이었다. 같은 이유로 A4 맞춤은 50% 가 아니라 77% 이고, 화면 예산 회수는 급한 일이 아니다. 게이트: 테스트 277/277, --dialog-shots 대조군 4/4 넘침 0, --cleartype 11/11, --edit-smoke 0실패, --modal-check 0실패, --maxrect 0실패, --db-smoke 1271건 diff 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
280594362a
commit
862657cf2f
@@ -53,6 +53,13 @@ public static class DialogShots
|
||||
: window.Background?.ToString() ?? "(null)";
|
||||
var styled = window.Style is not null ? "스타일적용" : "스타일없음";
|
||||
lines.Add($"OK {name}-{suffix} 배경={background} {styled}");
|
||||
// 그림은 증거만 만든다 — 잘렸는지는 값으로 단정해야 CI 가 잡는다
|
||||
var violations = OverflowCheck.Inspect(window, out var inspected);
|
||||
lines.Add($" 글자 {inspected}개 검사, 넘침 {violations.Count}건");
|
||||
foreach (var violation in violations)
|
||||
{
|
||||
lines.Add($"FAIL 넘침 {name}-{suffix} {violation}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -63,6 +70,8 @@ public static class DialogShots
|
||||
|
||||
lines.Add(string.Empty);
|
||||
lines.AddRange(StyleSelfCheck());
|
||||
lines.Add(string.Empty);
|
||||
lines.AddRange(OverflowCheck.SelfCheck());
|
||||
|
||||
File.WriteAllText(Path.Combine(outputDirectory, "_report.txt"),
|
||||
string.Join(Environment.NewLine, lines));
|
||||
|
||||
Reference in New Issue
Block a user