From 59a6d9071ad84b4345b2e9d6d5198ac9a9efe67c Mon Sep 17 00:00:00 2001 From: Aaron Kaswen-Wilk Date: Tue, 26 Jul 2022 10:57:15 +0200 Subject: [PATCH] adjust feature contents option to slice of structs --- internal/flags/options.go | 7 ++++++- internal/parser/parser.go | 9 ++++++--- internal/parser/parser_test.go | 4 ++-- run_test.go | 17 ++++++++++------- test_context.go | 3 +++ 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/internal/flags/options.go b/internal/flags/options.go index f7940d2a..a0eb1260 100644 --- a/internal/flags/options.go +++ b/internal/flags/options.go @@ -68,5 +68,10 @@ type Options struct { // FeatureContents allows passing in each feature manually // where the contents of each feature is stored as a byte slice // in a map entry - FeatureContents map[string][]byte + FeatureContents []Feature +} + +type Feature struct { + Name string + Contents []byte } diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 517f8d91..e5d945d2 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -13,6 +13,7 @@ import ( "github.com/cucumber/gherkin-go/v19" "github.com/cucumber/messages-go/v16" + "github.com/cucumber/godog/internal/flags" "github.com/cucumber/godog/internal/models" "github.com/cucumber/godog/internal/tags" ) @@ -178,14 +179,16 @@ func ParseFeatures(filter string, paths []string) ([]*models.Feature, error) { return features, nil } -func ParseFromBytes(filter string, featuresInputs map[string][]byte) ([]*models.Feature, error) { +type FeatureContent = flags.Feature + +func ParseFromBytes(filter string, featuresInputs []FeatureContent) ([]*models.Feature, error) { var order int featureIdxs := make(map[string]int) uniqueFeatureURI := make(map[string]*models.Feature) newIDFunc := (&messages.Incrementing{}).NewId - for path, feature := range featuresInputs { - ft, err := parseBytes(path, feature, newIDFunc) + for _, f := range featuresInputs { + ft, err := parseBytes(f.Name, f.Contents, newIDFunc) if err != nil { return nil, err } diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index c3dd4965..13d51608 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -63,8 +63,8 @@ Feature: eat godogs require.NoError(t, err) require.Len(t, featureFromFile, 1) - input := map[string][]byte{ - filepath.Join(baseDir, featureFileName): []byte(eatGodogContents), + input := []parser.FeatureContent{ + {Name: filepath.Join(baseDir, featureFileName), Contents: []byte(eatGodogContents)}, } featureFromBytes, err := parser.ParseFromBytes("", input) diff --git a/run_test.go b/run_test.go index 63eec565..20a8623b 100644 --- a/run_test.go +++ b/run_test.go @@ -267,19 +267,22 @@ func Test_RunsWithFeatureContentsOption(t *testing.T) { items, err := ioutil.ReadDir("./features") require.NoError(t, err) - featureContents := make(map[string][]byte) + var featureContents []Feature for _, item := range items { - if !item.IsDir() && strings.Contains(item.Name(), ".feature"){ - contents, err := os.ReadFile("./features/"+item.Name()) + if !item.IsDir() && strings.Contains(item.Name(), ".feature") { + contents, err := os.ReadFile("./features/" + item.Name()) require.NoError(t, err) - featureContents[item.Name()] = contents + featureContents = append(featureContents, Feature{ + Name: item.Name(), + Contents: contents, + }) } } opts := Options{ - Format: "progress", - Output: ioutil.Discard, - Strict: true, + Format: "progress", + Output: ioutil.Discard, + Strict: true, FeatureContents: featureContents, } diff --git a/test_context.go b/test_context.go index 862280e8..fbbe981f 100644 --- a/test_context.go +++ b/test_context.go @@ -8,6 +8,7 @@ import ( "github.com/cucumber/godog/formatters" "github.com/cucumber/godog/internal/builder" + "github.com/cucumber/godog/internal/flags" "github.com/cucumber/godog/internal/models" "github.com/cucumber/messages-go/v16" ) @@ -316,3 +317,5 @@ func (ctx *ScenarioContext) Step(expr, stepFunc interface{}) { func Build(bin string) error { return builder.Build(bin) } + +type Feature = flags.Feature