use super::*;
#[test]
fn test_table_all_borders() {
let cell = TableCell {
content: vec![Block::Paragraph(Paragraph {
style: ParagraphStyle::default(),
runs: vec![Run {
text: "All borders".to_string(),
style: TextStyle::default(),
href: None,
footnote: None,
}],
})],
border: Some(CellBorder {
top: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Solid,
}),
bottom: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Solid,
}),
left: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Solid,
}),
right: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Solid,
}),
}),
..TableCell::default()
};
let table = Table {
rows: vec![TableRow {
cells: vec![cell],
height: None,
}],
column_widths: vec![100.0],
..Table::default()
};
let doc = make_doc(vec![make_flow_page(vec![Block::Table(table)])]);
let result = generate_typst(&doc).unwrap().source;
assert!(result.contains("top:"), "Expected top border in: {result}");
assert!(
result.contains("bottom:"),
"Expected bottom border in: {result}"
);
assert!(
result.contains("left:"),
"Expected left border in: {result}"
);
assert!(
result.contains("right:"),
"Expected right border in: {result}"
);
}
#[test]
fn test_table_dashed_border_codegen() {
let cell = TableCell {
content: vec![Block::Paragraph(Paragraph {
style: ParagraphStyle::default(),
runs: vec![Run {
text: "Dashed".to_string(),
style: TextStyle::default(),
href: None,
footnote: None,
}],
})],
border: Some(CellBorder {
top: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Dashed,
}),
bottom: Some(BorderSide {
width: 1.0,
color: Color::new(255, 0, 0),
style: BorderLineStyle::Dotted,
}),
left: None,
right: None,
}),
..TableCell::default()
};
let table = Table {
rows: vec![TableRow {
cells: vec![cell],
height: None,
}],
column_widths: vec![100.0],
..Table::default()
};
let doc = make_doc(vec![make_flow_page(vec![Block::Table(table)])]);
let result = generate_typst(&doc).unwrap().source;
assert!(
result.contains("dash: \"dashed\""),
"Expected dashed dash pattern in: {result}"
);
assert!(
result.contains("dash: \"dotted\""),
"Expected dotted dash pattern in: {result}"
);
}
#[test]
fn test_shape_dashed_stroke_codegen() {
let doc = make_doc(vec![make_fixed_page(
960.0,
540.0,
vec![make_shape_element(
10.0,
10.0,
100.0,
100.0,
ShapeKind::Rectangle,
Some(Color::new(0, 128, 255)),
Some(BorderSide {
width: 2.0,
color: Color::black(),
style: BorderLineStyle::Dashed,
}),
)],
)]);
let output = generate_typst(&doc).unwrap();
assert!(
output.source.contains("dash: \"dashed\""),
"Expected dashed stroke in: {}",
output.source
);
}
#[test]
fn test_shape_dash_dot_stroke_codegen() {
let doc = make_doc(vec![make_fixed_page(
960.0,
540.0,
vec![make_shape_element(
10.0,
10.0,
100.0,
100.0,
ShapeKind::Ellipse,
None,
Some(BorderSide {
width: 1.0,
color: Color::new(0, 0, 255),
style: BorderLineStyle::DashDot,
}),
)],
)]);
let output = generate_typst(&doc).unwrap();
assert!(
output.source.contains("dash: \"dash-dotted\""),
"Expected dash-dotted stroke in: {}",
output.source
);
}
#[test]
fn test_border_line_style_to_typst_mapping() {
assert_eq!(border_line_style_to_typst(BorderLineStyle::Solid), "solid");
assert_eq!(
border_line_style_to_typst(BorderLineStyle::Dashed),
"dashed"
);
assert_eq!(
border_line_style_to_typst(BorderLineStyle::Dotted),
"dotted"
);
assert_eq!(
border_line_style_to_typst(BorderLineStyle::DashDot),
"dash-dotted"
);
assert_eq!(
border_line_style_to_typst(BorderLineStyle::DashDotDot),
"dash-dotted"
);
assert_eq!(
border_line_style_to_typst(BorderLineStyle::Double),
"dashed"
);
assert_eq!(border_line_style_to_typst(BorderLineStyle::None), "solid");
}
#[test]
fn test_solid_border_no_dash_param() {
let cell = TableCell {
content: vec![Block::Paragraph(Paragraph {
style: ParagraphStyle::default(),
runs: vec![Run {
text: "Solid".to_string(),
style: TextStyle::default(),
href: None,
footnote: None,
}],
})],
border: Some(CellBorder {
top: Some(BorderSide {
width: 1.0,
color: Color::black(),
style: BorderLineStyle::Solid,
}),
bottom: None,
left: None,
right: None,
}),
..TableCell::default()
};
let table = Table {
rows: vec![TableRow {
cells: vec![cell],
height: None,
}],
column_widths: vec![100.0],
..Table::default()
};
let doc = make_doc(vec![make_flow_page(vec![Block::Table(table)])]);
let result = generate_typst(&doc).unwrap().source;
assert!(
!result.contains("dash:"),
"Solid border should not have dash parameter in: {result}"
);
assert!(
result.contains("1pt + rgb(0, 0, 0)"),
"Expected simple solid format in: {result}"
);
}