Don't allow tables to be redefined

This commit is contained in:
Thomas Pelletier
2013-12-10 16:10:26 +01:00
parent 72f17747a0
commit 8081f3cc09
3 changed files with 22 additions and 0 deletions
+3
View File
@@ -87,6 +87,9 @@ func parseGroup(p *parser) parserStateFn {
if key.typ != tokenKeyGroup {
panic(fmt.Sprintf("unexpected token %s, was expecting a key group", key))
}
if p.tree.Has(key.val) {
panic("duplicated tables")
}
p.tree.createSubTree(key.val)
p.assume(tokenRightBracket)
p.currentGroup = key.val
+7
View File
@@ -196,6 +196,13 @@ func TestArrayWithExtraCommaComment(t *testing.T) {
})
}
func TestDuplicateGroups(t *testing.T) {
_, err := Load("[foo]\na=2\n[foo]b=3")
if err.Error() != "duplicated tables" {
t.Error("Bad error message:", err.Error())
}
}
func TestMissingFile(t *testing.T) {
_, err := LoadFile("foo.toml")
if err.Error() != "open foo.toml: no such file or directory" {
+12
View File
@@ -15,6 +15,18 @@ import (
// This is the result of the parsing of a TOML file.
type TomlTree map[string]interface{}
// Has returns a boolean indicating if the toplevel tree contains the given
// key.
func (t *TomlTree) Has(key string) bool {
mp := (map[string]interface{})(*t)
for k, _ := range mp {
if k == key {
return true
}
}
return false
}
// Keys returns the keys of the toplevel tree.
// Warning: this is a costly operation.
func (t *TomlTree) Keys() []string {