Skip to content

Commit d75461c

Browse files
authored
Merge pull request #4 from a-hilaly/runnable-remove
Remove `Runnable` interface.
2 parents 824a3c3 + e361aa9 commit d75461c

File tree

5 files changed

+60
-70
lines changed

5 files changed

+60
-70
lines changed

porcelain.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
_ "github.com/gdt-dev/gdt/plugin/exec"
1616
"github.com/gdt-dev/gdt/scenario"
1717
"github.com/gdt-dev/gdt/suite"
18-
gdttypes "github.com/gdt-dev/gdt/types"
1918
)
2019

2120
var (
@@ -27,7 +26,7 @@ var (
2726
// RegisterFixture registers a named fixtures with the context
2827
RegisterFixture = gdtcontext.RegisterFixture
2928
// NewContext returns a new `context.Context` that can be passed to a
30-
// `Runnable` (a `Suite` or `Scenario` returned from the `From` function).
29+
// `scenario.Run` or `suite.Run` pointer receivers.
3130
NewContext = gdtcontext.New
3231
// WithFixtures sets a context's Fixtures
3332
WithFixtures = gdtcontext.WithFixtures
@@ -90,18 +89,19 @@ var (
9089
NewJSONFixture = jsonfix.New
9190
)
9291

93-
// From returns a new Runnable thing from an `io.Reader`, a string file or
92+
// From returns a new suite.Suite from an `io.Reader`, a string file or
9493
// directory path, or the raw bytes of YAML content describing a scenario or
9594
// suite.
96-
func From(source interface{}) (gdttypes.Runnable, error) {
97-
switch source.(type) {
95+
func From(source interface{}) (*suite.Suite, error) {
96+
switch src := source.(type) {
9897
case io.Reader:
99-
return scenario.FromReader(
100-
source.(io.Reader),
101-
)
98+
s, err := scenario.FromReader(src)
99+
if err != nil {
100+
return nil, err
101+
}
102+
return suite.FromScenario(s), nil
102103
case string:
103-
path := source.(string)
104-
f, err := os.Open(path)
104+
f, err := os.Open(src)
105105
if err != nil {
106106
return nil, err
107107
}
@@ -110,12 +110,19 @@ func From(source interface{}) (gdttypes.Runnable, error) {
110110
return nil, err
111111
}
112112
if fi.IsDir() {
113-
return suite.FromDir(path)
114-
} else {
115-
return scenario.FromReader(f, scenario.WithPath(path))
113+
return suite.FromDir(src)
116114
}
115+
s, err := scenario.FromReader(f, scenario.WithPath(src))
116+
if err != nil {
117+
return nil, err
118+
}
119+
return suite.FromScenario(s), nil
117120
case []byte:
118-
return scenario.FromBytes(source.([]byte))
121+
s, err := scenario.FromBytes(src)
122+
if err != nil {
123+
return nil, err
124+
}
125+
return suite.FromScenario(s), nil
119126
default:
120127
return nil, gdterrors.UnknownSourceType(source)
121128
}

porcelain_test.go

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import (
1212

1313
"github.com/gdt-dev/gdt"
1414
gdterrors "github.com/gdt-dev/gdt/errors"
15-
"github.com/gdt-dev/gdt/scenario"
16-
"github.com/gdt-dev/gdt/suite"
1715
"github.com/stretchr/testify/assert"
1816
"github.com/stretchr/testify/require"
1917
)
@@ -46,12 +44,9 @@ func TestFromSuite(t *testing.T) {
4644
require := require.New(t)
4745

4846
fp := filepath.Join("suite", "testdata", "exec")
49-
s, err := gdt.From(fp)
47+
suite, err := gdt.From(fp)
5048
require.Nil(err)
51-
require.NotNil(s)
52-
53-
suite, ok := s.(*suite.Suite)
54-
require.True(ok, "gdt.From() did not return a Suite")
49+
require.NotNil(suite)
5550

5651
assert.Equal(fp, suite.Path)
5752
assert.Len(suite.Scenarios, 2)
@@ -66,11 +61,10 @@ func TestFromScenarioPath(t *testing.T) {
6661
require.Nil(err)
6762
require.NotNil(s)
6863

69-
sc, ok := s.(*scenario.Scenario)
70-
assert.True(ok, "gdt.From() with dir path did not return a Scenario")
71-
72-
assert.Equal(fp, sc.Path)
73-
assert.Len(sc.Tests, 1)
64+
assert.Equal(fp, s.Path)
65+
assert.Len(s.Scenarios, 1)
66+
assert.Len(s.Scenarios[0].Tests, 1)
67+
assert.Equal("exec", s.Name)
7468
}
7569

7670
func TestFromScenarioReader(t *testing.T) {
@@ -80,38 +74,33 @@ func TestFromScenarioReader(t *testing.T) {
8074
fp := filepath.Join("suite", "testdata", "exec", "ls.yaml")
8175
f, err := os.Open(fp)
8276
require.Nil(err)
83-
s, err := gdt.From(f)
84-
require.Nil(err)
85-
require.NotNil(s)
86-
87-
sc, ok := s.(*scenario.Scenario)
88-
assert.True(ok, "gdt.From() from file path did not return a Scenario")
77+
suite, err := gdt.From(f)
78+
assert.Nil(err)
79+
assert.NotNil(suite)
8980

9081
// The scenario's path isn't set because we didn't supply a filepath...
91-
assert.Equal("", sc.Path)
92-
assert.Len(sc.Tests, 1)
82+
assert.Equal("", suite.Path)
83+
assert.Len(suite.Scenarios, 1)
84+
assert.Len(suite.Scenarios[0].Tests, 1)
9385
}
9486

9587
func TestFromScenarioBytes(t *testing.T) {
9688
assert := assert.New(t)
97-
require := require.New(t)
9889

9990
raw := `name: foo
10091
description: simple foo test
10192
tests:
10293
- exec: echo foo
10394
`
10495
b := []byte(raw)
105-
s, err := gdt.From(b)
106-
require.Nil(err)
107-
require.NotNil(s)
108-
109-
sc, ok := s.(*scenario.Scenario)
110-
assert.True(ok, "gdt.From() with []byte did not return a Scenario")
96+
suite, err := gdt.From(b)
97+
assert.Nil(err)
98+
assert.NotNil(suite)
11199

112100
// The scenario's path isn't set because we didn't supply a filepath...
113-
assert.Equal("", sc.Path)
114-
assert.Len(sc.Tests, 1)
101+
assert.Equal("", suite.Path)
102+
assert.Len(suite.Scenarios, 1)
103+
assert.Len(suite.Scenarios[0].Tests, 1)
115104
}
116105

117106
func TestRunExecSuite(t *testing.T) {

suite/from.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,22 @@ func FromDir(
5858
}
5959
return s, nil
6060
}
61+
62+
// FromScenario encapsulates a given scenario in a fresh suite and returns it.
63+
func FromScenario(s *scenario.Scenario) *Suite {
64+
return &Suite{
65+
Path: s.Path,
66+
Name: suiteNameFromScenarioPath(s.Path),
67+
Description: s.Description,
68+
// NOTE: require needs to be named to fixture?
69+
Require: s.Fixtures,
70+
Defaults: s.Defaults,
71+
Scenarios: []*scenario.Scenario{s},
72+
}
73+
}
74+
75+
func suiteNameFromScenarioPath(p string) string {
76+
dir := filepath.Dir(p)
77+
parent := filepath.Base(dir)
78+
return parent
79+
}

suite/suite.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/gdt-dev/gdt/scenario"
99
)
1010

11-
// Suite contains zero or more Runnable things, one for each YAML file
11+
// Suite contains zero or more scenarios, one for each YAML file
1212
// representing a Scenario in a given directory
1313
type Suite struct {
1414
// Path is the filepath to the test suite directory.
@@ -77,7 +77,7 @@ func New(mods ...SuiteModifier) *Suite {
7777
return s
7878
}
7979

80-
// Append appends a runnable test element to the test suite
80+
// Append appends a test element to the test suite
8181
func (s *Suite) Append(sc *scenario.Scenario) {
8282
s.Scenarios = append(s.Scenarios, sc)
8383
}

types/runnable.go

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)