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