using System; using System.IO; using System.Text.RegularExpressions; using Paca.Tests.Infrastructure; using Xunit; namespace Paca.Tests.Mobile; /// /// 모바일 프로덕션 UI 뷰, 5대 탭, 컨트롤 실존 및 레이아웃 무결성 게이트 (Gate 93 ~ Gate 97) /// public class MobileUiProductionGateTests { private static string MobileProjectDir => Directory.Exists(Path.Combine(SourceTree.Root, "src", "Paca.Mobile")) ? Path.Combine(SourceTree.Root, "src", "Paca.Mobile") : Path.Combine(SourceTree.Root, "Paca.Mobile"); [Fact] public void Gate93_TabbedRootPage_FiveTabs_Completeness_Audit() { var rootCs = File.ReadAllText(Path.Combine(MobileProjectDir, "TabbedRootPage.cs")); Assert.Contains("QueuePage", rootCs); Assert.Contains("DiscoverPage", rootCs); Assert.Contains("BrowserPage", rootCs); Assert.Contains("FavoritesPage", rootCs); Assert.Contains("SyncSettingsPage", rootCs); } [Fact] public void Gate94_DiscoverPage_SearchControls_Audit() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("class DiscoverPage", pagesCs); Assert.Contains("_searchEntry", pagesCs); Assert.Contains("_platformChips", pagesCs); Assert.Contains("YouTube", pagesCs); Assert.Contains("Vimeo", pagesCs); } [Fact] public void Gate95_FavoritesPage_Stash_And_Tagging_Ui_Audit() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("class FavoritesPage", pagesCs); Assert.Contains("_tagFilter", pagesCs); Assert.Contains("_favoritesList", pagesCs); } [Fact] public void Gate96_QueuePage_EmptyIllustration_And_Retry_Audit() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("paca_empty_queue.png", pagesCs); Assert.Contains("재시도", pagesCs); } [Fact] public void Gate97_SyncSettingsPage_RemoteTabs_Ui_Audit() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("class SyncSettingsPage", pagesCs); Assert.Contains("_remoteTabsList", pagesCs); Assert.Contains("PC 탭 동기화", pagesCs); } [Fact] public void Gate111_DiscoverPage_Enqueue_And_Favorite_Action_Buttons_Audit() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("_enqueueBtn", pagesCs); Assert.Contains("_favoriteBtn", pagesCs); Assert.Contains("다운로드 큐 추가", pagesCs); Assert.Contains("즐겨찾기 저장", pagesCs); } [Fact] public void Gate112_SyncSettingsPage_ThemeOptions_Includes_OLEDBlack() { var pagesCs = File.ReadAllText(Path.Combine(MobileProjectDir, "Pages.cs")); Assert.Contains("OLED 블랙", pagesCs); Assert.Contains("_wifiOnlySwitch", pagesCs); Assert.Contains("_speedLimitEntry", pagesCs); } [Fact] public void Gate113_AppIcon_And_Splash_Assets_Exist_And_Referenced() { var appIconPath = Path.Combine(MobileProjectDir, "Resources", "AppIcon", "paca_app_icon.png"); var splashPath = Path.Combine(MobileProjectDir, "Resources", "Splash", "paca_splash_screen.png"); Assert.True(File.Exists(appIconPath), "paca_app_icon.png must exist"); Assert.True(File.Exists(splashPath), "paca_splash_screen.png must exist"); } }