github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/event/light/center_test.go (about) 1 package light 2 3 import ( 4 "log" 5 "reflect" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 var gotEvent = false 12 var eventTimes = 0 13 14 func Test_Normal(t *testing.T) { 15 ec := NewEventCenter() 16 17 id := ec.Subscribe("event1", func(args ...any) { 18 log.Println("got event1") 19 gotEvent = true 20 }) 21 22 gotEvent = false 23 ec.Publish("event1") 24 25 assert.Equal(t, true, gotEvent) 26 27 ec.UnsubscribeById("event1", id) 28 gotEvent = false 29 ec.Publish("event1") 30 assert.Equal(t, false, gotEvent) 31 } 32 33 func EventCB(args ...any) { 34 gotEvent = true 35 log.Println("got event from EventCB") 36 } 37 38 func EventCB1(args ...any) { 39 gotEvent = true 40 log.Println("got event from EventCB1") 41 } 42 43 type TestClass struct { 44 I int 45 CB func() 46 } 47 48 func (t *TestClass) Event(args ...any) { 49 eventTimes++ 50 log.Printf("got event from TestClass.Event{%v %v}\n", reflect.ValueOf(t).Pointer(), t.I) 51 if t.CB != nil { 52 t.CB() 53 } 54 } 55 56 func (t TestClass) Event1(args ...any) { 57 eventTimes++ 58 log.Printf("got event from TestClass.Event1{%v %v}\n", reflect.ValueOf(&t).Pointer(), t.I) 59 if t.CB != nil { 60 t.CB() 61 } 62 } 63 64 func Test_CB(t *testing.T) { 65 ec := NewEventCenter() 66 67 ec.Subscribe("event1", EventCB) 68 gotEvent = false 69 ec.Publish("event1") 70 assert.Equal(t, true, gotEvent) 71 72 ec.Unsubscribe("event1", EventCB) 73 gotEvent = false 74 ec.Publish("event1") 75 assert.Equal(t, false, gotEvent) 76 77 ec.Subscribe("event1", EventCB1) 78 ec.Publish("event1") 79 80 ec.Unsubscribe("event1", EventCB) 81 gotEvent = false 82 ec.Publish("event1") 83 assert.Equal(t, true, gotEvent) 84 85 ec.Subscribe("event1", EventCB) 86 ec.Publish("event1") 87 88 ec.Unsubscribe("event1", EventCB) 89 ec.Unsubscribe("event1", EventCB1) 90 91 gotEvent = false 92 ec.Publish("event1") 93 assert.Equal(t, false, gotEvent) 94 } 95 96 func Test_BaseClass(t *testing.T) { 97 ec := NewEventCenter() 98 a := &TestClass{} 99 a.I = 100 100 101 b := &TestClass{} 102 b.I = 200 103 ec.Subscribe("event1", a.Event) 104 ec.Subscribe("event1", b.Event) 105 106 eventTimes = 0 107 ec.Publish("event1") 108 // 只注册了一个 109 assert.Equal(t, 1, eventTimes) 110 } 111 112 func Test_Class(t *testing.T) { 113 ec := NewEventCenter() 114 ai := 0 115 bi := 0 116 a := &TestClass{ 117 I: 100, 118 CB: func() { 119 ai++ 120 }} 121 b := &TestClass{ 122 I: 200, 123 CB: func() { 124 bi++ 125 }} 126 127 clearData := func() { 128 eventTimes = 0 129 ai = 0 130 bi = 0 131 } 132 133 ec.SubscribeWithReceiver("event1", a, a.Event) 134 ec.SubscribeWithReceiver("event1", b, b.Event) 135 136 clearData() 137 ec.Publish("event1") 138 assert.Equal(t, 2, eventTimes) 139 140 ec.UnsubscribeWithReceiver("event1", b, b.Event) 141 142 clearData() 143 ec.Publish("event1") 144 assert.Equal(t, 1, eventTimes) 145 assert.Equal(t, 1, ai) 146 assert.Equal(t, 0, bi) 147 148 // 再次注册 149 ec.SubscribeWithReceiver("event1", b, b.Event) 150 // 函数是同一个,也能取消掉 151 ec.UnsubscribeWithReceiver("event1", b, a.Event) 152 153 clearData() 154 ec.Publish("event1") 155 assert.Equal(t, 1, eventTimes) 156 assert.Equal(t, 1, ai) 157 assert.Equal(t, 0, bi) 158 159 ec.SubscribeWithReceiver("event1", b, b.Event) 160 ec.UnsubscribeWithReceiver("event1", b, b.Event1) 161 162 clearData() 163 ec.Publish("event1") 164 assert.Equal(t, 2, eventTimes) 165 assert.Equal(t, 1, ai) 166 assert.Equal(t, 1, bi) 167 } 168 169 // 170 func Test_ClassValueReceiver(t *testing.T) { 171 ec := NewEventCenter() 172 a := &TestClass{I: 100} 173 b := &TestClass{I: 200} 174 175 ec.SubscribeWithReceiver("event1", a, a.Event1) 176 ec.SubscribeWithReceiver("event1", b, b.Event1) 177 178 eventTimes = 0 179 ec.Publish("event1") 180 assert.Equal(t, 2, eventTimes) 181 182 ec.UnsubscribeWithReceiver("event1", b, a.Event1) 183 eventTimes = 0 184 ec.Publish("event1") 185 assert.Equal(t, 1, eventTimes) 186 }