diff options
-rw-r--r-- | cmd/planr/main.go | 1 | ||||
-rw-r--r-- | cmd/planr/sub/evaluate.go | 52 |
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) } |