using Paca.Browser.Tabs; using Xunit; namespace Paca.Tests.App; public class ChromeTabDiscardingMegaTests { [Theory] [InlineData("메모리 절약")] [InlineData("절전 모드")] [InlineData("memory saver")] [InlineData("discard tabs")] public void Omnibox_Matches_DiscardTabs_Action(string query) { var actions = OmniboxActionEvaluator.GetMatchingActions(query); Assert.NotEmpty(actions); Assert.Contains(actions, a => a.ActionId == "action:discard-tabs"); } [Fact] public void DiscardPolicy_ProtectsPinnedAndAudioTabs() { var mgr = new TabManager(() => new TabItem()); var activeTab = mgr.NewTab("https://example.com/1"); var audioTab = mgr.NewTab("https://youtube.com", activate: false); audioTab.IsAudioPlaying = true; var pinnedTab = mgr.NewTab("https://mail.google.com", activate: false); pinnedTab.IsPinned = true; var normalTab = mgr.NewTab("https://news.ycombinator.com", activate: false); Assert.False(mgr.CanDiscardTab(activeTab)); Assert.False(mgr.CanDiscardTab(audioTab)); Assert.False(mgr.CanDiscardTab(pinnedTab)); Assert.True(mgr.CanDiscardTab(normalTab)); } [Fact] public void TabManager_DiscardOtherTabs_DiscardsOnlyEligibleTabs() { var mgr = new TabManager(() => new TabItem()); var tab1 = mgr.NewTab("https://tab1.com"); // active var tab2 = mgr.NewTab("https://tab2.com", activate: false); tab2.IsPinned = true; var tab3 = mgr.NewTab("https://tab3.com", activate: false); tab3.IsAudioPlaying = true; var tab4 = mgr.NewTab("https://tab4.com", activate: false); var tab5 = mgr.NewTab("https://tab5.com", activate: false); int discarded = mgr.DiscardOtherTabs(); Assert.Equal(2, discarded); Assert.False(tab1.IsSuspended); Assert.False(tab2.IsSuspended); Assert.False(tab3.IsSuspended); Assert.True(tab4.IsSuspended); Assert.True(tab5.IsSuspended); // Activating a suspended tab automatically resumes it mgr.Activate(tab4); Assert.False(tab4.IsSuspended); Assert.True(tab4.IsActive); } }