From a9d5bb83a2228f2e3cdf279905174ef24ce413a1 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Mon, 7 Jul 2025 16:00:25 -0400 Subject: [PATCH] generate: Add framework for testing output of generated code --- generate/misc_test.go | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 generate/misc_test.go diff --git a/generate/misc_test.go b/generate/misc_test.go new file mode 100644 index 0000000..448f114 --- /dev/null +++ b/generate/misc_test.go @@ -0,0 +1,44 @@ +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) } +}