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:
Yun Chan 2026-09-14 00:39:44 +09:00
parent a88aafa1e5
commit 0e568f1f0a
975 changed files with 130593 additions and 16783 deletions

View file

@ -0,0 +1,88 @@
using System.IO;
using System.Text.RegularExpressions;
using System.Windows;
using Paca.App;
using Paca.Tests.Infrastructure;
using Xunit;
namespace Paca.Tests.App;
public class ZenBrowserSideRailGateTests
{
[Fact]
public void Gate_ZenSideRail_XamlStructure_ContainsVerticalIconButtonsOnRight()
{
var mwXaml = SourceTree.MainWindowXaml;
// 1. Zen 브라우저 스타일 우측 세로 레일 컨테이너(ZenSideRail) 존재
Assert.Contains("x:Name=\"ZenSideRail\"", mwXaml);
// 2. SideTabsContainer 내부 세로(Vertical) 스택패널 및 3대 아이콘 글리프 포함 확인
var sideTabsBlock = Regex.Match(mwXaml, @"<Border[^>]*x:Name=""SideTabsContainer""[^>]*>(.*?)</Border>", RegexOptions.Singleline);
Assert.True(sideTabsBlock.Success, "SideTabsContainer 블록이 존재해야 합니다.");
var content = sideTabsBlock.Groups[1].Value;
Assert.Contains("Orientation=\"Vertical\"", content);
Assert.Contains("&#xE896;", content); // 다운로드 아이콘
Assert.Contains("&#xE823;", content); // 방문 기록 아이콘
Assert.Contains("&#xE734;", content); // 즐겨찾기 아이콘
// 3. 서랍 헤더 내 패널 타이틀 텍스트 블록(PanelTitleText) 존재 확인
Assert.Contains("x:Name=\"PanelTitleText\"", mwXaml);
}
[Fact]
public void Gate_ZenSideRail_CollapsedState_ExposesDirectAccessRailIcons()
{
var mwXaml = SourceTree.MainWindowXaml;
// 접힘 상태(56px)에서도 바로 클릭하여 펼칠 수 있는 CollapsedRailIcons 스택 확인
Assert.Contains("x:Name=\"CollapsedRailIcons\"", mwXaml);
Assert.Contains("CollapsedRailDownload_Click", mwXaml);
Assert.Contains("CollapsedRailHistory_Click", mwXaml);
Assert.Contains("CollapsedRailBookmark_Click", mwXaml);
}
[Fact]
public void Gate_ZenSideRail_SwitchingTabs_UpdatesPanelContent_AndActiveState()
{
using var sta = StaDispatcher.Start();
WpfTestApp.Ensure(sta.Dispatcher);
var ok = sta.Invoke(() =>
{
var window = new MainWindow();
window.ApplyPanelState(false); // 펼침
// 1. 기본 상태는 다운로드
Assert.Equal(Visibility.Visible, window.DownloadsPanelView.Visibility);
Assert.Equal(Visibility.Collapsed, window.HistoryPanelView.Visibility);
Assert.Equal(Visibility.Collapsed, window.BookmarksPanelView.Visibility);
Assert.Equal("다운로드", window.PanelTitleText.Text);
// 2. 방문 기록 아이콘 클릭 -> 방문 기록 뷰 활성화 및 타이틀 변경
window.SideTabHistory.IsChecked = true;
Assert.Equal(Visibility.Collapsed, window.DownloadsPanelView.Visibility);
Assert.Equal(Visibility.Visible, window.HistoryPanelView.Visibility);
Assert.Equal(Visibility.Collapsed, window.BookmarksPanelView.Visibility);
Assert.Equal("방문 기록", window.PanelTitleText.Text);
// 3. 즐겨찾기 아이콘 클릭 -> 즐겨찾기 뷰 활성화 및 타이틀 변경
window.SideTabBookmarks.IsChecked = true;
Assert.Equal(Visibility.Collapsed, window.DownloadsPanelView.Visibility);
Assert.Equal(Visibility.Collapsed, window.HistoryPanelView.Visibility);
Assert.Equal(Visibility.Visible, window.BookmarksPanelView.Visibility);
Assert.Equal("즐겨찾기", window.PanelTitleText.Text);
// 4. 다시 다운로드 아이콘 클릭 -> 복귀
window.SideTabDownloads.IsChecked = true;
Assert.Equal(Visibility.Visible, window.DownloadsPanelView.Visibility);
Assert.Equal("다운로드", window.PanelTitleText.Text);
window.Close();
return true;
});
Assert.True(ok);
}
}