feat: initial release of SplitOverlay (KeyOverlay 1.0.0)
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
Semi-transparent always-on-top Windows overlay that shows the keymap of a Vial/QMK split keyboard (Silakka54). - draws all layers from a Vial .vil layout, transparent keys fall through - detects the active layer from the keyboard via a Raw HID command (firmware/) - shows characters of the active Windows input language - can split the two halves into separate, independently movable windows - highlights pressed keys; tray menu for opacity, size and options - Inno Setup installer and portable build; GitHub-style CI workflow
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
using KeyOverlay.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace KeyOverlay.Core.Tests;
|
||||
|
||||
public class KeycodesTests
|
||||
{
|
||||
[Fact]
|
||||
public void Letter_IsUppercaseWithBaseKeycode()
|
||||
{
|
||||
var d = Keycodes.Describe("KC_A");
|
||||
Assert.Equal("A", d.Main);
|
||||
Assert.Equal("KC_A", d.BaseKeycode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ShortQmkAlias_MatchesLongVialName()
|
||||
{
|
||||
Assert.Equal(Keycodes.Describe("KC_BSPACE").Main, Keycodes.Describe("KC_BSPC").Main);
|
||||
Assert.Equal("KC_BSPACE", Keycodes.Describe("KC_BSPC").BaseKeycode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ShiftWrapper_ShowsShiftedSymbol()
|
||||
{
|
||||
var d = Keycodes.Describe("LSFT(KC_1)");
|
||||
Assert.Equal("!", d.Main);
|
||||
Assert.True(d.RequiresShift);
|
||||
Assert.Equal("KC_1", d.BaseKeycode);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("LSFT(KC_MINUS)", "_")]
|
||||
[InlineData("LSFT(KC_BSLASH)", "|")]
|
||||
[InlineData("LSFT(KC_GRAVE)", "~")]
|
||||
[InlineData("LSFT(KC_QUOTE)", "\"")]
|
||||
public void ShiftWrapper_Symbols(string code, string expected) =>
|
||||
Assert.Equal(expected, Keycodes.Describe(code).Main);
|
||||
|
||||
[Fact]
|
||||
public void CtrlWrapper_ShowsPrefix()
|
||||
{
|
||||
var d = Keycodes.Describe("LCTL(KC_C)");
|
||||
Assert.Equal("Ctrl+C", d.Main);
|
||||
Assert.False(d.RequiresShift);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("MO(2)", "MO 2")]
|
||||
[InlineData("TG(1)", "TG 1")]
|
||||
[InlineData("TO(0)", "TO 0")]
|
||||
public void LayerSwitch_IsFlagged(string code, string main)
|
||||
{
|
||||
var d = Keycodes.Describe(code);
|
||||
Assert.Equal(main, d.Main);
|
||||
Assert.True(d.IsLayerSwitch);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LayerTap_ShowsTapKeyAndLayer()
|
||||
{
|
||||
var d = Keycodes.Describe("LT(1, KC_SPACE)");
|
||||
Assert.Equal("Space", d.Main);
|
||||
Assert.Equal("L1", d.Sub);
|
||||
Assert.Equal("KC_SPACE", d.BaseKeycode);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("LCTL_T(KC_A)")]
|
||||
[InlineData("MT(MOD_LCTL, KC_A)")]
|
||||
public void ModTap_ShowsTapKeyAndModifier(string code)
|
||||
{
|
||||
var d = Keycodes.Describe(code);
|
||||
Assert.Equal("A", d.Main);
|
||||
Assert.Equal("Ctrl", d.Sub);
|
||||
Assert.Equal("KC_A", d.BaseKeycode);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("KC_TRNS")]
|
||||
[InlineData("KC_TRANSPARENT")]
|
||||
public void Transparent_IsFlagged(string code) =>
|
||||
Assert.True(Keycodes.Describe(code).IsTransparent);
|
||||
|
||||
[Fact]
|
||||
public void No_IsEmpty() => Assert.True(Keycodes.Describe("KC_NO").IsEmpty);
|
||||
|
||||
[Fact]
|
||||
public void UnknownKeycode_FallsBackToTrimmedName()
|
||||
{
|
||||
var d = Keycodes.Describe("QK_BOOT");
|
||||
Assert.Equal("QK_BOOT", d.Main);
|
||||
Assert.Null(d.BaseKeycode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Canonicalize_ResolvesAliases()
|
||||
{
|
||||
Assert.Equal("KC_ESCAPE", Keycodes.Canonicalize("KC_ESC"));
|
||||
Assert.Equal("KC_LSHIFT", Keycodes.Canonicalize("KC_LSFT"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user