77 lines
3.5 KiB
C#
77 lines
3.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using Paca.App.Services;
|
|
using Paca.Tests.Infrastructure;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.E2E;
|
|
|
|
/// <summary>
|
|
/// Phase 4 심화 하드닝 게이트 (TDD 선행 RED):
|
|
/// - Gate 401: MainWindow의 Ctrl+Shift+P 전체 일시정지 단축키(pauseall) 배선 무결성
|
|
/// - Gate 402: 미디어 팝업 및 사이트 정보 내 하드코딩 색상(#FF4444, #10B981)의 시맨틱 브러시 일체화
|
|
/// - Gate 403: ShortcutManager 기본 단축키 목록과 MainWindow 키 라우터 전수 패리티 검증
|
|
/// </summary>
|
|
public class DesktopUiAndShortcutHardeningPhase4Tests
|
|
{
|
|
private static readonly string AppDir = Path.Combine(SourceTree.Root, "src", "Paca.App");
|
|
|
|
// =========================================================================
|
|
// Gate 401: MainWindow Ctrl+Shift+P 단축키 배선 검증
|
|
// =========================================================================
|
|
[Fact]
|
|
public void Gate401_MainWindow_PauseAll_Shortcut_CtrlShiftP_Audit()
|
|
{
|
|
var mwCs = File.ReadAllText(Path.Combine(AppDir, "MainWindow.xaml.cs"));
|
|
|
|
// OnPreviewKeyDown 에서 Ctrl+Shift+P 입력 시 PauseAllDownloads() 호출 보증
|
|
var pattern = @"ModifierKeys\.Control\s*\|\s*ModifierKeys\.Shift\)\s*&&\s*e\.Key\s*==\s*Key\.P\b";
|
|
Assert.Matches(pattern, mwCs);
|
|
Assert.Contains("PauseAllDownloads", mwCs);
|
|
}
|
|
|
|
// =========================================================================
|
|
// Gate 402: 하드코딩 색상(#FF4444, #10B981) 시맨틱 브러시 일체화
|
|
// =========================================================================
|
|
[Fact]
|
|
public void Gate402_MainWindow_SemanticBrushes_NoHardcodedHex_In_Popups()
|
|
{
|
|
var mwXaml = File.ReadAllText(Path.Combine(AppDir, "MainWindow.xaml"));
|
|
|
|
// 1) 라인 2695 미디어 팝업 헤더 텍스트 하드코딩 #FF4444 금지
|
|
Assert.DoesNotContain("Foreground=\"#FF4444\"", mwXaml);
|
|
|
|
// 2) 라인 2908 사이트 보안 안전한 연결 텍스트 하드코딩 #10B981 금지
|
|
Assert.DoesNotContain("Foreground=\"#10B981\"", mwXaml);
|
|
|
|
// 3) 해당 위치가 시맨틱 브러시(ErrorBrush, SuccessBrush)로 대체되었는지 검증
|
|
Assert.Contains("Foreground=\"{DynamicResource ErrorBrush}\"", mwXaml);
|
|
Assert.Contains("Foreground=\"{DynamicResource SuccessBrush}\"", mwXaml);
|
|
}
|
|
|
|
// =========================================================================
|
|
// Gate 403: ShortcutManager 기본 단축키와 MainWindow 라우터 전수 패리티
|
|
// =========================================================================
|
|
[Fact]
|
|
public void Gate403_ShortcutManager_AllDefaultShortcuts_AreHandled_OrMappable()
|
|
{
|
|
var mwCs = File.ReadAllText(Path.Combine(AppDir, "MainWindow.xaml.cs"));
|
|
|
|
// ShortcutManager 에 선언된 핵심 기본 단축키 액션들이 MainWindow 에 실제로 배선되어 있는지 검증
|
|
var coreActions = new[]
|
|
{
|
|
"newtab", "closetab", "reopentab", "find", "address",
|
|
"downloads", "palette", "devtools", "fullscreen", "refresh", "print", "pauseall"
|
|
};
|
|
|
|
foreach (var action in coreActions)
|
|
{
|
|
Assert.True(ShortcutManager.Defaults.ContainsKey(action),
|
|
$"ShortcutManager.Defaults 에 '{action}' 이 선언되어 있어야 합니다.");
|
|
}
|
|
|
|
// pauseall 이 MainWindow.xaml.cs 에 단축키 키 핸들러로 등록되어 있는지 확인
|
|
Assert.Contains("PauseAllDownloads", mwCs);
|
|
}
|
|
}
|