Neale Pickett
·
2021-02-24
category_test.go
1package transpile
2
3import (
4 "bytes"
5 "io"
6 "os/exec"
7 "strings"
8 "testing"
9
10 "github.com/spf13/afero"
11)
12
13func TestFsCategory(t *testing.T) {
14 c := NewFsCategory(newTestFs(), "cat0")
15
16 if inv, err := c.Inventory(); err != nil {
17 t.Error(err)
18 } else if len(inv) != 9 {
19 t.Error("Inventory wrong length", inv)
20 }
21
22 if p, err := c.Puzzle(1); err != nil {
23 t.Error(err)
24 } else if len(p.Answers) != 1 {
25 t.Error("Wrong length for answers", p.Answers)
26 } else if p.Answers[0] != "YAML answer" {
27 t.Error("Wrong answer list", p.Answers)
28 } else if !c.Answer(1, p.Answers[0]) {
29 t.Error("Correct answer not accepted")
30 }
31
32 if c.Answer(1, "incorrect answer") {
33 t.Error("Incorrect answer accepted as correct")
34 }
35
36 if r, err := c.Open(1, "moo.txt"); err != nil {
37 t.Log(c.Puzzle(1))
38 t.Error(err)
39 } else {
40 defer r.Close()
41 buf := new(bytes.Buffer)
42 if _, err := io.Copy(buf, r); err != nil {
43 t.Error(err)
44 }
45 if buf.String() != "Moo." {
46 t.Error("Opened file contents wrong")
47 }
48 }
49
50 if r, err := c.Open(1, "error"); err == nil {
51 r.Close()
52 t.Error("File wasn't supposed to exist")
53 }
54}
55
56func TestOsFsCategory(t *testing.T) {
57 fs := NewRecursiveBasePathFs(afero.NewOsFs(), "testdata")
58 static := NewFsCategory(fs, "static")
59
60 if p, err := static.Puzzle(1); err != nil {
61 t.Error(err)
62 } else if len(p.Authors) != 1 {
63 t.Error("Wrong authors list", p.Authors)
64 } else if p.Authors[0] != "neale" {
65 t.Error("Wrong authors", p.Authors)
66 }
67
68 if p, err := static.Puzzle(3); err != nil {
69 t.Error(err)
70 } else if len(p.Authors) != 1 {
71 t.Error("Wrong authors", p.Authors)
72 }
73
74 generated := NewFsCategory(fs, "generated")
75
76 if inv, err := generated.Inventory(); err != nil {
77 t.Error(err)
78 } else if len(inv) != 5 {
79 t.Error("Wrong inventory", inv)
80 }
81
82 if p, err := generated.Puzzle(1); err != nil {
83 t.Error(err)
84 } else if len(p.Answers) != 1 {
85 t.Error("Wrong answers", p.Answers)
86 } else if p.Answers[0] != "answer1.0" {
87 t.Error("Wrong answers:", p.Answers)
88 }
89 if _, err := generated.Puzzle(20); err == nil {
90 t.Error("Puzzle shouldn't exist")
91 }
92
93 if r, err := generated.Open(1, "moo.txt"); err != nil {
94 t.Error(err)
95 } else {
96 defer r.Close()
97 buf := new(bytes.Buffer)
98 if _, err := io.Copy(buf, r); err != nil {
99 t.Error(err)
100 }
101 if buf.String() != "Moo.\n" {
102 t.Errorf("Wrong body: %#v", buf.String())
103 }
104 }
105 if r, err := generated.Open(1, "fail"); err == nil {
106 r.Close()
107 t.Error("File shouldn't exist")
108 }
109
110 if r, err := generated.Open(1, "cow.txt"); err != nil {
111 if e, ok := err.(*exec.ExitError); ok {
112 t.Error(err, string(e.Stderr))
113 } else {
114 t.Error(err)
115 }
116 } else {
117 defer r.Close()
118 buf := new(bytes.Buffer)
119 if _, err := io.Copy(buf, r); err != nil {
120 t.Error(err)
121 }
122 if !strings.Contains(buf.String(), "moo.") {
123 t.Errorf("Wrong body: %#v", buf.String())
124 }
125 }
126
127 if !generated.Answer(1, "answer1.0") {
128 t.Error("Correct answer failed")
129 }
130 if generated.Answer(1, "wrong") {
131 t.Error("Incorrect answer didn't fail")
132 }
133 if generated.Answer(2, "error") {
134 t.Error("Error answer didn't fail")
135 }
136}