feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
72
tests/Paca.Tests/App/DesktopZenRailAndStatusBarGateTests.cs
Normal file
72
tests/Paca.Tests/App/DesktopZenRailAndStatusBarGateTests.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
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");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue