зеркало из 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"`
|
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче