1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
package main
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
"github.com/tinylib/msgp/gen"
)
const showGeneratedFile = false
func generate(t *testing.T, content string) (string, error) {
tempDir := t.TempDir()
mainFilename := filepath.Join(tempDir, "main.go")
fd, err := os.OpenFile(mainFilename, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o600)
if err != nil {
return "", err
}
defer fd.Close()
if _, err := fd.WriteString(content); err != nil {
return "", err
}
mode := gen.Encode | gen.Decode | gen.Size | gen.Marshal | gen.Unmarshal | gen.Test
if err := Run(mainFilename, mode, false); err != nil {
return "", err
}
if showGeneratedFile {
mainGenFilename := strings.TrimSuffix(mainFilename, ".go") + "_gen.go"
content, err := os.ReadFile(mainGenFilename)
if err != nil {
return "", err
}
t.Logf("generated %s content:\n%s", mainGenFilename, content)
}
return mainFilename, nil
}
func goExec(t *testing.T, mainFilename string, test bool) {
mainGenFilename := strings.TrimSuffix(mainFilename, ".go") + "_gen.go"
args := []string{"run", mainFilename, mainGenFilename}
if test {
mainGenTestFilename := strings.TrimSuffix(mainFilename, ".go") + "_gen_test.go"
args = []string{"test", mainFilename, mainGenFilename, mainGenTestFilename}
}
output, err := exec.Command("go", args...).CombinedOutput()
if err != nil {
t.Fatalf("go run failed: %v, output:\n%s", err, output)
}
}
|