treerack/keyval_test.go
2017-06-25 23:42:42 +02:00

395 lines
5.9 KiB
Go

package parse
import "testing"
func TestKeyVal(t *testing.T) {
test(t, "keyval.parser", "doc", []testItem{{
msg: "empty",
}, {
msg: "a comment",
text: "# a comment",
}, {
msg: "a key",
text: "a key",
nodes: []*Node{{
Name: "key-val",
to: 5,
Nodes: []*Node{{
Name: "key",
to: 5,
Nodes: []*Node{{
Name: "symbol",
to: 5,
}},
}},
}},
}, {
msg: "a key with a preceeding whitespace",
text: " a key",
nodes: []*Node{{
Name: "key-val",
from: 1,
to: 6,
Nodes: []*Node{{
Name: "key",
from: 1,
to: 6,
Nodes: []*Node{{
Name: "symbol",
from: 1,
to: 6,
}},
}},
}},
}, {
msg: "a key and a comment",
text: `
# a comment
a key
`,
nodes: []*Node{{
Name: "key-val",
from: 20,
to: 25,
Nodes: []*Node{{
Name: "key",
from: 20,
to: 25,
Nodes: []*Node{{
Name: "symbol",
from: 20,
to: 25,
}},
}},
}},
}, {
msg: "a key value pair",
text: "a key = a value",
nodes: []*Node{{
Name: "key-val",
to: 15,
Nodes: []*Node{{
Name: "key",
to: 5,
Nodes: []*Node{{
Name: "symbol",
to: 5,
}},
}, {
Name: "value",
from: 8,
to: 15,
}},
}},
}, {
msg: "key value pairs with a comment at the end of line",
text: `
a key = a value # a comment
another key = another value # another comment
`,
nodes: []*Node{{
Name: "key-val",
from: 11,
to: 32,
Nodes: []*Node{{
Name: "key",
from: 11,
to: 16,
Nodes: []*Node{{
Name: "symbol",
from: 11,
to: 16,
}},
}, {
Name: "value",
from: 25,
to: 32,
}},
}, {
Name: "key-val",
from: 61,
to: 88,
Nodes: []*Node{{
Name: "key",
from: 61,
to: 72,
Nodes: []*Node{{
Name: "symbol",
from: 61,
to: 72,
}},
}, {
Name: "value",
from: 75,
to: 88,
}},
}},
}, {
msg: "value without a key",
text: "= a value",
nodes: []*Node{{
Name: "key-val",
to: 9,
Nodes: []*Node{{
Name: "value",
from: 2,
to: 9,
}},
}},
}, {
msg: "a key value pair with comment",
text: `
# a comment
a key = a value
`,
nodes: []*Node{{
Name: "key-val",
from: 4,
to: 34,
Nodes: []*Node{{
Name: "comment",
from: 4,
to: 15,
}, {
Name: "key",
from: 19,
to: 24,
Nodes: []*Node{{
Name: "symbol",
from: 19,
to: 24,
}},
}, {
Name: "value",
from: 27,
to: 34,
}},
}},
}, {
msg: "a key with multiple symbols",
text: "a key . with.multiple.symbols=a value",
nodes: []*Node{{
Name: "key-val",
to: 37,
Nodes: []*Node{{
Name: "key",
from: 0,
to: 29,
Nodes: []*Node{{
Name: "symbol",
from: 0,
to: 5,
}, {
Name: "symbol",
from: 8,
to: 12,
}, {
Name: "symbol",
from: 13,
to: 21,
}, {
Name: "symbol",
from: 22,
to: 29,
}},
}, {
Name: "value",
from: 30,
to: 37,
}},
}},
}, {
msg: "a group key",
text: `
# a comment
[a group key.empty]
`,
nodes: []*Node{{
Name: "group-key",
from: 4,
to: 38,
Nodes: []*Node{{
Name: "comment",
from: 4,
to: 15,
}, {
Name: "symbol",
from: 20,
to: 31,
}, {
Name: "symbol",
from: 32,
to: 37,
}},
}},
}, {
msg: "a group key with multiple values",
text: `
[foo.bar.baz]
= one
= two
= three
`,
nodes: []*Node{{
Name: "group-key",
Nodes: []*Node{{
Name: "symbol",
}, {
Name: "symbol",
}, {
Name: "symbol",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}},
ignorePosition: true,
}, {
msg: "a group key with multiple values, in a single line",
text: "[foo.bar.baz] = one = two = three",
nodes: []*Node{{
Name: "group-key",
Nodes: []*Node{{
Name: "symbol",
}, {
Name: "symbol",
}, {
Name: "symbol",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "value",
}},
}},
ignorePosition: true,
}, {
msg: "full example",
text: `
# a keyval document
key1 = foo
key1.a = bar
key1.b = baz
key2 = qux
# foo bar baz values
[foo.bar.baz]
a = 1
b = 2 # even
c = 3
`,
nodes: []*Node{{
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}, {
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}, {
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "group-key",
Nodes: []*Node{{
Name: "comment",
}, {
Name: "symbol",
}, {
Name: "symbol",
}, {
Name: "symbol",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}},
}, {
Name: "value",
}},
}, {
Name: "key-val",
Nodes: []*Node{{
Name: "key",
Nodes: []*Node{{
Name: "symbol",
}},
}, {
Name: "value",
}},
}},
ignorePosition: true,
}})
}