-
Notifications
You must be signed in to change notification settings - Fork 4
/
task.go
36 lines (32 loc) · 1.18 KB
/
task.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package godge
import "fmt"
// Test defines on of the tests of a certain task.
type Test struct {
// The name of the test, which will be returned to the user when the test
// fails.
Name string
// The actuall test. It takes a submission as an input (along with its excutor)
// and should return a descriptive error when the submission don't pass the test.
Func func(*Submission) error
}
// Task defines a group of related tests. The user needs to pass all the tests to pass
// the task and get its point on the scoreboard.
type Task struct {
// The name of the task that the user will use to submit their submission.
Name string `json:"name"`
// A description of what's required in order to pass the task.
Desc string `json:"desc"`
// A group of tests that a submission needs to pass in order to pass the task.
Tests []Test `json:"-"`
}
// Execute runs the submission against all the tests. The error returned is the error
// retured by all the tests.
func (t *Task) execute(s *Submission) error {
var errs Errors
for _, test := range t.Tests {
if err := test.Func(s); err != nil {
errs = append(errs, fmt.Errorf("test '%v' failed: %v", test.Name, err))
}
}
return errs.ErrorOrNil()
}