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  }