1 package playwright
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7 )
8
9 const testEventName = "foobar"
10
11 func TestEventEmitterOn(t *testing.T) {
12 handler := &eventEmitter{}
13 handler.initEventEmitter()
14 wasCalled := make(chan interface{}, 1)
15 require.Nil(t, handler.events[testEventName])
16 handler.On(testEventName, func(payload ...interface{}) {
17 wasCalled <- payload[0]
18 })
19 require.Equal(t, 1, handler.ListenerCount(testEventName))
20 value := 123
21 handler.Emit(testEventName, value)
22 result := <-wasCalled
23 require.Equal(t, 1, handler.ListenerCount(testEventName))
24 require.Equal(t, result.(int), value)
25 }
26
27 func TestEventEmitterOnce(t *testing.T) {
28 handler := &eventEmitter{}
29 handler.initEventEmitter()
30 wasCalled := make(chan interface{}, 1)
31 require.Nil(t, handler.events[testEventName])
32 handler.Once(testEventName, func(payload ...interface{}) {
33 wasCalled <- payload[0]
34 })
35 require.Equal(t, 1, handler.ListenerCount(testEventName))
36 value := 123
37 handler.Emit(testEventName, value)
38 result := <-wasCalled
39 require.Equal(t, result.(int), value)
40 require.Equal(t, 0, handler.ListenerCount(testEventName))
41 }
42
43 func TestEventEmitterRemove(t *testing.T) {
44 handler := &eventEmitter{}
45 handler.initEventEmitter()
46 wasCalled := make(chan interface{}, 1)
47 require.Nil(t, handler.events[testEventName])
48 myHandler := func(payload ...interface{}) {
49 wasCalled <- payload[0]
50 }
51 handler.On(testEventName, myHandler)
52 require.Equal(t, 1, handler.ListenerCount(testEventName))
53 value := 123
54 handler.Emit(testEventName, value)
55 result := <-wasCalled
56 require.Equal(t, 1, handler.ListenerCount(testEventName))
57 require.Equal(t, result.(int), value)
58 handler.Once(testEventName, myHandler)
59 handler.RemoveListener(testEventName, myHandler)
60 require.Equal(t, 0, handler.ListenerCount(testEventName))
61 }
62
63 func TestEventEmitterRemoveEmpty(t *testing.T) {
64 handler := &eventEmitter{}
65 handler.initEventEmitter()
66 handler.RemoveListener(testEventName, func(...interface{}) {})
67 require.Equal(t, 0, handler.ListenerCount(testEventName))
68 }
69
70 func TestEventEmitterRemoveKeepExisting(t *testing.T) {
71 handler := &eventEmitter{}
72 handler.initEventEmitter()
73 handler.On(testEventName, func(...interface{}) {})
74 handler.Once(testEventName, func(...interface{}) {})
75 handler.RemoveListener("abc123", func(...interface{}) {})
76 handler.RemoveListener(testEventName, func(...interface{}) {})
77 require.Equal(t, 2, handler.ListenerCount(testEventName))
78 }
79
80 func TestEventEmitterOnLessArgsAcceptingReceiver(t *testing.T) {
81 handler := &eventEmitter{}
82 handler.initEventEmitter()
83 wasCalled := make(chan bool, 1)
84 require.Nil(t, handler.events[testEventName])
85 handler.Once(testEventName, func(ev ...interface{}) {
86 wasCalled <- true
87 })
88 handler.Emit(testEventName)
89 <-wasCalled
90 }
91
View as plain text