- Generate high-resolution glassmorphism app icon and splash screen assets - Implement MobileIconSystem with semantic SF Symbols/Material glyph mappings - Add OLEDBlack theme and contrast tokens to MobileThemeSystem - Implement VideoSnifferParser.NegotiateBestQuality for multi-stream quality resolution - Enhance DiscoverPage, FavoritesPage, and SyncSettingsPage with production controls - Add Gate 103-114 test suites with 100% test pass rate
93 lines
3.5 KiB
C#
93 lines
3.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using Paca.Tests.Infrastructure;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Mobile;
|
|
|
|
/// <summary>
|
|
/// 모바일 프로덕션 UI 뷰, 5대 탭, 컨트롤 실존 및 레이아웃 무결성 게이트 (Gate 93 ~ Gate 97)
|
|
/// </summary>
|
|
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");
|
|
}
|
|
}
|