зеркало из https://github.com/mozilla/scribe.git
add validation phase for tests
This commit is contained in:
Родитель
aacdf01b6a
Коммит
db0846a475
|
@ -17,6 +17,16 @@ type Document struct {
|
|||
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 {
|
||||
// Note that prepare() and runTest() will return an error if something
|
||||
// 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 variable(s)\n", len(ret.Variables))
|
||||
|
||||
debugPrint("validating document...\n")
|
||||
err = ret.Validate()
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,33 @@ type genericEvaluator interface {
|
|||
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) {
|
||||
if t.Err != nil {
|
||||
return nil, t.Err
|
||||
|
|
Загрузка…
Ссылка в новой задаче