github.com/getgauge/gauge@v1.6.9/reporter/reporter_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 reporter 8 9 import ( 10 "sync" 11 12 "github.com/getgauge/gauge-proto/go/gauge_messages" 13 "github.com/getgauge/gauge/execution/event" 14 "github.com/getgauge/gauge/execution/result" 15 "github.com/getgauge/gauge/gauge" 16 . "gopkg.in/check.v1" 17 ) 18 19 var dataTableEvent = event.Topic(100) 20 21 func (s *MySuite) TestSubscribeSpecEnd(c *C) { 22 e := make(chan event.Topic) 23 currentReporter = &dummyConsole{event: e} 24 SimpleConsoleOutput = true 25 event.InitRegistry() 26 27 ListenExecutionEvents(&sync.WaitGroup{}) 28 29 event.Notify(event.NewExecutionEvent(event.SpecEnd, &gauge.Specification{}, &DummyResult{}, 0, &gauge_messages.ExecutionInfo{})) 30 c.Assert(<-e, Equals, event.SpecEnd) 31 } 32 33 func (s *MySuite) TestSubscribeSuiteStart(c *C) { 34 e := make(chan event.Topic) 35 currentReporter = &dummyConsole{event: e} 36 event.InitRegistry() 37 38 ListenExecutionEvents(&sync.WaitGroup{}) 39 40 event.Notify(event.NewExecutionEvent(event.SuiteStart, nil, nil, 0, &gauge_messages.ExecutionInfo{})) 41 c.Assert(<-e, Equals, event.SuiteStart) 42 } 43 44 func (s *MySuite) TestSubscribeSpecStart(c *C) { 45 e := make(chan event.Topic) 46 currentReporter = &dummyConsole{event: e} 47 event.InitRegistry() 48 spec := &gauge.Specification{Heading: &gauge.Heading{Value: "My Spec Heading"}} 49 50 ListenExecutionEvents(&sync.WaitGroup{}) 51 52 event.Notify(event.NewExecutionEvent(event.SpecStart, spec, nil, 0, &gauge_messages.ExecutionInfo{})) 53 c.Assert(<-e, Equals, event.SpecStart) 54 } 55 56 func (s *MySuite) TestSubscribeScenarioStart(c *C) { 57 e := make(chan event.Topic) 58 currentReporter = &dummyConsole{event: e} 59 event.InitRegistry() 60 sceHeading := "My scenario heading" 61 sce := &gauge.Scenario{Heading: &gauge.Heading{Value: sceHeading}} 62 sceRes := result.NewScenarioResult(&gauge_messages.ProtoScenario{ScenarioHeading: sceHeading}) 63 64 ListenExecutionEvents(&sync.WaitGroup{}) 65 66 event.Notify(event.NewExecutionEvent(event.ScenarioStart, sce, sceRes, 0, &gauge_messages.ExecutionInfo{})) 67 c.Assert(<-e, Equals, event.ScenarioStart) 68 } 69 70 func (s *MySuite) TestSubscribeScenarioStartWithDataTable(c *C) { 71 e := make(chan event.Topic) 72 currentReporter = &dummyConsole{event: e} 73 event.InitRegistry() 74 dataTable := gauge.Table{} 75 dataTable.AddHeaders([]string{"foo", "bar"}) 76 dataTable.AddRowValues(dataTable.CreateTableCells([]string{"one", "two"})) 77 sceHeading := "My scenario heading" 78 step := &gauge.Step{ 79 Args: []*gauge.StepArg{{Name: "foo", 80 Value: "foo", 81 ArgType: gauge.Dynamic}}, 82 } 83 sce := &gauge.Scenario{Heading: &gauge.Heading{Value: sceHeading}, SpecDataTableRow: dataTable, Steps: []*gauge.Step{step}} 84 sceRes := result.NewScenarioResult(&gauge_messages.ProtoScenario{ScenarioHeading: sceHeading}) 85 86 ListenExecutionEvents(&sync.WaitGroup{}) 87 88 event.Notify(event.NewExecutionEvent(event.ScenarioStart, sce, sceRes, 0, &gauge_messages.ExecutionInfo{})) 89 c.Assert(<-e, Equals, dataTableEvent) 90 c.Assert(<-e, Equals, event.ScenarioStart) 91 } 92 93 func (s *MySuite) TestSubscribeScenarioEnd(c *C) { 94 e := make(chan event.Topic) 95 currentReporter = &dummyConsole{event: e} 96 event.InitRegistry() 97 sceRes := result.NewScenarioResult(&gauge_messages.ProtoScenario{ScenarioHeading: "My scenario heading"}) 98 99 ListenExecutionEvents(&sync.WaitGroup{}) 100 101 event.Notify(event.NewExecutionEvent(event.ScenarioEnd, &gauge.Scenario{}, sceRes, 0, &gauge_messages.ExecutionInfo{})) 102 c.Assert(<-e, Equals, event.ScenarioEnd) 103 } 104 105 func (s *MySuite) TestSubscribeStepStart(c *C) { 106 e := make(chan event.Topic) 107 currentReporter = &dummyConsole{event: e} 108 event.InitRegistry() 109 stepText := "My first step" 110 step := &gauge.Step{Value: stepText} 111 112 ListenExecutionEvents(&sync.WaitGroup{}) 113 114 event.Notify(event.NewExecutionEvent(event.StepStart, step, nil, 0, &gauge_messages.ExecutionInfo{})) 115 c.Assert(<-e, Equals, event.StepStart) 116 } 117 118 func (s *MySuite) TestSubscribeStepEnd(c *C) { 119 e := make(chan event.Topic) 120 currentReporter = &dummyConsole{event: e} 121 event.InitRegistry() 122 stepExeRes := &gauge_messages.ProtoStepExecutionResult{ExecutionResult: &gauge_messages.ProtoExecutionResult{Failed: false}} 123 stepRes := result.NewStepResult(&gauge_messages.ProtoStep{StepExecutionResult: stepExeRes}) 124 125 ListenExecutionEvents(&sync.WaitGroup{}) 126 127 event.Notify(event.NewExecutionEvent(event.StepEnd, gauge.Step{}, stepRes, 0, &gauge_messages.ExecutionInfo{})) 128 c.Assert(<-e, Equals, event.StepEnd) 129 } 130 131 func (s *MySuite) TestSubscribeConceptStart(c *C) { 132 e := make(chan event.Topic) 133 currentReporter = &dummyConsole{event: e} 134 SimpleConsoleOutput = true 135 event.InitRegistry() 136 Verbose = true 137 cptText := "My last concept" 138 concept := &gauge.Step{Value: cptText, IsConcept: true} 139 140 ListenExecutionEvents(&sync.WaitGroup{}) 141 142 event.Notify(event.NewExecutionEvent(event.ConceptStart, concept, nil, 0, &gauge_messages.ExecutionInfo{})) 143 c.Assert(<-e, Equals, event.ConceptStart) 144 } 145 146 func (s *MySuite) TestSubscribeConceptEnd(c *C) { 147 e := make(chan event.Topic) 148 currentReporter = &dummyConsole{event: e} 149 event.InitRegistry() 150 cptExeRes := &gauge_messages.ProtoStepExecutionResult{ExecutionResult: &gauge_messages.ProtoExecutionResult{Failed: true}} 151 cptRes := result.NewConceptResult(&gauge_messages.ProtoConcept{ConceptExecutionResult: cptExeRes}) 152 153 ListenExecutionEvents(&sync.WaitGroup{}) 154 155 event.Notify(event.NewExecutionEvent(event.ConceptEnd, nil, cptRes, 0, &gauge_messages.ExecutionInfo{})) 156 c.Assert(<-e, Equals, event.ConceptEnd) 157 } 158 159 func (s *MySuite) TestSubscribeSuiteEnd(c *C) { 160 e := make(chan event.Topic) 161 currentReporter = &dummyConsole{event: e} 162 event.InitRegistry() 163 suiteRes := &result.SuiteResult{UnhandledErrors: []error{}} 164 165 ListenExecutionEvents(&sync.WaitGroup{}) 166 event.Notify(event.NewExecutionEvent(event.SuiteEnd, nil, suiteRes, 0, &gauge_messages.ExecutionInfo{})) 167 168 c.Assert(<-e, Equals, event.SuiteEnd) 169 } 170 171 type dummyConsole struct { 172 event chan event.Topic 173 } 174 175 func (dc *dummyConsole) SuiteStart() { 176 dc.event <- event.SuiteStart 177 } 178 179 func (dc *dummyConsole) SpecStart(spec *gauge.Specification, res result.Result) { 180 dc.event <- event.SpecStart 181 } 182 183 func (dc *dummyConsole) SpecEnd(spec *gauge.Specification, res result.Result) { 184 dc.event <- event.SpecEnd 185 } 186 187 func (dc *dummyConsole) ScenarioStart(scenario *gauge.Scenario, i *gauge_messages.ExecutionInfo, res result.Result) { 188 dc.event <- event.ScenarioStart 189 } 190 191 func (dc *dummyConsole) ScenarioEnd(s *gauge.Scenario, res result.Result, i *gauge_messages.ExecutionInfo) { 192 dc.event <- event.ScenarioEnd 193 } 194 195 func (dc *dummyConsole) StepStart(stepText string) { 196 dc.event <- event.StepStart 197 } 198 199 func (dc *dummyConsole) StepEnd(step gauge.Step, res result.Result, execInfo *gauge_messages.ExecutionInfo) { 200 dc.event <- event.StepEnd 201 } 202 203 func (dc *dummyConsole) ConceptStart(conceptHeading string) { 204 dc.event <- event.ConceptStart 205 } 206 207 func (dc *dummyConsole) ConceptEnd(res result.Result) { 208 dc.event <- event.ConceptEnd 209 } 210 211 func (dc *dummyConsole) SuiteEnd(res result.Result) { 212 dc.event <- event.SuiteEnd 213 } 214 215 func (dc *dummyConsole) DataTable(table string) { 216 dc.event <- dataTableEvent 217 } 218 219 func (dc *dummyConsole) Errorf(err string, args ...interface{}) { 220 } 221 222 func (dc *dummyConsole) Write(b []byte) (int, error) { 223 return len(b), nil 224 }