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,89 @@
using System.Linq;
using Paca.Browser;
using Paca.Browser.Extensions;
using Paca.Browser.Tabs;
using Xunit;
namespace Paca.Tests.Browser;
public class ChromeTaskManagerAdvancedTests
{
[Fact]
public void CollectTasks_Includes_Gpu_Process_And_Tabs()
{
var tabMgr = new TabManager(() => new TabItem());
tabMgr.NewTab("https://github.com");
tabMgr.NewTab("https://youtube.com");
var tasks = BrowserTaskManager.CollectTasks(tabMgr);
// Must include Main Browser, GPU Process, and 2 Tabs
Assert.Contains(tasks, t => t.Type == BrowserTaskType.Browser && t.Id == "browser-main");
Assert.Contains(tasks, t => t.Type == BrowserTaskType.Gpu && t.Id == "gpu-process");
Assert.Equal(2, tasks.Count(t => t.Type == BrowserTaskType.Tab));
}
[Fact]
public void BrowserTaskManager_Sorts_By_Columns()
{
var tabMgr = new TabManager(() => new TabItem());
var t1 = tabMgr.NewTab("https://a.com");
var t2 = tabMgr.NewTab("https://b.com");
var tasks = BrowserTaskManager.CollectTasks(tabMgr);
// Sort by Memory Descending
var byMemory = BrowserTaskManager.SortTasks(tasks, BrowserTaskSortColumn.Memory, descending: true);
Assert.True(byMemory[0].MemoryBytes >= byMemory[1].MemoryBytes);
// Sort by CPU Descending
var byCpu = BrowserTaskManager.SortTasks(tasks, BrowserTaskSortColumn.Cpu, descending: true);
Assert.True(byCpu[0].CpuPercent >= byCpu[1].CpuPercent);
}
[Fact]
public void BrowserTaskItem_Formats_NetworkDisplay()
{
var task = new BrowserTaskItem(
Id: "tab-1",
Title: "Tab 1",
Url: "https://example.com",
Type: BrowserTaskType.Tab,
MemoryBytes: 50 * 1024 * 1024,
CpuPercent: 2.5,
NetworkBytesPerSec: 1536000); // ~1.5 MB/s
Assert.Equal("50.0 MB", task.MemoryDisplay);
Assert.Equal("2.5%", task.CpuDisplay);
Assert.Equal("1.5 MB/s", task.NetworkDisplay);
}
[Fact]
public void CollectTasks_Differentiates_Active_And_Background_Tabs()
{
var tabMgr = new TabManager(() => new TabItem());
var activeTab = tabMgr.NewTab("https://active.com", activate: true);
var bgTab = tabMgr.NewTab("https://background.com", activate: false);
var tasks = BrowserTaskManager.CollectTasks(tabMgr);
var activeTask = tasks.First(t => t.Id == activeTab.Id.ToString());
var bgTask = tasks.First(t => t.Id == bgTab.Id.ToString());
// Active tab must show higher or equal CPU activity and allocated working set
Assert.True(activeTask.CpuPercent > bgTask.CpuPercent, "Active tab should report higher CPU usage than background tab");
Assert.True(activeTask.MemoryBytes >= bgTask.MemoryBytes, "Active tab should report equal or higher memory");
}
[Fact]
public void EndTask_ClosesTab_Or_DisablesExtension()
{
var tabMgr = new TabManager(() => new TabItem());
var tab1 = tabMgr.NewTab("https://closeme.com");
var tasks = BrowserTaskManager.CollectTasks(tabMgr);
var tabTask = tasks.First(t => t.Id == tab1.Id.ToString());
bool ended = BrowserTaskManager.EndTask(tabTask, tabMgr);
Assert.True(ended);
Assert.DoesNotContain(tab1, tabMgr.Tabs);
}
}