#![deny(warnings, clippy::all)]
use insta::glob;
use pulldown_cmark::{Options, Parser};
use syntect::parsing::SyntaxSet;
use pulldown_cmark_mdcat::resources::NoopResourceHandler;
use pulldown_cmark_mdcat::terminal::{TerminalProgram, TerminalSize};
use pulldown_cmark_mdcat::{Environment, Settings, Theme};
fn render_to_string<S: AsRef<str>>(markdown: S, settings: &Settings) -> String {
let parser = Parser::new_ext(
markdown.as_ref(),
Options::ENABLE_TASKLISTS | Options::ENABLE_STRIKETHROUGH | Options::ENABLE_TABLES,
);
let mut sink = Vec::new();
let env = Environment {
hostname: "HOSTNAME".to_string(),
..Environment::for_local_directory(&std::env::current_dir().unwrap()).unwrap()
};
pulldown_cmark_mdcat::push_tty(settings, &env, &NoopResourceHandler, &mut sink, parser)
.unwrap();
String::from_utf8(sink).unwrap()
}
#[test]
fn lines_are_below_column_width_of_terminal() {
glob!("markdown/wrapping/*.md", |markdown_file| {
let markdown = std::fs::read_to_string(markdown_file).unwrap();
let settings = Settings {
terminal_capabilities: TerminalProgram::Ansi.capabilities(),
terminal_size: TerminalSize::default(),
theme: Theme::default(),
syntax_set: &SyntaxSet::load_defaults_newlines(),
};
let rendered = render_to_string(markdown, &settings);
for line in rendered.lines() {
let width = textwrap::core::display_width(line);
assert!(
width <= 80,
"line {} has length {} in test case {}",
line,
width,
markdown_file
.with_extension("")
.file_name()
.unwrap()
.to_str()
.unwrap()
);
}
});
}