Add tests for errors (fixes #5)
diff --git a/parser.go b/parser.go index fc6a6ff..d18c8a8 100644 --- a/parser.go +++ b/parser.go
@@ -106,7 +106,7 @@ func parseRvalue(p *parser) interface{} { tok := p.getToken() - if tok == nil { + if tok == nil || tok.typ == tokenEOF { panic("expecting a value") } @@ -148,7 +148,7 @@ array := make([]interface{}, 0) for { follow := p.peek() - if follow == nil { + if follow == nil || follow.typ == tokenEOF { panic("unterminated array") } if follow.typ == tokenRightBracket {
diff --git a/parser_test.go b/parser_test.go index 1531a1f..fa05dd6 100644 --- a/parser_test.go +++ b/parser_test.go
@@ -101,3 +101,17 @@ "a": [][]int64{[]int64{int64(42), int64(21)}, []int64{int64(10)}}, }) } + +func TestMissingValue(t *testing.T) { + _, err := Load("a = ") + if (err.Error() != "expecting a value") { + t.Error("Bad error message:", err.Error()); + } +} + +func TestUnterminatedArray(t *testing.T) { + _, err := Load("a = [1,") + if (err.Error() != "unterminated array") { + t.Error("Bad error message:", err.Error()); + } +} \ No newline at end of file
diff --git a/toml.go b/toml.go index f27548a..8e5d1a2 100644 --- a/toml.go +++ b/toml.go
@@ -5,6 +5,7 @@ package toml import ( + "errors" "runtime" "strings" ) @@ -81,7 +82,7 @@ if _, ok := r.(runtime.Error); ok { panic(r) } - err = r.(error) + err = errors.New(r.(string)) } }() _, flow := lex(content)