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 ( import (
"fmt" "fmt"
"reflect"
"testing" "testing"
"time" "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 { if err != nil {
t.Error("Non-nil error:", err.Error()) t.Error("Non-nil error:", err.Error())
return return
} }
for k, v := range ref { for k, v := range ref {
nextPath := append(path, k)
t.Log("asserting path", nextPath)
// NOTE: directly access key instead of resolve by path // NOTE: directly access key instead of resolve by path
// NOTE: see TestSpecialKV // NOTE: see TestSpecialKV
switch node := tree.GetPath([]string{k}).(type) { switch node := tree.GetPath([]string{k}).(type) {
case []*TomlTree: case []*TomlTree:
t.Log("\tcomparing key", nextPath, "by array iteration")
for idx, item := range node { 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: 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: 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) { if fmt.Sprintf("%v", node) != fmt.Sprintf("%v", v) {
t.Errorf("was expecting %v at %v but got %v", v, k, node) 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) { func TestCreateSubTree(t *testing.T) {
tree := newTomlTree() tree := newTomlTree()
tree.createSubTree([]string{"a", "b", "c"}, Position{}) tree.createSubTree([]string{"a", "b", "c"}, Position{})
+1
View File
@@ -20,6 +20,7 @@ function git_clone() {
} }
go get github.com/pelletier/go-buffruneio go get github.com/pelletier/go-buffruneio
go get github.com/davecgh/go-spew/spew
# get code for BurntSushi TOML validation # get code for BurntSushi TOML validation
# pinning all to 'HEAD' for version 0.3.x work (TODO: pin to commit hash when tests stabilize) # pinning all to 'HEAD' for version 0.3.x work (TODO: pin to commit hash when tests stabilize)