// TestKeyStringValueTreeCreate tests the correct creation of a // key/string value tree. func TestKeyStringValueTreeCreate(t *testing.T) { assert := audit.NewTestingAssertion(t, true) // Key/string value tree with duplicates, no errors. tree := collections.NewKeyStringValueTree("root", "one", true) err := tree.At("root").Add("alpha", "two") assert.Nil(err) err = tree.At("root").Add("bravo", "three") assert.Nil(err) err = tree.At("root").Add("bravo", "true") assert.Nil(err) err = tree.At("root").Add("charlie", "1.0") assert.Nil(err) err = tree.Create("root", "delta", "one").Add("true", "false") assert.Nil(err) assert.Length(tree, 8) // Deflate tree. tree.Deflate("toor", "zero") assert.Length(tree, 1) // Navigate with illegal paths. err = tree.At("foo").Add("zero", "0") assert.ErrorMatch(err, ".* node not found") err = tree.At("root", "foo").Add("zero", "0") assert.ErrorMatch(err, ".* node not found") // Tree without duplicates, so also with errors. tree = collections.NewKeyStringValueTree("root", "0", false) err = tree.At("root").Add("alpha", "a") assert.Nil(err) err = tree.At("root").Add("bravo", "b") assert.Nil(err) err = tree.At("root").Add("bravo", "2") assert.ErrorMatch(err, ".* duplicates are not allowed") }
// BeginTagNode implements the sml.Builder interface. func (b *configBuilder) BeginTagNode(tag string) error { switch { case b.values == nil && tag != "config": return errors.New(ErrIllegalConfigSource, errorMessages, `does not start with "config" node`) case b.values == nil: b.stack = collections.NewStringStack(tag) b.values = collections.NewKeyStringValueTree(tag, "", false) default: b.stack.Push(tag) changer := b.values.Create(b.stack.All()...) if changer.Error() != nil { return errors.New(ErrIllegalConfigSource, errorMessages, changer.Error()) } } return nil }
// BeginTagNode implements the Builder interface. func (tb *KeyStringValueTreeBuilder) BeginTagNode(tag string) error { if tb.done { return errors.New(ErrBuilder, errorMessages, "building is already done") } switch { case tb.tree == nil: tb.stack = collections.NewStringStack(tag) tb.tree = collections.NewKeyStringValueTree(tag, "", false) default: tb.stack.Push(tag) changer := tb.tree.Create(tb.stack.All()...) if err := changer.Error(); err != nil { return errors.Annotate(err, ErrBuilder, errorMessages) } } return nil }
func createKeyStringValueTree(assert audit.Assertion) collections.KeyStringValueTree { tree := collections.NewKeyStringValueTree("root", "one", true) err := tree.At("root").Add("alpha", "two") assert.Nil(err) err = tree.At("root").Add("bravo", "three") assert.Nil(err) err = tree.At("root", "bravo").Add("foo", "bar") assert.Nil(err) err = tree.At("root", "bravo").Add("bar", "foo") assert.Nil(err) err = tree.At("root").Add("bravo", "four") assert.Nil(err) err = tree.At("root").Add("charlie", "five") assert.Nil(err) err = tree.Create("root", "delta", "one").Add("true", "one") assert.Nil(err) err = tree.Create("root", "delta", "two").Add("false", "zero") assert.Nil(err) assert.Length(tree, 12) return tree }
// TestKeyStringValueTreeCopy tests the copy of a key/string value tree. func TestKeyStringValueTreeCopy(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := collections.NewKeyStringValueTree("root", "0", true) err := tree.Create("root", "alpha").Add("a", "1") assert.Nil(err) err = tree.Create("root", "beta").Add("b", "2") assert.Nil(err) err = tree.Create("root", "gamma", "one").Add("1", "3.1") assert.Nil(err) err = tree.Create("root", "gamma", "two").Add("2", "3.2") assert.Nil(err) ctree := tree.Copy() assert.Length(ctree, 10) value, err := ctree.At("root", "alpha", "a").Value() assert.Nil(err) assert.Equal(value, "1") value, err = ctree.At("root", "gamma", "two", "2").Value() assert.Nil(err) assert.Equal(value, "3.2") }
// TestKeyStringValueTreeSetValue tests the setting of a // key/string value tree nodes value. func TestKeyStringValueTreeSetValue(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := createKeyStringValueTree(assert) // Tree with duplicates. old, err := tree.At("root", "alpha").SetValue("beta") assert.Nil(err) assert.Equal(old, "two") act, err := tree.At("root", "alpha").Value() assert.Nil(err) assert.Equal(act, "beta") // Tree without duplicates. tree = collections.NewKeyStringValueTree("root", "one", false) err = tree.At("root").Add("alpha", "two") assert.Nil(err) err = tree.At("root").Add("beta", "three") assert.Nil(err) old, err = tree.At("root", "alpha").SetValue("beta") assert.Nil(err) assert.Equal(old, "two") }