moth

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

moth / cmd / mothd
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}