use crate::{ast::*, parser::parse_markdown};

#[test]
fn wikilink() {
    let doc = parse_markdown("[[a]]").unwrap();
    assert_eq!(
        doc,
        Document {
            blocks: vec![Block::Paragraph(vec![Inline::Wikilink(Wikilink {
                link: "a".to_owned(),
                target: None,
                name: None,
            })])]
        }
    );

    let doc = parse_markdown("before [[a]]").unwrap();
    assert_eq!(
        doc,
        Document {
            blocks: vec![Block::Paragraph(vec![
                Inline::Text("before ".to_owned()),
                Inline::Wikilink(Wikilink {
                    link: "a".to_owned(),
                    target: None,
                    name: None,
                })
            ])]
        }
    );
}

#[test]
fn wikilink_targeted() {
    let doc = parse_markdown("[[a#b]]").unwrap();
    assert_eq!(
        doc,
        Document {
            blocks: vec![Block::Paragraph(vec![Inline::Wikilink(Wikilink {
                link: "a".to_owned(),
                target: Some("b".to_owned()),
                name: None,
            })])]
        }
    );
}

#[test]
fn wikilink_named() {
    let doc = parse_markdown("[[a|b]]").unwrap();
    assert_eq!(
        doc,
        Document {
            blocks: vec![Block::Paragraph(vec![Inline::Wikilink(Wikilink {
                link: "a".to_owned(),
                target: None,
                name: Some("b".to_owned()),
            })])]
        }
    );
}

#[test]
fn wikilink_targeted_named() {
    let doc = parse_markdown("[[a#b|c]]").unwrap();
    assert_eq!(
        doc,
        Document {
            blocks: vec![Block::Paragraph(vec![Inline::Wikilink(Wikilink {
                link: "a".to_owned(),
                target: Some("b".to_owned()),
                name: Some("c".to_owned()),
            })])]
        }
    );
}
