@@ -3,6 +3,7 @@ package main
33import (
44 "bytes"
55 "context"
6+ "encoding/json"
67 "os"
78 "path/filepath"
89 "strings"
@@ -92,14 +93,31 @@ func TestReplay(t *testing.T) {
9293 tc := replay
9394 t .Run (tc , func (t * testing.T ) {
9495 t .Parallel ()
95- path , _ := filepath . Abs ( tc )
96+
9697 var stderr bytes.Buffer
98+ var output map [string ]string
99+ var err error
100+
101+ path , _ := filepath .Abs (tc )
102+ args := parseExec (t , path )
97103 expected := expectedStderr (t , path )
98- output , err := cmd .Generate (ctx , cmd.Env {ExperimentalFeatures : true }, path , "" , & stderr )
104+
105+ switch args .Command {
106+ case "diff" :
107+ err = cmd .Diff (ctx , cmd.Env {ExperimentalFeatures : true }, path , "" , & stderr )
108+ case "generate" :
109+ output , err = cmd .Generate (ctx , cmd.Env {ExperimentalFeatures : true }, path , "" , & stderr )
110+ if err == nil {
111+ cmpDirectory (t , path , output )
112+ }
113+ default :
114+ t .Fatalf ("unknown command" )
115+ }
116+
99117 if len (expected ) == 0 && err != nil {
100- t .Fatalf ("sqlc generate failed: %s" , stderr .String ())
118+ t .Fatalf ("sqlc %s failed: %s" , args . Command , stderr .String ())
101119 }
102- cmpDirectory ( t , path , output )
120+
103121 if diff := cmp .Diff (expected , stderr .String ()); diff != "" {
104122 t .Errorf ("stderr differed (-want +got):\n %s" , diff )
105123 }
@@ -179,6 +197,29 @@ func expectedStderr(t *testing.T, dir string) string {
179197 return ""
180198}
181199
200+ type exec struct {
201+ Command string `json:"command"`
202+ }
203+
204+ func parseExec (t * testing.T , dir string ) exec {
205+ t .Helper ()
206+ var e exec
207+ path := filepath .Join (dir , "exec.json" )
208+ if _ , err := os .Stat (path ); ! os .IsNotExist (err ) {
209+ blob , err := os .ReadFile (path )
210+ if err != nil {
211+ t .Fatal (err )
212+ }
213+ if err := json .Unmarshal (blob , & e ); err != nil {
214+ t .Fatal (err )
215+ }
216+ }
217+ if e .Command == "" {
218+ e .Command = "generate"
219+ }
220+ return e
221+ }
222+
182223func BenchmarkReplay (b * testing.B ) {
183224 ctx := context .Background ()
184225 var dirs []string
0 commit comments