The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
92 lines
3.5 KiB
Rust
92 lines
3.5 KiB
Rust
use std::io::BufWriter;
|
|
use std::path::PathBuf;
|
|
|
|
use termcolor::{BufferWriter, ColorChoice};
|
|
|
|
use super::*;
|
|
|
|
const INPUT: &str = include_str!("input.md");
|
|
const OUTPUT_PATH: &[&str] =
|
|
&[env!("CARGO_MANIFEST_DIR"), "src", "markdown", "tests", "output.stdout"];
|
|
|
|
const TEST_WIDTH: usize = 80;
|
|
|
|
// We try to make some words long to create corner cases
|
|
const TXT: &str = r"Lorem ipsum dolor sit amet, consecteturadipiscingelit.
|
|
Fusce-id-urna-sollicitudin, pharetra nisl nec, lobortis tellus. In at
|
|
metus hendrerit, tincidunteratvel, ultrices turpis. Curabitur_risus_sapien,
|
|
porta-sed-nunc-sed, ultricesposuerelacus. Sed porttitor quis
|
|
dolor non venenatis. Aliquam ut. ";
|
|
|
|
const WRAPPED: &str = r"Lorem ipsum dolor sit amet, consecteturadipiscingelit. Fusce-id-urna-
|
|
sollicitudin, pharetra nisl nec, lobortis tellus. In at metus hendrerit,
|
|
tincidunteratvel, ultrices turpis. Curabitur_risus_sapien, porta-sed-nunc-sed,
|
|
ultricesposuerelacus. Sed porttitor quis dolor non venenatis. Aliquam ut. Lorem
|
|
ipsum dolor sit amet, consecteturadipiscingelit. Fusce-id-urna-
|
|
sollicitudin, pharetra nisl nec, lobortis tellus. In at metus hendrerit,
|
|
tincidunteratvel, ultrices turpis. Curabitur_risus_sapien, porta-sed-nunc-
|
|
sed, ultricesposuerelacus. Sed porttitor quis dolor non venenatis. Aliquam
|
|
ut. Sample link lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
|
|
consecteturadipiscingelit. Fusce-id-urna-sollicitudin, pharetra nisl nec,
|
|
lobortis tellus. In at metus hendrerit, tincidunteratvel, ultrices turpis.
|
|
Curabitur_risus_sapien, porta-sed-nunc-sed, ultricesposuerelacus. Sed porttitor
|
|
quis dolor non venenatis. Aliquam ut. ";
|
|
|
|
#[test]
|
|
fn test_wrapping_write() {
|
|
WIDTH.with(|w| w.set(TEST_WIDTH));
|
|
let mut buf = BufWriter::new(Vec::new());
|
|
let txt = TXT.replace("-\n", "-").replace("_\n", "_").replace('\n', " ").replace(" ", "");
|
|
write_wrapping(&mut buf, &txt, 0, None).unwrap();
|
|
write_wrapping(&mut buf, &txt, 4, None).unwrap();
|
|
write_wrapping(
|
|
&mut buf,
|
|
"Sample link lorem ipsum dolor sit amet. ",
|
|
4,
|
|
Some("link-address-placeholder"),
|
|
)
|
|
.unwrap();
|
|
write_wrapping(&mut buf, &txt, 0, None).unwrap();
|
|
let out = String::from_utf8(buf.into_inner().unwrap()).unwrap();
|
|
let out = out
|
|
.replace("\x1b\\", "")
|
|
.replace('\x1b', "")
|
|
.replace("]8;;", "")
|
|
.replace("link-address-placeholder", "");
|
|
|
|
for line in out.lines() {
|
|
assert!(line.len() <= TEST_WIDTH, "line length\n'{line}'")
|
|
}
|
|
|
|
assert_eq!(out, WRAPPED);
|
|
}
|
|
|
|
#[test]
|
|
fn test_output() {
|
|
// Capture `--bless` when run via ./x
|
|
let bless = std::env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
|
|
let ast = MdStream::parse_str(INPUT);
|
|
let bufwtr = BufferWriter::stderr(ColorChoice::Always);
|
|
let mut buffer = bufwtr.buffer();
|
|
ast.write_termcolor_buf(&mut buffer).unwrap();
|
|
|
|
let mut blessed = PathBuf::new();
|
|
blessed.extend(OUTPUT_PATH);
|
|
|
|
if bless {
|
|
std::fs::write(&blessed, buffer.into_inner()).unwrap();
|
|
eprintln!("blessed output at {}", blessed.display());
|
|
} else {
|
|
let output = buffer.into_inner();
|
|
if std::fs::read(blessed).unwrap() != output {
|
|
// hack: I don't know any way to write bytes to the captured stdout
|
|
// that cargo test uses
|
|
let mut out = std::io::stdout();
|
|
out.write_all(b"\n\nMarkdown output did not match. Expected:\n").unwrap();
|
|
out.write_all(&output).unwrap();
|
|
out.write_all(b"\n\n").unwrap();
|
|
panic!("markdown output mismatch");
|
|
}
|
|
}
|
|
}
|