mdtablefix 0.4.0

`mdtablefix` unb0rks and reflows Markdown tables so that each column has a uniform width. When the `--wrap` option is used, it also wraps paragraphs and list items to 80 columns.
Documentation
//! Tests for the tokenize_markdown helper.

use mdtablefix::wrap::{self, Token};

#[test]
fn unclosed_fence_yields_fence_tokens() {
    let lines = vec!["```rust", "let x = 42;", "fn foo() {}"];
    let joined = lines.join("\n");
    let tokens = wrap::tokenize_markdown(&joined);
    assert_eq!(
        tokens,
        vec![
            Token::Fence("```rust"),
            Token::Newline,
            Token::Fence("let x = 42;"),
            Token::Newline,
            Token::Fence("fn foo() {}"),
        ]
    );
}

#[test]
fn malformed_fence_is_text() {
    let source = "``~~\ncode\n``~~";
    let tokens = wrap::tokenize_markdown(source);
    assert_eq!(
        tokens,
        vec![
            Token::Text("``~~"),
            Token::Newline,
            Token::Text("code"),
            Token::Newline,
            Token::Text("``~~"),
        ]
    );
}

#[test]
fn incorrect_fence_length_is_text() {
    let source = "````\ncode\n````";
    let tokens = wrap::tokenize_markdown(source);
    assert_eq!(
        tokens,
        vec![
            Token::Text("````"),
            Token::Newline,
            Token::Text("code"),
            Token::Newline,
            Token::Text("````"),
        ]
    );
}
#[test]
fn unmatched_inline_code_is_text() {
    let source = "bad `code span";
    let tokens = wrap::tokenize_markdown(source);
    assert_eq!(
        tokens,
        vec![
            Token::Text("bad "),
            Token::Text("`"),
            Token::Text("code span"),
        ]
    );
}

#[test]
fn multiple_unmatched_backticks_are_text() {
    let source = "``bad code";
    let tokens = wrap::tokenize_markdown(source);
    assert_eq!(
        tokens,
        vec![
            Token::Text("``"),
            Token::Text("bad code"),
        ]
    );
}

#[test]
fn multibyte_characters_round_trip() {
    let source = "ßß `λ` fin";
    let tokens = wrap::tokenize_markdown(source);
    assert_eq!(
        tokens,
        vec![
            Token::Text("ßß "),
            Token::Code {
                raw: "`λ`",
                fence: "`",
                code: "λ",
            },
            Token::Text(" fin"),
        ]
    );
}