Implement escapable characters in strings

This commit is contained in:
Thomas Pelletier
2013-03-26 11:45:36 +01:00
parent 8c48e59100
commit 329092b812
2 changed files with 36 additions and 3 deletions
+12
View File
@@ -311,6 +311,18 @@ func lexString(l *lexer) stateFn {
if l.follow("\\\"") { if l.follow("\\\"") {
l.pos += 1 l.pos += 1
growing_string += "\"" growing_string += "\""
} else if l.follow("\\n") {
l.pos += 1
growing_string += "\n"
} else if l.follow("\\t") {
l.pos += 1
growing_string += "\t"
} else if l.follow("\\r") {
l.pos += 1
growing_string += "\r"
} else if l.follow("\\\\") {
l.pos += 1
growing_string += "\\"
} else { } else {
growing_string += string(l.peek()) growing_string += string(l.peek())
} }
+24 -3
View File
@@ -65,6 +65,28 @@ func TestSimpleString(t *testing.T) {
}) })
} }
func TestStringEscapables(t *testing.T) {
tree, err := Load("a = \"a \\n b\"")
assertTree(t, tree, err, map[string]interface{}{
"a": "a \n b",
})
tree, err = Load("a = \"a \\t b\"")
assertTree(t, tree, err, map[string]interface{}{
"a": "a \t b",
})
tree, err = Load("a = \"a \\r b\"")
assertTree(t, tree, err, map[string]interface{}{
"a": "a \r b",
})
tree, err = Load("a = \"a \\\\ b\"")
assertTree(t, tree, err, map[string]interface{}{
"a": "a \\ b",
})
}
func TestBools(t *testing.T) { func TestBools(t *testing.T) {
tree, err := Load("a = true\nb = false") tree, err := Load("a = true\nb = false")
assertTree(t, tree, err, map[string]interface{}{ assertTree(t, tree, err, map[string]interface{}{
@@ -95,12 +117,11 @@ func TestArrayZero(t *testing.T) {
} }
func TestArraySimple(t *testing.T) { func TestArraySimple(t *testing.T) {
fmt.Println("test")
tree, err := Load("a = [42, 21, 10]") tree, err := Load("a = [42, 21, 10]")
assertTree(t, tree, err, map[string]interface{}{ assertTree(t, tree, err, map[string]interface{}{
"a": []int64{int64(42), int64(21), int64(10)}, "a": []int64{int64(42), int64(21), int64(10)},
}) })
fmt.Println("blah")
tree, _ = Load("a = [42, 21, 10,]") tree, _ = Load("a = [42, 21, 10,]")
assertTree(t, tree, err, map[string]interface{}{ assertTree(t, tree, err, map[string]interface{}{
"a": []int64{int64(42), int64(21), int64(10)}, "a": []int64{int64(42), int64(21), int64(10)},
@@ -156,7 +177,7 @@ func TestParseFile(t *testing.T) {
"title": "TOML Example", "title": "TOML Example",
"owner.name": "Tom Preston-Werner", "owner.name": "Tom Preston-Werner",
"owner.organization": "GitHub", "owner.organization": "GitHub",
"owner.bio": "GitHub Cofounder & CEO\nLikes tater tots and bee.", "owner.bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.",
"owner.dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), "owner.dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC),
"database.server": "192.168.1.1", "database.server": "192.168.1.1",
"database.ports": []int64{8001, 8001, 8002}, "database.ports": []int64{8001, 8001, 8002},