use super::*;
use crate::ir;
fn plain(t: &str) -> ir::Inline {
ir::Inline::plain(t)
}
#[test]
fn render_inlines_plain() {
assert_eq!(render_inlines(&[plain("hello")]), "hello");
}
#[test]
fn render_inlines_bold() {
let inlines = vec![ir::Inline {
text: "bold".into(),
bold: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "**bold**");
}
#[test]
fn render_inlines_italic() {
let inlines = vec![ir::Inline {
text: "em".into(),
italic: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "*em*");
}
#[test]
fn render_inlines_bold_italic() {
let inlines = vec![ir::Inline {
text: "bi".into(),
bold: true,
italic: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "***bi***");
}
#[test]
fn render_inlines_strikethrough() {
let inlines = vec![ir::Inline {
text: "del".into(),
strikethrough: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "~~del~~");
}
#[test]
fn render_inlines_underline() {
let inlines = vec![ir::Inline {
text: "ul".into(),
underline: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "<u>ul</u>");
}
#[test]
fn render_inlines_superscript() {
let inlines = vec![ir::Inline {
text: "sup".into(),
superscript: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "<sup>sup</sup>");
}
#[test]
fn render_inlines_subscript() {
let inlines = vec![ir::Inline {
text: "sub".into(),
subscript: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "<sub>sub</sub>");
}
#[test]
fn render_inlines_code() {
let inlines = vec![ir::Inline {
text: "code()".into(),
code: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "`code()`");
}
#[test]
fn render_inlines_link() {
let inlines = vec![ir::Inline {
text: "click".into(),
link: Some("https://example.com".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "[click](https://example.com)");
}
#[test]
fn render_inlines_footnote_ref() {
let inlines = vec![ir::Inline {
text: String::new(),
footnote_ref: Some("1".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "[^1]");
}
#[test]
fn render_inlines_bold_italic_strikethrough() {
let inlines = vec![ir::Inline {
text: "all".into(),
bold: true,
italic: true,
strikethrough: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "~~***all***~~");
}
#[test]
fn render_inlines_underline_bold_order() {
let inlines = vec![ir::Inline {
text: "ub".into(),
bold: true,
underline: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "<u>**ub**</u>");
}
#[test]
fn render_inlines_bold_link() {
let inlines = vec![ir::Inline {
text: "click".into(),
bold: true,
link: Some("https://example.com".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "[**click**](https://example.com)");
}
#[test]
fn render_inlines_bold_then_footnote_ref() {
let inlines = vec![ir::Inline {
text: "note".into(),
bold: true,
footnote_ref: Some("fn1".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "**note**[^fn1]");
}
#[test]
fn render_inlines_empty_text_bold_skips_markers() {
let inlines = vec![ir::Inline {
text: String::new(),
bold: true,
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "");
}
#[test]
fn render_inlines_empty_text_bold_with_footnote_ref() {
let inlines = vec![ir::Inline {
text: String::new(),
bold: true,
footnote_ref: Some("2".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "[^2]");
}
#[test]
fn render_inlines_empty_text_link() {
let inlines = vec![ir::Inline {
text: String::new(),
link: Some("https://example.com".into()),
..Default::default()
}];
assert_eq!(render_inlines(&inlines), "[](https://example.com)");
}