98 lines
3 KiB
C#
98 lines
3 KiB
C#
using VideoDownloader.Browser;
|
|
|
|
namespace VideoDownloader.Tests.Browser;
|
|
|
|
// T1-3 페이지 내 검색: FindSession 은 네이티브 Find API(IFindApi) 위의 상태 머신.
|
|
public class FindSessionTests
|
|
{
|
|
private sealed class FakeFindApi : IFindApi
|
|
{
|
|
public string? LastTerm;
|
|
public int StartCount, NextCount, PrevCount, StopCount;
|
|
public int MatchCount { get; set; }
|
|
public int ActiveIndex { get; set; }
|
|
|
|
public event EventHandler<int>? MatchCountChanged;
|
|
public event EventHandler<int>? ActiveMatchIndexChanged;
|
|
|
|
public Task StartAsync(string term, bool caseSensitive, bool matchWord, bool highlightAll)
|
|
{
|
|
StartCount++; LastTerm = term; return Task.CompletedTask;
|
|
}
|
|
public void FindNext() => NextCount++;
|
|
public void FindPrevious() => PrevCount++;
|
|
public void Stop() => StopCount++;
|
|
|
|
public void RaiseCount(int n) { MatchCount = n; MatchCountChanged?.Invoke(this, n); }
|
|
public void RaiseActive(int n) { ActiveIndex = n; ActiveMatchIndexChanged?.Invoke(this, n); }
|
|
}
|
|
|
|
[Fact]
|
|
public void Start는_API로_용어를_전달하고_카운트_이벤트를_구독_반영한다()
|
|
{
|
|
var api = new FakeFindApi();
|
|
var session = new FindSession(api);
|
|
|
|
session.StartAsync("hello").Wait();
|
|
api.RaiseCount(7);
|
|
|
|
Assert.Equal(1, api.StartCount);
|
|
Assert.Equal("hello", api.LastTerm);
|
|
Assert.Equal(7, session.MatchCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void Next_Previous는_API에_위임한다()
|
|
{
|
|
var api = new FakeFindApi();
|
|
var session = new FindSession(api);
|
|
session.StartAsync("x").Wait();
|
|
|
|
session.Next();
|
|
session.Previous();
|
|
|
|
Assert.Equal(1, api.NextCount);
|
|
Assert.Equal(1, api.PrevCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void ActiveMatchIndex_이벤트가_상태에_반영된다()
|
|
{
|
|
var api = new FakeFindApi();
|
|
var session = new FindSession(api);
|
|
session.StartAsync("x").Wait();
|
|
|
|
api.RaiseActive(3);
|
|
Assert.Equal(3, session.ActiveMatchIndex);
|
|
}
|
|
|
|
[Fact]
|
|
public void 빈_용어로_Start하면_Stop만_호출된다()
|
|
{
|
|
var api = new FakeFindApi();
|
|
var session = new FindSession(api);
|
|
|
|
session.StartAsync(" ").Wait();
|
|
|
|
Assert.Equal(0, api.StartCount);
|
|
Assert.Equal(1, api.StopCount);
|
|
Assert.Equal(0, session.MatchCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void Close는_Stop을_호출하고_상태를_초기화한다()
|
|
{
|
|
var api = new FakeFindApi();
|
|
var session = new FindSession(api);
|
|
session.StartAsync("x").Wait();
|
|
api.RaiseCount(5);
|
|
api.RaiseActive(2);
|
|
|
|
session.Close();
|
|
|
|
Assert.Equal(1, api.StopCount);
|
|
Assert.Equal(0, session.MatchCount);
|
|
Assert.Equal(-1, session.ActiveMatchIndex); // -1 = 활성 매치 없음(Start 초기값과 동일 센티넬)
|
|
Assert.Equal(string.Empty, session.Term);
|
|
}
|
|
}
|