/*----------------------------------------------------------------
 *  Copyright (c) ThoughtWorks, Inc.
 *  Licensed under the Apache License, Version 2.0
 *  See LICENSE in the project root for license information.
 *----------------------------------------------------------------*/

package execution

import (
	"fmt"

	"github.com/getgauge/gauge/gauge"

	. "gopkg.in/check.v1"
)

func (s *MySuite) TestFunctionsOfTypeSpecList(c *C) {
	mySpecs := gauge.NewSpecCollection(createSpecsList(4), false)
	c.Assert(mySpecs.Next()[0].FileName, Equals, "spec0")
	c.Assert(mySpecs.Next()[0].FileName, Equals, "spec1")
	c.Assert(mySpecs.HasNext(), Equals, true)
	c.Assert(mySpecs.Size(), Equals, 4)
	c.Assert(mySpecs.Next()[0].FileName, Equals, "spec2")
	c.Assert(mySpecs.Next()[0].FileName, Equals, "spec3")
	c.Assert(mySpecs.HasNext(), Equals, false)
}

func createSpecsList(number int) []*gauge.Specification {
	var specs []*gauge.Specification
	for i := 0; i < number; i++ {
		specs = append(specs, &gauge.Specification{FileName: fmt.Sprint("spec", i)})
	}
	return specs
}

func (s *MySuite) TestValidateFlagsIfNotParallel(c *C) {
	InParallel = false
	err := validateFlags()
	c.Assert(err, Equals, nil)
}

func (s *MySuite) TestValidateFlagsWithStartegyEager(c *C) {
	InParallel = true
	Strategy = "eager"
	NumberOfExecutionStreams = 1
	err := validateFlags()
	c.Assert(err, Equals, nil)
}

func (s *MySuite) TestValidateFlagsWithStartegyLazy(c *C) {
	InParallel = true
	Strategy = "lazy"
	NumberOfExecutionStreams = 1
	err := validateFlags()
	c.Assert(err, Equals, nil)
}

func (s *MySuite) TestValidateFlagsWithInvalidStrategy(c *C) {
	InParallel = true
	Strategy = "sdf"
	NumberOfExecutionStreams = 1
	err := validateFlags()
	c.Assert(err.Error(), Equals, "invalid input(sdf) to --strategy flag")
}

func (s *MySuite) TestValidateFlagsWithInvalidStream(c *C) {
	InParallel = true
	NumberOfExecutionStreams = -1
	err := validateFlags()
	c.Assert(err.Error(), Equals, "invalid input(-1) to --n flag")
}