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); } }