@@ -91,7 +91,7 @@ impl From<ParserError> for DocError {
9191mod tests {
9292 use sqlparser:: parser:: ParserError ;
9393
94- use crate :: { comments:: CommentError , error:: DocError } ;
94+ use crate :: { comments:: CommentError , docs :: TableDoc , error:: DocError } ;
9595
9696 #[ test]
9797 fn test_doc_errors ( ) {
@@ -120,9 +120,8 @@ mod tests {
120120
121121 #[ test]
122122 fn test_doc_errors_from ( ) {
123- use std:: fs;
124-
125123 use crate :: comments:: Location ;
124+ use std:: fs;
126125 let Err ( io_error) = fs:: read_dir ( "INVALID" ) else {
127126 panic ! ( "there should not be a directory called INVALID" )
128127 } ;
@@ -162,9 +161,8 @@ mod tests {
162161 } ;
163162 let io_err_str = io_err. to_string ( ) ;
164163 let doc_io = DocError :: FileReadError ( io_err) ;
165- let src = doc_io
166- . source ( )
167- . map_or_else ( || panic ! ( "expected Some(source) for FileReadError" ) , |source| source) ;
164+ let src =
165+ doc_io. source ( ) . unwrap_or_else ( || panic ! ( "expected Some(source) for FileReadError" ) ) ;
168166 assert_eq ! ( src. to_string( ) , io_err_str) ;
169167
170168 let comment =
@@ -173,15 +171,52 @@ mod tests {
173171 let doc_comment = DocError :: CommentError ( comment) ;
174172 let src = doc_comment
175173 . source ( )
176- . map_or_else ( || panic ! ( "expected Some(source) for CommentError" ) , |source| source ) ;
174+ . unwrap_or_else ( || panic ! ( "expected Some(source) for CommentError" ) ) ;
177175 assert_eq ! ( src. to_string( ) , comment_str) ;
178176
179177 let parser = ParserError :: RecursionLimitExceeded ;
180178 let parser_str = parser. to_string ( ) ;
181179 let doc_parser = DocError :: SqlParserError ( parser) ;
182180 let src = doc_parser
183181 . source ( )
184- . map_or_else ( || panic ! ( "expected Some(source) for SqlParserError" ) , |source| source ) ;
182+ . unwrap_or_else ( || panic ! ( "expected Some(source) for SqlParserError" ) ) ;
185183 assert_eq ! ( src. to_string( ) , parser_str) ;
186184 }
185+
186+ fn table_doc_for_test ( name : & str ) -> TableDoc {
187+ TableDoc :: new ( None , name. to_string ( ) , None , vec ! [ ] )
188+ }
189+ #[ test]
190+ fn test_doc_error_display_invalid_object_name ( ) {
191+ let e =
192+ DocError :: InvalidObjectName { message : "bad object" . to_string ( ) , line : 12 , column : 34 } ;
193+ assert_eq ! ( e. to_string( ) , "bad object at line 12, column 34" ) ;
194+ }
195+
196+ #[ test]
197+ fn test_doc_error_display_table_not_found ( ) {
198+ let e = DocError :: TableNotFound { name : "users" . to_string ( ) } ;
199+ assert_eq ! ( e. to_string( ) , "Table not found in SqlDoc: users" ) ;
200+ }
201+
202+ #[ test]
203+ fn test_doc_error_display_duplicate_tables_found ( ) {
204+ let t1 = table_doc_for_test ( "dup_table" ) ;
205+ let t2 = table_doc_for_test ( "dup_table" ) ;
206+ let e = DocError :: DuplicateTablesFound { tables : vec ! [ t1, t2] } ;
207+ let s = e. to_string ( ) ;
208+ assert ! ( s. contains( "Duplicate tables found:" ) ) ;
209+ assert ! ( s. contains( "dup_table" ) , "output was: {s}" ) ;
210+ }
211+
212+ #[ test]
213+ fn test_doc_error_source_none_for_non_wrapped_variants ( ) {
214+ use std:: error:: Error as _;
215+ let invalid = DocError :: InvalidObjectName { message : "x" . to_string ( ) , line : 1 , column : 1 } ;
216+ assert ! ( invalid. source( ) . is_none( ) ) ;
217+ let not_found = DocError :: TableNotFound { name : "x" . to_string ( ) } ;
218+ assert ! ( not_found. source( ) . is_none( ) ) ;
219+ let dup = DocError :: DuplicateTablesFound { tables : vec ! [ ] } ;
220+ assert ! ( dup. source( ) . is_none( ) ) ;
221+ }
187222}
0 commit comments