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