mirror of https://github.com/dirtbags/moth.git
More transpiler testing
This commit is contained in:
parent
0418877db0
commit
7c22520b70
|
@ -29,13 +29,13 @@ RFC822 body
|
||||||
|
|
||||||
func newTestFs() afero.Fs {
|
func newTestFs() afero.Fs {
|
||||||
fs := afero.NewMemMapFs()
|
fs := afero.NewMemMapFs()
|
||||||
afero.WriteFile(fs, "cat0/1/puzzle.moth", testMothYaml, 0644)
|
afero.WriteFile(fs, "cat0/1/puzzle.md", testMothYaml, 0644)
|
||||||
afero.WriteFile(fs, "cat0/1/moo.txt", []byte("Moo."), 0644)
|
afero.WriteFile(fs, "cat0/1/moo.txt", []byte("Moo."), 0644)
|
||||||
afero.WriteFile(fs, "cat0/2/puzzle.moth", testMothRfc822, 0644)
|
afero.WriteFile(fs, "cat0/2/puzzle.md", testMothRfc822, 0644)
|
||||||
afero.WriteFile(fs, "cat0/3/puzzle.moth", testMothYaml, 0644)
|
afero.WriteFile(fs, "cat0/3/puzzle.moth", testMothYaml, 0644)
|
||||||
afero.WriteFile(fs, "cat0/4/puzzle.moth", testMothYaml, 0644)
|
afero.WriteFile(fs, "cat0/4/puzzle.md", testMothYaml, 0644)
|
||||||
afero.WriteFile(fs, "cat0/5/puzzle.moth", testMothYaml, 0644)
|
afero.WriteFile(fs, "cat0/5/puzzle.md", testMothYaml, 0644)
|
||||||
afero.WriteFile(fs, "cat0/10/puzzle.moth", []byte(`---
|
afero.WriteFile(fs, "cat0/10/puzzle.md", []byte(`---
|
||||||
Answers:
|
Answers:
|
||||||
- moo
|
- moo
|
||||||
Authors:
|
Authors:
|
||||||
|
@ -43,8 +43,10 @@ Authors:
|
||||||
---
|
---
|
||||||
body
|
body
|
||||||
`), 0644)
|
`), 0644)
|
||||||
afero.WriteFile(fs, "cat0/20/puzzle.moth", []byte("Answer: no\nBadField: yes\n\nbody\n"), 0644)
|
afero.WriteFile(fs, "cat0/20/puzzle.md", []byte("Answer: no\nBadField: yes\n\nbody\n"), 0644)
|
||||||
afero.WriteFile(fs, "cat1/93/puzzle.moth", []byte("Answer: no\n\nbody"), 0644)
|
afero.WriteFile(fs, "cat0/21/puzzle.md", []byte("Answer: broken\nSpooon\n"), 0644)
|
||||||
|
afero.WriteFile(fs, "cat0/22/puzzle.md", []byte("---\nanswers:\n - pencil\npre:\n body: Spooon\n---\nSpoon?\n"), 0644)
|
||||||
|
afero.WriteFile(fs, "cat1/93/puzzle.md", []byte("Answer: no\n\nbody"), 0644)
|
||||||
return fs
|
return fs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +60,7 @@ func TestThings(t *testing.T) {
|
||||||
if err := tp.Handle("inventory"); err != nil {
|
if err := tp.Handle("inventory"); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
if stdout.String() != "cat0 1 2 3 4 5 10 20\ncat1 93\n" {
|
if stdout.String() != "cat0 1 2 3 4 5 10 20 21 22\ncat1 93\n" {
|
||||||
t.Errorf("Bad inventory: %#v", stdout.String())
|
t.Errorf("Bad inventory: %#v", stdout.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,9 +127,12 @@ func (p *Puzzle) rfc822HeaderParser(r io.Reader) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Puzzle) parseMoth() error {
|
func (p *Puzzle) parseMoth() error {
|
||||||
r, err := p.fs.Open("puzzle.moth")
|
r, err := p.fs.Open("puzzle.md")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
var err2 error
|
||||||
|
if r, err2 = p.fs.Open("puzzle.moth"); err2 != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defer r.Close()
|
defer r.Close()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
|
@ -10,36 +11,71 @@ func TestPuzzle(t *testing.T) {
|
||||||
puzzleFs := newTestFs()
|
puzzleFs := newTestFs()
|
||||||
catFs := afero.NewBasePathFs(puzzleFs, "cat0")
|
catFs := afero.NewBasePathFs(puzzleFs, "cat0")
|
||||||
|
|
||||||
p1, err := NewPuzzle(catFs, 1)
|
{
|
||||||
if err != nil {
|
p, err := NewPuzzle(catFs, 1)
|
||||||
t.Error(err)
|
if err != nil {
|
||||||
}
|
t.Error(err)
|
||||||
t.Log(p1)
|
}
|
||||||
if (len(p1.Answers) == 0) || (p1.Answers[0] != "YAML answer") {
|
t.Log(p)
|
||||||
t.Error("Answers are wrong", p1.Answers)
|
if (len(p.Answers) == 0) || (p.Answers[0] != "YAML answer") {
|
||||||
}
|
t.Error("Answers are wrong", p.Answers)
|
||||||
if (len(p1.Pre.Authors) != 3) || (p1.Pre.Authors[1] != "Buster") {
|
}
|
||||||
t.Error("Authors are wrong", p1.Pre.Authors)
|
if (len(p.Pre.Authors) != 3) || (p.Pre.Authors[1] != "Buster") {
|
||||||
}
|
t.Error("Authors are wrong", p.Pre.Authors)
|
||||||
if p1.Pre.Body != "<p>YAML body</p>\n" {
|
}
|
||||||
t.Errorf("Body parsed wrong: %#v", p1.Pre.Body)
|
if p.Pre.Body != "<p>YAML body</p>\n" {
|
||||||
|
t.Errorf("Body parsed wrong: %#v", p.Pre.Body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p2, err := NewPuzzle(catFs, 2)
|
{
|
||||||
if err != nil {
|
p, err := NewPuzzle(catFs, 2)
|
||||||
t.Error(err)
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
if (len(p.Answers) == 0) || (p.Answers[0] != "RFC822 answer") {
|
||||||
|
t.Error("Answers are wrong", p.Answers)
|
||||||
|
}
|
||||||
|
if (len(p.Pre.Authors) != 3) || (p.Pre.Authors[1] != "Arthur") {
|
||||||
|
t.Error("Authors are wrong", p.Pre.Authors)
|
||||||
|
}
|
||||||
|
if p.Pre.Body != "<p>RFC822 body</p>\n" {
|
||||||
|
t.Errorf("Body parsed wrong: %#v", p.Pre.Body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (len(p2.Answers) == 0) || (p2.Answers[0] != "RFC822 answer") {
|
|
||||||
t.Error("Answers are wrong", p2.Answers)
|
if _, err := NewPuzzle(catFs, 3); err != nil {
|
||||||
|
t.Error("Legacy `puzzle.moth` file:", err)
|
||||||
}
|
}
|
||||||
if (len(p2.Pre.Authors) != 3) || (p2.Pre.Authors[1] != "Arthur") {
|
|
||||||
t.Error("Authors are wrong", p2.Pre.Authors)
|
if _, err := NewPuzzle(catFs, 99); err == nil {
|
||||||
}
|
t.Error("Non-existent puzzle", err)
|
||||||
if p2.Pre.Body != "<p>RFC822 body</p>\n" {
|
|
||||||
t.Errorf("Body parsed wrong: %#v", p2.Pre.Body)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := NewPuzzle(catFs, 10); err == nil {
|
if _, err := NewPuzzle(catFs, 10); err == nil {
|
||||||
t.Error("Broken YAML didn't trigger an error")
|
t.Error("Broken YAML")
|
||||||
|
}
|
||||||
|
if _, err := NewPuzzle(catFs, 20); err == nil {
|
||||||
|
t.Error("Bad RFC822 header")
|
||||||
|
}
|
||||||
|
if _, err := NewPuzzle(catFs, 21); err == nil {
|
||||||
|
t.Error("Boken RFC822 header")
|
||||||
|
}
|
||||||
|
if _, err := NewPuzzle(catFs, 22); err == nil {
|
||||||
|
t.Error("Duplicate bodies")
|
||||||
|
} else if !strings.HasPrefix(err.Error(), "Puzzle body present") {
|
||||||
|
t.Error("Wrong error for duplicate body:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFsPuzzle(t *testing.T) {
|
||||||
|
catFs := afero.NewBasePathFs(afero.NewOsFs(), "testdata")
|
||||||
|
|
||||||
|
if _, err := NewPuzzle(catFs, 1); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := NewPuzzle(catFs, 2); err != nil {
|
||||||
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
Author: neale
|
|
||||||
Answer: moo
|
|
||||||
|
|
||||||
A MOTH file
|
|
||||||
===========
|
|
||||||
|
|
||||||
This is a moth file, woo wo!
|
|
||||||
|
|
||||||
# A MOTH file
|
|
||||||
|
|
||||||
* moo
|
|
||||||
* moo
|
|
||||||
* moo
|
|
||||||
* squeak
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
console.log("Moo.")
|
|
@ -0,0 +1 @@
|
||||||
|
Moo.
|
|
@ -0,0 +1,25 @@
|
||||||
|
Summary: A legacy RFC822-formatted puzzle
|
||||||
|
Author: neale
|
||||||
|
Answer: moo 0
|
||||||
|
Answer: moo 1
|
||||||
|
Answer: moo 2
|
||||||
|
Pattern: moo *
|
||||||
|
Hint: Use the source, Luke.
|
||||||
|
KSA: none
|
||||||
|
File: moo.txt
|
||||||
|
File: moo.txt moo-two.txt
|
||||||
|
File: moo.txt moo-too.txt hidden
|
||||||
|
Script: moo.js moo.js
|
||||||
|
|
||||||
|
A MOTH file
|
||||||
|
===========
|
||||||
|
|
||||||
|
This is a moth file, woo wo!
|
||||||
|
|
||||||
|
# A MOTH file
|
||||||
|
|
||||||
|
* moo
|
||||||
|
* moo
|
||||||
|
* moo
|
||||||
|
* squeak
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
"")
|
||||||
|
cat <<'EOT'
|
||||||
|
{
|
||||||
|
"Answers": ["answer"],
|
||||||
|
"Pre": {
|
||||||
|
"Authors": "neale",
|
||||||
|
"Body": "I am a generated puzzle."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOT
|
||||||
|
;;
|
||||||
|
moo.txt)
|
||||||
|
echo "Moo."
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: no such file: $1" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
Loading…
Reference in New Issue