--- a/intrinsic/extend_test.go Tue Sep 19 20:14:49 2017 -0500
+++ b/intrinsic/extend_test.go Tue Sep 19 22:34:39 2017 -0500
@@ -18,13 +18,130 @@
+ "bitbucket.org/rw_grim/convey/environment" + "bitbucket.org/rw_grim/convey/state" + "bitbucket.org/rw_grim/convey/tasks" + "github.com/aphistic/gomol" "github.com/aphistic/sweet"
. "github.com/onsi/gomega"
-func (s *intrinsicSuite) TestExtend(t sweet.T) {
- Files: []string{"foo", "bar", "**.pyc"},
+func (s *intrinsicSuite) TestExtendExecute(t sweet.T) { + st = &state.State{Environment: []string{"bar=bonk", "quux=honk"}} + task.executeFn = func(name string, logger *gomol.LogAdapter, env []string, st *state.State) error { + fullEnv = environment.Merge(environment.Merge(env, []string{"x=1", "foo=quux"}), st.Environment) + Environment: []string{"foo=bar", "bar=baz"}, + Expect(c.Execute("task", nil, nil, st)).To(BeNil()) + Expect(fullEnv).To(HaveLen(4)) + Expect(fullEnv).To(ConsistOf("x=1", "foo=bar", "bar=bonk", "quux=honk")) + Expect(st.Environment).To(HaveLen(2)) + Expect(st.Environment).To(ConsistOf("bar=bonk", "quux=honk")) +func (s *intrinsicSuite) TestDependencies(t sweet.T) { + c := &Extend{Task: "test-task"} + Expect(c.Dependencies()).To(Equal([]string{"test-task"})) +func (s *intrinsicSuite) TestResolve(t sweet.T) { + task.Y = []string{"foo", "bar"} - Expect(c.Valid()).To(BeNil())
+ c := &Extend{Task: "a"} + err := c.Resolve(map[string]tasks.Task{ + Expect(err).To(BeNil()) + // Must clone inner task + Expect(c.InnerTask).NotTo(BeNil()) + Expect(c.InnerTask).NotTo(BeIdenticalTo(task)) + Expect(c.InnerTask.(*mockTask).X).To(Equal(3)) + Expect(c.InnerTask.(*mockTask).Y).To(Equal([]string{"foo", "bar"})) + Expect(c.InnerTask.(*mockTask).Z.A).To(Equal("wynken")) + Expect(c.InnerTask.(*mockTask).Z.B).To(Equal("blynken")) + Expect(c.InnerTask.(*mockTask).Z.C).To(Equal("nod")) +func (s *intrinsicSuite) TestResolveChain(t sweet.T) { + task.Y = []string{"foo", "bar"} + c1 := &Extend{Task: "a"} + c2 := &Extend{Task: "b"} + taskMapping := map[string]tasks.Task{ + Expect(c1.Resolve(taskMapping)).To(BeNil()) + Expect(c2.Resolve(taskMapping)).To(BeNil()) + // Must clone inner task + Expect(c2.InnerTask).NotTo(BeNil()) + Expect(c2.InnerTask).NotTo(BeIdenticalTo(c1)) + Expect(c2.InnerTask.(*Extend).InnerTask).NotTo(BeNil()) + Expect(c2.InnerTask.(*Extend).InnerTask.(*mockTask).X).To(Equal(3)) + Expect(c2.InnerTask.(*Extend).InnerTask.(*mockTask).Y).To(Equal([]string{"foo", "bar"})) + executeFn func(string, *gomol.LogAdapter, []string, *state.State) error +func newMockTask() *mockTask { + executeFn: func(string, *gomol.LogAdapter, []string, *state.State) error { +func (t *mockTask) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error { + return t.executeFn(name, logger, env, st) +func (t *mockTask) New() tasks.Task { +func (t *mockTask) Valid() error { --- a/loaders/convey/convey.go Tue Sep 19 20:14:49 2017 -0500
+++ b/loaders/convey/convey.go Tue Sep 19 22:34:39 2017 -0500
@@ -22,7 +22,7 @@
"github.com/go-yaml/yaml"
- "github.com/philopon/go-toposort"
+ toposort "github.com/philopon/go-toposort" cConfig "bitbucket.org/rw_grim/convey/config"
"bitbucket.org/rw_grim/convey/environment"
@@ -222,7 +222,6 @@
remaining = append(remaining, k)
- // TODO - get actual tasks
return fmt.Errorf("The following tasks are part of a dependency cycle: %s", strings.Join(remaining, ", "))