65 lines
2.7 KiB
C#
65 lines
2.7 KiB
C#
using Paca.Browser.Search;
|
|
using Paca.Browser.Url;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.App;
|
|
|
|
public class DesktopOmniboxIntegrationGateTests
|
|
{
|
|
[Theory]
|
|
[InlineData("yt 아이유", "https://www.youtube.com/results?search_query=")]
|
|
[InlineData("w 인공지능", "https://en.wikipedia.org/wiki/Special:Search?search=")]
|
|
[InlineData("g PACA", "https://www.google.com/search?q=")]
|
|
[InlineData("n 네이버페이", "https://search.naver.com/search.naver?query=")]
|
|
[InlineData("c 치지직라이브", "https://chzzk.naver.com/search?query=")]
|
|
public void Gate_DesktopOmnibox_KeywordEngine_ResolvesBangs_IntoDestinationUrl(string input, string expectedUrlPrefix)
|
|
{
|
|
var engine = new OmniboxKeywordEngine();
|
|
bool resolved = engine.TryResolve(input, out var result);
|
|
|
|
Assert.True(resolved, $"입력 '{input}'이 검색엔진 키워드로 해석되어야 한다.");
|
|
Assert.NotNull(result);
|
|
Assert.StartsWith(expectedUrlPrefix, result.ResolvedUrl);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("@tabs paca", OmniboxSearchScope.Tabs, "paca")]
|
|
[InlineData("@기록 유튜브", OmniboxSearchScope.History, "유튜브")]
|
|
[InlineData("@bookmarks 깃허브", OmniboxSearchScope.Bookmarks, "깃허브")]
|
|
public void Gate_DesktopOmnibox_ScopeFilter_DetectsScopesAndQueries(string input, OmniboxSearchScope expectedScope, string expectedQuery)
|
|
{
|
|
var filter = new OmniboxScopeFilter();
|
|
var res = filter.Parse(input);
|
|
|
|
Assert.True(res.IsScoped);
|
|
Assert.Equal(expectedScope, res.Scope);
|
|
Assert.Equal(expectedQuery, res.Query);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate_DesktopOmnibox_HardRefresh_RecognizesCtrlF5_AndCtrlShiftR()
|
|
{
|
|
var ctrlF5 = HardRefreshEngine.EvaluateRefresh(ctrl: true, shift: false, isF5: true);
|
|
Assert.Equal(RefreshType.HardClearCache, ctrlF5);
|
|
|
|
var ctrlShiftR = HardRefreshEngine.EvaluateRefresh(ctrl: true, shift: true, isF5: false, isR: true);
|
|
Assert.Equal(RefreshType.HardClearCache, ctrlShiftR);
|
|
|
|
var req = HardRefreshEngine.CreateRequest("https://paca.stream", ctrlF5);
|
|
Assert.True(req.ClearMemoryCache);
|
|
Assert.True(req.ClearDiskCache);
|
|
Assert.True(req.Headers.ContainsKey("Cache-Control"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate_DesktopOmnibox_CleanLinkExtractor_RemovesTrackingAndAmp()
|
|
{
|
|
var dirtyUrl = "https://www.google.com/amp/s/example.com/article?utm_source=twitter&utm_medium=social&fbclid=IwAR123";
|
|
var res = CleanLinkExtractor.ExtractCleanUrl(dirtyUrl);
|
|
|
|
Assert.NotNull(res);
|
|
Assert.DoesNotContain("utm_source", res.CleanedUrl);
|
|
Assert.DoesNotContain("fbclid", res.CleanedUrl);
|
|
Assert.DoesNotContain("google.com/amp", res.CleanedUrl);
|
|
}
|
|
}
|