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  }