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).
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
generate/testdata/tmp
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
package generate
|
package generate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -68,6 +70,41 @@ func TestGenerate(t *testing.T) {
|
|||||||
})
|
})
|
||||||
// TODO(benkraft): Also check that the code at least builds!
|
// 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))
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
Reference in New Issue
Block a user