117 lines
3.6 KiB
C#
117 lines
3.6 KiB
C#
using CursorLang.Models;
|
|
using CursorLang.Services;
|
|
using CursorLang.Tests.Infrastructure;
|
|
|
|
namespace CursorLang.Tests.Services;
|
|
|
|
/// <summary>
|
|
/// The link between watching the layout and showing the tooltip.
|
|
/// </summary>
|
|
public sealed class LayoutNotificationCoordinatorTests
|
|
{
|
|
private static readonly KeyboardLayout Russian = KeyboardLayout.FromLocaleId(0x0419);
|
|
|
|
[Fact]
|
|
public void Starting_turns_on_the_layout_watch()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
|
|
Assert.Equal(1, layouts.StartCalls);
|
|
}
|
|
|
|
[Fact]
|
|
public void A_layout_switched_by_the_user_shows_the_tooltip()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.UserSwitched);
|
|
|
|
Assert.Equal([Russian], popup.Shown);
|
|
}
|
|
|
|
// Moving to another application changes the layout with no user involved,
|
|
// and the tooltip would be intrusive
|
|
[Fact]
|
|
public void Switching_applications_shows_no_tooltip()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.ApplicationSwitched);
|
|
|
|
Assert.Empty(popup.Shown);
|
|
}
|
|
|
|
[Fact]
|
|
public void Every_switch_shows_its_own_layout()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
|
|
KeyboardLayout english = KeyboardLayout.FromLocaleId(0x0409);
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.UserSwitched);
|
|
layouts.RaiseLayoutChanged(english, LayoutChangeReason.UserSwitched);
|
|
|
|
Assert.Equal([Russian, english], popup.Shown);
|
|
}
|
|
|
|
[Fact]
|
|
public void Before_the_start_no_tooltip_is_shown()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.UserSwitched);
|
|
|
|
Assert.Empty(popup.Shown);
|
|
}
|
|
|
|
[Fact]
|
|
public void Closing_stops_the_watch_and_unsubscribes_from_the_event()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
coordinator.Dispose();
|
|
|
|
Assert.Equal(1, layouts.StopCalls);
|
|
Assert.False(layouts.HasSubscribers);
|
|
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.UserSwitched);
|
|
Assert.Empty(popup.Shown);
|
|
}
|
|
|
|
[Fact]
|
|
public void The_show_until_hidden_is_not_called_from_here()
|
|
{
|
|
var layouts = new FakeKeyboardLayoutService();
|
|
var popup = new FakeLayoutPopupService();
|
|
|
|
using var coordinator = new LayoutNotificationCoordinator(layouts, popup);
|
|
coordinator.Start();
|
|
|
|
layouts.RaiseLayoutChanged(Russian, LayoutChangeReason.UserSwitched);
|
|
|
|
Assert.Empty(popup.ShownUntilHidden);
|
|
Assert.Equal(0, popup.HideCalls);
|
|
}
|
|
}
|