github.com/getgauge/gauge@v1.6.9/execution/event/event_test.go (about)

     1  /*----------------------------------------------------------------
     2   *  Copyright (c) ThoughtWorks, Inc.
     3   *  Licensed under the Apache License, Version 2.0
     4   *  See LICENSE in the project root for license information.
     5   *----------------------------------------------------------------*/
     6  
     7  package event
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/getgauge/gauge-proto/go/gauge_messages"
    13  	"github.com/getgauge/gauge/execution/result"
    14  	"github.com/getgauge/gauge/gauge"
    15  	. "gopkg.in/check.v1"
    16  )
    17  
    18  func Test(t *testing.T) { TestingT(t) }
    19  
    20  type MySuite struct{}
    21  
    22  var _ = Suite(&MySuite{})
    23  
    24  func (s *MySuite) TestInitRegistry(c *C) {
    25  	InitRegistry()
    26  
    27  	c.Assert(len(subscriberRegistry), Equals, 8)
    28  }
    29  
    30  func (s *MySuite) TestRegisterForOneTopic(c *C) {
    31  	InitRegistry()
    32  	ch := make(chan ExecutionEvent)
    33  
    34  	Register(ch, StepEnd)
    35  
    36  	c.Assert(subscriberRegistry[StepEnd][0], Equals, ch)
    37  }
    38  
    39  func (s *MySuite) TestRegisterForMultipleTopics(c *C) {
    40  	InitRegistry()
    41  	ch := make(chan ExecutionEvent)
    42  
    43  	Register(ch, StepEnd, StepStart, SpecEnd, SpecStart)
    44  
    45  	c.Assert(subscriberRegistry[StepEnd][0], Equals, ch)
    46  	c.Assert(subscriberRegistry[StepStart][0], Equals, ch)
    47  	c.Assert(subscriberRegistry[SpecEnd][0], Equals, ch)
    48  	c.Assert(subscriberRegistry[SpecEnd][0], Equals, ch)
    49  }
    50  
    51  func (s *MySuite) TestMultipleSubscribersRegisteringForMultipleEvent(c *C) {
    52  	InitRegistry()
    53  
    54  	ch1 := make(chan ExecutionEvent)
    55  	Register(ch1, StepStart, StepEnd)
    56  
    57  	ch2 := make(chan ExecutionEvent)
    58  	Register(ch2, StepStart, StepEnd)
    59  
    60  	ch3 := make(chan ExecutionEvent)
    61  	Register(ch3, SpecStart, SpecEnd, StepStart, StepEnd)
    62  
    63  	c.Assert(len(subscriberRegistry[SpecStart]), Equals, 1)
    64  	c.Assert(contains(subscriberRegistry[SpecStart], ch3), Equals, true)
    65  
    66  	c.Assert(len(subscriberRegistry[SpecEnd]), Equals, 1)
    67  	c.Assert(contains(subscriberRegistry[SpecEnd], ch3), Equals, true)
    68  
    69  	c.Assert(len(subscriberRegistry[StepStart]), Equals, 3)
    70  	c.Assert(contains(subscriberRegistry[StepStart], ch1), Equals, true)
    71  	c.Assert(contains(subscriberRegistry[StepStart], ch2), Equals, true)
    72  	c.Assert(contains(subscriberRegistry[StepStart], ch3), Equals, true)
    73  
    74  	c.Assert(len(subscriberRegistry[StepEnd]), Equals, 3)
    75  	c.Assert(contains(subscriberRegistry[StepEnd], ch1), Equals, true)
    76  	c.Assert(contains(subscriberRegistry[StepEnd], ch2), Equals, true)
    77  	c.Assert(contains(subscriberRegistry[StepEnd], ch3), Equals, true)
    78  }
    79  
    80  func (s *MySuite) TestNotify(c *C) {
    81  	InitRegistry()
    82  
    83  	ch1 := make(chan ExecutionEvent, 2)
    84  	Register(ch1, StepStart, StepEnd)
    85  
    86  	ch2 := make(chan ExecutionEvent, 2)
    87  	Register(ch2, StepStart, StepEnd)
    88  
    89  	stepText := "Hello World"
    90  	protoStep := &gauge_messages.ProtoStep{ActualText: stepText}
    91  	stepRes := result.NewStepResult(protoStep)
    92  
    93  	step := &gauge.Step{Value: stepText}
    94  	stepStartEvent := NewExecutionEvent(StepStart, step, nil, 0, &gauge_messages.ExecutionInfo{})
    95  	stepEndEvent := NewExecutionEvent(StepEnd, nil, stepRes, 0, &gauge_messages.ExecutionInfo{})
    96  
    97  	Notify(stepStartEvent)
    98  	c.Assert(<-ch1, DeepEquals, stepStartEvent)
    99  	c.Assert(<-ch2, DeepEquals, stepStartEvent)
   100  
   101  	Notify(stepEndEvent)
   102  	c.Assert(<-ch1, DeepEquals, stepEndEvent)
   103  	c.Assert(<-ch2, DeepEquals, stepEndEvent)
   104  }
   105  
   106  func contains(arr []chan ExecutionEvent, key chan ExecutionEvent) bool {
   107  	for _, k := range arr {
   108  		if k == key {
   109  			return true
   110  		}
   111  	}
   112  	return false
   113  }