55 lines
1.9 KiB
C#
55 lines
1.9 KiB
C#
using System.Linq;
|
|
using Paca.Browser.Tabs;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Browser;
|
|
|
|
public class ChromeTabDeduplicationTests
|
|
{
|
|
[Fact]
|
|
public void CloseDuplicateTabs_Closes_Redundant_Tabs_Keeping_Original()
|
|
{
|
|
var mgr = new TabManager(() => new TabItem());
|
|
var tab1 = mgr.NewTab("https://example.com/page1"); // original
|
|
var tab2 = mgr.NewTab("https://example.com/page2");
|
|
var tab3 = mgr.NewTab("https://example.com/page1", activate: false); // duplicate of tab1
|
|
var tab4 = mgr.NewTab("https://example.com/page1", activate: false); // another duplicate
|
|
var tab5 = mgr.NewTab("https://example.com/page2", activate: false); // duplicate of tab2
|
|
|
|
Assert.Equal(5, mgr.Tabs.Count);
|
|
|
|
int closed = mgr.CloseDuplicateTabs();
|
|
Assert.Equal(3, closed);
|
|
Assert.Equal(2, mgr.Tabs.Count);
|
|
Assert.Contains(tab1, mgr.Tabs);
|
|
Assert.Contains(tab2, mgr.Tabs);
|
|
Assert.DoesNotContain(tab3, mgr.Tabs);
|
|
Assert.DoesNotContain(tab4, mgr.Tabs);
|
|
Assert.DoesNotContain(tab5, mgr.Tabs);
|
|
}
|
|
|
|
[Fact]
|
|
public void CloseDuplicateTabs_Preserves_Locked_Tabs()
|
|
{
|
|
var mgr = new TabManager(() => new TabItem());
|
|
var tab1 = mgr.NewTab("https://example.com/locked");
|
|
var tab2 = mgr.NewTab("https://example.com/locked", activate: false);
|
|
tab2.IsLocked = true; // locked duplicate should not be closed
|
|
|
|
int closed = mgr.CloseDuplicateTabs();
|
|
Assert.Equal(0, closed);
|
|
Assert.Equal(2, mgr.Tabs.Count);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("중복 탭 닫기")]
|
|
[InlineData("중복 탭 정리")]
|
|
[InlineData("close duplicates")]
|
|
[InlineData("dedup tabs")]
|
|
public void Omnibox_Matches_CloseDuplicates_Action(string query)
|
|
{
|
|
var actions = OmniboxActionEvaluator.GetMatchingActions(query);
|
|
Assert.NotEmpty(actions);
|
|
Assert.Contains(actions, a => a.ActionId == "action:close-duplicates");
|
|
}
|
|
}
|