releases/VideoDownloader.Tests/E2E/UiUsecaseTypographyRedTests.cs

144 lines
6.2 KiB
C#

using VideoDownloader.App;
using VideoDownloader.Core.Config;
using VideoDownloader.Tests.Infrastructure;
namespace VideoDownloader.Tests.E2E;
/// <summary>
/// UI 복잡 버전 RED 스펙 — §B 타이포그래피·폰트 유즈케이스(docs/UI_USECASES.md §B, UC-F01~F22).
/// RED 단계: 전부 실패하는 것이 정상이다.
/// </summary>
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 가 필요하다");
}