munarkma 1.0.5

Namumark parser
Documentation
//test 하는 이유
//복잡한 파서 구조상 로직이 시도때도 없이 바뀌는데 그걸 하나하나 테스트 하기는 어렵기 때문.
//테스트에서 오차가 일어나면 바로 바꾸기 위해서
use crate::{
  parser_first::slices,
  renderobjs::{Link, LinkType, NamuTriple, RenderObject},
  structs::{Compiler, NamuMacroType, Objects},
};
#[test]
fn 링크() {
  let mut compiler = Compiler::from(String::from("[[테스트케이스]]"));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::Link(Link {
      to: String::from("테스트케이스"),
      show: Vec::new(),
      link_type: LinkType::Hyper
    }))]
  )
}
#[test]
fn 링크_안닫힘() {
  let mut compiler = Compiler::from(String::from("[[테스트케이스"));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![
      Objects::Char('['),
      Objects::Char('['),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char('')
    ]
  )
}
#[test]
fn 표시링크() {
  let mut compiler = Compiler::from(String::from("[[테스트케이스|스이케트스테]]"));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::Link(Link {
      to: String::from("테스트케이스"),
      show: vec![
        Objects::Char(''),
        Objects::Char(''),
        Objects::Char(''),
        Objects::Char(''),
        Objects::Char(''),
        Objects::Char('')
      ],
      link_type: LinkType::Hyper
    }))]
  )
}
#[test]
fn 표시링크_안닫힘() {
  let mut compiler = Compiler::from(String::from("[[테스트케이스|뀨"));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![
      Objects::Char('['),
      Objects::Char('['),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char(''),
      Objects::Char('|'),
      Objects::Char('')
    ]
  )
}
#[test]
fn 트리플위키() {
  let mut compiler = Compiler::from(String::from(
    "{{{#!WiKi attribute
content}}}",
  ));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::NamuTriple(
      NamuTriple {
        triplename: "WiKi".to_string(),
        attr: Some("attribute".to_string()),
        content: Some(vec![
          Objects::Char('c'),
          Objects::Char('o'),
          Objects::Char('n'),
          Objects::Char('t'),
          Objects::Char('e'),
          Objects::Char('n'),
          Objects::Char('t'),
        ])
      }
    ))]
  )
}
#[test]
fn 트리플위키_안닫힘() {
  let mut compiler = Compiler::from(String::from(
    "{{{#!WiKi attribute
content",
  ));
  compiler.parse();
  assert_eq!(
    compiler.array,
    slices("{{{#!WiKi attribute\ncontent".to_string())
  )
}
#[test]
fn 트리플위키_속성에_삼중괄있음() {
  //이게 놀랍게도 원작고증이라는...(씨ㅂ)
  let mut compiler = Compiler::from(String::from(
    "{{{#!WiKi attribute}}}
content}}}",
  ));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::NamuTriple(
      NamuTriple {
        attr: Some(String::from("attribute}}}")),
        content: Some(slices(String::from("content"))),
        triplename: String::from("WiKi")
      }
    ))]
  )
}
#[test]
fn 트리플위키_속성에_삼중괄있음2() {
  //이게 놀랍게도 원작고증이라는...(씨ㅂ)
  let mut compiler = Compiler::from(String::from(
    "{{{#!WiKi attribute{{{}}}
content}}}",
  ));
  compiler.parse();
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::NamuTriple(
      NamuTriple {
        attr: Some(String::from("attribute{{{}}}")),
        content: Some(slices(String::from("content"))),
        triplename: String::from("WiKi")
      }
    ))]
  )
}
#[test]
fn 트리플위키_속성에_삼중괄있음_미완성() {
  //이게 놀랍게도 원작고증이라는...(씨ㅂ)
  let mut compiler = Compiler::from(String::from(
    "{{{#!WiKi attribute{{{}}}
content",
  ));
  compiler.parse();
  let mut vect = slices("{{{#!WiKi attribute".to_owned());
  vect.push(Objects::RenderObject(RenderObject::Literal(String::new())));
  vect.extend(slices("\ncontent".to_owned()));
  assert_eq!(compiler.array, vect)
}
#[test]
fn 파싱_우선순위() {
  //이게 놀랍게도 원작고증이라는...(씨ㅂ)
  let mut compiler = Compiler::from(String::from(
    "{{{#!wiki attr
content[[link|here}}}]]",
  ));
  compiler.parse();
  let mut vect = vec![Objects::RenderObject(RenderObject::NamuTriple(
    NamuTriple {
      attr: Some(String::from("attr")),
      content: Some(slices("content[[link|here".to_string())),
      triplename: String::from("wiki"),
    },
  ))];
  vect.extend_from_slice(&slices("]]".to_string()));
  assert_eq!(compiler.array, vect)
}
#[test]
fn 트리플_미완성_개행있이() {
  //이게 놀랍게도 원작고증이라는...(씨ㅂ)
  let mut compiler = Compiler::from(String::from(
    "{{{#!wiki attr}}}
",
  ));
  compiler.parse();
  let vect = slices("{{{#!wiki attr}}}\n".to_owned());
  assert_eq!(compiler.array, vect)
}
#[test]
fn 롤백_필요한_조기파싱() {
  let mut compiler = Compiler::from(String::from(
    "{{{#!wiki attr
[[안녕하[Include(슈)]}}}",
  ));
  compiler.parse();
  let mut vect = slices("[[안녕하".to_string());
  vect.push(Objects::RenderObject(RenderObject::NamumarkMacro(
    crate::renderobjs::NamumarkMacro {
      macroname: "Include".to_string(),
      macroarg: Some("".to_string()),
      macrotype: NamuMacroType::Include,
    },
  )));
  assert_eq!(
    compiler.array,
    vec![Objects::RenderObject(RenderObject::NamuTriple(
      NamuTriple {
        attr: Some("attr".to_string()),
        content: Some(vect),
        triplename: "wiki".to_string()
      }
    ))]
  )
}