returnfmt.Errorf("failed to parse regexp %q: %v",want,err)
}
if!match{
returnfmt.Errorf("%s.go:\n%q\ndoes not match %s",file,out,want)
}
returnnil
}
typetestcasestruct{
filestring
wantstring
}
vartests=[]testcase{
// defer_panic_recover
{"defer",`^0 3210 2$`},
{"defer2",`^Calling g. Printing in g 0 Printing in g 1 Printing in g 2 Printing in g 3 Panicking! Defer in g 3 Defer in g 2 Defer in g 1 Defer in g 0 Recovered in f 4 Returned normally from f.$`},
// effective_go
{"eff_bytesize",`^1.00YB 9.09TB$`},
{"eff_qr",""},
{"eff_sequence",`^\[-1 2 6 16 44\]$`},
{"eff_unused2",""},
// error_handling
{"error",""},
{"error2",""},
{"error3",""},
{"error4",""},
// law_of_reflection
{"interface",""},
{"interface2",`^type: float64$`},
// c_go_cgo
{"cgo1",""},
{"cgo2",""},
{"cgo3",""},
{"cgo4",""},
// timeout
{"timeout1",""},
{"timeout2",""},
// gobs
{"gobs1",""},
{"gobs2",""},
// json
{"json1",`^$`},
{"json2",`the reciprocal of i is`},
{"json3",`Age is int 6`},
{"json4",`^$`},
{"json5",""},
// image_package
{"image_package1",`^X is 2 Y is 1$`},
{"image_package2",`^3 4 false$`},
{"image_package3",`^3 4 true$`},
{"image_package4",`^image.Point{X:2, Y:1}$`},
{"image_package5",`^{255 0 0 255}$`},
{"image_package6",`^8 4 true$`},
// other
{"go1",`^Christmas is a holiday: true Sleeping for 0.123s.*go1.go already exists$`},
{"slices",""},
}
funconlyTest(files...string){
varnew[]testcase
NextFile:
for_,file:=rangefiles{
file=strings.TrimSuffix(file,".go")
for_,tt:=rangetests{
iftt.file==file{
new=append(new,tt)
continueNextFile
}
}
fmt.Fprintf(os.Stderr,"test %s.go not found\n",file)
os.Exit(1)
}
tests=new
}
funcskipTest(filestring){
fori,tt:=rangetests{
iftt.file==file{
copy(tests[i:],tests[i+1:])
tests=tests[:len(tests)-1]
return
}
}
panic("delete("+file+"): not found")
}
funcfixcgo(){
ifos.Getenv("CGO_ENABLED")!="1"{
skipTest("cgo1")
skipTest("cgo2")
skipTest("cgo3")
skipTest("cgo4")
return
}
switchruntime.GOOS{
case"freebsd":
// cgo1 and cgo2 don't run on freebsd, srandom has a different signature
skipTest("cgo1")
skipTest("cgo2")
case"netbsd":
// cgo1 and cgo2 don't run on netbsd, srandom has a different signature
skipTest("cgo1")
skipTest("cgo2")
// cgo3 and cgo4 don't run on netbsd, since cgo cannot handle stdout correctly
skipTest("cgo3")
skipTest("cgo4")
case"openbsd":
// cgo3 and cgo4 don't run on openbsd and solaris, since cgo cannot handle stdout correctly