Add tests
This commit is contained in:
parent
e5ba622e0d
commit
d0343cee6b
3 changed files with 81 additions and 11 deletions
|
@ -37,7 +37,7 @@ use crate::parser::util::PropertyParser;
|
||||||
use super::paragraph::Paragraph;
|
use super::paragraph::Paragraph;
|
||||||
use super::reference::Reference;
|
use super::reference::Reference;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub enum MediaType {
|
pub enum MediaType {
|
||||||
IMAGE,
|
IMAGE,
|
||||||
VIDEO,
|
VIDEO,
|
||||||
|
@ -148,14 +148,15 @@ impl Element for Medium {
|
||||||
.width
|
.width
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map_or(String::new(), |w| format!(r#" style="width:{w};""#));
|
.map_or(String::new(), |w| format!(r#" style="width:{w};""#));
|
||||||
result.push_str(format!(r#"<div class="medium" {width}>"#).as_str());
|
result.push_str(format!(r#"<div class="medium"{width}>"#).as_str());
|
||||||
match self.media_type {
|
result += match self.media_type {
|
||||||
MediaType::IMAGE => result.push_str(
|
MediaType::IMAGE =>
|
||||||
format!(r#"<a href="{0}"><img src="{0}"></a>"#, self.uri).as_str(),
|
format!(r#"<a href="{0}"><img src="{0}"></a>"#, self.uri),
|
||||||
),
|
MediaType::VIDEO =>
|
||||||
MediaType::VIDEO => todo!(),
|
format!(r#"<video controls{width}><source src="{0}"></video>"#, self.uri),
|
||||||
MediaType::AUDIO => todo!(),
|
MediaType::AUDIO =>
|
||||||
}
|
format!(r#"<audio controls src="{0}"{width}></audio>"#, self.uri),
|
||||||
|
}.as_str();
|
||||||
|
|
||||||
let caption = self
|
let caption = self
|
||||||
.caption
|
.caption
|
||||||
|
@ -311,6 +312,8 @@ impl MediaRule {
|
||||||
match filename.split_at(sep + 1).1.to_ascii_lowercase().as_str() {
|
match filename.split_at(sep + 1).1.to_ascii_lowercase().as_str() {
|
||||||
"png" | "apng" | "avif" | "gif" | "webp" | "svg" | "bmp" | "jpg" | "jpeg" | "jfif"
|
"png" | "apng" | "avif" | "gif" | "webp" | "svg" | "bmp" | "jpg" | "jpeg" | "jfif"
|
||||||
| "pjpeg" | "pjp" => Some(MediaType::IMAGE),
|
| "pjpeg" | "pjp" => Some(MediaType::IMAGE),
|
||||||
|
"mp4" | "m4v" | "webm" | "mov" => Some(MediaType::VIDEO),
|
||||||
|
"mp3" | "ogg" | "flac" | "wav" => Some(MediaType::AUDIO),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -353,7 +356,7 @@ impl RegexRule for MediaRule {
|
||||||
matches.get(2).unwrap(),
|
matches.get(2).unwrap(),
|
||||||
MediaRule::validate_uri(matches.get(2).unwrap().as_str()),
|
MediaRule::validate_uri(matches.get(2).unwrap().as_str()),
|
||||||
) {
|
) {
|
||||||
(_, Ok(uri)) => uri.to_string(),
|
(_, Ok(uri)) => util::process_escaped('\\', ")", uri),
|
||||||
(m, Err(err)) => {
|
(m, Err(err)) => {
|
||||||
reports.push(
|
reports.push(
|
||||||
Report::build(ReportKind::Error, token.source(), m.start())
|
Report::build(ReportKind::Error, token.source(), m.start())
|
||||||
|
@ -514,6 +517,9 @@ impl RegexRule for MediaRule {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use crate::parser::langparser::LangParser;
|
||||||
|
use crate::parser::source::SourceFile;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -527,4 +533,34 @@ mod tests {
|
||||||
));
|
));
|
||||||
assert!(re.is_match_at("![r1](uri1)[props1] desc1\n![r2](uri2)[props2] desc2", 26));
|
assert!(re.is_match_at("![r1](uri1)[props1] desc1\n![r2](uri2)[props2] desc2", 26));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn element_test() {
|
||||||
|
let source = Rc::new(SourceFile::with_content(
|
||||||
|
"".to_string(),
|
||||||
|
r#"
|
||||||
|
![ref1]( image.png )[width = 200px, caption = Caption\,] Description
|
||||||
|
![ref2]( ur\)i\\)[type=audio]
|
||||||
|
"#
|
||||||
|
.to_string(),
|
||||||
|
None,
|
||||||
|
));
|
||||||
|
let parser = LangParser::default();
|
||||||
|
let doc = parser.parse(source, None);
|
||||||
|
|
||||||
|
let borrow = doc.content().borrow();
|
||||||
|
let group = borrow.first().as_ref().unwrap().as_container().unwrap();
|
||||||
|
|
||||||
|
let first = group.contained()[0].downcast_ref::<Medium>().unwrap();
|
||||||
|
assert_eq!(first.reference, "ref1");
|
||||||
|
assert_eq!(first.uri, "image.png");
|
||||||
|
assert_eq!(first.media_type, MediaType::IMAGE);
|
||||||
|
assert_eq!(first.width, Some("200px".to_string()));
|
||||||
|
assert_eq!(first.caption, Some("Caption,".to_string()));
|
||||||
|
|
||||||
|
let second = group.contained()[1].downcast_ref::<Medium>().unwrap();
|
||||||
|
assert_eq!(second.reference, "ref2");
|
||||||
|
assert_eq!(second.uri, "ur)i\\");
|
||||||
|
assert_eq!(second.media_type, MediaType::AUDIO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,3 +273,35 @@ impl RegexRule for RawRule {
|
||||||
bindings
|
bindings
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::compiler::compiler::Target;
|
||||||
|
use crate::parser::langparser::LangParser;
|
||||||
|
use crate::parser::source::SourceFile;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn raw_tests() {
|
||||||
|
let source = Rc::new(SourceFile::with_content(
|
||||||
|
"".to_string(),
|
||||||
|
r#"
|
||||||
|
Break{?[kind=block]<RAW>?}NewParagraph
|
||||||
|
"#
|
||||||
|
.to_string(),
|
||||||
|
None,
|
||||||
|
));
|
||||||
|
let parser = LangParser::default();
|
||||||
|
let compiler = Compiler::new(Target::HTML, None);
|
||||||
|
let doc = parser.parse(source, None);
|
||||||
|
|
||||||
|
let borrow = doc.content().borrow();
|
||||||
|
let found = borrow
|
||||||
|
.iter()
|
||||||
|
.filter_map(|e| e.downcast_ref::<Raw>())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
assert_eq!(found[0].compile(&compiler, &*doc), Ok("<RAW>".to_string()));
|
||||||
|
//assert_eq!(found[1].compile(&compiler, &*doc), Ok("<RAW>".to_string()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -128,7 +128,7 @@ pub fn process_escaped<S: AsRef<str>>(escape: char, token: &'static str, content
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Add trailing escapes
|
// Add trailing escapes
|
||||||
(0..escaped).for_each(|_| processed.push('\\'));
|
(0..escaped / 2).for_each(|_| processed.push('\\'));
|
||||||
|
|
||||||
processed
|
processed
|
||||||
}
|
}
|
||||||
|
@ -458,6 +458,8 @@ mod tests {
|
||||||
process_escaped('\\', "]", "Unescaped \\\\\\\\]"),
|
process_escaped('\\', "]", "Unescaped \\\\\\\\]"),
|
||||||
"Unescaped \\\\\\\\]".to_string()
|
"Unescaped \\\\\\\\]".to_string()
|
||||||
);
|
);
|
||||||
|
assert_eq!(process_escaped('\\', ")", "A\\)B\\"), "A)B".to_string(),);
|
||||||
|
assert_eq!(process_escaped('\\', ")", "A\\)B\\\\"), "A)B\\".to_string(),);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue