package main import ( "bytes" "crypto/sha256" "os" "os/exec" "strings" "testing" ) func TestGreeterHelloPrintsAppName(t *testing.T) { var buf bytes.Buffer if err := run([]string{"greeter:hello"}, &buf); err != nil { t.Fatalf("greeter:hello: %v", err) } if got := strings.TrimSpace(buf.String()); got != "hello-app" { t.Fatalf("output = %q, want %q", got, "hello-app") } } func TestBuiltBinaryGreeterHello(t *testing.T) { first := runSummerBuild(t) h1 := generatedHash(t) second := runSummerBuild(t) h2 := generatedHash(t) if h1 != h2 { t.Fatalf("generated files changed on second build\nfirst:\n%s\nsecond:\n%s", first, second) } cmd := exec.Command("./bin/hello", "greeter:hello") out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("bin/hello greeter:hello: %v\n%s", err, out) } if got := strings.TrimSpace(string(out)); got != "hello-app" { t.Fatalf("output = %q, want %q", got, "hello-app") } } func runSummerBuild(t *testing.T) string { t.Helper() cmd := exec.Command("go", "run", "../../cmd/summer", "build") cmd.Dir = "." out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("summer build: %v\n%s", err, out) } return string(out) } func generatedHash(t *testing.T) [32]byte { t.Helper() var buf bytes.Buffer for _, name := range []string{"main.go", "plugins.gen.go"} { body, err := os.ReadFile(name) if err != nil { t.Fatal(err) } buf.Write(body) } return sha256.Sum256(buf.Bytes()) }