container = New("description text", types.FlagTypeFocused, codeLocation) }) Describe("creating a container node", func() { It("can answer questions about itself", func() { Ω(container.Text()).Should(Equal("description text")) Ω(container.Flag()).Should(Equal(types.FlagTypeFocused)) Ω(container.CodeLocation()).Should(Equal(codeLocation)) }) }) Describe("pushing setup nodes", func() { It("can append setup nodes of various types and fetch them by type", func() { befA := leafnodes.NewBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) befB := leafnodes.NewBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) aftA := leafnodes.NewAfterEachNode(func() {}, codelocation.New(0), 0, nil, 0) aftB := leafnodes.NewAfterEachNode(func() {}, codelocation.New(0), 0, nil, 0) jusBefA := leafnodes.NewJustBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) jusBefB := leafnodes.NewJustBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) container.PushSetupNode(befA) container.PushSetupNode(befB) container.PushSetupNode(aftA) container.PushSetupNode(aftB) container.PushSetupNode(jusBefA) container.PushSetupNode(jusBefB) subject := leafnodes.NewItNode("subject", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) container.PushSubjectNode(subject) Ω(container.SetupNodesOfType(types.SpecComponentTypeBeforeEach)).Should(Equal([]leafnodes.BasicNode{befA, befB}))
newMeasure := func(text string, flag types.FlagType, fail bool, samples int) *leafnodes.MeasureNode { return leafnodes.NewMeasureNode(text, func(Benchmarker) { nodesThatRan = append(nodesThatRan, text) if fail { failer.Fail(text, codeLocation) } }, flag, codeLocation, samples, failer, 0) } newBef := func(text string, fail bool) leafnodes.BasicNode { return leafnodes.NewBeforeEachNode(newBody(text, fail), codeLocation, 0, failer, 0) } newAft := func(text string, fail bool) leafnodes.BasicNode { return leafnodes.NewAfterEachNode(newBody(text, fail), codeLocation, 0, failer, 0) } newJusBef := func(text string, fail bool) leafnodes.BasicNode { return leafnodes.NewJustBeforeEachNode(newBody(text, fail), codeLocation, 0, failer, 0) } newContainer := func(text string, flag types.FlagType, setupNodes ...leafnodes.BasicNode) *containernode.ContainerNode { c := containernode.New(text, flag, codeLocation) for _, node := range setupNodes { c.PushSetupNode(node) } return c } containers := func(containers ...*containernode.ContainerNode) []*containernode.ContainerNode {
func (suite *Suite) PushAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { if suite.running { suite.failer.Fail("You may only call AfterEach from within a Describe or Context", codeLocation) } suite.currentContainer.PushSetupNode(leafnodes.NewAfterEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) }