using System.Linq; using Paca.Browser.Tabs; using Xunit; namespace Paca.Tests.Browser; public class ChromeTabGroupingMegaTests { [Fact] public void Ungroup_Clears_GroupName_And_Color_Without_Closing_Tabs() { var mgr = new TabManager(() => new TabItem()); var tab1 = mgr.NewTab("https://youtube.com/watch?v=1"); var tab2 = mgr.NewTab("https://youtube.com/watch?v=2"); var tab3 = mgr.NewTab("https://github.com/microsoft"); mgr.SetGroup(tab1, "동영상", "#EA4335"); mgr.SetGroup(tab2, "동영상", "#EA4335"); Assert.Equal(3, mgr.Tabs.Count); Assert.Equal("동영상", tab1.GroupName); Assert.Equal("동영상", tab2.GroupName); int ungrouped = mgr.Ungroup("동영상"); Assert.Equal(2, ungrouped); Assert.Equal(3, mgr.Tabs.Count); Assert.Null(tab1.GroupName); Assert.Null(tab1.GroupColor); Assert.Null(tab2.GroupName); Assert.Null(tab2.GroupColor); } [Fact] public void GetActiveGroups_Returns_Correct_Aggregations() { var mgr = new TabManager(() => new TabItem()); var tab1 = mgr.NewTab("https://youtube.com/1"); var tab2 = mgr.NewTab("https://youtube.com/2"); var tab3 = mgr.NewTab("https://docs.google.com"); mgr.SetGroup(tab1, "미디어", "#EA4335"); mgr.SetGroup(tab2, "미디어", "#EA4335"); mgr.SetGroup(tab3, "업무", "#4285F4"); var groups = mgr.GetActiveGroups(); Assert.Equal(2, groups.Count); var mediaGroup = groups.FirstOrDefault(g => g.Name == "미디어"); Assert.NotNull(mediaGroup); Assert.Equal("#EA4335", mediaGroup.Color); Assert.Equal(2, mediaGroup.Count); var workGroup = groups.FirstOrDefault(g => g.Name == "업무"); Assert.NotNull(workGroup); Assert.Equal("#4285F4", workGroup.Color); Assert.Equal(1, workGroup.Count); } [Fact] public void AutoGroupByDomain_Groups_Matching_Domains_Contiguously() { var mgr = new TabManager(() => new TabItem()); var tabY1 = mgr.NewTab("https://www.youtube.com/watch?v=a"); var tabG1 = mgr.NewTab("https://github.com/owner/repo"); var tabY2 = mgr.NewTab("https://youtube.com/feed"); var tabG2 = mgr.NewTab("https://github.com/issues"); var tabUnique = mgr.NewTab("https://example.com/info"); int groupsCreated = mgr.AutoGroupByDomain(minTabsPerGroup: 2); Assert.Equal(2, groupsCreated); Assert.Equal("youtube.com", tabY1.GroupName); Assert.Equal("youtube.com", tabY2.GroupName); Assert.Equal("github.com", tabG1.GroupName); Assert.Equal("github.com", tabG2.GroupName); Assert.Null(tabUnique.GroupName); // Grouped tabs should have assigned colors Assert.NotNull(tabY1.GroupColor); Assert.NotNull(tabG1.GroupColor); } [Theory] [InlineData("탭 그룹")] [InlineData("탭 묶기")] [InlineData("group tabs")] [InlineData("auto group")] public void Omnibox_Matches_GroupTabs_Action(string query) { var actions = OmniboxActionEvaluator.GetMatchingActions(query); Assert.NotEmpty(actions); Assert.Contains(actions, a => a.ActionId == "action:group-tabs"); } }