@@ -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