110 lines
3.9 KiB
C#
110 lines
3.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows.Controls;
|
|
using Paca.App;
|
|
using Paca.Browser;
|
|
using Paca.Browser.Tabs;
|
|
using Paca.Tests.Infrastructure;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Browser;
|
|
|
|
public class ChromeParityMilestone7Tests
|
|
{
|
|
private static TabManager CreateManager() => new(() => new TabItem());
|
|
|
|
[Fact]
|
|
public void TabManager_MoveTabLeft_And_Right_탭을_좌우로_이동한다()
|
|
{
|
|
var mgr = CreateManager();
|
|
var t1 = mgr.NewTab("https://site1.com");
|
|
var t2 = mgr.NewTab("https://site2.com");
|
|
var t3 = mgr.NewTab("https://site3.com");
|
|
|
|
// [t1, t2, t3] -> t2를 왼쪽으로 이동 -> [t2, t1, t3]
|
|
mgr.MoveTabLeft(t2);
|
|
Assert.Equal(t2, mgr.Tabs[0]);
|
|
Assert.Equal(t1, mgr.Tabs[1]);
|
|
Assert.Equal(t3, mgr.Tabs[2]);
|
|
|
|
// t2는 이미 맨 왼쪽(0)이므로 더 왼쪽으로 가도 0 유지
|
|
mgr.MoveTabLeft(t2);
|
|
Assert.Equal(t2, mgr.Tabs[0]);
|
|
|
|
// t2를 오른쪽으로 2번 이동 -> [t1, t3, t2]
|
|
mgr.MoveTabRight(t2);
|
|
mgr.MoveTabRight(t2);
|
|
Assert.Equal(t1, mgr.Tabs[0]);
|
|
Assert.Equal(t3, mgr.Tabs[1]);
|
|
Assert.Equal(t2, mgr.Tabs[2]);
|
|
|
|
// t2는 이미 맨 오른쪽이므로 더 오른쪽으로 가도 마지막 유지
|
|
mgr.MoveTabRight(t2);
|
|
Assert.Equal(t2, mgr.Tabs[2]);
|
|
}
|
|
|
|
[Fact]
|
|
public void TabManager_MoveActiveTabLeft_And_Right_활성탭을_좌우로_이동한다()
|
|
{
|
|
var mgr = CreateManager();
|
|
var t1 = mgr.NewTab("https://site1.com");
|
|
var t2 = mgr.NewTab("https://site2.com");
|
|
var t3 = mgr.NewTab("https://site3.com");
|
|
|
|
mgr.Activate(t3);
|
|
mgr.MoveActiveTabLeft(); // t3을 2번에서 1번 인덱스로
|
|
|
|
Assert.Equal(t1, mgr.Tabs[0]);
|
|
Assert.Equal(t3, mgr.Tabs[1]);
|
|
Assert.Equal(t2, mgr.Tabs[2]);
|
|
Assert.Same(t3, mgr.ActiveTab);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("https://example.com/doc", "hello world", "https://example.com/doc#:~:text=hello%20world")]
|
|
[InlineData("https://example.com/doc", "alpha-beta, gamma & delta", "https://example.com/doc#:~:text=alpha%2Dbeta%2C%20gamma%20%26%20delta")]
|
|
public void TextFragmentHelper_Generate_W3C_사양에_맞게_인코딩한다(string url, string text, string expected)
|
|
{
|
|
var link = TextFragmentHelper.Generate(url, text);
|
|
Assert.Equal(expected, link);
|
|
}
|
|
|
|
[Fact]
|
|
public void TextFragmentHelper_TryParse_프래그먼트_텍스트를_정확히_추출한다()
|
|
{
|
|
var url = "https://example.com/doc#:~:text=alpha%2Dbeta%2C%20gamma%20%26%20delta";
|
|
var success = TextFragmentHelper.TryParse(url, out var text);
|
|
Assert.True(success);
|
|
Assert.Equal("alpha-beta, gamma & delta", text);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildTabContextMenu_탭_좌우_이동_옵션이_포함된다()
|
|
{
|
|
using var sta = StaDispatcher.Start();
|
|
WpfTestApp.Ensure(sta.Dispatcher);
|
|
sta.Invoke(() =>
|
|
{
|
|
var dataDir = Path.Combine(Path.GetTempPath(), $"vd_tab_move_{Guid.NewGuid():N}");
|
|
Environment.SetEnvironmentVariable("VD_DATA_DIR", dataDir);
|
|
try
|
|
{
|
|
var win = new MainWindow();
|
|
win.TabsManager.Tabs.Clear();
|
|
var t1 = win.TabsManager.NewTab("https://site1.com");
|
|
var t2 = win.TabsManager.NewTab("https://site2.com");
|
|
|
|
var menu = win.BuildTabContextMenu(t1);
|
|
var items = menu.Items.OfType<MenuItem>().Select(m => m.Header?.ToString()).ToList();
|
|
|
|
Assert.Contains("탭을 왼쪽으로 이동", items);
|
|
Assert.Contains("탭을 오른쪽으로 이동", items);
|
|
}
|
|
finally
|
|
{
|
|
try { if (Directory.Exists(dataDir)) Directory.Delete(dataDir, true); } catch { }
|
|
}
|
|
});
|
|
}
|
|
}
|