@@ -122,7 +122,7 @@ func customCommands() map[string]func(ts *testscript.TestScript, neg bool, args
122122 "cleanup_at_end" : cleanupAtEnd ,
123123
124124 // run_sql_in_sandbox runs a SQL query in a sandbox, and compares the result with an expected value
125- // invoke as "run_sql_in_sandbox $sb_dir 'SQL query' value_to_compare"
125+ // invoke as "run_sql_in_sandbox $sb_dir 'SQL query' {eq|lt|le|gt|ge} value_to_compare "
126126 // Notice that the query must return a single value
127127 "run_sql_in_sandbox" : runSqlInSandbox ,
128128 }
@@ -136,6 +136,9 @@ func cleanupAtEnd(ts *testscript.TestScript, neg bool, args []string) {
136136 sandboxName := path .Base (sandboxDir )
137137 // testscript.Defer runs at the end of the current test
138138 ts .Defer (func () {
139+ if os .Getenv ("ts_preserve" ) != "" {
140+ return
141+ }
139142 if ! common .DirExists (sandboxDir ) {
140143 return
141144 }
@@ -152,12 +155,13 @@ func cleanupAtEnd(ts *testscript.TestScript, neg bool, args []string) {
152155
153156// runSqlInSandbox is a testscript command that runs a SQL query in a sandbox
154157// use as:
155- // run_sql_in_sandbox "query" wanted
158+ // run_sql_in_sandbox "query" {eq|lt|le|gt|ge} wanted
156159func runSqlInSandbox (ts * testscript.TestScript , neg bool , args []string ) {
157- assertEqual [int ](ts , len (args ), 3 , "syntax: run_sql_in_sandbox sandbox_dir 'query' wanted_value" )
160+ assertEqual [int ](ts , len (args ), 4 , "syntax: run_sql_in_sandbox sandbox_dir 'query' {eq|lt|le|gt|ge} wanted_value" )
158161 sbDir := args [0 ]
159162 query := args [1 ]
160- wanted := args [2 ]
163+ operation := args [2 ]
164+ wanted := args [3 ]
161165 assertDirExists (ts , sbDir , globals .ErrDirectoryNotFound , sbDir )
162166
163167 var strResult string
@@ -171,5 +175,18 @@ func runSqlInSandbox(ts *testscript.TestScript, neg bool, args []string) {
171175 strResult = result .(string )
172176 }
173177
174- assertEqual [string ](ts , strResult , wanted , "got %s - want: %s" , strResult , wanted )
178+ switch strings .ToLower (operation ) {
179+ case "eq" , "=" , "==" :
180+ assertEqual [string ](ts , strResult , wanted , "got %s - want: %s" , strResult , wanted )
181+ case "ge" , ">=" :
182+ assertGreaterEqual [string ](ts , strResult , wanted , "got %s - want: >= %s" , strResult , wanted )
183+ case "gt" , ">" :
184+ assertGreater [string ](ts , strResult , wanted , "got %s - want: > %s" , strResult , wanted )
185+ case "le" , "<=" :
186+ assertGreaterEqual [string ](ts , wanted , strResult , "got %s - want: <= %s" , strResult , wanted )
187+ case "lt" , "<" :
188+ assertGreater [string ](ts , wanted , strResult , "got %s - want: < %s" , strResult , wanted )
189+ default :
190+ ts .Fatalf ("unrecognized operation %s" , operation )
191+ }
175192}
0 commit comments