Skip to content

Commit 8bccefb

Browse files
committed
Increased Code Coverage for errors.rs
1 parent c74111a commit 8bccefb

4 files changed

Lines changed: 73 additions & 23 deletions

File tree

src/comments.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ mod tests {
437437
.path()
438438
.file_name()
439439
.and_then(|s| s.to_str())
440-
.map_or_else(|| panic!("test file name should be valid UTF-8"), |val| val);
440+
.unwrap_or_else(|| panic!("test file name should be valid UTF-8"));
441441

442442
match filename {
443443
"with_single_line_comments.sql" => {

src/docs.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,10 @@ mod tests {
259259
let tables = vec![table_doc];
260260
let sql_doc = SqlFileDoc::new(tables);
261261
let sql_doc_val =
262-
sql_doc.tables().first().map_or_else(|| panic!("unable to find tables"), |val| val);
262+
sql_doc.tables().first().unwrap_or_else(|| panic!("unable to find table"));
263263
assert_eq!(sql_doc_val.name(), "user");
264-
let sql_doc_val_column = sql_doc_val
265-
.columns()
266-
.first()
267-
.map_or_else(|| panic!("unable to find columns"), |val| val);
264+
let sql_doc_val_column =
265+
sql_doc_val.columns().first().unwrap_or_else(|| panic!("unable to find columns"));
268266
assert_eq!(sql_doc_val_column.name(), "id");
269267
}
270268

@@ -285,7 +283,7 @@ mod tests {
285283
.path()
286284
.file_name()
287285
.and_then(|s| s.to_str())
288-
.map_or_else(|| panic!("unable to find file name"), |val| val);
286+
.unwrap_or_else(|| panic!("unable to find file name"));
289287

290288
match filename {
291289
"with_single_line_comments.sql" | "with_mixed_comments.sql" => {
@@ -423,4 +421,11 @@ mod tests {
423421

424422
docs
425423
}
424+
425+
#[test]
426+
fn test_doc() {
427+
let col_doc = ColumnDoc::new("test".to_string(), Some("comment".to_string()));
428+
assert_eq!(col_doc.doc(), Some("comment"));
429+
assert_eq!(col_doc.name(), "test");
430+
}
426431
}

src/error.rs

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ impl From<ParserError> for DocError {
9191
mod 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
}

src/sql_doc.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
};
1212

1313
/// Structure for Sql Documentation, built from [`TableDoc`] and
14-
#[derive(Debug, Eq, PartialEq)]
14+
#[derive(Clone, Debug, Eq, PartialEq)]
1515
pub struct SqlDoc {
1616
/// Holds the [`Vec`] of all tables found in all specified files.
1717
tables: Vec<TableDoc>,
@@ -205,7 +205,8 @@ mod tests {
205205
use crate::{
206206
SqlDoc,
207207
docs::{ColumnDoc, SqlFileDoc, TableDoc},
208-
error::DocError, sql_doc::SqlDocBuilder,
208+
error::DocError,
209+
sql_doc::SqlDocBuilder,
209210
};
210211

211212
#[test]
@@ -441,11 +442,11 @@ mod tests {
441442
#[test]
442443
fn test_sql_builder_deny_from_path() {
443444
let actual_builder = SqlDoc::from_path("path").deny("path1").deny("path2").retain_files();
444-
let expected_builder = SqlDocBuilder{
445+
let expected_builder = SqlDocBuilder {
445446
source: crate::sql_doc::SqlFileDocSource::File(PathBuf::from("path")),
446447
deny: vec!["path1".to_string(), "path2".to_string()],
447-
retain_files: true
448-
};
448+
retain_files: true,
449+
};
449450
assert_eq!(actual_builder, expected_builder);
450451
}
451452
#[test]
@@ -457,10 +458,19 @@ mod tests {
457458
let sample = sample_sql();
458459
let (contents, expected): (Vec<_>, Vec<_>) = sample.into_iter().unzip();
459460
fs::write(&file, contents.join(""))?;
460-
let sql_doc = SqlDoc::from_path(&file).build()?;
461-
let sql_doc_deny = SqlDoc::from_dir(&base).deny(file.to_str().map_or_else(|| panic!("could not find path"), |val| val)).retain_files().build()?;
461+
let sql_doc = SqlDoc::from_path(&file).retain_files().build()?;
462+
let sql_doc_deny = SqlDoc::from_dir(&base)
463+
.deny(file.to_str().unwrap_or_else(|| panic!("unable to find file val")))
464+
.retain_files()
465+
.build()?;
462466
let doc_deny = SqlDoc::new(vec![], Some(vec![]));
463-
let doc = SqlDoc::new(expected.into_iter().flat_map(SqlDoc::into_tables).collect(), None);
467+
let doc = SqlDoc::new(
468+
expected.clone().into_iter().flat_map(SqlDoc::into_tables).collect(),
469+
Some(vec![(
470+
file,
471+
SqlFileDoc::new(expected.into_iter().flat_map(SqlDoc::into_tables).collect()),
472+
)]),
473+
);
464474
assert_eq!(sql_doc, doc);
465475
assert_eq!(sql_doc_deny, doc_deny);
466476
let _ = fs::remove_dir_all(&base);

0 commit comments

Comments
 (0)