mcat 0.6.0

Terminal image, video, and Markdown viewer
use assert_cmd::Command;
use base64::{
    Engine,
    engine::general_purpose::{self},
};
use predicates::prelude::*;

#[test]
fn stdin_md_output_is_raw_markdown() {
    Command::cargo_bin("mcat")
        .unwrap()
        .arg("--output")
        .arg("md")
        .write_stdin("# Header\n\nhello world")
        .assert()
        .success()
        .stdout(predicate::str::starts_with("# Header"));
}

#[test]
fn stdin_md_output_is_html() {
    Command::cargo_bin("mcat")
        .unwrap()
        .arg("--output")
        .arg("html")
        .write_stdin("# Header\n\nhello world")
        .assert()
        .success()
        .stdout(predicate::str::contains("<h1>"))
        .stdout(predicate::str::contains("Header"));
}

#[test]
fn stdin_svg_output_is_image() {
    let svg = r#"<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"></svg>"#;
    let output = Command::cargo_bin("mcat")
        .unwrap()
        .arg("--output")
        .arg("image")
        .write_stdin(svg)
        .output()
        .unwrap();

    assert!(output.status.success());
    assert!(output.stdout.starts_with(b"\x89PNG"));
}

#[test]
fn stdin_pdf_output_is_image() {
    let pdf = general_purpose::STANDARD
        .decode(
            "JVBERi0xLjQKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgo+PgplbmRvYmoK\
         MiAwIG9iago8PC9UeXBlIC9QYWdlcwovS2lkcyBbMyAwIFJdCi9Db3VudCAxCj4+CmVuZG9iagoz\
         IDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUgODQy\
         XQovQ29udGVudHMgNSAwIFIKL1Jlc291cmNlcyA8PC9Qcm9jU2V0IFsvUERGIC9UZXh0XQovRm9u\
         dCA8PC9GMSA0IDAgUj4+Cj4+Cj4+CmVuZG9iago0IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5\
         cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL01hY1Jv\
         bWFuRW5jb2RpbmcKPj4KZW5kb2JqCjUgMCBvYmoKPDwvTGVuZ3RoIDUzCj4+CnN0cmVhbQpCVAov\
         RjEgMjAgVGYKMjIwIDQwMCBUZAooRHVtbXkgUERGKSBUagpFVAplbmRzdHJlYW0KZW5kb2JqCnhy\
         ZWYKMCA2CjAwMDAwMDAwMDAgNjU1MzUgZgowMDAwMDAwMDA5IDAwMDAwIG4KMDAwMDAwMDA2MyAw\
         MDAwMCBuCjAwMDAwMDAxMjQgMDAwMDAgbgowMDAwMDAwMjc3IDAwMDAwIG4KMDAwMDAwMDM5MiAw\
         MDAwMCBuCnRyYWlsZXIKPDwvU2l6ZSA2Ci9Sb290IDEgMCBSCj4+CnN0YXJ0eHJlZgo0OTUKJSVF\
         T0YK",
        )
        .unwrap();

    let output = Command::cargo_bin("mcat")
        .unwrap()
        .arg("--output")
        .arg("image")
        .write_stdin(pdf)
        .output()
        .unwrap();

    assert!(output.status.success());
    assert!(output.stdout.starts_with(b"\x89PNG"));
}