hopp/generate/misc_test.go

45 lines
1.2 KiB
Go

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) }
}