github.com/lonnblad/godog@v0.7.14-0.20200306004719-1b0cb3259847/formatters_print_test.go (about)

     1  package godog
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"path"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestPrintingFormatters(t *testing.T) {
    17  	features, err := parseFeatures("", []string{"formatter-tests"})
    18  	require.NoError(t, err)
    19  
    20  	var buf bytes.Buffer
    21  	out := &tagColorWriter{w: &buf}
    22  
    23  	suite := &Suite{
    24  		features: features,
    25  	}
    26  
    27  	// inlining steps to have same source code line reference
    28  	suite.Step(`^(?:a )?failing step`, failingStepDef)
    29  	suite.Step(`^(?:a )?pending step$`, pendingStepDef)
    30  	suite.Step(`^(?:a )?passing step$`, passingStepDef)
    31  	suite.Step(`^odd (\d+) and even (\d+) number$`, oddEvenStepDef)
    32  
    33  	pkg := os.Getenv("GODOG_TESTED_PACKAGE")
    34  	os.Setenv("GODOG_TESTED_PACKAGE", "github.com/lonnblad/godog")
    35  	for _, feat := range features {
    36  		for name := range AvailableFormatters() {
    37  			expectOutputPath := strings.Replace(feat.Path, "features", name, 1)
    38  			expectOutputPath = strings.TrimSuffix(expectOutputPath, path.Ext(expectOutputPath))
    39  			if _, err := os.Stat(expectOutputPath); err != nil {
    40  				continue
    41  			}
    42  
    43  			buf.Reset()                          // flush the output
    44  			suite.fmt = FindFmt(name)(name, out) // prepare formatter
    45  			suite.features = []*feature{feat}    // set the feature
    46  
    47  			expectedOutput, err := ioutil.ReadFile(expectOutputPath)
    48  			require.NoError(t, err)
    49  
    50  			suite.run()
    51  			suite.fmt.Summary()
    52  
    53  			expected := string(expectedOutput)
    54  			actual := buf.String()
    55  
    56  			assert.Equalf(t, expected, actual, "path: %s", expectOutputPath)
    57  		}
    58  	}
    59  
    60  	os.Setenv("GODOG_TESTED_PACKAGE", pkg)
    61  }
    62  
    63  func passingStepDef() error { return nil }
    64  
    65  func oddEvenStepDef(odd, even int) error { return oddOrEven(odd, even) }
    66  
    67  func oddOrEven(odd, even int) error {
    68  	if odd%2 == 0 {
    69  		return fmt.Errorf("%d is not odd", odd)
    70  	}
    71  	if even%2 != 0 {
    72  		return fmt.Errorf("%d is not even", even)
    73  	}
    74  	return nil
    75  }
    76  
    77  func pendingStepDef() error { return ErrPending }
    78  
    79  func failingStepDef() error { return fmt.Errorf("step failed") }