From dfc9f02efc7df08f0dc2cc852b915e30ecbb4661 Mon Sep 17 00:00:00 2001 From: Ben Kraft Date: Thu, 3 Jun 2021 15:48:05 -0700 Subject: [PATCH] Actually build the generated code in tests This revealed one bug already (a redux of #43)! And will hopefully help more as unmarshalers get more complicated (thanks to interfaces/fragments). --- .gitignore | 1 + generate/generate_test.go | 37 ++++++++++++++++++++++++++++++++++ generate/testdata/tmp/.gitkeep | 0 3 files changed, 38 insertions(+) create mode 100644 .gitignore create mode 100644 generate/testdata/tmp/.gitkeep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba3921d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +generate/testdata/tmp diff --git a/generate/generate_test.go b/generate/generate_test.go index 2ff0ca5..6516dfa 100644 --- a/generate/generate_test.go +++ b/generate/generate_test.go @@ -1,8 +1,10 @@ package generate import ( + "fmt" "io/ioutil" "os" + "os/exec" "path/filepath" "strings" "testing" @@ -68,6 +70,41 @@ func TestGenerate(t *testing.T) { }) // TODO(benkraft): Also check that the code at least builds! } + + t.Run("Build", func(t *testing.T) { + if testing.Short() { + t.Skip("skipping build due to -short") + } else if sourceFilename == "InterfaceNesting.graphql" || + sourceFilename == "InterfaceNoFragments.graphql" || + sourceFilename == "Omitempty.graphql" { + t.Skip("TODO: enable these once they build") + } + + goContent := generated[goFilename] + // We need to put this within the current module, rather than in + // /tmp, so that it can access internal/testutil. + f, err := ioutil.TempFile("./testdata/tmp", sourceFilename+"_*.go") + if err != nil { + t.Fatal(err) + } + defer func() { + f.Close() + os.Remove(f.Name()) + }() + + _, err = f.Write(goContent) + if err != nil { + t.Fatal(err) + } + + cmd := exec.Command("go", "build", f.Name()) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + if err != nil { + t.Fatal(fmt.Errorf("generated code does not compile: %w", err)) + } + }) }) } } diff --git a/generate/testdata/tmp/.gitkeep b/generate/testdata/tmp/.gitkeep new file mode 100644 index 0000000..e69de29