데스크톱 T3 잔여 완성 + 스타일 폴리시: 도메인 라우팅(WorkspaceRoutingRules 자동 워크스페이스 전환), 탭 아카이브(TabArchive 영속·팔레트 복구), 페이지 액션(흑백/세피아 필터), 노트 패널(NotesStore+플라이아웃), 컴팩트 모드(크롬 숨김+엣지 호버). 스타일: 한국어 폰트 폴백, 암시 폰트 통일, 다크 툴팁, 텍스트 대비 상향. UpdateNavState dispose 가드. 164/164 GREEN + 실창 스크린샷 검증

This commit is contained in:
Yun Chan 2026-08-16 08:46:54 +09:00
parent 04ff0ff93d
commit f380518919
12 changed files with 594 additions and 24 deletions

View file

@ -68,9 +68,53 @@ public class MainWindowSmokeE2ETests
window.ToggleFullscreen();
var toolbarBack = window.ToolbarRow.Visibility == Visibility.Visible;
// ── T3-13 컴팩트 모드: 크롬 행 높이 0 → 해제 시 복원 ──
window.ToggleCompactMode();
var compactRowZero = window.MainGrid.RowDefinitions[0].Height.Value == 0;
window.ToggleCompactMode();
var compactRowBack = window.MainGrid.RowDefinitions[0].Height.IsAuto;
// ── T3-12 노트: 패널 열림 + 현재 페이지 추가 → 목록 1건 ──
window.ToggleNotes();
var notesOpen = window.NotesPopup.IsOpen;
window.NotesAddPage_Click(window, new RoutedEventArgs());
var notesCount = window.Notes.List().Count;
window.NotesPopup.IsOpen = false;
// ── T3-2 아카이브: 위에서 닫았던 탭이 영속 아카이브에 기록 ──
// ── T3-2 아카이브: URL 있는 탭을 닫으면 영속 아카이브에 기록 ──
var tab3 = window.Tabs.NewTab();
await Wait.Until(() => Task.FromResult(tab3.Core), c => c != null, 30000);
tab3.Url = "https://e2e.test/archived-page"; // URL 확정 상태 시뮬레이션(실제는 SourceChanged 가 설정)
window.Tabs.CloseTab(tab3);
await Task.Delay(800); // 진행 중이던 초기 네비게이션 이벤트가 dispose 이후 터지지 않게 여유
var archivedCount = window.Archive.Search("").Count;
var archivedHasUrl = window.Archive.Search("").Any(a => a.Url.Contains("e2e.test"));
// ── T3-6 페이지 액션: 실제 HTTP 문서에서 흑백 적용 → 부스트 저장 ──
var port = Random.Shared.Next(21000, 59000);
using var server = new System.Net.HttpListener();
server.Prefixes.Add($"http://127.0.0.1:{port}/");
server.Start();
var serveTask = Task.Run(async () =>
{
var ctx = await server.GetContextAsync();
var bytes = System.Text.Encoding.UTF8.GetBytes("<html><body><p>page-action-e2e</p></body></html>");
await ctx.Response.OutputStream.WriteAsync(bytes);
ctx.Response.Close();
});
window.Tabs.Activate(first);
cv1.Navigate($"http://127.0.0.1:{port}/");
await Wait.Until(() => Task.FromResult(cv1.Source ?? ""), s => s.Contains("127.0.0.1"), 15000);
await serveTask.WaitAsync(TimeSpan.FromSeconds(10));
window.ApplyPageFilter(VideoDownloader.App.Browser.Features.PageFilter.Grayscale);
var filterSaved = window.BoostStore.Get($"http://127.0.0.1:{port}/").Filter;
server.Stop();
window.Close();
return (init: true, switched, countAfterClose, reopened: reopened != null, countAfterReopen,
findVisible, findCollapsed, toolbarHidden, toolbarBack);
findVisible, findCollapsed, toolbarHidden, toolbarBack,
compactRowZero, compactRowBack, notesOpen, notesCount, archivedCount, archivedHasUrl, filterSaved);
});
Assert.True(ok.init, "WebView2 초기화 실패");
@ -82,6 +126,12 @@ public class MainWindowSmokeE2ETests
Assert.True(ok.findCollapsed, "검색 바 미닫힘");
Assert.True(ok.toolbarHidden, "전체화면에서 크롬 미숨김");
Assert.True(ok.toolbarBack, "전체화면 복원 실패");
Assert.True(ok.compactRowZero, "컴팩트 모드에서 크롬 행이 숨겨지지 않음");
Assert.True(ok.compactRowBack, "컴팩트 모드 해제 후 크롬 행 미복원");
Assert.True(ok.notesOpen, "노트 패널 미열림");
Assert.True(ok.notesCount == 1, $"노트 추가 실패: {ok.notesCount}");
Assert.True(ok.archivedCount >= 1 && ok.archivedHasUrl, $"탭 아카이브 미기록: {ok.archivedCount}");
Assert.Equal(VideoDownloader.App.Browser.Features.PageFilter.Grayscale, ok.filterSaved);
}
finally
{