use ppt_rs::generator::{Table, TableRow, TableCell, TableBuilder};
use ppt_rs::generator::table::generate_table_xml;
#[test]
fn test_generate_simple_table_xml() {
let table = Table::from_data(
vec![vec!["A", "B"], vec!["1", "2"]],
vec![1000000, 1000000],
0,
0,
);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("a:tbl"));
assert!(xml.contains("a:tr"));
assert!(xml.contains("a:tc"));
assert!(xml.contains("a:t>A</a:t>"));
assert!(xml.contains("a:t>B</a:t>"));
}
#[test]
fn test_generate_table_with_position() {
let table = Table::from_data(
vec![vec!["A", "B"]],
vec![1000000, 1000000],
500000,
1000000,
);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("x=\"500000\""));
assert!(xml.contains("y=\"1000000\""));
}
#[test]
fn test_generate_table_with_dimensions() {
let table = Table::from_data(
vec![vec!["A", "B", "C"]],
vec![1000000, 1000000, 1000000],
0,
0,
);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("cx=\"3000000\""));
}
#[test]
fn test_generate_table_with_bold_cells() {
let cells = vec![
TableCell::new("Bold").bold(),
TableCell::new("Regular"),
];
let row = TableRow::new(cells);
let table = Table::new(vec![row], vec![1000000, 1000000], 0, 0);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains(r#"b="1""#));
assert!(xml.contains("<a:t>Regular</a:t>"));
}
#[test]
fn test_generate_table_with_colors() {
let cells = vec![
TableCell::new("Red").background_color("FF0000"),
TableCell::new("Blue").background_color("0000FF"),
];
let row = TableRow::new(cells);
let table = Table::new(vec![row], vec![1000000, 1000000], 0, 0);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("FF0000"));
assert!(xml.contains("0000FF"));
}
#[test]
fn test_generate_table_with_special_characters() {
let cells = vec![
TableCell::new("Test & <Data>"),
TableCell::new("More \"Quotes\""),
];
let row = TableRow::new(cells);
let table = Table::new(vec![row], vec![1000000, 1000000], 0, 0);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("&"));
assert!(xml.contains("<"));
assert!(xml.contains(">"));
assert!(xml.contains("""));
}
#[test]
fn test_generate_3x3_table() {
let table = Table::from_data(
vec![
vec!["A", "B", "C"],
vec!["1", "2", "3"],
vec!["X", "Y", "Z"],
],
vec![1000000, 1000000, 1000000],
0,
0,
);
let xml = generate_table_xml(&table, 1);
let row_count = xml.matches("<a:tr").count();
assert_eq!(row_count, 3);
let cell_count = xml.matches("<a:tc>").count();
assert_eq!(cell_count, 9);
}
#[test]
fn test_generate_table_with_builder() {
let table = TableBuilder::new(vec![1000000, 1000000])
.position(500000, 1000000)
.add_simple_row(vec!["Header 1", "Header 2"])
.add_simple_row(vec!["Data 1", "Data 2"])
.build();
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("Header 1"));
assert!(xml.contains("Header 2"));
assert!(xml.contains("Data 1"));
assert!(xml.contains("Data 2"));
}
#[test]
fn test_table_width_calculation() {
let table = Table::from_data(
vec![vec!["A", "B", "C"]],
vec![1000000, 2000000, 3000000],
0,
0,
);
assert_eq!(table.width(), 6000000);
}
#[test]
fn test_table_height_calculation() {
let cells1 = vec![TableCell::new("A")];
let cells2 = vec![TableCell::new("B")];
let cells3 = vec![TableCell::new("C")];
let row1 = TableRow::new(cells1).with_height(500000);
let row2 = TableRow::new(cells2).with_height(600000);
let row3 = TableRow::new(cells3);
let table = Table::new(vec![row1, row2, row3], vec![1000000], 0, 0);
assert_eq!(table.height(), 1500000);
}
#[test]
fn test_generate_wide_table() {
let table = Table::from_data(
vec![vec!["A", "B", "C", "D", "E"]],
vec![1000000; 5],
0,
0,
);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("a:t>A</a:t>"));
assert!(xml.contains("a:t>E</a:t>"));
}
#[test]
fn test_generate_tall_table() {
let mut rows = Vec::new();
for i in 0..10 {
let cells = vec![TableCell::new(&format!("Row {}", i))];
rows.push(TableRow::new(cells));
}
let table = Table::new(rows, vec![1000000], 0, 0);
let xml = generate_table_xml(&table, 1);
let row_count = xml.matches("<a:tr").count();
assert_eq!(row_count, 10);
}
#[test]
fn test_generate_table_with_mixed_formatting() {
let cells = vec![
TableCell::new("Bold Red").bold().background_color("FF0000"),
TableCell::new("Regular Blue").background_color("0000FF"),
TableCell::new("Bold Green").bold().background_color("00FF00"),
];
let row = TableRow::new(cells);
let table = Table::new(vec![row], vec![1000000, 1000000, 1000000], 0, 0);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("FF0000"));
assert!(xml.contains("0000FF"));
assert!(xml.contains("00FF00"));
assert!(xml.matches(r#"b="1""#).count() >= 2);
}
#[test]
fn test_generate_table_shape_id() {
let table = Table::from_data(
vec![vec!["A"]],
vec![1000000],
0,
0,
);
let xml1 = generate_table_xml(&table, 1);
let xml2 = generate_table_xml(&table, 2);
assert!(xml1.contains("id=\"1\""));
assert!(xml2.contains("id=\"2\""));
}
#[test]
fn test_generate_table_xml_structure() {
let table = Table::from_data(
vec![vec!["A", "B"]],
vec![1000000, 1000000],
0,
0,
);
let xml = generate_table_xml(&table, 1);
assert!(xml.contains("p:graphicFrame"));
assert!(xml.contains("p:nvGraphicFramePr"));
assert!(xml.contains("p:xfrm"));
assert!(xml.contains("a:graphic"));
assert!(xml.contains("a:graphicData"));
assert!(xml.contains("a:tbl"));
assert!(xml.contains("a:tblPr"));
assert!(xml.contains("a:tblGrid"));
assert!(xml.contains("a:gridCol"));
assert!(xml.contains("a:tr"));
assert!(xml.contains("a:tc"));
assert!(xml.contains("a:txBody"));
}