Don't allow tables to be redefined
This commit is contained in:
@@ -87,6 +87,9 @@ func parseGroup(p *parser) parserStateFn {
|
|||||||
if key.typ != tokenKeyGroup {
|
if key.typ != tokenKeyGroup {
|
||||||
panic(fmt.Sprintf("unexpected token %s, was expecting a key group", key))
|
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.tree.createSubTree(key.val)
|
||||||
p.assume(tokenRightBracket)
|
p.assume(tokenRightBracket)
|
||||||
p.currentGroup = key.val
|
p.currentGroup = key.val
|
||||||
|
|||||||
@@ -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) {
|
func TestMissingFile(t *testing.T) {
|
||||||
_, err := LoadFile("foo.toml")
|
_, err := LoadFile("foo.toml")
|
||||||
if err.Error() != "open foo.toml: no such file or directory" {
|
if err.Error() != "open foo.toml: no such file or directory" {
|
||||||
|
|||||||
@@ -15,6 +15,18 @@ import (
|
|||||||
// This is the result of the parsing of a TOML file.
|
// This is the result of the parsing of a TOML file.
|
||||||
type TomlTree map[string]interface{}
|
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.
|
// Keys returns the keys of the toplevel tree.
|
||||||
// Warning: this is a costly operation.
|
// Warning: this is a costly operation.
|
||||||
func (t *TomlTree) Keys() []string {
|
func (t *TomlTree) Keys() []string {
|
||||||
|
|||||||
Reference in New Issue
Block a user