if a test is a modifier, ensure it includes valid sources

This commit is contained in:
Aaron Meihm 2015-07-13 22:10:49 -05:00
Родитель a76b89868f
Коммит 71fc5a07e9
5 изменённых файлов: 29 добавлений и 0 удалений

Просмотреть файл

@ -55,6 +55,10 @@ func (f *FileContent) validate() error {
return nil
}
func (f *FileContent) isModifier() bool {
return false
}
func (f *FileContent) expandVariables(v []Variable) {
f.Path = variableExpansion(v, f.Path)
f.File = variableExpansion(v, f.File)

Просмотреть файл

@ -23,6 +23,10 @@ type nameMatch struct {
match string
}
func (f *FileName) isModifier() bool {
return false
}
func (f *FileName) validate() error {
if len(f.Path) == 0 {
return fmt.Errorf("filename path must be set")

Просмотреть файл

@ -81,6 +81,10 @@ func (c *ConcatModifier) prepare() error {
return nil
}
func (c *ConcatModifier) isModifier() bool {
return true
}
func (c *ConcatModifier) validate() error {
if len(c.Operator) == 0 {
return fmt.Errorf("must specify concat operator")

Просмотреть файл

@ -20,6 +20,10 @@ type PackageInfo struct {
Version string
}
func (p *Package) isModifier() bool {
return false
}
func (p *Package) validate() error {
if len(p.Name) == 0 {
return fmt.Errorf("package must specify name")

Просмотреть файл

@ -64,6 +64,7 @@ type genericSource interface {
getCriteria() []EvaluationCriteria
expandVariables([]Variable)
validate() error
isModifier() bool
}
type genericEvaluator interface {
@ -85,6 +86,18 @@ func (t *Test) validate(d *Document) error {
if err != nil {
return fmt.Errorf("%v: %v", t.Name, err)
}
// If this is a modifier, ensure the modifier sources are valid.
if si.isModifier() {
for _, x := range t.Modifier.Sources {
_, err := d.getTest(x.Name)
if err != nil {
return fmt.Errorf("%v: %v", t.Name, err)
}
if x.Select != "all" {
return fmt.Errorf("%v: modifier source must include selector", t.Name)
}
}
}
if t.getEvaluationInterface() == nil {
return fmt.Errorf("%v: no valid evaluation interface", t.Name)
}