add validation phase for tests

This commit is contained in:
Aaron Meihm 2015-07-13 21:36:54 -05:00
Родитель aacdf01b6a
Коммит db0846a475
3 изменённых файлов: 43 добавлений и 0 удалений

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

@ -17,6 +17,16 @@ type Document struct {
Tests []Test `json:"tests"` Tests []Test `json:"tests"`
} }
func (d *Document) Validate() error {
for _, x := range d.Tests {
err := x.validate(d)
if err != nil {
return err
}
}
return nil
}
func (d *Document) runTests() error { func (d *Document) runTests() error {
// Note that prepare() and runTest() will return an error if something // Note that prepare() and runTest() will return an error if something
// goes wrong, but we don't propagate this back. Errors within a test // goes wrong, but we don't propagate this back. Errors within a test

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

@ -28,6 +28,12 @@ func LoadDocument(r io.Reader) (Document, error) {
debugPrint("new document has %v test(s)\n", len(ret.Tests)) debugPrint("new document has %v test(s)\n", len(ret.Tests))
debugPrint("new document has %v variable(s)\n", len(ret.Variables)) debugPrint("new document has %v variable(s)\n", len(ret.Variables))
debugPrint("validating document...\n")
err = ret.Validate()
if err != nil {
return ret, err
}
return ret, nil return ret, nil
} }

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

@ -69,6 +69,33 @@ type genericEvaluator interface {
evaluate(EvaluationCriteria) (EvaluationResult, error) evaluate(EvaluationCriteria) (EvaluationResult, error)
} }
func (t *Test) validate(d *Document) error {
if len(t.Name) == 0 {
return fmt.Errorf("a test in document has no name")
}
if len(t.Identifier) == 0 {
return fmt.Errorf("%v: no identifier", t.Name)
}
if t.getSourceInterface() == nil {
return fmt.Errorf("%v: no valid source interface", t.Name)
}
if t.getEvaluationInterface() == nil {
return fmt.Errorf("%v: no valid evaluation interface", t.Name)
}
for _, x := range t.Aliases {
if len(x) == 0 {
return fmt.Errorf("%v: bad alias within test", t.Name)
}
}
for _, x := range t.If {
_, err := d.getTest(x)
if err != nil {
return fmt.Errorf("%v: %v", t.Name, err)
}
}
return nil
}
func (t *Test) GetResults() ([]EvaluationResult, error) { func (t *Test) GetResults() ([]EvaluationResult, error) {
if t.Err != nil { if t.Err != nil {
return nil, t.Err return nil, t.Err