// TestTreeDo tests the iteration over the tree nodes. func TestTreeDo(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := collections.NewTree("root", true) err := tree.At("root").Add("alpha") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root", "bravo").Add("foo") assert.Nil(err) err = tree.At("root", "bravo").Add("bar") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root").Add("charlie") assert.Nil(err) err = tree.Create("root", "delta", 1).Add(true) assert.Nil(err) err = tree.Create("root", "delta", 2).Add(false) assert.Nil(err) // Test iteration. var values []interface{} err = tree.DoAll(func(v interface{}) error { values = append(values, v) return nil }) assert.Nil(err) assert.Length(values, 12) err = tree.DoAll(func(v interface{}) error { return errors.New("ouch") }) assert.ErrorMatch(err, ".* cannot perform function on all nodes: ouch") }
// TestTreeCreate tests the correct creation of a tree. func TestTreeCreate(t *testing.T) { assert := audit.NewTestingAssertion(t, true) // Tree with duplicates, no errors. tree := collections.NewTree("root", true) err := tree.At("root").Add("alpha") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root").Add("charlie") assert.Nil(err) err = tree.Create("root", "delta", 1).Add(true) assert.Nil(err) assert.Length(tree, 8) // Deflate tree. tree.Deflate("toor") assert.Length(tree, 1) // Navigate with illegal paths. err = tree.At("foo").Add(0) assert.ErrorMatch(err, ".* node not found") err = tree.At("root", "foo").Add(0) assert.ErrorMatch(err, ".* node not found") // Tree without duplicates, so also with errors. tree = collections.NewTree("root", false) err = tree.At("root").Add("alpha") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root").Add("bravo") assert.ErrorMatch(err, ".* duplicates are not allowed") }
// TestTreeSetValue tests the setting of a tree nodes value. func TestTreeSetValue(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := createTree(assert) // Tree with duplicates. old, err := tree.At("root", "alpha").SetValue("beta") assert.Nil(err) assert.Equal(old, "alpha") act, err := tree.At("root", "beta").Value() assert.Nil(err) assert.Equal(act, "beta") // Tree without duplicates. tree = collections.NewTree("root", false) err = tree.At("root").Add("alpha") assert.Nil(err) err = tree.At("root").Add("beta") assert.Nil(err) old, err = tree.At("root", "alpha").SetValue("beta") assert.Nil(old) assert.ErrorMatch(err, ".* duplicates are not allowed") }
func createTree(assert audit.Assertion) collections.Tree { tree := collections.NewTree("root", true) err := tree.At("root").Add("alpha") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root", "bravo").Add("foo") assert.Nil(err) err = tree.At("root", "bravo").Add("bar") assert.Nil(err) err = tree.At("root").Add("bravo") assert.Nil(err) err = tree.At("root").Add("charlie") assert.Nil(err) err = tree.Create("root", "delta", 1).Add(true) assert.Nil(err) err = tree.Create("root", "delta", 2).Add(false) assert.Nil(err) assert.Length(tree, 12) return tree }
// TestTreeCopy tests the copy of a tree. func TestTreeCopy(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tree := collections.NewTree("root", true) err := tree.Create("root", "alpha").Add("a") assert.Nil(err) err = tree.Create("root", "beta").Add("b") assert.Nil(err) err = tree.Create("root", "gamma", "one").Add("1") assert.Nil(err) err = tree.Create("root", "gamma", "two").Add("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, "a") value, err = ctree.At("root", "gamma", "two", "2").Value() assert.Nil(err) assert.Equal(value, "2") }