Skip to content

Instantly share code, notes, and snippets.

@kortschak
Created January 13, 2013 00:05
Show Gist options
  • Save kortschak/4521156 to your computer and use it in GitHub Desktop.
Save kortschak/4521156 to your computer and use it in GitHub Desktop.
Tests for go-spew nil pointer issue fix.
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