#![allow(dead_code)] use nu_table::{string_width, NuTable, NuTableConfig}; use tabled::grid::records::vec_records::CellInfo; pub struct TestCase { cfg: NuTableConfig, termwidth: usize, expected: Option<String>, } impl TestCase { pub fn new(cfg: NuTableConfig, termwidth: usize, expected: Option<String>) -> Self { Self { cfg, termwidth, expected, } } } type Data = Vec<Vec<CellInfo<String>>>; pub fn test_table<I: IntoIterator<Item = TestCase>>(data: Data, tests: I) { for (i, test) in tests.into_iter().enumerate() { let actual = create_table(data.clone(), test.cfg.clone(), test.termwidth); assert_eq!( actual, test.expected, "\nfail i={:?} termwidth={}", i, test.termwidth ); if let Some(table) = actual { assert!(string_width(&table) <= test.termwidth); } } } pub fn create_table(data: Data, config: NuTableConfig, termwidth: usize) -> Option<String> { let table = NuTable::from(data); table.draw(config, termwidth) } pub fn create_row(count_columns: usize) -> Vec<CellInfo<String>> { let mut row = Vec::with_capacity(count_columns); for i in 0..count_columns { row.push(CellInfo::new(i.to_string())); } row } pub fn cell(text: &str) -> CellInfo<String> { CellInfo::new(text.to_string()) }