summaryrefslogtreecommitdiff
path: root/cmd/planr/sub
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/planr/sub')
-rw-r--r--cmd/planr/sub/evaluate.go52
1 files changed, 44 insertions, 8 deletions
diff --git a/cmd/planr/sub/evaluate.go b/cmd/planr/sub/evaluate.go
index 81c9989..95f88d0 100644
--- a/cmd/planr/sub/evaluate.go
+++ b/cmd/planr/sub/evaluate.go
@@ -1,21 +1,57 @@
package sub
import (
- "golang.flu0r1ne.net/planr"
+ "encoding/json"
+ "fmt"
+ "log"
+ "flag"
+
+ "golang.flu0r1ne.net/planr"
)
+type gradingResults struct {
+ TestResults []planr.TestResult
+ Score planr.Scoring
+}
+
+func prettyPrint(results gradingResults) {
+ for _, tr := range results.TestResults {
+ tcPprint(tr)
+ }
+
+ printScoring(results.Score)
+}
+
+func jsonPrint(results gradingResults) {
+ res, err := json.Marshal(results)
+
+ if err != nil {
+ log.Fatalf("Error printing JSON: %v\n", err)
+ }
+
+ fmt.Println(string(res))
+}
func Evaluate(runner planr.Runner, params []string, cfg planr.Config) {
+ f := flag.NewFlagSet("evaluate", flag.ExitOnError)
+
+ jsonOutput := f.Bool("json", false, "print json output")
+
+ f.Parse(params)
+
dieIncompatibleVersion(cfg)
tcs := runner.CollectCases()
trs := runner.Evaluate(tcs)
-
- score := planr.Score(trs)
-
- for _, tr := range trs {
- tcPprint(tr)
+
+ results := gradingResults {
+ TestResults: trs,
+ Score: planr.Score(trs),
+ }
+
+ if *jsonOutput {
+ jsonPrint(results)
+ } else {
+ prettyPrint(results)
}
-
- printScoring(score)
}