treerack/keyval_test.go

393 lines
5.9 KiB
Go
Raw Normal View History

2017-07-15 21:49:08 +02:00
package treerack
2017-06-25 17:51:08 +02:00
import "testing"
func TestKeyVal(t *testing.T) {
2017-10-27 17:25:20 +02:00
runTestsFile(t, "keyval.parser", []testItem{{
title: "empty",
2017-06-25 17:51:08 +02:00
}, {
2017-10-27 17:25:20 +02:00
title: "a comment",
text: "# a comment",
2017-06-25 17:51:08 +02:00
}, {
2017-10-27 17:25:20 +02:00
title: "a key",
text: "a key",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
To: 5,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-06-26 01:21:46 +02:00
To: 5,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
To: 5,
2017-06-25 17:51:08 +02:00
}},
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a key with a preceeding whitespace",
text: " a key",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
From: 1,
To: 6,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-06-26 01:21:46 +02:00
From: 1,
To: 6,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 1,
To: 6,
2017-06-25 17:51:08 +02:00
}},
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a key and a comment",
2017-06-25 17:51:08 +02:00
text: `
# a comment
a key
`,
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
From: 20,
To: 25,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-06-26 01:21:46 +02:00
From: 20,
To: 25,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 20,
To: 25,
2017-06-25 17:51:08 +02:00
}},
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a key value pair",
text: "a key = a value",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
To: 15,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-06-26 01:21:46 +02:00
To: 5,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
To: 5,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "value",
2017-06-26 01:21:46 +02:00
From: 8,
To: 15,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "key value pairs with a comment at the end of line",
2017-10-29 00:21:32 +02:00
text: "a key = a value # a comment\n" +
"another key = another value # another comment",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-10-29 00:21:32 +02:00
From: 0,
To: 39,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-10-29 00:21:32 +02:00
From: 0,
To: 5,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-10-29 00:21:32 +02:00
From: 0,
To: 5,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "value",
2017-10-29 00:21:32 +02:00
From: 14,
To: 21,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "key-val",
2017-10-29 00:21:32 +02:00
From: 40,
To: 85,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-10-29 00:21:32 +02:00
From: 40,
To: 51,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-10-29 00:21:32 +02:00
From: 40,
To: 51,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "value",
2017-10-29 00:21:32 +02:00
From: 54,
To: 67,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "value without a key",
text: "= a value",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
To: 9,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "value",
2017-06-26 01:21:46 +02:00
From: 2,
To: 9,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a key value pair with comment",
2017-06-25 17:51:08 +02:00
text: `
# a comment
a key = a value
`,
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
From: 4,
To: 34,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "comment",
2017-06-26 01:21:46 +02:00
From: 4,
To: 15,
2017-06-25 17:51:08 +02:00
}, {
Name: "key",
2017-06-26 01:21:46 +02:00
From: 19,
To: 24,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 19,
To: 24,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "value",
2017-06-26 01:21:46 +02:00
From: 27,
To: 34,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a key with multiple symbols",
text: "a key . with.multiple.symbols=a value",
2017-06-25 17:51:08 +02:00
nodes: []*Node{{
Name: "key-val",
2017-06-26 01:21:46 +02:00
To: 37,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "key",
2017-06-26 01:21:46 +02:00
From: 0,
To: 29,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 0,
To: 5,
2017-06-25 17:51:08 +02:00
}, {
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 8,
To: 12,
2017-06-25 17:51:08 +02:00
}, {
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 13,
To: 21,
2017-06-25 17:51:08 +02:00
}, {
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 22,
To: 29,
2017-06-25 17:51:08 +02:00
}},
}, {
Name: "value",
2017-06-26 01:21:46 +02:00
From: 30,
To: 37,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a group key",
2017-06-25 17:51:08 +02:00
text: `
# a comment
[a group key.empty]
`,
nodes: []*Node{{
Name: "group-key",
2017-06-26 01:21:46 +02:00
From: 4,
To: 38,
2017-06-25 17:51:08 +02:00
Nodes: []*Node{{
Name: "comment",
2017-06-26 01:21:46 +02:00
From: 4,
To: 15,
2017-06-25 17:51:08 +02:00
}, {
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 20,
To: 31,
2017-06-25 17:51:08 +02:00
}, {
Name: "symbol",
2017-06-26 01:21:46 +02:00
From: 32,
To: 37,
2017-06-25 17:51:08 +02:00
}},
}},
}, {
2017-10-27 17:25:20 +02:00
title: "a group key with multiple values",
2017-06-25 17:51:08 +02:00
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,
}, {
2017-10-27 17:25:20 +02:00
title: "a group key with multiple values, in a single line",
text: "[foo.bar.baz] = one = two = three",
2017-06-25 17:51:08 +02:00
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,
}, {
2017-10-27 17:25:20 +02:00
title: "full example",
2017-06-25 17:51:08 +02:00
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,
}})
}