using VideoDownloader.Browser.Tabs; namespace VideoDownloader.Tests.Browser; // ── T2-11 탭 그룹: 색상 라벨 + 그룹 단위 이동/닫기 ── public class TabGroupsTests { private static TabManager NewManager() => new(() => new TabItem()); [Fact] public void 그룹_지정과_해제() { var m = NewManager(); var t = m.NewTab("https://a.com"); m.SetGroup(t, "Work", "#e11"); Assert.Equal("Work", t.GroupName); Assert.Equal("#e11", t.GroupColor); m.SetGroup(t, null, null); Assert.Null(t.GroupName); } [Fact] public void 같은_그룹_탭은_서로_인접한다() { var m = NewManager(); var a = m.NewTab("a"); m.SetGroup(a, "G", "#111"); m.NewTab("b"); // 비그룹 var c = m.NewTab("c"); m.SetGroup(c, "G", "#111"); // 그룹으로 → a 옆으로 이동 Assert.Equal(1, m.Tabs.IndexOf(c)); Assert.Equal(0, m.Tabs.IndexOf(a)); } [Fact] public void 그룹_탭_전체_닫기() { var m = NewManager(); var a = m.NewTab("a"); m.SetGroup(a, "G", "#111"); var b = m.NewTab("b"); m.SetGroup(b, "G", "#111"); m.NewTab("solo"); var closed = m.CloseGroup("G"); Assert.Equal(2, closed); Assert.Single(m.Tabs); } } // ── T3-1 워크스페이스: 탭 세트 저장/전환 ── public class WorkspaceTests { private static TabManager NewManager() => new(() => new TabItem()); [Fact] public void 워크스페이스_저장후_스왑하면_탭_세트가_교체된다() { var m = NewManager(); m.NewTab("https://work1.com"); m.NewTab("https://work2.com"); var ws = m.CaptureWorkspace("Work"); m.NewTab("https://personal.com"); Assert.Equal(3, m.Tabs.Count); m.SwitchWorkspace(ws); Assert.Equal(2, m.Tabs.Count); Assert.Equal("https://work1.com", m.Tabs[0].Url); Assert.Equal("https://work2.com", m.Tabs[1].Url); Assert.Equal("Work", ws.Name); } [Fact] public void 워크스페이스_캡처는_현재_탭을_그대로_유지한다() { var m = NewManager(); m.NewTab("https://a.com"); var ws = m.CaptureWorkspace("X"); Assert.Equal(1, m.Tabs.Count); // 캡처 자체는 현재 상태 유지(스냅샷) Assert.Single(ws.Urls); } }