go-toml/helpers_test.go

57 lines
1.5 KiB
Go

package toml
import (
"fmt"
"testing"
"git.makaay.nl/mauricem/go-parsekit/parse"
)
func testAST(t *testing.T, code func() (error, *parser), expectedError string, expectedData string) {
err, p := code()
if expectedError == "" {
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
} else {
if err == nil {
t.Fatalf("An error was expected, but no error was returned")
} else if err.Error() != expectedError {
t.Fatalf("Unexpected error:\nexpected: %s\nactual: %s\n", expectedError, err.Error())
}
}
if expectedData == "" {
return
}
if expectedData != p.Root.String() {
t.Fatalf("Unexpected data after parsing:\nexpected: %s\nactual: %s\n", expectedData, p.Root.String())
}
}
type parseTest struct {
input interface{}
expected string
expectedError string
}
func testParse(t *testing.T, p *parser, handler parse.Handler, test parseTest) {
var err error
defer func() {
recovered := recover()
if recovered != nil {
err = fmt.Errorf("Panic: %s", recovered.(string))
}
if err != nil && test.expectedError == "" {
t.Errorf("Unexpected error for input %q: %s", test.input, err)
} else if err != nil && test.expectedError != err.Error() {
t.Errorf("Unexpected error for input %q:\nexpected: %s\nactual: %s\n", test.input, test.expectedError, err.Error())
} else {
result := p.Root.String()
if test.expected != result {
t.Errorf("Unexpected result for input %q:\nexpected: %s\nactual: %s\n", test.input, test.expected, result)
}
}
}()
err = parse.New(handler)(test.input)
}