using System.Linq; using Paca.Browser.Tabs; using Xunit; namespace Paca.Tests.Browser; public class ChromeOmniboxSiteSearchTests { [Theory] [InlineData("@tabs youtube", SiteSearchScope.Tabs, "youtube")] [InlineData("@탭 네이버", SiteSearchScope.Tabs, "네이버")] [InlineData("@history github", SiteSearchScope.History, "github")] [InlineData("@기록 flutter", SiteSearchScope.History, "flutter")] [InlineData("@bookmarks 개발", SiteSearchScope.Bookmarks, "개발")] [InlineData("@북마크 paca", SiteSearchScope.Bookmarks, "paca")] [InlineData("@즐겨찾기 news", SiteSearchScope.Bookmarks, "news")] public void Parse_Recognizes_Valid_SiteSearch_Scopes(string input, SiteSearchScope expectedScope, string expectedFilter) { var result = OmniboxSiteSearchEvaluator.Parse(input); Assert.NotNull(result); Assert.Equal(expectedScope, result.Scope); Assert.Equal(expectedFilter, result.FilterText); } [Theory] [InlineData("@tabs", SiteSearchScope.Tabs, "")] [InlineData("@history", SiteSearchScope.History, "")] [InlineData("@bookmarks", SiteSearchScope.Bookmarks, "")] public void Parse_Handles_Empty_Filter(string input, SiteSearchScope expectedScope, string expectedFilter) { var result = OmniboxSiteSearchEvaluator.Parse(input); Assert.NotNull(result); Assert.Equal(expectedScope, result.Scope); Assert.Equal(expectedFilter, result.FilterText); } [Theory] [InlineData("hello world")] [InlineData("https://example.com")] [InlineData("@unknown something")] [InlineData("")] [InlineData(null)] public void Parse_Returns_Null_For_Non_SiteSearch_Input(string? input) { var result = OmniboxSiteSearchEvaluator.Parse(input); Assert.Null(result); } [Fact] public void Scopes_Contain_Proper_Glyphs_And_Descriptions() { Assert.NotEmpty(OmniboxSiteSearchEvaluator.Scopes); Assert.All(OmniboxSiteSearchEvaluator.Scopes, s => { Assert.StartsWith("@", s.Keyword); Assert.NotEmpty(s.DisplayTitle); Assert.NotEmpty(s.Description); Assert.NotEmpty(s.Glyph); }); } [Fact] public void MainWindow_Integrates_OmniboxSiteSearch() { var csPath = Paca.Tests.Infrastructure.SourceTree.AppPath("MainWindow.xaml.cs"); Assert.True(System.IO.File.Exists(csPath)); var code = System.IO.File.ReadAllText(csPath); Assert.Contains("OmniboxSiteSearchEvaluator.Parse", code); } }