using VideoDownloader.App; using VideoDownloader.Core.Config; using VideoDownloader.Tests.Infrastructure; namespace VideoDownloader.Tests.E2E; /// /// UI 복잡 버전 RED 스펙 — §B 타이포그래피·폰트 유즈케이스(docs/UI_USECASES.md §B, UC-F01~F22). /// RED 단계: 전부 실패하는 것이 정상이다. /// public class UiUsecaseTypographyRedTests { [Fact] public void UC_F01_UI_기본_폰트를_설정으로_고를_수_있다() => SourceTree.Usecase( SourceTree.PropertyExists(typeof(AppConfig), "UiFontFamily"), "UC-F01", "AppConfig.UiFontFamily 속성이 필요하다"); [Fact] public void UC_F02_UI_폰트_크기를_설정으로_바꿀_수_있다() => SourceTree.Usecase( SourceTree.PropertyExists(typeof(AppConfig), "UiFontSize"), "UC-F02", "AppConfig.UiFontSize 속성이 필요하다"); [Fact] public void UC_F03_한국어_폴백_폰트를_직접_지정할_수_있다() => SourceTree.Usecase( SourceTree.PropertyExists(typeof(AppConfig), "UiFontKoreanFallback"), "UC-F03", "AppConfig.UiFontKoreanFallback 속성이 필요하다"); [Fact] public void UC_F04_기본_폰트_크기_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "FontSize.Base"), "UC-F04", "Shared.xaml 에 FontSize.Base 토큰이 필요하다"); [Fact] public void UC_F05_작은_폰트_크기_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "FontSize.Small"), "UC-F05", "FontSize.Small 토큰이 필요하다"); [Fact] public void UC_F06_큰_폰트_크기_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "FontSize.Large"), "UC-F06", "FontSize.Large 토큰이 필요하다"); [Fact] public void UC_F07_초대형_폰트_크기_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "FontSize.XLarge"), "UC-F07", "FontSize.XLarge 토큰이 필요하다"); [Fact] public void UC_F08_제목_H1_스타일이_공용으로_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "Type.H1"), "UC-F08", "Type.H1 스타일 토큰이 필요하다"); [Fact] public void UC_F09_본문_스타일이_공용으로_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "Type.Body"), "UC-F09", "Type.Body 스타일 토큰이 필요하다"); [Fact] public void UC_F10_캡션_스타일이_공용으로_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "Type.Caption"), "UC-F10", "Type.Caption 스타일 토큰이 필요하다"); [Fact] public void UC_F11_등폭_숫자_스타일이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "Type.Mono"), "UC-F11", "진행률·속도 숫자용 Type.Mono 스타일이 필요하다"); [Fact] public void UC_F12_한국어_가독성_프리셋_폰트가_후보에_포함된다() => SourceTree.Usecase( SourceTree.SharedXaml.Contains("Pretendard"), "UC-F12", "UiFont 폰트 후보에 Pretendard 가 포함되어야 한다"); [Fact] public void UC_F13_설정창에_글꼴_섹션이_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("글꼴"), "UC-F13", "설정창에 '글꼴' 섹션이 필요하다"); [Fact] public void UC_F14_글꼴_미리보기_컨트롤이_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"FontPreviewText\""), "UC-F14", "설정창에 FontPreviewText 미리보기 컨트롤이 필요하다"); [Fact] public void UC_F15_폰트_크기_프리셋_콤보박스가_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"FontSizeBox\""), "UC-F15", "설정창에 FontSizeBox 콤보박스가 필요하다"); [Fact] public void UC_F16_폰트_설정을_즉시_적용하는_API가_있다() => SourceTree.Usecase( SourceTree.MethodExists(typeof(VideoDownloader.App.App), "ApplyFontSettings"), "UC-F16", "App.ApplyFontSettings 로 폰트 설정이 재시작 없이 반영되어야 한다"); [Fact] public void UC_F17_리더_모드에_폰트가_하드코딩되지_않는다() => SourceTree.Usecase( !SourceTree.ReaderModeCs.Contains("Malgun Gothic"), "UC-F17", "리더 모드 HTML 이 폰트를 하드코딩 대신 앱 설정에서 주입받아야 한다"); [Fact] public void UC_F18_새_탭_다이얼에_폰트가_하드코딩되지_않는다() => SourceTree.Usecase( !SourceTree.MainWindowCs.Contains("Malgun Gothic"), "UC-F18", "새 탭 다이얼 인라인 CSS 의 폰트 폴백이 앱 공용 설정으로 통일되어야 한다"); [Fact] public void UC_F19_탭_제목_공용_스타일이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "TabTitleStyle"), "UC-F19", "탭 제목(말줄임 등)의 공용 스타일 TabTitleStyle 이 필요하다"); [Fact] public void UC_F20_상태바_텍스트_공용_스타일이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "StatusTextStyle"), "UC-F20", "상태바 텍스트 공용 스타일 StatusTextStyle 이 필요하다"); [Fact] public void UC_F21_아이콘_크기_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "IconSize.Small"), "UC-F21", "아이콘 크기 토큰 IconSize.Small 이 필요하다"); [Fact] public void UC_F22_줄간격_토큰이_정의된다() => SourceTree.Usecase( SourceTree.HasKey(SourceTree.SharedXaml, "Type.LineHeight"), "UC-F22", "본문 줄간격 토큰 Type.LineHeight 가 필요하다"); }