mirror of
https://github.com/robotn/gohook.git
synced 2025-05-20 07:04:26 +08:00
Update hook_test.go
This commit is contained in:
parent
989f41ae58
commit
2d38953673
39
hook_test.go
39
hook_test.go
@ -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")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user