1package leafnodes
2
3import (
4	"time"
5
6	"github.com/onsi/ginkgo/internal/failer"
7	"github.com/onsi/ginkgo/types"
8)
9
10type SuiteNode interface {
11	Run(parallelNode int, parallelTotal int, syncHost string) bool
12	Passed() bool
13	Summary() *types.SetupSummary
14}
15
16type simpleSuiteNode struct {
17	runner  *runner
18	outcome types.SpecState
19	failure types.SpecFailure
20	runTime time.Duration
21}
22
23func (node *simpleSuiteNode) Run(parallelNode int, parallelTotal int, syncHost string) bool {
24	t := time.Now()
25	node.outcome, node.failure = node.runner.run()
26	node.runTime = time.Since(t)
27
28	return node.outcome == types.SpecStatePassed
29}
30
31func (node *simpleSuiteNode) Passed() bool {
32	return node.outcome == types.SpecStatePassed
33}
34
35func (node *simpleSuiteNode) Summary() *types.SetupSummary {
36	return &types.SetupSummary{
37		ComponentType: node.runner.nodeType,
38		CodeLocation:  node.runner.codeLocation,
39		State:         node.outcome,
40		RunTime:       node.runTime,
41		Failure:       node.failure,
42	}
43}
44
45func NewBeforeSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
46	return &simpleSuiteNode{
47		runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeBeforeSuite, 0),
48	}
49}
50
51func NewAfterSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
52	return &simpleSuiteNode{
53		runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeAfterSuite, 0),
54	}
55}
56