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") }