From da703daafe7176ed8d94236e52416a62d3b4e4e2 Mon Sep 17 00:00:00 2001 From: Thomas Pelletier Date: Wed, 19 Aug 2015 10:24:53 -0700 Subject: [PATCH 1/3] Add go 1.5 to tested versions --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 83e84ad..eeaf72b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,10 @@ language: go script: "./test.sh" sudo: false go: - - 1.1 - 1.2 - 1.3 - 1.4.1 + - 1.5 - tip before_install: - go get github.com/axw/gocov/gocov From 5753e884d06b4a3df84852d2b85779951eb1caf1 Mon Sep 17 00:00:00 2001 From: Thomas Pelletier Date: Wed, 9 Sep 2015 17:17:08 +0100 Subject: [PATCH 2/3] Fix floating points with underscores --- lexer_test.go | 7 +++++++ parser.go | 3 ++- parser_test.go | 12 +++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lexer_test.go b/lexer_test.go index 82946bf..d8abb35 100644 --- a/lexer_test.go +++ b/lexer_test.go @@ -464,6 +464,13 @@ func TestKeyEqualNumber(t *testing.T) { token{Position{1, 7}, tokenInteger, "1_2_3_4_5"}, token{Position{1, 16}, tokenEOF, ""}, }) + + testFlow(t, "flt8 = 9_224_617.445_991_228_313", []token{ + token{Position{1, 1}, tokenKey, "flt8"}, + token{Position{1, 6}, tokenEqual, "="}, + token{Position{1, 8}, tokenFloat, "9_224_617.445_991_228_313"}, + token{Position{1, 33}, tokenEOF, ""}, + }) } func TestMultiline(t *testing.T) { diff --git a/parser.go b/parser.go index 59f513b..7ba872b 100644 --- a/parser.go +++ b/parser.go @@ -231,7 +231,8 @@ func (p *tomlParser) parseRvalue() interface{} { } return val case tokenFloat: - val, err := strconv.ParseFloat(tok.val, 64) + cleanedVal := strings.Replace(tok.val, "_", "", -1) + val, err := strconv.ParseFloat(cleanedVal, 64) if err != nil { p.raiseError(tok, "%s", err) } diff --git a/parser_test.go b/parser_test.go index ebf1626..94308a4 100644 --- a/parser_test.go +++ b/parser_test.go @@ -68,7 +68,7 @@ func TestSimpleNumbers(t *testing.T) { }) } -func TestIntegersWithUnderscores(t *testing.T) { +func TestNumbersWithUnderscores(t *testing.T) { tree, err := Load("a = 1_000") assertTree(t, tree, err, map[string]interface{}{ "a": int64(1000), @@ -83,6 +83,16 @@ func TestIntegersWithUnderscores(t *testing.T) { assertTree(t, tree, err, map[string]interface{}{ "a": int64(12345), }) + + tree, err = Load("flt8 = 9_224_617.445_991_228_313") + assertTree(t, tree, err, map[string]interface{}{ + "flt8": float64(9224617.445991228313), + }) + + tree, err = Load("flt9 = 1e1_00") + assertTree(t, tree, err, map[string]interface{}{ + "flt9": float64(1e100), + }) } func TestFloatsWithExponents(t *testing.T) { From 6b9002d8f97b9e2f31bee949a8fb561094e5316c Mon Sep 17 00:00:00 2001 From: Thomas Pelletier Date: Wed, 9 Sep 2015 17:33:28 +0100 Subject: [PATCH 3/3] Harden tests for bad arrays --- parser.go | 4 ++-- parser_test.go | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/parser.go b/parser.go index 7ba872b..bd33e0d 100644 --- a/parser.go +++ b/parser.go @@ -264,7 +264,7 @@ func (p *tomlParser) parseArray() []interface{} { } if follow.typ == tokenRightBracket { p.getToken() - return array + break } val := p.parseRvalue() if arrayType == nil { @@ -275,7 +275,7 @@ func (p *tomlParser) parseArray() []interface{} { } array = append(array, val) follow = p.peek() - if follow == nil { + if follow == nil || follow.typ == tokenEOF { p.raiseError(follow, "unterminated array") } if follow.typ != tokenRightBracket && follow.typ != tokenComma { diff --git a/parser_test.go b/parser_test.go index 94308a4..9b827b1 100644 --- a/parser_test.go +++ b/parser_test.go @@ -297,6 +297,16 @@ func TestUnterminatedArray(t *testing.T) { if err.Error() != "(1, 8): unterminated array" { t.Error("Bad error message:", err.Error()) } + + _, err = Load("a = [1") + if err.Error() != "(1, 7): unterminated array" { + t.Error("Bad error message:", err.Error()) + } + + _, err = Load("a = [1 2") + if err.Error() != "(1, 8): missing comma" { + t.Error("Bad error message:", err.Error()) + } } func TestNewlinesInArrays(t *testing.T) {