feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
94
tests/Paca.Tests/Browser/ChromeTabGroupingMegaTests.cs
Normal file
94
tests/Paca.Tests/Browser/ChromeTabGroupingMegaTests.cs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
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");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue