Created
January 13, 2013 00:05
-
-
Save kortschak/4521156 to your computer and use it in GitHub Desktop.
Tests for go-spew nil pointer issue fix.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/spew/dump_test.go b/spew/dump_test.go | |
index a9504a8..d468886 100644 | |
--- a/spew/dump_test.go | |
+++ b/spew/dump_test.go | |
@@ -161,6 +161,13 @@ func addIntTests() { | |
addDumpTest(v5, "("+v5t+") "+v5s+"\n") | |
addDumpTest(pv5, "(*"+v5t+")("+v5Addr+")("+v5s+")\n") | |
addDumpTest(&pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")("+v5s+")\n") | |
+ | |
+ // nil int* pointers. | |
+ addDumpTest((*int8)(nil), "(*"+vt+")()(<nil>)\n") | |
+ addDumpTest((*int16)(nil), "(*"+v2t+")()(<nil>)\n") | |
+ addDumpTest((*int32)(nil), "(*"+v3t+")()(<nil>)\n") | |
+ addDumpTest((*int64)(nil), "(*"+v4t+")()(<nil>)\n") | |
+ addDumpTest((*int)(nil), "(*"+v5t+")()(<nil>)\n") | |
} | |
func addUintTests() { | |
@@ -218,6 +225,13 @@ func addUintTests() { | |
addDumpTest(v5, "("+v5t+") "+v5s+"\n") | |
addDumpTest(pv5, "(*"+v5t+")("+v5Addr+")("+v5s+")\n") | |
addDumpTest(&pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")("+v5s+")\n") | |
+ | |
+ // nil uint* pointers. | |
+ addDumpTest((*uint8)(nil), "(*"+vt+")()(<nil>)\n") | |
+ addDumpTest((*uint16)(nil), "(*"+v2t+")()(<nil>)\n") | |
+ addDumpTest((*uint32)(nil), "(*"+v3t+")()(<nil>)\n") | |
+ addDumpTest((*uint64)(nil), "(*"+v4t+")()(<nil>)\n") | |
+ addDumpTest((*uint)(nil), "(*"+v5t+")()(<nil>)\n") | |
} | |
func addBoolTests() { | |
@@ -242,6 +256,9 @@ func addBoolTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ | |
+ // Boolean nil pointer. | |
+ addDumpTest((*bool)(nil), "(*"+vt+")()(<nil>)\n") | |
} | |
func addFloatTests() { | |
@@ -266,6 +283,10 @@ func addFloatTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ | |
+ // nil float* pointers. | |
+ addDumpTest((*float32)(nil), "(*"+vt+")()(<nil>)\n") | |
+ addDumpTest((*float64)(nil), "(*"+v2t+")()(<nil>)\n") | |
} | |
func addComplexTests() { | |
@@ -290,6 +311,10 @@ func addComplexTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ | |
+ // nil complex* pointers. | |
+ addDumpTest((*complex64)(nil), "(*"+vt+")()(<nil>)\n") | |
+ addDumpTest((*complex128)(nil), "(*"+v2t+")()(<nil>)\n") | |
} | |
func addArrayTests() { | |
@@ -303,6 +328,7 @@ func addArrayTests() { | |
addDumpTest(v, "([3]"+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*[3]"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**[3]"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*[3]int)(nil), "(*[3]"+vt+")()(<nil>)\n") | |
// Array containing type with custom formatter on pointer receiver only. | |
v2 := [3]pstringer{"1", "2", "3"} | |
@@ -315,6 +341,7 @@ func addArrayTests() { | |
addDumpTest(v2, "([3]"+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*[3]"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**[3]"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ addDumpTest((*[3]pstringer)(nil), "(*[3]"+v2t+")()(<nil>)\n") | |
} | |
func addSliceTests() { | |
@@ -328,6 +355,7 @@ func addSliceTests() { | |
addDumpTest(v, "([]"+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*[]"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**[]"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*[]float32)(nil), "(*[]"+vt+")()(<nil>)\n") | |
// Slice containing type with custom formatter on pointer receiver only. | |
v2 := []pstringer{"1", "2", "3"} | |
@@ -340,6 +368,7 @@ func addSliceTests() { | |
addDumpTest(v2, "([]"+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*[]"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**[]"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ addDumpTest((*[]pstringer)(nil), "(*[]"+v2t+")()(<nil>)\n") | |
} | |
func addStringTests() { | |
@@ -353,6 +382,7 @@ func addStringTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*string)(nil), "(*"+vt+")()(<nil>)\n") | |
} | |
func addNilInterfaceTests() { | |
@@ -366,6 +396,7 @@ func addNilInterfaceTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*interface{})(nil), "(*"+vt+")()(<nil>)\n") | |
} | |
func addMapTests() { | |
@@ -381,6 +412,7 @@ func addMapTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*map[string]int)(nil), "(*"+vt+")()(<nil>)\n") | |
// Map with custom formatter type on pointer receiver only keys and vals. | |
v2 := map[pstringer]pstringer{"one": "1"} | |
@@ -394,6 +426,7 @@ func addMapTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ addDumpTest((*map[pstringer]pstringer)(nil), "(*"+v2t+")()(<nil>)\n") | |
// Map with interface keys and values. | |
v3 := map[interface{}]interface{}{"one": 1} | |
@@ -407,6 +440,7 @@ func addMapTests() { | |
addDumpTest(v3, "("+v3t+") "+v3s+"\n") | |
addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") | |
addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") | |
+ addDumpTest((*map[interface{}]interface{})(nil), "(*"+v3t+")()(<nil>)\n") | |
} | |
func addStructTests() { | |
@@ -426,6 +460,7 @@ func addStructTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*s1)(nil), "(*"+vt+")()(<nil>)\n") | |
// Struct that contains another struct. | |
type s2 struct { | |
@@ -446,6 +481,7 @@ func addStructTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ addDumpTest((*s2)(nil), "(*"+v2t+")()(<nil>)\n") | |
// Struct that contains custom type with Stringer pointer interface via both | |
// exported and unexported fields. | |
@@ -464,6 +500,7 @@ func addStructTests() { | |
addDumpTest(v3, "("+v3t+") "+v3s+"\n") | |
addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") | |
addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") | |
+ addDumpTest((*s3)(nil), "(*"+v3t+")()(<nil>)\n") | |
} | |
func addUintptrTests() { | |
@@ -477,6 +514,7 @@ func addUintptrTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*uintptr)(nil), "(*"+vt+")()(<nil>)\n") | |
// Address of real variable. | |
i := 1 | |
@@ -502,6 +540,7 @@ func addUnsafePointerTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*unsafe.Pointer)(nil), "(*"+vt+")()(<nil>)\n") | |
// Address of real variable. | |
i := 1 | |
@@ -527,6 +566,7 @@ func addChanTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*chan int)(nil), "(*"+vt+")()(<nil>)\n") | |
// Real channel. | |
v2 := make(chan int) | |
@@ -551,6 +591,7 @@ func addFuncTests() { | |
addDumpTest(v, "("+vt+") "+vs+"\n") | |
addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") | |
addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") | |
+ addDumpTest((*func())(nil), "(*"+vt+")()(<nil>)\n") | |
// Function with param and no returns. | |
v2 := TestDump | |
@@ -562,6 +603,7 @@ func addFuncTests() { | |
addDumpTest(v2, "("+v2t+") "+v2s+"\n") | |
addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") | |
addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") | |
+ addDumpTest((*func(*testing.T))(nil), "(*"+v2t+")()(<nil>)\n") | |
// Function with multiple params and multiple returns. | |
var v3 = func(i int, s string) (b bool, err error) { | |
@@ -575,6 +617,7 @@ func addFuncTests() { | |
addDumpTest(v3, "("+v3t+") "+v3s+"\n") | |
addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") | |
addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") | |
+ addDumpTest((*func(int, string) (bool, error))(nil), "(*"+v3t+")()(<nil>)\n") | |
} | |
func addCircularTests() { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment