From d3c8b15e6a61bdb742b7e778ca81f12793b42d95 Mon Sep 17 00:00:00 2001 From: Aaron Kaswen-Wilk Date: Sat, 23 Jul 2022 11:01:44 +0200 Subject: [PATCH] add test for running with feature contents --- run.go | 7 ++++--- run_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/run.go b/run.go index a28af3f0..0f53e7d9 100644 --- a/run.go +++ b/run.go @@ -227,11 +227,12 @@ func runWithOptions(suiteName string, runner runner, opt Options) int { runner.fmt = multiFmt.FormatterFunc(suiteName, output) var err error - if len(opt.Paths) > 0 { - runner.features, err = parser.ParseFeatures(opt.Tags, opt.Paths) - } else { + if len(opt.FeatureContents) > 0 { runner.features, err = parser.ParseFromBytes(opt.Tags, opt.FeatureContents) } + if len(runner.features) <= 0 { + runner.features, err = parser.ParseFeatures(opt.Tags, opt.Paths) + } if err != nil { fmt.Fprintln(os.Stderr, err) return exitOptionError diff --git a/run_test.go b/run_test.go index e36d1fca..63eec565 100644 --- a/run_test.go +++ b/run_test.go @@ -263,6 +263,46 @@ func Test_ByDefaultRunsFeaturesPath(t *testing.T) { assert.Equal(t, exitSuccess, status) } +func Test_RunsWithFeatureContentsOption(t *testing.T) { + items, err := ioutil.ReadDir("./features") + require.NoError(t, err) + + featureContents := make(map[string][]byte) + for _, item := range items { + if !item.IsDir() && strings.Contains(item.Name(), ".feature"){ + contents, err := os.ReadFile("./features/"+item.Name()) + require.NoError(t, err) + featureContents[item.Name()] = contents + } + } + + opts := Options{ + Format: "progress", + Output: ioutil.Discard, + Strict: true, + FeatureContents: featureContents, + } + + status := TestSuite{ + Name: "fails", + ScenarioInitializer: func(_ *ScenarioContext) {}, + Options: &opts, + }.Run() + + // should fail in strict mode due to undefined steps + assert.Equal(t, exitFailure, status) + + opts.Strict = false + status = TestSuite{ + Name: "succeeds", + ScenarioInitializer: func(_ *ScenarioContext) {}, + Options: &opts, + }.Run() + + // should succeed in non strict mode due to undefined steps + assert.Equal(t, exitSuccess, status) +} + func bufErrorPipe(t *testing.T) (io.ReadCloser, func()) { stderr := os.Stderr r, w, err := os.Pipe()