using System.IO; using Paca.Browser.Layouts; using Paca.Browser.Panels; using Paca.Browser.Theming; using Xunit; namespace Paca.Tests.App; public class DesktopZenRailAndStatusBarGateTests { private readonly string _mainWindowXamlPath; public DesktopZenRailAndStatusBarGateTests() { var baseDir = AppContext.BaseDirectory; var solutionDir = Path.GetFullPath(Path.Combine(baseDir, "..", "..", "..", "..", "..")); _mainWindowXamlPath = Path.Combine(solutionDir, "src", "Paca.App", "MainWindow.xaml"); } [Fact] public void Gate_ZenSideRail_XamlStructure_ContainsExtendedMultitaskingIcons() { Assert.True(File.Exists(_mainWindowXamlPath), "MainWindow.xaml 파일이 존재해야 합니다."); var xaml = File.ReadAllText(_mainWindowXamlPath); // ZenSideRail 세로 독 확장 아이콘 검증 Assert.Contains("x:Name=\"SideTabWebPanel\"", xaml); Assert.Contains("x:Name=\"SideTabTaskManager\"", xaml); // 56px 축소 레일의 퀵 액션 단추 검증 Assert.Contains("x:Name=\"CollapsedRailWebPanel\"", xaml); Assert.Contains("x:Name=\"CollapsedRailTaskManager\"", xaml); } [Fact] public void Gate_StatusBar_XamlStructure_ContainsZoomAndHostModules() { Assert.True(File.Exists(_mainWindowXamlPath), "MainWindow.xaml 파일이 존재해야 합니다."); var xaml = File.ReadAllText(_mainWindowXamlPath); // 하단 상태바 인체공학 모듈 검증 Assert.Contains("x:Name=\"StatusHostBadge\"", xaml); Assert.Contains("x:Name=\"StatusZoomSlider\"", xaml); } [Theory] [InlineData("tab0", -120, "tab1")] // 아래로 휠 스크롤 -> 다음 탭 (tab0 -> tab1) [InlineData("tab4", -120, "tab0")] // 끝에서 아래로 스크롤 -> 첫 탭 래핑 (tab4 -> tab0) [InlineData("tab0", 120, "tab4")] // 첫 탭에서 위로 스크롤 -> 끝 탭 래핑 (tab0 -> tab4) [InlineData("tab2", 120, "tab1")] // 위로 휠 스크롤 -> 이전 탭 (tab2 -> tab1) public void Gate_TabStripScrollSwitcher_CyclesThroughTabsOnWheel(string current, int delta, string expected) { var switcher = new TabStripScrollSwitcher { CycleMode = ScrollCycleMode.WrapAround, InvertScrollDirection = true // wheel down (-120) moves forward }; switcher.SetTabs(new[] { "tab0", "tab1", "tab2", "tab3", "tab4" }, current); var next = switcher.OnScrollWheel(delta); Assert.Equal(expected, next); } [Fact] public void Gate_SidebarPanelManager_RegistersWebPanels() { var manager = new SidebarPanelManager(); var panels = manager.GetAllPanels(); Assert.NotEmpty(panels); Assert.Contains(panels, p => p.Title.Contains("번역") || p.Title.Contains("Translate") || p.Id == "papago"); } }