mdtablefix 0.3.1

`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"),
        ]
    );
}