12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package main
- import (
- "encoding/json"
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "testing"
- )
- type Testcase struct {
- Name string
- Path string
- ConfigName string
- Stderr []byte
- Exec *Exec
- }
- type Exec struct {
- Command string `json:"command"`
- Contexts []string `json:"contexts"`
- Process string `json:"process"`
- Env map[string]string `json:"env"`
- }
- func parseStderr(t *testing.T, dir, testctx string) []byte {
- t.Helper()
- paths := []string{
- filepath.Join(dir, "stderr", fmt.Sprintf("%s.txt", testctx)),
- filepath.Join(dir, "stderr.txt"),
- }
- for _, path := range paths {
- if _, err := os.Stat(path); !os.IsNotExist(err) {
- blob, err := os.ReadFile(path)
- if err != nil {
- t.Fatal(err)
- }
- return blob
- }
- }
- return nil
- }
- func parseExec(t *testing.T, dir string) *Exec {
- t.Helper()
- path := filepath.Join(dir, "exec.json")
- if _, err := os.Stat(path); os.IsNotExist(err) {
- return nil
- }
- var e Exec
- blob, err := os.ReadFile(path)
- if err != nil {
- t.Fatal(err)
- }
- if err := json.Unmarshal(blob, &e); err != nil {
- t.Fatal(err)
- }
- if e.Command == "" {
- e.Command = "generate"
- }
- return &e
- }
- func FindTests(t *testing.T, root, testctx string) []*Testcase {
- var tcs []*Testcase
- err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- if info.Name() == "sqlc.json" || info.Name() == "sqlc.yaml" || info.Name() == "sqlc.yml" {
- dir := filepath.Dir(path)
- tcs = append(tcs, &Testcase{
- Path: dir,
- Name: strings.TrimPrefix(dir, root+string(filepath.Separator)),
- ConfigName: info.Name(),
- Stderr: parseStderr(t, dir, testctx),
- Exec: parseExec(t, dir),
- })
- return filepath.SkipDir
- }
- return nil
- })
- if err != nil {
- t.Fatal(err)
- }
- return tcs
- }
|