func RunGenerateTest(t *testing.T, relConfigFilename string) {
	configFilename := filepath.Join(RepoRoot(t), relConfigFilename)
	config, err := generate.ReadAndValidateConfig(configFilename)
	if err != nil {
		t.Fatal(err)
	}
	generated, err := generate.Generate(config)
	if err != nil {
		t.Fatal(err)
	}
	for filename, content := range generated {
		expectedContent, err := ioutil.ReadFile(filename)
		if err != nil {
			t.Fatal(err)
		}
		if !bytes.Equal(content, expectedContent) {
			t.Errorf("mismatch in %s", filename)
			if testing.Verbose() {
				t.Errorf("got:\n%s\nwant:\n%s\n", content, expectedContent)
			}
		}
	}
}
RunGenerateTest checks that running genqlient with the given
repo-root-relative config file would not produce any changes to the
checked-in files.
package integration
import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"runtime"
	"testing"
	"github.com/Khan/genqlient/generate"
)
func RepoRoot(t *testing.T) string {
	_, thisFile, _, ok := runtime.Caller(0)
	if !ok {
		t.Fatal("runtime.Caller non-ok")
	}
	root := filepath.Dir(filepath.Dir(filepath.Dir(thisFile)))
	if _, err := os.Stat(filepath.Join(root, ".gitignore")); err != nil {
		t.Fatal(fmt.Errorf("doesn't look like repo root: %v", err))
	}
	return root
}