using System; using System.Linq; using Paca.Browser; using Paca.Browser.Search; using Paca.Browser.Tabs; using Xunit; namespace Paca.Tests.Browser; public class ChromeOpenSearchAndCustomEngineTests { [Fact] public void OpenSearchParser_Parses_Standard_Xml_Description() { var xml = @" GitHub GitHub Code Search "; var engine = OpenSearchParser.Parse(xml, fallbackKeyword: "gh"); Assert.NotNull(engine); Assert.Equal("GitHub", engine.ShortName); Assert.Equal("GitHub Code Search", engine.Description); Assert.Equal("gh", engine.Keyword); Assert.Equal("https://github.com/search?q=%s", engine.TemplateUrl); } [Theory] [InlineData("https://example.com?q=%s", "hello world", "https://example.com?q=hello+world")] [InlineData("https://example.com?q={0}", "hello world", "https://example.com?q=hello+world")] [InlineData("https://example.com?q={searchTerms}", "hello world", "https://example.com?q=hello+world")] [InlineData("https://example.com?q=%s", "C# & .NET", "https://example.com?q=C%23+%26+.NET")] public void SearchEngineTemplateFormatter_Formats_Correctly(string template, string query, string expected) { var result = SearchEngineTemplateFormatter.FormatUrl(template, query); Assert.Equal(expected, result); } [Fact] public void SearchEngineResolver_Supports_PercentS_Templates() { var custom = new[] { new SearchEngine("DevSearch", "ds", "https://devsearch.org/?q=%s") }; var resolver = new SearchEngineResolver("Google", customEngines: custom); var intent = resolver.Resolve("ds async task"); Assert.NotNull(intent); Assert.False(intent.IsUrl); Assert.Equal("https://devsearch.org/?q=async+task", intent.Target); Assert.Equal("DevSearch", intent.EngineName); } [Fact] public void OmniboxActionEvaluator_Matches_Search_Engines() { var actionsKr = OmniboxActionEvaluator.GetMatchingActions("검색엔진"); Assert.Contains(actionsKr, a => a.ActionId == "action:search-engines"); var actionsEn = OmniboxActionEvaluator.GetMatchingActions("search engines"); Assert.Contains(actionsEn, a => a.ActionId == "action:search-engines"); var action = OmniboxActionEvaluator.AllActions.FirstOrDefault(a => a.ActionId == "action:search-engines"); Assert.NotNull(action); Assert.Contains("검색엔진", action.DisplayTitle); } }