summaryrefslogtreecommitdiff
path: root/custom_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'custom_test.go')
-rw-r--r--custom_test.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/custom_test.go b/custom_test.go
new file mode 100644
index 0000000..a8bdfe6
--- /dev/null
+++ b/custom_test.go
@@ -0,0 +1,68 @@
+package caesar
+
+import (
+ "bytes"
+ "flag"
+ "io"
+ "io/ioutil"
+ "os"
+ "testing"
+)
+
+var (
+ runCustom bool
+ customCases string
+)
+
+func TestMain(m *testing.M) {
+ flag.BoolVar(&runCustom, "custom", false, "run custom tests")
+ flag.StringVar(&customCases, "custom.cases", "", "input file for custom test cases")
+ flag.Parse()
+ os.Exit(m.Run())
+}
+
+func TestCustom(t *testing.T) {
+ if !runCustom {
+ t.Skip("skipping custom testing")
+ }
+ f, err := os.Open(customCases)
+ if err != nil {
+ t.Fatalf("could not open custom test input: %v", err)
+ }
+ defer f.Close()
+ data, err := ioutil.ReadAll(f)
+ if err != nil {
+ t.Fatalf("could not read custom test input: %v", err)
+ }
+ buf := bytes.NewBuffer(data)
+ for {
+ // read input
+ inp, err := buf.ReadBytes('\t')
+ if err == io.EOF {
+ return
+ } else if err != nil {
+ t.Fatalf("read error: %v", err)
+ }
+
+ // read expected output
+ exp, err := buf.ReadBytes('\n')
+ if err == io.EOF {
+ t.Fatalf("found input with no matching output")
+ } else if err != nil {
+ t.Fatalf("read error: %v", err)
+ }
+
+ if len(inp) < 2 || len(exp) < 2 {
+ t.Fatalf("malformed input")
+ }
+
+ result := Encode(string(inp[:len(inp)-2]))
+ if result != string(exp[:len(exp)-2]) {
+ t.Logf("input: %s", inp)
+ t.Logf("output: %s", result)
+ t.Logf("expected: %s", exp)
+ t.Fail()
+ }
+ }
+ Encode(string(data))
+}