releases/VideoDownloader.Tests/E2E/UiUsecaseLayoutRedTests.cs

168 lines
7.4 KiB
C#

using VideoDownloader.App;
using VideoDownloader.Core.Config;
using VideoDownloader.Tests.Infrastructure;
namespace VideoDownloader.Tests.E2E;
/// <summary>
/// UI 복잡 버전 RED 스펙 — §C 레이아웃·밀도·창 상태 유즈케이스(docs/UI_USECASES.md §C, UC-L01~L26).
/// RED 단계: 전부 실패하는 것이 정상이다.
/// </summary>
public class UiUsecaseLayoutRedTests
{
[Fact]
public void UC_L01_UI_밀도_설정이_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "UiDensity"),
"UC-L01", "컴팩트/보통/여유 밀도를 고르는 AppConfig.UiDensity 가 필요하다");
[Fact]
public void UC_L02_설정창에서_밀도를_바꿀_수_있다()
=> SourceTree.Usecase(
SourceTree.SettingsWindowXaml.Contains("밀도"),
"UC-L02", "설정창에 '밀도' 항목이 노출되어야 한다");
[Fact]
public void UC_L03_작은_간격_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "Spacing.S"),
"UC-L03", "간격 토큰 Spacing.S 가 필요하다");
[Fact]
public void UC_L04_중간_간격_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "Spacing.M"),
"UC-L04", "간격 토큰 Spacing.M 이 필요하다");
[Fact]
public void UC_L05_큰_간격_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "Spacing.L"),
"UC-L05", "간격 토큰 Spacing.L 이 필요하다");
[Fact]
public void UC_L06_카드_모서리_둥글기_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "CornerRadius.Card"),
"UC-L06", "카드 둥근 모서리 토큰 CornerRadius.Card 가 필요하다");
[Fact]
public void UC_L07_컴팩트_모드_상태가_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "CompactMode"),
"UC-L07", "AppConfig.CompactMode 로 재시작 후에도 컴팩트 상태가 유지되어야 한다");
[Fact]
public void UC_L08_툴바에_컴팩트_토글_버튼이_있다()
=> SourceTree.Usecase(
SourceTree.MainWindowXaml.Contains("Name=\"CompactModeBtn\""),
"UC-L08", "툴바의 CompactModeBtn 로 컴팩트 모드를 빠르게 켜고 끌 수 있어야 한다");
[Fact]
public void UC_L09_세로_탭_기본_여부를_설정할_수_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "VerticalTabsDefault"),
"UC-L09", "AppConfig.VerticalTabsDefault 속성이 필요하다");
[Fact]
public void UC_L10_분할_화면_비율이_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "SplitViewRatio"),
"UC-L10", "분할 화면 비율(AppConfig.SplitViewRatio)이 저장·복원되어야 한다");
[Fact]
public void UC_L11_창_위치_크기가_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "WindowBounds"),
"UC-L11", "AppConfig.WindowBounds 로 창 위치·크기가 복원되어야 한다");
[Fact]
public void UC_L12_최대화_상태가_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "WindowMaximized"),
"UC-L12", "AppConfig.WindowMaximized 로 최대화 여부가 복원되어야 한다");
[Fact]
public void UC_L13_루트_요소가_레이아웃_반올림을_켠다()
=> SourceTree.Usecase(
SourceTree.MainWindowXaml.Contains("UseLayoutRounding"),
"UC-L13", "MainWindow 가 UseLayoutRounding 으로 고DPI 흐림을 방지해야 한다");
[Fact]
public void UC_L14_공용_스타일이_픽셀_정렬을_켠다()
=> SourceTree.Usecase(
SourceTree.SharedXaml.Contains("SnapsToDevicePixels"),
"UC-L14", "Shared.xaml 스타일이 SnapsToDevicePixels 로 선명도를 보장해야 한다");
[Fact]
public void UC_L15_상태바_자동_숨김을_설정할_수_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "StatusBarAutoHide"),
"UC-L15", "AppConfig.StatusBarAutoHide 속성이 필요하다");
[Fact]
public void UC_L16_툴바_버튼_노출을_직접_고른다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "ToolbarButtons"),
"UC-L16", "AppConfig.ToolbarButtons 로 버튼 표시 여부를 지정할 수 있어야 한다");
[Fact]
public void UC_L17_북마크바_표시_여부가_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "BookmarkBarVisible"),
"UC-L17", "AppConfig.BookmarkBarVisible 속성이 필요하다");
[Fact]
public void UC_L18_탭_스트립_위치를_설정할_수_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "TabStripPosition"),
"UC-L18", "AppConfig.TabStripPosition 로 탭 스트립 위치를 고를 수 있어야 한다");
[Fact]
public void UC_L19_패널_폭을_더블클릭으로_초기화한다()
=> SourceTree.Usecase(
SourceTree.MethodExists(typeof(MainWindow), "ResetPanelWidth"),
"UC-L19", "MainWindow.ResetPanelWidth 로 패널 폭을 기본값으로 되돌릴 수 있어야 한다");
[Fact]
public void UC_L20_패널_최소_폭을_설정할_수_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "RightPanelMinWidth"),
"UC-L20", "AppConfig.RightPanelMinWidth 속성이 필요하다");
[Fact]
public void UC_L21_애니메이션_축소_설정이_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "ReduceMotion"),
"UC-L21", "AppConfig.ReduceMotion 로 애니메이션을 줄일 수 있어야 한다");
[Fact]
public void UC_L22_빠른_애니메이션_지속시간_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "Duration.Fast"),
"UC-L22", "지속 시간 토큰 Duration.Fast 가 필요하다");
[Fact]
public void UC_L23_일반_애니메이션_지속시간_토큰이_정의된다()
=> SourceTree.Usecase(
SourceTree.HasKey(SourceTree.SharedXaml, "Duration.Normal"),
"UC-L23", "지속 시간 토큰 Duration.Normal 이 필요하다");
[Fact]
public void UC_L24_컴팩트_엣지_호버_반응_속도를_설정한다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "EdgeRevealDelayMs"),
"UC-L24", "AppConfig.EdgeRevealDelayMs 속성이 필요하다");
[Fact]
public void UC_L25_UI_전체_배율을_설정할_수_있다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "UiScale"),
"UC-L25", "AppConfig.UiScale 로 UI 전체 배율을 조절할 수 있어야 한다");
[Fact]
public void UC_L26_전체화면_여부가_저장된다()
=> SourceTree.Usecase(
SourceTree.PropertyExists(typeof(AppConfig), "FullScreen"),
"UC-L26", "AppConfig.FullScreen 속성이 필요하다");
}