summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/formatting.rs24
-rw-r--r--src/cell.rs11
-rw-r--r--src/lib.rs101
-rw-r--r--src/row.rs56
4 files changed, 181 insertions, 11 deletions
diff --git a/examples/formatting.rs b/examples/formatting.rs
index a3cbc51..7822866 100644
--- a/examples/formatting.rs
+++ b/examples/formatting.rs
@@ -64,16 +64,16 @@ fn main() {
// Customized format with unicode
// Example to print
// ┌─────────────┬────────────┐
- // | Title 1 | Title 2 |
+ // │ Title 1 │ Title 2 │
// ├─────────────┼────────────┤
- // | Value 1 | Value 2 |
+ // │ Value 1 │ Value 2 │
// ├─────────────┼────────────┤
- // | Value three | Value four |
+ // │ Value three │ Value four │
// └─────────────┴────────────┘
println!("With unicode:");
table.set_format(format::FormatBuilder::new()
- .column_separator('|')
- .borders('|')
+ .column_separator('│')
+ .borders('│')
.separators(&[format::LinePosition::Top],
format::LineSeparator::new('─', '┬', '┌', '┐'))
.separators(&[format::LinePosition::Intern],
@@ -83,4 +83,18 @@ fn main() {
.padding(1, 1)
.build());
table.printstd();
+
+ // Customized format with unicode and different padding
+ // Example to print
+ // ┌───────────────┬──────────────┐
+ // │ Title 1 │ Title 2 │
+ // ├───────────────┼──────────────┤
+ // │ Value 1 │ Value 2 │
+ // ├───────────────┼──────────────┤
+ // │ Value three │ Value four │
+ // └───────────────┴──────────────┘
+ // Change individual format settings
+ println!("With unicode and padding:");
+ table.get_format().padding(2, 2);
+ table.printstd();
}
diff --git a/src/cell.rs b/src/cell.rs
index 16ab37e..af70a9d 100644
--- a/src/cell.rs
+++ b/src/cell.rs
@@ -384,4 +384,15 @@ mod tests {
assert_eq!(cell.style.len(), 0);
assert_eq!(cell.align, Alignment::LEFT);
}
+
+ #[test]
+ fn default_empty_cell() {
+ let cell = Cell::default();
+ assert_eq!(cell.align, Alignment::LEFT);
+ assert!(cell.style.is_empty());
+ assert_eq!(cell.get_content(), "");
+ assert_eq!(cell.to_string(), "");
+ assert_eq!(cell.get_height(), 1);
+ assert_eq!(cell.get_width(), 0);
+ }
}
diff --git a/src/lib.rs b/src/lib.rs
index e773cfd..df84fbe 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -640,6 +640,15 @@ mod tests {
+-----+----+-----+
";
assert_eq!(table.to_string().replace("\r\n", "\n"), out);
+ table.unset_titles();
+ let out = "\
++-----+----+-----+
+| a | bc | def |
++-----+----+-----+
+| def | bc | a |
++-----+----+-----+
+";
+ assert_eq!(table.to_string().replace("\r\n", "\n"), out);
}
#[test]
@@ -666,6 +675,86 @@ mod tests {
}
#[test]
+ fn table_size() {
+ let mut table = Table::new();
+ assert!(table.is_empty());
+ assert!(table.as_ref().is_empty());
+ assert_eq!(table.len(), 0);
+ assert_eq!(table.as_ref().len(), 0);
+ assert_eq!(table.get_column_num(), 0);
+ assert_eq!(table.as_ref().get_column_num(), 0);
+ table.add_empty_row();
+ assert!(!table.is_empty());
+ assert!(!table.as_ref().is_empty());
+ assert_eq!(table.len(), 1);
+ assert_eq!(table.as_ref().len(), 1);
+ assert_eq!(table.get_column_num(), 0);
+ assert_eq!(table.as_ref().get_column_num(), 0);
+ table[0].add_cell(Cell::default());
+ assert_eq!(table.get_column_num(), 1);
+ assert_eq!(table.as_ref().get_column_num(), 1);
+ }
+
+ #[test]
+ fn get_row() {
+ let mut table = Table::new();
+ table.add_row(Row::new(vec![Cell::new("a"), Cell::new("bc"), Cell::new("def")]));
+ table.add_row(Row::new(vec![Cell::new("def"), Cell::new("bc"), Cell::new("a")]));
+ assert!(table.get_row(12).is_none());
+ assert!(table.get_row(1).is_some());
+ assert_eq!(table.get_row(1).unwrap()[0].get_content(), "def");
+ assert!(table.get_mut_row(12).is_none());
+ assert!(table.get_mut_row(1).is_some());
+ table.get_mut_row(1).unwrap().add_cell(Cell::new("z"));
+ assert_eq!(table.get_row(1).unwrap()[3].get_content(), "z");
+ }
+
+ #[test]
+ fn add_empty_row() {
+ let mut table = Table::new();
+ assert_eq!(table.len(), 0);
+ table.add_empty_row();
+ assert_eq!(table.len(), 1);
+ assert_eq!(table[0].len(), 0);
+ }
+
+ #[test]
+ fn remove_row() {
+ let mut table = Table::new();
+ table.add_row(Row::new(vec![Cell::new("a"), Cell::new("bc"), Cell::new("def")]));
+ table.add_row(Row::new(vec![Cell::new("def"), Cell::new("bc"), Cell::new("a")]));
+ table.remove_row(12);
+ assert_eq!(table.len(), 2);
+ table.remove_row(0);
+ assert_eq!(table.len(), 1);
+ assert_eq!(table[0][0].get_content(), "def");
+ }
+
+ #[test]
+ fn insert_row() {
+ let mut table = Table::new();
+ table.add_row(Row::new(vec![Cell::new("a"), Cell::new("bc"), Cell::new("def")]));
+ table.add_row(Row::new(vec![Cell::new("def"), Cell::new("bc"), Cell::new("a")]));
+ table.insert_row(12, Row::new(vec![Cell::new("1"), Cell::new("2"), Cell::new("3")]));
+ assert_eq!(table.len(), 3);
+ assert_eq!(table[2][1].get_content(), "2");
+ table.insert_row(1, Row::new(vec![Cell::new("3"), Cell::new("4"), Cell::new("5")]));
+ assert_eq!(table.len(), 4);
+ assert_eq!(table[1][1].get_content(), "4");
+ assert_eq!(table[2][1].get_content(), "bc");
+ }
+
+ #[test]
+ fn set_element() {
+ let mut table = Table::new();
+ table.add_row(Row::new(vec![Cell::new("a"), Cell::new("bc"), Cell::new("def")]));
+ table.add_row(Row::new(vec![Cell::new("def"), Cell::new("bc"), Cell::new("a")]));
+ assert!(table.set_element("foo", 12, 12).is_err());
+ assert!(table.set_element("foo", 1, 1).is_ok());
+ assert_eq!(table[1][1].get_content(), "foo");
+ }
+
+ #[test]
fn no_linesep() {
let mut table = Table::new();
table.set_format(*FORMAT_NO_LINESEP);
@@ -773,7 +862,7 @@ mod tests {
table.add_row(Row::new(vec![Cell::new("def"), Cell::new("bc"), Cell::new("a")]));
table.set_titles(Row::new(vec![Cell::new("t1"), Cell::new("t2"), Cell::new("t3")]));
table.get_format().indent(8);
- let out = r" +-----+----+-----+
+ let out = " +-----+----+-----+
| t1 | t2 | t3 |
+=====+====+=====+
| a | bc | def |
@@ -816,8 +905,8 @@ mod tests {
fn test_unicode_separators() {
let mut table = Table::new();
table.set_format(format::FormatBuilder::new()
- .column_separator('|')
- .borders('|')
+ .column_separator('│')
+ .borders('│')
.separators(&[format::LinePosition::Top],
format::LineSeparator::new('─',
'┬',
@@ -840,11 +929,11 @@ mod tests {
table.set_titles(Row::new(vec![Cell::new("t1"), Cell::new("t2"), Cell::new("t3")]));
let out = "\
┌────┬────┬────┐
-| t1 | t2 | t3 |
+│ t1 │ t2 │ t3 │
├────┼────┼────┤
-| 1 | 1 | 1 |
+│ 1 │ 1 │ 1 │
├────┼────┼────┤
-| 2 | 2 | 2 |
+│ 2 │ 2 │ 2 │
└────┴────┴────┘
";
println!("{}", out);
diff --git a/src/row.rs b/src/row.rs
index 7bc5fa5..47498dd 100644
--- a/src/row.rs
+++ b/src/row.rs
@@ -248,3 +248,59 @@ macro_rules! row {
($style:ident => $($content:expr), *) => ($crate::row::Row::new(vec![$(cell!($style -> $content)), *]));
($($content:tt)*) => ($crate::row::Row::new(row!((); $($content)*)));
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use cell::Cell;
+
+ #[test]
+ fn row_default_empty() {
+ let row1 = Row::default();
+ assert_eq!(row1.len(), 0);
+ assert!(row1.is_empty());
+ }
+
+ #[test]
+ fn get_add_set_cell() {
+ let mut row = Row::from(vec!["foo", "bar", "foobar"]);
+ assert_eq!(row.len(), 3);
+ assert!(row.get_mut_cell(12).is_none());
+ let c1 = row.get_mut_cell(0).unwrap().clone();
+ assert_eq!(c1.get_content(), "foo");
+
+ let c1 = Cell::from(&"baz");
+ assert!(row.set_cell(c1.clone(), 1000).is_err());
+ assert!(row.set_cell(c1.clone(), 0).is_ok());
+ assert_eq!(row.get_cell(0).unwrap().get_content(), "baz");
+
+ row.add_cell(c1.clone());
+ assert_eq!(row.len(), 4);
+ assert_eq!(row.get_cell(3).unwrap().get_content(), "baz");
+ }
+
+ #[test]
+ fn insert_cell() {
+ let mut row = Row::from(vec!["foo", "bar", "foobar"]);
+ assert_eq!(row.len(), 3);
+ let cell = Cell::new("baz");
+ row.insert_cell(1000, cell.clone());
+ assert_eq!(row.len(), 4);
+ assert_eq!(row.get_cell(3).unwrap().get_content(), "baz");
+ row.insert_cell(1, cell.clone());
+ assert_eq!(row.len(), 5);
+ assert_eq!(row.get_cell(1).unwrap().get_content(), "baz");
+ }
+
+ #[test]
+ fn remove_cell() {
+ let mut row = Row::from(vec!["foo", "bar", "foobar"]);
+ assert_eq!(row.len(), 3);
+ row.remove_cell(1000);
+ assert_eq!(row.len(), 3);
+ row.remove_cell(1);
+ assert_eq!(row.len(), 2);
+ assert_eq!(row.get_cell(0).unwrap().get_content(), "foo");
+ assert_eq!(row.get_cell(1).unwrap().get_content(), "foobar");
+ }
+} \ No newline at end of file