github.com/enbility/spine-go@v0.7.0/spine/events_test.go (about) 1 package spine 2 3 import ( 4 "sync" 5 "testing" 6 "time" 7 8 "github.com/enbility/spine-go/api" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/suite" 11 ) 12 13 func TestEventsSuite(t *testing.T) { 14 suite.Run(t, new(EventsTestSuite)) 15 } 16 17 type TestDummy struct { 18 } 19 20 func (s *TestDummy) HandleEvent(event api.EventPayload) {} 21 22 type EventsTestSuite struct { 23 suite.Suite 24 25 mux sync.Mutex 26 27 handlerInvoked bool 28 } 29 30 func (s *EventsTestSuite) BeforeTest(suiteName, testName string) { 31 s.setHandlerInvoked(false) 32 } 33 34 func (s *EventsTestSuite) setHandlerInvoked(value bool) { 35 s.mux.Lock() 36 defer s.mux.Unlock() 37 38 s.handlerInvoked = value 39 } 40 41 func (s *EventsTestSuite) isHandlerInvoked() bool { 42 s.mux.Lock() 43 defer s.mux.Unlock() 44 45 return s.handlerInvoked 46 } 47 48 func (s *EventsTestSuite) HandleEvent(event api.EventPayload) { 49 s.setHandlerInvoked(true) 50 } 51 52 func (s *EventsTestSuite) Test_Un_Subscribe() { 53 err := Events.Subscribe(s) 54 assert.Nil(s.T(), err) 55 56 err = Events.Subscribe(s) 57 assert.Nil(s.T(), err) 58 59 testDummy := &TestDummy{} 60 err = Events.Subscribe(testDummy) 61 assert.Nil(s.T(), err) 62 63 err = Events.Unsubscribe(s) 64 assert.Nil(s.T(), err) 65 66 err = Events.Unsubscribe(s) 67 assert.Nil(s.T(), err) 68 69 err = Events.Unsubscribe(testDummy) 70 assert.Nil(s.T(), err) 71 } 72 73 func (s *EventsTestSuite) Test_Publish_Core() { 74 err := Events.subscribe(api.EventHandlerLevelCore, s) 75 assert.Nil(s.T(), err) 76 77 Events.Publish(api.EventPayload{}) 78 79 assert.True(s.T(), s.isHandlerInvoked()) 80 81 err = Events.Unsubscribe(s) 82 assert.Nil(s.T(), err) 83 } 84 85 func (s *EventsTestSuite) Test_Publish_Application() { 86 err := Events.Subscribe(s) 87 assert.Nil(s.T(), err) 88 89 Events.Publish(api.EventPayload{}) 90 91 time.Sleep(time.Millisecond * 200) 92 assert.True(s.T(), s.isHandlerInvoked()) 93 94 err = Events.Unsubscribe(s) 95 assert.Nil(s.T(), err) 96 }