// GenerateTestMain returns the source code for a test program that will run // the specified test functions from the specified package. func GenerateTestMain(packageName string, funcs *set.StringSet) string { var funcVec vector.StringVector for val := range funcs.Iter() { funcVec.Push(val) } result := "" result += "package main\n\n" result += "import \"testing\"\n" if funcVec.Len() > 0 { result += fmt.Sprintf("import \"./%s\"\n\n", packageName) } result += "var tests = []testing.Test {\n" for _, val := range funcVec.Data() { result += fmt.Sprintf("\ttesting.Test{\"%s\", %s.%s},\n", val, packageName, val) } result += "}\n\n" result += "func main() {\n" result += "\ttesting.Main(tests)\n" result += "}\n" return result }
func expectContentsEqual(t *testing.T, set *set.StringSet, expected []string) { var contents vector.StringVector for val := range set.Iter() { contents.Push(val) } sort.SortStrings(contents) sort.SortStrings(expected) if !reflect.DeepEqual(contents.Data(), expected) { t.Errorf("Expected:%v\nGot: %v", expected, contents) } }
// compileFiles invokes 6g with the appropriate arguments for compiling the // supplied set of .go files, and exits the program if the subprocess fails. func compileFiles(files *set.StringSet, targetBaseName string) { compilerName, ok := compilers[os.Getenv("GOARCH")] if !ok { fmt.Println("Could not determine the correct compiler to run.") fmt.Println("Please ensure that $GOARCH is set.") os.Exit(1) } compilerPath := path.Join(os.Getenv("GOBIN"), compilerName) gopackPath := path.Join(os.Getenv("GOBIN"), "gopack") targetDir, _ := path.Split(targetBaseName) if targetDir != "" { os.MkdirAll(path.Join("igo-out", targetDir), 0700) } // Compile var compilerArgs vector.StringVector compilerArgs.Push("-o") compilerArgs.Push(targetBaseName + ".6") for file := range files.Iter() { compilerArgs.Push(path.Join("../", file)) } if !executeCommand(compilerPath, compilerArgs.Data(), "igo-out/") { os.Exit(1) } // Pack var gopackArgs vector.StringVector gopackArgs.Push("grc") gopackArgs.Push(targetBaseName + ".a") gopackArgs.Push(targetBaseName + ".6") if !executeCommand(gopackPath, gopackArgs.Data(), "igo-out/") { os.Exit(1) } }