Neale Pickett
·
2020-09-08
providercommand_test.go
1package main
2
3import (
4 "io/ioutil"
5 "os/exec"
6 "testing"
7)
8
9func TestProviderCommand(t *testing.T) {
10 pc := ProviderCommand{
11 Path: "testdata/testpiler.sh",
12 }
13
14 inv := pc.Inventory()
15 if len(inv) != 2 {
16 t.Errorf("Wrong length for inventory")
17 }
18 for _, cat := range inv {
19 switch cat.Name {
20 case "pategory":
21 if len(cat.Puzzles) != 8 {
22 t.Errorf("pategory wrong number of puzzles: %d", len(cat.Puzzles))
23 }
24 if cat.Puzzles[5] != 10 {
25 t.Errorf("pategory puzzles[5] wrong value: %d", cat.Puzzles[5])
26 }
27 case "nealegory":
28 if len(cat.Puzzles) != 3 {
29 t.Errorf("nealegoy wrong number of puzzles: %d", len(cat.Puzzles))
30 }
31 if cat.Puzzles[2] != 3 {
32 t.Errorf("out of order point values were not sorted")
33 }
34 }
35 }
36
37 if ok, err := pc.CheckAnswer("pategory", 1, "answer"); !ok {
38 t.Errorf("Correct answer for pategory: %v", err)
39 }
40 if ok, _ := pc.CheckAnswer("pategory", 1, "wrong"); ok {
41 t.Errorf("Wrong answer for pategory judged correct")
42 }
43
44 if _, err := pc.CheckAnswer("pategory", 2, "answer"); err == nil {
45 t.Errorf("Internal error not returned")
46 } else if ee, ok := err.(*exec.ExitError); ok {
47 if string(ee.Stderr) != "Internal error\n" {
48 t.Errorf("Unexpected error returned: %#v", string(ee.Stderr))
49 }
50 } else if err.Error() != "moo" {
51 t.Error(err)
52 }
53
54 if f, _, err := pc.Open("pategory", 1, "moo.txt"); err != nil {
55 t.Error(err)
56 } else if buf, err := ioutil.ReadAll(f); err != nil {
57 f.Close()
58 t.Error(err)
59 } else if string(buf) != "Moo.\n" {
60 f.Close()
61 t.Errorf("Wrong contents: %#v", string(buf))
62 } else {
63 f.Close()
64 }
65
66 if f, _, err := pc.Open("pategory", 1, "not.there"); err == nil {
67 f.Close()
68 t.Errorf("Non-existent file didn't return error: %#v", f)
69 }
70}