summaryrefslogtreecommitdiff
path: root/cmd/planr
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/planr')
-rw-r--r--cmd/planr/main.go1
-rw-r--r--cmd/planr/sub/evaluate.go52
2 files changed, 45 insertions, 8 deletions
diff --git a/cmd/planr/main.go b/cmd/planr/main.go
index d250bbd..b073115 100644
--- a/cmd/planr/main.go
+++ b/cmd/planr/main.go
@@ -19,6 +19,7 @@ func printUsage(w io.Writer) {
fmt.Fprintln(w, " version ")
fmt.Fprintln(w, " build ")
fmt.Fprintln(w, " evaluate ")
+ fmt.Fprintln(w, " evaluate -json ")
fmt.Fprintln(w, " clean ")
fmt.Fprintln(w, " config ")
}
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)
}