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 }