@@ -86,3 +86,104 @@ impl From<ParserError> for DocError {
8686 Self :: SqlParserError ( e)
8787 }
8888}
89+
90+ #[ cfg( test) ]
91+ mod tests {
92+ use sqlparser:: parser:: ParserError ;
93+
94+ use crate :: {
95+ error:: DocError , comments:: CommentError
96+ } ;
97+
98+ #[ test]
99+ fn test_doc_errors ( ) {
100+ use std:: fs;
101+
102+ use crate :: comments:: Location ;
103+ let Err ( io_error) = fs:: read_dir ( "INVALID" ) else {
104+ panic ! ( "there should not be a directory called INVALID" )
105+ } ;
106+ let io_error_str = io_error. to_string ( ) ;
107+ let read_error = DocError :: FileReadError ( io_error) ;
108+ let expected_read_error = "file read error: " . to_owned ( ) + & io_error_str;
109+ assert ! ( read_error. to_string( ) . contains( & expected_read_error) ) ;
110+
111+ let comment_error = DocError :: CommentError ( CommentError :: UnmatchedMultilineCommentStart {
112+ location : Location :: default ( ) ,
113+ } ) ;
114+ let expected_comment_error =
115+ "comment parse error: unmatched block comment start at line 1, column 1" ;
116+ assert_eq ! ( comment_error. to_string( ) , expected_comment_error) ;
117+
118+ let sql_error = DocError :: SqlParserError ( ParserError :: RecursionLimitExceeded ) ;
119+ let expected_sql_error = "SQL parse error sql parser error: recursion limit exceeded" ;
120+ assert_eq ! ( sql_error. to_string( ) , expected_sql_error) ;
121+ }
122+
123+ #[ test]
124+ fn test_doc_errors_from ( ) {
125+ use std:: fs;
126+
127+ use crate :: comments:: Location ;
128+ let Err ( io_error) = fs:: read_dir ( "INVALID" ) else {
129+ panic ! ( "there should not be a directory called INVALID" )
130+ } ;
131+ let io_kind = io_error. kind ( ) ;
132+ let doc_io_error = DocError :: from ( io_error) ;
133+ match doc_io_error {
134+ DocError :: FileReadError ( inner) => assert_eq ! ( inner. kind( ) , io_kind) ,
135+ _ => panic ! ( "expected instance of DocError::FileReadError" ) ,
136+ }
137+
138+ let comment_error =
139+ CommentError :: UnmatchedMultilineCommentStart { location : Location :: default ( ) } ;
140+ let comment_error_str = comment_error. to_string ( ) ;
141+ let doc_comment_error: DocError = comment_error. into ( ) ;
142+ match doc_comment_error {
143+ DocError :: CommentError ( inner) => assert_eq ! ( inner. to_string( ) , comment_error_str) ,
144+ _ => panic ! ( "expected instance of DocError::CommentError" ) ,
145+ }
146+
147+ let parser_error = ParserError :: RecursionLimitExceeded ;
148+ let parser_error_str = parser_error. to_string ( ) ;
149+ let doc_parser_error: DocError = parser_error. into ( ) ;
150+ match doc_parser_error {
151+ DocError :: SqlParserError ( inner) => assert_eq ! ( inner. to_string( ) , parser_error_str) ,
152+ _ => panic ! ( "expected instance of DocError::SqlParserError" ) ,
153+ }
154+ }
155+
156+ #[ test]
157+ fn test_doc_error_source ( ) {
158+ use std:: { error:: Error , fs} ;
159+
160+ use crate :: comments:: Location ;
161+
162+ let Err ( io_err) = fs:: read_dir ( "INVALID" ) else {
163+ panic ! ( "there should not be a directory called INVALID" )
164+ } ;
165+ let io_err_str = io_err. to_string ( ) ;
166+ let doc_io = DocError :: FileReadError ( io_err) ;
167+ let src = doc_io
168+ . source ( )
169+ . map_or_else ( || panic ! ( "expected Some(source) for FileReadError" ) , |source| source) ;
170+ assert_eq ! ( src. to_string( ) , io_err_str) ;
171+
172+ let comment =
173+ CommentError :: UnmatchedMultilineCommentStart { location : Location :: default ( ) } ;
174+ let comment_str = comment. to_string ( ) ;
175+ let doc_comment = DocError :: CommentError ( comment) ;
176+ let src = doc_comment
177+ . source ( )
178+ . map_or_else ( || panic ! ( "expected Some(source) for CommentError" ) , |source| source) ;
179+ assert_eq ! ( src. to_string( ) , comment_str) ;
180+
181+ let parser = ParserError :: RecursionLimitExceeded ;
182+ let parser_str = parser. to_string ( ) ;
183+ let doc_parser = DocError :: SqlParserError ( parser) ;
184+ let src = doc_parser
185+ . source ( )
186+ . map_or_else ( || panic ! ( "expected Some(source) for SqlParserError" ) , |source| source) ;
187+ assert_eq ! ( src. to_string( ) , parser_str) ;
188+ }
189+ }
0 commit comments