generate: Add framework for testing output of generated code
This commit is contained in:
parent
f1df5fa84d
commit
a9d5bb83a2
44
generate/misc_test.go
Normal file
44
generate/misc_test.go
Normal file
@ -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) }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user