12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- //go:build examples
- package main
- import (
- "bytes"
- "context"
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "testing"
- "github.com/sqlc-dev/sqlc/internal/cmd"
- "github.com/sqlc-dev/sqlc/internal/sqltest"
- "github.com/sqlc-dev/sqlc/internal/sqltest/local"
- )
- func findSchema(t *testing.T, path string) (string, bool) {
- schemaFile := filepath.Join(path, "schema.sql")
- if _, err := os.Stat(schemaFile); !os.IsNotExist(err) {
- return schemaFile, true
- }
- schemaDir := filepath.Join(path, "schema")
- if _, err := os.Stat(schemaDir); !os.IsNotExist(err) {
- return schemaDir, true
- }
- return "", false
- }
- func TestExamplesVet(t *testing.T) {
- t.Parallel()
- ctx := context.Background()
- examples, err := filepath.Abs(filepath.Join("..", "..", "examples"))
- if err != nil {
- t.Fatal(err)
- }
- files, err := os.ReadDir(examples)
- if err != nil {
- t.Fatal(err)
- }
- for _, replay := range files {
- if !replay.IsDir() {
- continue
- }
- tc := replay.Name()
- t.Run(tc, func(t *testing.T) {
- t.Parallel()
- path := filepath.Join(examples, tc)
- if tc != "kotlin" && tc != "python" {
- if s, found := findSchema(t, filepath.Join(path, "sqlite")); found {
- dsn := fmt.Sprintf("file:%s?mode=memory&cache=shared", tc)
- db, cleanup := sqltest.CreateSQLiteDatabase(t, dsn, []string{s})
- defer db.Close()
- defer cleanup()
- }
- if s, found := findSchema(t, filepath.Join(path, "mysql")); found {
- uri := local.MySQL(t, []string{s})
- os.Setenv(fmt.Sprintf("VET_TEST_EXAMPLES_MYSQL_%s", strings.ToUpper(tc)), uri)
- }
- if s, found := findSchema(t, filepath.Join(path, "postgresql")); found {
- uri := local.PostgreSQL(t, []string{s})
- os.Setenv(fmt.Sprintf("VET_TEST_EXAMPLES_POSTGRES_%s", strings.ToUpper(tc)), uri)
- }
- }
- var stderr bytes.Buffer
- opts := &cmd.Options{
- Stderr: &stderr,
- Env: cmd.Env{},
- }
- err := cmd.Vet(ctx, path, "", opts)
- if err != nil {
- t.Fatalf("sqlc vet failed: %s %s", err, stderr.String())
- }
- })
- }
- }
|