// TestKeyValueTreeCreate tests the correct creation of a key/value tree. func TestKeyValueTreeCreate(t *testing.T) { assert := audit.NewTestingAssertion(t, true) // Key/value tree with duplicates, no errors. tree := collections.NewKeyValueTree("root", 1, true) err := tree.At("root").Add("alpha", 2) assert.Nil(err) err = tree.At("root").Add("bravo", 3) 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", 0) 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.NewKeyValueTree("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") }
func createKeyValueTree(assert audit.Assertion) collections.KeyValueTree { tree := collections.NewKeyValueTree("root", 1, true) err := tree.At("root").Add("alpha", 2) assert.Nil(err) err = tree.At("root").Add("bravo", 3) 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", 4) assert.Nil(err) err = tree.At("root").Add("charlie", 5) assert.Nil(err) err = tree.Create("root", "delta", "one").Add("true", 1) assert.Nil(err) err = tree.Create("root", "delta", "two").Add("false", 0) assert.Nil(err) assert.Length(tree, 12) return tree }
// TestKeyValueTreeCopy tests the copy of a key/value tree. func TestKeyValueTreeCopy(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := collections.NewKeyValueTree("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") }
// TestKeyValueTreeSetValue tests the setting of a key/value tree nodes value. func TestKeyValueTreeSetValue(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := createKeyValueTree(assert) // Tree with duplicates. old, err := tree.At("root", "alpha").SetValue("beta") assert.Nil(err) assert.Equal(old, 2) act, err := tree.At("root", "alpha").Value() assert.Nil(err) assert.Equal(act, "beta") // Tree without duplicates. tree = collections.NewKeyValueTree("root", 1, false) err = tree.At("root").Add("alpha", 2) assert.Nil(err) err = tree.At("root").Add("beta", 3) assert.Nil(err) old, err = tree.At("root", "alpha").SetValue("beta") assert.Nil(err) assert.Equal(old, 2) }