Update hook_test.go

This commit is contained in:
luhrMan 2025-04-06 22:23:51 -07:00 committed by GitHub
parent 989f41ae58
commit 2d38953673
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -38,23 +38,18 @@ func TestUnregister(t *testing.T) {
t.Run("UnregisterExistingHook", func(t *testing.T) { t.Run("UnregisterExistingHook", func(t *testing.T) {
setupTest() setupTest()
// Register a hook
Register(KeyDown, []string{"a", "b", "c"}, mockCallback) Register(KeyDown, []string{"a", "b", "c"}, mockCallback)
// Verify registration worked
if len(events[KeyDown]) != 1 { if len(events[KeyDown]) != 1 {
t.Fatalf("Registration failed, expected 1 event, got %d", len(events[KeyDown])) t.Fatalf("Registration failed, expected 1 event, got %d", len(events[KeyDown]))
} }
// Unregister the hook
result := Unregister(KeyDown, []string{"a", "b", "c"}) result := Unregister(KeyDown, []string{"a", "b", "c"})
// Check return value
if !result { if !result {
t.Error("Unregister returned false for existing hook") t.Error("Unregister returned false for existing hook")
} }
// Verify hook was removed
if len(events[KeyDown]) != 0 { if len(events[KeyDown]) != 0 {
t.Errorf("Unregister failed to remove hook, %d events remain", len(events[KeyDown])) t.Errorf("Unregister failed to remove hook, %d events remain", len(events[KeyDown]))
} }
@ -63,10 +58,8 @@ func TestUnregister(t *testing.T) {
t.Run("UnregisterNonExistentHook", func(t *testing.T) { t.Run("UnregisterNonExistentHook", func(t *testing.T) {
setupTest() setupTest()
// Unregister a hook that doesn't exist
result := Unregister(KeyDown, []string{"x", "y", "z"}) result := Unregister(KeyDown, []string{"x", "y", "z"})
// Should return false
if result { if result {
t.Error("Unregister returned true for non-existent hook") t.Error("Unregister returned true for non-existent hook")
} }
@ -75,18 +68,14 @@ func TestUnregister(t *testing.T) {
t.Run("UnregisterWithDifferentOrder", func(t *testing.T) { t.Run("UnregisterWithDifferentOrder", func(t *testing.T) {
setupTest() setupTest()
// Register a hook
Register(KeyDown, []string{"ctrl", "alt", "del"}, mockCallback) Register(KeyDown, []string{"ctrl", "alt", "del"}, mockCallback)
// Unregister with different order
result := Unregister(KeyDown, []string{"alt", "ctrl", "del"}) result := Unregister(KeyDown, []string{"alt", "ctrl", "del"})
// Should succeed despite different order
if !result { if !result {
t.Error("Unregister failed when key order was different") t.Error("Unregister failed when key order was different")
} }
// Verify hook was removed
if len(events[KeyDown]) != 0 { if len(events[KeyDown]) != 0 {
t.Errorf("Unregister failed to remove hook with different key order, %d events remain", len(events[KeyDown])) t.Errorf("Unregister failed to remove hook with different key order, %d events remain", len(events[KeyDown]))
} }
@ -95,20 +84,16 @@ func TestUnregister(t *testing.T) {
t.Run("UnregisterSpecificHook", func(t *testing.T) { t.Run("UnregisterSpecificHook", func(t *testing.T) {
setupTest() setupTest()
// Register multiple hooks
Register(KeyDown, []string{"a", "b"}, mockCallback) Register(KeyDown, []string{"a", "b"}, mockCallback)
Register(KeyDown, []string{"c", "d"}, mockCallback) Register(KeyDown, []string{"c", "d"}, mockCallback)
Register(KeyUp, []string{"a", "b"}, mockCallback) Register(KeyUp, []string{"a", "b"}, mockCallback)
// Unregister one specific hook
result := Unregister(KeyDown, []string{"a", "b"}) result := Unregister(KeyDown, []string{"a", "b"})
// Should succeed
if !result { if !result {
t.Error("Failed to unregister specific hook") t.Error("Failed to unregister specific hook")
} }
// Verify only the specific hook was removed
if len(events[KeyDown]) != 1 { if len(events[KeyDown]) != 1 {
t.Errorf("Expected 1 KeyDown event to remain, got %d", len(events[KeyDown])) t.Errorf("Expected 1 KeyDown event to remain, got %d", len(events[KeyDown]))
} }
@ -121,35 +106,27 @@ func TestUnregister(t *testing.T) {
t.Run("RegisterAfterUnregister", func(t *testing.T) { t.Run("RegisterAfterUnregister", func(t *testing.T) {
setupTest() setupTest()
// Register a hook
Register(KeyDown, []string{"a", "b"}, mockCallback) Register(KeyDown, []string{"a", "b"}, mockCallback)
// Check original state
// origKeyIndex := events[KeyDown][0] // origKeyIndex := events[KeyDown][0]
// Unregister
Unregister(KeyDown, []string{"a", "b"}) Unregister(KeyDown, []string{"a", "b"})
// Register a new hook
Register(KeyDown, []string{"x", "y"}, mockCallback) Register(KeyDown, []string{"x", "y"}, mockCallback)
// Verify new registration worked
if len(events[KeyDown]) != 1 { if len(events[KeyDown]) != 1 {
t.Fatalf("Re-registration failed, expected 1 event, got %d", len(events[KeyDown])) t.Fatalf("Re-registration failed, expected 1 event, got %d", len(events[KeyDown]))
} }
// Check that keys were properly registered
newKeyIndex := events[KeyDown][0] newKeyIndex := events[KeyDown][0]
keyAFound := false keyAFound := false
keyXFound := false keyXFound := false
for _, k := range keys[newKeyIndex] { for _, k := range keys[newKeyIndex] {
// Check if key matches 'a' keycode
if k == Keycode["a"] { if k == Keycode["a"] {
keyAFound = true keyAFound = true
} }
// Check if key matches 'x' keycode
if k == Keycode["x"] { if k == Keycode["x"] {
keyXFound = true keyXFound = true
} }
@ -166,7 +143,6 @@ func TestUnregister(t *testing.T) {
t.Run("ReregisterSameHook", func(t *testing.T) { t.Run("ReregisterSameHook", func(t *testing.T) {
setupTest() setupTest()
// Mock callback functions to verify they're being called
firstCallbackCalled := false firstCallbackCalled := false
secondCallbackCalled := false secondCallbackCalled := false
@ -178,24 +154,19 @@ func TestUnregister(t *testing.T) {
secondCallbackCalled = true secondCallbackCalled = true
} }
// First registration
Register(KeyDown, []string{"ctrl", "alt", "del"}, firstCallback) Register(KeyDown, []string{"ctrl", "alt", "del"}, firstCallback)
// Store the original handler index
if len(events[KeyDown]) != 1 { if len(events[KeyDown]) != 1 {
t.Fatalf("First registration failed") t.Fatalf("First registration failed")
} }
originalHandlerIndex := events[KeyDown][0] originalHandlerIndex := events[KeyDown][0]
// Verify first registration worked
if len(keys[originalHandlerIndex]) != 3 { if len(keys[originalHandlerIndex]) != 3 {
t.Errorf("Expected 3 keys, got %d", len(keys[originalHandlerIndex])) t.Errorf("Expected 3 keys, got %d", len(keys[originalHandlerIndex]))
} }
// Simulate an event to verify the first callback works
testEvent := Event{Kind: KeyDown} testEvent := Event{Kind: KeyDown}
for _, keyIndex := range events[KeyDown] { for _, keyIndex := range events[KeyDown] {
// Simulate all keys being pressed
for _, keycode := range keys[keyIndex] { for _, keycode := range keys[keyIndex] {
pressed[keycode] = true pressed[keycode] = true
} }
@ -209,33 +180,26 @@ func TestUnregister(t *testing.T) {
t.Error("First callback was not called") t.Error("First callback was not called")
} }
// Unregister the hook
success := Unregister(KeyDown, []string{"ctrl", "alt", "del"}) success := Unregister(KeyDown, []string{"ctrl", "alt", "del"})
if !success { if !success {
t.Fatal("Failed to unregister hook") t.Fatal("Failed to unregister hook")
} }
// Verify unregistration worked
if len(events[KeyDown]) != 0 { if len(events[KeyDown]) != 0 {
t.Errorf("Unregister failed, %d events still registered", len(events[KeyDown])) t.Errorf("Unregister failed, %d events still registered", len(events[KeyDown]))
} }
// Re-register the same hook but with a different callback
Register(KeyDown, []string{"ctrl", "alt", "del"}, secondCallback) Register(KeyDown, []string{"ctrl", "alt", "del"}, secondCallback)
// Verify re-registration worked
if len(events[KeyDown]) != 1 { if len(events[KeyDown]) != 1 {
t.Fatalf("Re-registration failed") t.Fatalf("Re-registration failed")
} }
newHandlerIndex := events[KeyDown][0] newHandlerIndex := events[KeyDown][0]
// Reset callbacks tracking
firstCallbackCalled = false firstCallbackCalled = false
secondCallbackCalled = false secondCallbackCalled = false
// Simulate an event again
for _, keyIndex := range events[KeyDown] { for _, keyIndex := range events[KeyDown] {
// Simulate all keys being pressed
for _, keycode := range keys[keyIndex] { for _, keycode := range keys[keyIndex] {
pressed[keycode] = true pressed[keycode] = true
} }
@ -245,7 +209,6 @@ func TestUnregister(t *testing.T) {
} }
} }
// Verify the correct callback was called
if firstCallbackCalled { if firstCallbackCalled {
t.Error("First callback was incorrectly called after re-registration") t.Error("First callback was incorrectly called after re-registration")
} }
@ -254,10 +217,8 @@ func TestUnregister(t *testing.T) {
t.Error("Second callback was not called after re-registration") t.Error("Second callback was not called after re-registration")
} }
// Verify the handler index was reused or is different
t.Logf("Original handler index: %d, New handler index: %d", originalHandlerIndex, newHandlerIndex) t.Logf("Original handler index: %d, New handler index: %d", originalHandlerIndex, newHandlerIndex)
if originalHandlerIndex == newHandlerIndex { if originalHandlerIndex == newHandlerIndex {
// This is not necessarily an error, but good to verify the implementation's behavior
t.Log("Handler index was reused (this is implementation-dependent)") t.Log("Handler index was reused (this is implementation-dependent)")
} else { } else {
t.Log("A new handler index was assigned") t.Log("A new handler index was assigned")