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  }