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()
}
))]
)
}