use markdown2pdf::markdown::*;
use super::common::parse;
#[test]
fn basic_single_star() {
let tokens = parse("*x*");
assert!(matches!(tokens[0], Token::Emphasis { level: 1, .. }));
}
#[test]
fn basic_double_star() {
let tokens = parse("**x**");
assert!(matches!(tokens[0], Token::Emphasis { level: 2, .. }));
}
#[test]
fn triple_star_is_nested_emphasis() {
let tokens = parse("***x***");
let text = Token::collect_all_text(&tokens);
assert_eq!(text, "x");
assert!(matches!(&tokens[0], Token::Emphasis { .. }));
}
#[test]
fn basic_underscore_emphasis() {
let tokens = parse("_x_");
assert!(matches!(tokens[0], Token::Emphasis { level: 1, .. }));
}
#[test]
fn intra_word_underscore_not_emphasis() {
let tokens = parse("foo_bar_baz");
assert!(!tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn intra_word_asterisk_is_emphasis() {
let tokens = parse("foo*bar*baz");
assert!(tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn same_char_only_matching() {
let tokens = parse("*x_");
assert!(!tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
let tokens = parse("_x*");
assert!(!tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn whitespace_after_opener_blocks_emphasis() {
let tokens = parse("* x*");
assert!(!tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn whitespace_before_closer_blocks_emphasis() {
let tokens = parse("*x *");
assert!(!tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn unbalanced_run_open_overflow() {
let tokens = parse("***foo*");
let text = Token::collect_all_text(&tokens);
assert!(text.contains("foo"));
assert!(text.contains('*'));
}
#[test]
fn unbalanced_run_close_overflow() {
let tokens = parse("*foo***");
let text = Token::collect_all_text(&tokens);
assert!(text.contains("foo"));
assert!(text.contains('*'));
}
#[test]
fn punctuation_flanking_currency_symbol() {
let tokens = parse("*£*");
assert!(tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn left_flanking_with_ascii_punct_close() {
let tokens = parse("*foo.*");
assert!(tokens.iter().any(|t| matches!(t, Token::Emphasis { .. })));
}
#[test]
fn nested_emphasis_strong_in_em() {
let tokens = parse("*one **two** three*");
let Token::Emphasis { content, .. } = &tokens[0] else {
panic!("expected outer Emphasis, got {:?}", tokens);
};
assert!(content.iter().any(|t| matches!(t, Token::Emphasis { level: 2, .. })));
}