moth

Monarch Of The Hill game server
git clone https://git.woozle.org/neale/moth.git

moth / pkg / transpile
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}