Better logging for parser tests (#65)

* Better logging for parser tests

* Add spew to tests deps list
This commit is contained in:
Thomas Pelletier
2016-04-22 11:01:31 +02:00
parent e3b2497729
commit 288bc57940
2 changed files with 18 additions and 3 deletions
+17 -3
View File
@@ -2,26 +2,34 @@ package toml
import (
"fmt"
"reflect"
"testing"
"time"
"github.com/davecgh/go-spew/spew"
)
func assertTree(t *testing.T, tree *TomlTree, err error, ref map[string]interface{}) {
func assertSubTree(t *testing.T, path []string, tree *TomlTree, err error, ref map[string]interface{}) {
if err != nil {
t.Error("Non-nil error:", err.Error())
return
}
for k, v := range ref {
nextPath := append(path, k)
t.Log("asserting path", nextPath)
// NOTE: directly access key instead of resolve by path
// NOTE: see TestSpecialKV
switch node := tree.GetPath([]string{k}).(type) {
case []*TomlTree:
t.Log("\tcomparing key", nextPath, "by array iteration")
for idx, item := range node {
assertTree(t, item, err, v.([]map[string]interface{})[idx])
assertSubTree(t, nextPath, item, err, v.([]map[string]interface{})[idx])
}
case *TomlTree:
assertTree(t, node, err, v.(map[string]interface{}))
t.Log("\tcomparing key", nextPath, "by subtree assestion")
assertSubTree(t, nextPath, node, err, v.(map[string]interface{}))
default:
t.Log("\tcomparing key", nextPath, "by string representation because it's of type", reflect.TypeOf(node))
if fmt.Sprintf("%v", node) != fmt.Sprintf("%v", v) {
t.Errorf("was expecting %v at %v but got %v", v, k, node)
}
@@ -29,6 +37,12 @@ func assertTree(t *testing.T, tree *TomlTree, err error, ref map[string]interfac
}
}
func assertTree(t *testing.T, tree *TomlTree, err error, ref map[string]interface{}) {
t.Log("Asserting tree:\n", spew.Sdump(tree))
assertSubTree(t, []string{}, tree, err, ref)
t.Log("Finished tree assertion.")
}
func TestCreateSubTree(t *testing.T) {
tree := newTomlTree()
tree.createSubTree([]string{"a", "b", "c"}, Position{})