Skip to content

Commit 1ee1827

Browse files
authored
Add -check-skipped flag to identify passing todo tests (#20)
1 parent 3235edc commit 1ee1827

File tree

330 files changed

+940
-336
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

330 files changed

+940
-336
lines changed

parser/CLAUDE.md

Lines changed: 10 additions & 0 deletions

parser/parser_test.go

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package parser_test
33
import (
44
"context"
55
"encoding/json"
6+
"flag"
67
"os"
78
"path/filepath"
89
"strings"
@@ -12,6 +13,10 @@ import (
1213
"github.com/kyleconroy/doubleclick/parser"
1314
)
1415

16+
// checkSkipped runs skipped todo tests to see which ones now pass.
17+
// Use with: go test ./parser -check-skipped -v
18+
var checkSkipped = flag.Bool("check-skipped", false, "Run skipped todo tests to see which ones now pass")
19+
1520
// testMetadata holds optional metadata for a test case
1621
type testMetadata struct {
1722
Todo bool `json:"todo,omitempty"`
@@ -87,15 +92,18 @@ func TestParser(t *testing.T) {
8792
}
8893
}
8994

90-
// Skip tests marked with skip: true
95+
// Skip tests marked with skip: true (these cause infinite loops or other critical issues)
9196
if metadata.Skip {
9297
t.Skip("Skipping: skip is true in metadata")
9398
}
9499

95100
// Skip tests where explain is explicitly false (e.g., ClickHouse couldn't parse it)
101+
// Unless -check-skipped is set and the test is a todo test
96102
if metadata.Explain != nil && !*metadata.Explain {
97-
t.Skipf("Skipping: explain is false in metadata")
98-
return
103+
if !(*checkSkipped && metadata.Todo) {
104+
t.Skipf("Skipping: explain is false in metadata")
105+
return
106+
}
99107
}
100108

101109
// Parse the query
@@ -107,7 +115,11 @@ func TestParser(t *testing.T) {
107115
return
108116
}
109117
if metadata.Todo {
110-
t.Skipf("TODO: Parser does not yet support: %s (error: %v)", query, err)
118+
if *checkSkipped {
119+
t.Skipf("STILL FAILING (parse error): %v", err)
120+
} else {
121+
t.Skipf("TODO: Parser does not yet support: %s (error: %v)", query, err)
122+
}
111123
return
112124
}
113125
t.Fatalf("Parse error: %v\nQuery: %s", err, query)
@@ -122,7 +134,11 @@ func TestParser(t *testing.T) {
122134

123135
if len(stmts) == 0 {
124136
if metadata.Todo {
125-
t.Skipf("TODO: Parser returned no statements for: %s", query)
137+
if *checkSkipped {
138+
t.Skipf("STILL FAILING (no statements): parser returned no statements")
139+
} else {
140+
t.Skipf("TODO: Parser returned no statements for: %s", query)
141+
}
126142
return
127143
}
128144
t.Fatalf("Expected at least 1 statement, got 0\nQuery: %s", query)
@@ -132,7 +148,11 @@ func TestParser(t *testing.T) {
132148
_, jsonErr := json.Marshal(stmts[0])
133149
if jsonErr != nil {
134150
if metadata.Todo {
135-
t.Skipf("TODO: JSON serialization failed: %v", jsonErr)
151+
if *checkSkipped {
152+
t.Skipf("STILL FAILING (JSON serialization): %v", jsonErr)
153+
} else {
154+
t.Skipf("TODO: JSON serialization failed: %v", jsonErr)
155+
}
136156
return
137157
}
138158
t.Fatalf("JSON marshal error: %v\nQuery: %s", jsonErr, query)
@@ -150,7 +170,11 @@ func TestParser(t *testing.T) {
150170
actual := strings.TrimSpace(parser.Explain(stmts[0]))
151171
if actual != expected {
152172
if metadata.Todo {
153-
t.Skipf("TODO: Explain output mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expected, actual)
173+
if *checkSkipped {
174+
t.Skipf("STILL FAILING (explain mismatch):\nExpected:\n%s\n\nGot:\n%s", expected, actual)
175+
} else {
176+
t.Skipf("TODO: Explain output mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expected, actual)
177+
}
154178
return
155179
}
156180
t.Errorf("Explain output mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expected, actual)
@@ -165,12 +189,21 @@ func TestParser(t *testing.T) {
165189
actualAST := strings.TrimSpace(string(actualASTBytes))
166190
if actualAST != expectedAST {
167191
if metadata.Todo {
168-
t.Skipf("TODO: AST JSON mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expectedAST, actualAST)
192+
if *checkSkipped {
193+
t.Skipf("STILL FAILING (AST mismatch):\nExpected:\n%s\n\nGot:\n%s", expectedAST, actualAST)
194+
} else {
195+
t.Skipf("TODO: AST JSON mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expectedAST, actualAST)
196+
}
169197
return
170198
}
171199
t.Errorf("AST JSON mismatch\nQuery: %s\nExpected:\n%s\n\nGot:\n%s", query, expectedAST, actualAST)
172200
}
173201
}
202+
203+
// If we get here with a todo test and -check-skipped is set, the test passes!
204+
if metadata.Todo && *checkSkipped {
205+
t.Logf("PASSES NOW - can remove todo flag from: %s", entry.Name())
206+
}
174207
})
175208
}
176209
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
{"explain":false,"todo": true}
1+
{
2+
"explain": false
3+
}

0 commit comments

Comments
 (0)