// Copyright (c) 2026 Storm Dragon // SPDX-License-Identifier: GPL-3.0-or-later package input import "testing" func TestEmojiShortcutBothLayoutsAndReleaseOrders(t *testing.T) { for _, layout := range []KeyboardLayout{DesktopKeyboardLayout, LaptopKeyboardLayout} { chord := CommandChord{Symbol: 'e', Modifiers: controlModifier, CthulhuModifier: true} if got := DefaultCommandBindings(layout)[chord]; got != EmojiMenu { t.Fatalf("%v: %s", layout, got) } if got := BrowseCommandBindings(layout)[chord]; got != "" && got != EmojiMenu { t.Fatalf("browse conflict: %s", got) } for _, releaseFirst := range []bool{false, true} { router := NewCommandRouter([]uint32{0xff63}, DefaultCommandBindings(layout)) router.Handle(0xff63, 118, 0, true) router.Handle(leftControlKeySymbol, 37, controlModifier, true) if consumed, cmd := router.Handle('e', 26, controlModifier, true); !consumed || cmd != EmojiMenu { t.Fatalf("shortcut: %v %s", consumed, cmd) } if _, cmd := router.Handle('e', 26, controlModifier, true); cmd != "" { t.Fatal("repeat reopened menu") } if releaseFirst { router.Handle(0xff63, 118, controlModifier, false) } router.Handle('e', 26, controlModifier, false) router.Handle(leftControlKeySymbol, 37, 0, false) if !releaseFirst { router.Handle(0xff63, 118, 0, false) } if consumed, cmd := router.Handle('e', 26, 0, true); consumed || cmd != "" { t.Fatal("typing did not resume") } } } }