github.com/data-DOG/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") }