indented-blocks 0.6.0

parser for indented blocks
Documentation
use super::*;
use crate::indention::Indented;

#[test]
fn test_parse_nbs0() {
    assert_eq!(parse_nested_blocks("", EmptyLinesMode::Skip), []);
}

#[test]
fn test_parse_nbs1() {
    assert_eq!(
        parse_nested_blocks("a", EmptyLinesMode::Skip),
        [Block {
            head: Indented {
                indent: "",
                data: "a"
            },
            subs: vec![]
        }]
    );
    assert_eq!(
        parse_nested_blocks("a\n", EmptyLinesMode::Skip),
        [Block {
            head: Indented {
                indent: "",
                data: "a"
            },
            subs: vec![]
        }]
    );
}

#[test]
fn test_parse_nbs2() {
    assert_eq!(
        parse_nested_blocks("a\nb", EmptyLinesMode::Skip),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "b"
                },
                subs: vec![]
            }
        ]
    );
    assert_eq!(
        parse_nested_blocks("a\n\r\nb\n", EmptyLinesMode::Skip),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "b"
                },
                subs: vec![]
            }
        ]
    );
}

#[test]
fn test_parse_nbs3() {
    assert_eq!(
        parse_nested_blocks("a\n  b", EmptyLinesMode::Skip),
        [Block {
            head: Indented {
                indent: "",
                data: "a"
            },
            subs: vec![Block {
                head: Indented {
                    indent: "  ",
                    data: "b"
                },
                subs: vec![]
            }]
        }]
    );
    assert_eq!(
        parse_nested_blocks("a\n\r\n  b\n", EmptyLinesMode::Skip),
        [Block {
            head: Indented {
                indent: "",
                data: "a"
            },
            subs: vec![Block {
                head: Indented {
                    indent: "  ",
                    data: "b"
                },
                subs: vec![]
            }]
        }]
    );
    assert_eq!(
        parse_nested_blocks("a\n\r\n  b\nc", EmptyLinesMode::HonorIndent),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: ""
                },
                subs: vec![Block {
                    head: Indented {
                        indent: "  ",
                        data: "b"
                    },
                    subs: vec![]
                }]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "c"
                },
                subs: vec![]
            }
        ]
    );
    assert_eq!(
        parse_nested_blocks("a\n\r\n  b\nc", EmptyLinesMode::PrevIndent),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: ""
                },
                subs: vec![Block {
                    head: Indented {
                        indent: "  ",
                        data: "b"
                    },
                    subs: vec![]
                }]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "c"
                },
                subs: vec![]
            }
        ]
    );
    assert_eq!(
        parse_nested_blocks("a\n  \n  b\nc", EmptyLinesMode::HonorIndent),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![
                    Block {
                        head: Indented {
                            indent: "  ",
                            data: ""
                        },
                        subs: vec![],
                    },
                    Block {
                        head: Indented {
                            indent: "  ",
                            data: "b"
                        },
                        subs: vec![]
                    },
                ]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "c"
                },
                subs: vec![]
            }
        ]
    );
    assert_eq!(
        parse_nested_blocks("a\n  \n  b\nc", EmptyLinesMode::PrevIndent),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![],
            },
            Block {
                head: Indented {
                    indent: "  ",
                    data: ""
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "  ",
                    data: "b"
                },
                subs: vec![]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "c"
                },
                subs: vec![]
            }
        ]
    );
    assert_eq!(
        parse_nested_blocks("a\n\r\n  b\nc", EmptyLinesMode::Skip),
        [
            Block {
                head: Indented {
                    indent: "",
                    data: "a"
                },
                subs: vec![Block {
                    head: Indented {
                        indent: "  ",
                        data: "b"
                    },
                    subs: vec![]
                }]
            },
            Block {
                head: Indented {
                    indent: "",
                    data: "c"
                },
                subs: vec![]
            }
        ]
    );
}

#[test]
fn test_to_string() {
    assert_eq!(
        blocks_to_string(
            &parse_nested_blocks("a\n\r\n  b\nc", EmptyLinesMode::Skip)[..],
            "  "
        ),
        "a\n  b\nc\n",
    );
}