Skip to content

Commit ed986d7

Browse files
h3n4lclaude
andcommitted
test(doris): add regression test folder for user scripts
- Create examples/regression/ folder for user-reported SQL scripts - Update parser_test.go to recursively test subdirectories - Add first regression test: SHOW CREATE ROUTINE LOAD FOR 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent a7d9df6 commit ed986d7

2 files changed

Lines changed: 46 additions & 21 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SHOW CREATE ROUTINE LOAD FOR uDA6TB9nkmLWHYWLFCdCP6XrykhxxNa4gXA9yxZJU0

doris/parser_test.go

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,38 +42,62 @@ func TestDorisParser(t *testing.T) {
4242
require.NoError(t, err)
4343

4444
for _, file := range examples {
45+
if file.IsDir() {
46+
// Handle subdirectories like regression/
47+
subdir := path.Join("examples", file.Name())
48+
subFiles, err := os.ReadDir(subdir)
49+
require.NoError(t, err)
50+
for _, subFile := range subFiles {
51+
if subFile.IsDir() || !strings.HasSuffix(subFile.Name(), ".sql") {
52+
continue
53+
}
54+
filePath := path.Join(subdir, subFile.Name())
55+
t.Run(filePath, func(t *testing.T) {
56+
t.Parallel()
57+
runParserTest(t, filePath)
58+
})
59+
}
60+
continue
61+
}
62+
if !strings.HasSuffix(file.Name(), ".sql") {
63+
continue
64+
}
4565
filePath := path.Join("examples", file.Name())
4666
t.Run(filePath, func(t *testing.T) {
4767
t.Parallel()
48-
// read all the bytes from the file
49-
data, err := ioutil.ReadFile(filePath)
50-
require.NoError(t, err)
68+
runParserTest(t, filePath)
69+
})
70+
}
71+
}
5172

52-
dataString := strings.TrimRight(string(data), " \t\r\n;") + "\n;"
73+
func runParserTest(t *testing.T, filePath string) {
74+
// read all the bytes from the file
75+
data, err := ioutil.ReadFile(filePath)
76+
require.NoError(t, err)
5377

54-
input := antlr.NewInputStream(dataString)
78+
dataString := strings.TrimRight(string(data), " \t\r\n;") + "\n;"
5579

56-
lexer := doris.NewDorisLexer(input)
80+
input := antlr.NewInputStream(dataString)
5781

58-
stream := antlr.NewCommonTokenStream(lexer, 0)
59-
p := doris.NewDorisParser(stream)
82+
lexer := doris.NewDorisLexer(input)
6083

61-
lexerErrors := &CustomErrorListener{}
62-
lexer.RemoveErrorListeners()
63-
lexer.AddErrorListener(lexerErrors)
84+
stream := antlr.NewCommonTokenStream(lexer, 0)
85+
p := doris.NewDorisParser(stream)
6486

65-
parserErrors := &CustomErrorListener{}
66-
p.RemoveErrorListeners()
67-
p.AddErrorListener(parserErrors)
87+
lexerErrors := &CustomErrorListener{}
88+
lexer.RemoveErrorListeners()
89+
lexer.AddErrorListener(lexerErrors)
6890

69-
p.BuildParseTrees = true
91+
parserErrors := &CustomErrorListener{}
92+
p.RemoveErrorListeners()
93+
p.AddErrorListener(parserErrors)
7094

71-
tree := p.MultiStatements()
95+
p.BuildParseTrees = true
7296

73-
require.Equal(t, 0, lexerErrors.errors)
74-
require.Equal(t, 0, parserErrors.errors)
97+
tree := p.MultiStatements()
7598

76-
require.Equal(t, dataString, stream.GetTextFromRuleContext(tree))
77-
})
78-
}
99+
require.Equal(t, 0, lexerErrors.errors)
100+
require.Equal(t, 0, parserErrors.errors)
101+
102+
require.Equal(t, dataString, stream.GetTextFromRuleContext(tree))
79103
}

0 commit comments

Comments
 (0)