Better logging for parser tests (#65) * Better logging for parser tests * Add spew to tests deps list
diff --git a/parser_test.go b/parser_test.go index 710a922..bbcbcee 100644 --- a/parser_test.go +++ b/parser_test.go
@@ -2,26 +2,34 @@ 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]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{})
diff --git a/test.sh b/test.sh index 0a426e0..33ae6df 100755 --- a/test.sh +++ b/test.sh
@@ -20,6 +20,7 @@ } go get github.com/pelletier/go-buffruneio +go get github.com/davecgh/go-spew/spew # get code for BurntSushi TOML validation # pinning all to 'HEAD' for version 0.3.x work (TODO: pin to commit hash when tests stabilize)