package generate import "os" import "fmt" import "os/exec" import "testing" import "path/filepath" func testGenerateRun(test *testing.T, protocol *Protocol, imports string, testCase string) { // open files dir, err := os.MkdirTemp(os.TempDir(), "hopp-generate-test-*") if err != nil { test.Fatal(err) } defer os.RemoveAll(dir) sourceFile, err := os.Create(filepath.Join(dir, "protocol.go")) if err != nil { test.Fatal(err) } defer sourceFile.Close() mainFile, err := os.Create(filepath.Join(dir, "main.go")) if err != nil { test.Fatal(err) } defer mainFile.Close() // generate protocol generator := Generator { Output: sourceFile, PackageName: "main", } _, err = generator.Generate(protocol) if err != nil { test.Fatal(err) } // build static source files imports = ` import "log" ` + imports setup := `log.Println("*** BEGIN TEST CASE OUTPUT ***")` teardown := `log.Println("--- END TEST CASE OUTPUT ---")` fmt.Fprintf( mainFile, "package main\n%s\nfunc main() {%s\n%s\n%s\n}\n", imports, setup, testCase, teardown) // build and run test command := exec.Command("go", "run", filepath.Join(dir, "main.go")) output, err := command.CombinedOutput() test.Logf("output of %v:\n%s", command, output) if err != nil { test.Fatal(err) } }