Update tests to compile again.
This commit is contained in:
parent
3348807a05
commit
e84e2b5147
@ -69,22 +69,21 @@ fn comment_line<'r, 's>(
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::parser::parser_context::ContextElement;
|
|
||||||
use crate::parser::parser_context::ContextTree;
|
use crate::parser::parser_context::ContextTree;
|
||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn require_space_after_hash() {
|
fn require_space_after_hash() {
|
||||||
let input = "# Comment line
|
let input = OrgSource::new(
|
||||||
|
"# Comment line
|
||||||
#not a comment
|
#not a comment
|
||||||
# Comment again";
|
# Comment again",
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let comment_matcher = parser_with_context!(comment)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let comment_matcher = parser_with_context!(comment)(&document_context);
|
|
||||||
let (remaining, first_comment) = comment_matcher(input).expect("Parse first comment");
|
let (remaining, first_comment) = comment_matcher(input).expect("Parse first comment");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
remaining,
|
Into::<&str>::into(remaining),
|
||||||
r#"#not a comment
|
r#"#not a comment
|
||||||
# Comment again"#
|
# Comment again"#
|
||||||
);
|
);
|
||||||
|
@ -111,27 +111,26 @@ fn footnote_definition_end<'r, 's>(
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::parser::parser_context::ContextElement;
|
|
||||||
use crate::parser::parser_context::ContextTree;
|
use crate::parser::parser_context::ContextTree;
|
||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
use crate::parser::Source;
|
use crate::parser::Source;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn two_paragraphs() {
|
fn two_paragraphs() {
|
||||||
let input = "[fn:1] A footnote.
|
let input = OrgSource::new(
|
||||||
|
"[fn:1] A footnote.
|
||||||
|
|
||||||
[fn:2] A multi-
|
[fn:2] A multi-
|
||||||
|
|
||||||
line footnote.";
|
line footnote.",
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let footnote_definition_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let footnote_definition_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, first_footnote_definition) =
|
let (remaining, first_footnote_definition) =
|
||||||
footnote_definition_matcher(input).expect("Parse first footnote_definition");
|
footnote_definition_matcher(input).expect("Parse first footnote_definition");
|
||||||
let (remaining, second_footnote_definition) =
|
let (remaining, second_footnote_definition) =
|
||||||
footnote_definition_matcher(remaining).expect("Parse second footnote_definition.");
|
footnote_definition_matcher(remaining).expect("Parse second footnote_definition.");
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
first_footnote_definition.get_source(),
|
first_footnote_definition.get_source(),
|
||||||
"[fn:1] A footnote.
|
"[fn:1] A footnote.
|
||||||
@ -148,19 +147,19 @@ line footnote."
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn multiline_break() {
|
fn multiline_break() {
|
||||||
let input = "[fn:2] A multi-
|
let input = OrgSource::new(
|
||||||
|
"[fn:2] A multi-
|
||||||
|
|
||||||
line footnote.
|
line footnote.
|
||||||
|
|
||||||
|
|
||||||
not in the footnote.";
|
not in the footnote.",
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let footnote_definition_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let footnote_definition_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, first_footnote_definition) =
|
let (remaining, first_footnote_definition) =
|
||||||
footnote_definition_matcher(input).expect("Parse first footnote_definition");
|
footnote_definition_matcher(input).expect("Parse first footnote_definition");
|
||||||
assert_eq!(remaining, "not in the footnote.");
|
assert_eq!(Into::<&str>::into(remaining), "not in the footnote.");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
first_footnote_definition.get_source(),
|
first_footnote_definition.get_source(),
|
||||||
"[fn:2] A multi-
|
"[fn:2] A multi-
|
||||||
|
@ -45,7 +45,7 @@ impl<'s> OrgSource<'s> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_preceding_character(&self) -> Option<char> {
|
pub fn get_preceding_character(&self) -> Option<char> {
|
||||||
todo!()
|
self.preceding_character
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_at_start_of_line(&self) -> bool {
|
pub fn is_at_start_of_line(&self) -> bool {
|
||||||
@ -357,4 +357,12 @@ mod tests {
|
|||||||
assert_eq!(input.slice(6..).is_at_start_of_line(), true);
|
assert_eq!(input.slice(6..).is_at_start_of_line(), true);
|
||||||
assert_eq!(input.slice(6..).slice(10..).is_at_start_of_line(), false);
|
assert_eq!(input.slice(6..).slice(10..).is_at_start_of_line(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn preceding_character_unicode() {
|
||||||
|
let input = OrgSource::new("🧡💛💚💙💜");
|
||||||
|
assert_eq!(input.get_preceding_character(), None);
|
||||||
|
assert_eq!(input.slice(8..).get_preceding_character(), Some('💛'));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -69,22 +69,20 @@ fn paragraph_end<'r, 's>(
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::parser::element_parser::element;
|
use crate::parser::element_parser::element;
|
||||||
use crate::parser::parser_context::ContextElement;
|
use crate::parser::org_source::OrgSource;
|
||||||
use crate::parser::parser_context::ContextTree;
|
use crate::parser::parser_context::ContextTree;
|
||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
use crate::parser::source::Source;
|
use crate::parser::source::Source;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn two_paragraphs() {
|
fn two_paragraphs() {
|
||||||
let input = "foo bar baz\n\nlorem ipsum";
|
let input = OrgSource::new("foo bar baz\n\nlorem ipsum");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let paragraph_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let paragraph_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, first_paragraph) = paragraph_matcher(input).expect("Parse first paragraph");
|
let (remaining, first_paragraph) = paragraph_matcher(input).expect("Parse first paragraph");
|
||||||
let (remaining, second_paragraph) =
|
let (remaining, second_paragraph) =
|
||||||
paragraph_matcher(remaining).expect("Parse second paragraph.");
|
paragraph_matcher(remaining).expect("Parse second paragraph.");
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(first_paragraph.get_source(), "foo bar baz\n\n");
|
assert_eq!(first_paragraph.get_source(), "foo bar baz\n\n");
|
||||||
assert_eq!(second_paragraph.get_source(), "lorem ipsum");
|
assert_eq!(second_paragraph.get_source(), "lorem ipsum");
|
||||||
}
|
}
|
||||||
|
@ -239,67 +239,56 @@ fn get_context_item_indent<'r, 's>(context: Context<'r, 's>) -> Option<&'r usize
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::parser::parser_context::ContextElement;
|
|
||||||
use crate::parser::parser_context::ContextTree;
|
use crate::parser::parser_context::ContextTree;
|
||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
use crate::parser::Source;
|
use crate::parser::Source;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_list_item_empty() {
|
fn plain_list_item_empty() {
|
||||||
let input = "1.";
|
let input = OrgSource::new("1.");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_item_matcher = parser_with_context!(plain_list_item)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_item_matcher = parser_with_context!(plain_list_item)(&document_context);
|
|
||||||
let (remaining, result) = plain_list_item_matcher(input).unwrap();
|
let (remaining, result) = plain_list_item_matcher(input).unwrap();
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(result.source, "1.");
|
assert_eq!(result.source, "1.");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_list_item_simple() {
|
fn plain_list_item_simple() {
|
||||||
let input = "1. foo";
|
let input = OrgSource::new("1. foo");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_item_matcher = parser_with_context!(plain_list_item)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_item_matcher = parser_with_context!(plain_list_item)(&document_context);
|
|
||||||
let (remaining, result) = plain_list_item_matcher(input).unwrap();
|
let (remaining, result) = plain_list_item_matcher(input).unwrap();
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(result.source, "1. foo");
|
assert_eq!(result.source, "1. foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_list_empty() {
|
fn plain_list_empty() {
|
||||||
let input = "1.";
|
let input = OrgSource::new("1.");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(plain_list)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(plain_list)(&document_context);
|
|
||||||
let (remaining, result) = plain_list_matcher(input).unwrap();
|
let (remaining, result) = plain_list_matcher(input).unwrap();
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(result.source, "1.");
|
assert_eq!(result.source, "1.");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_list_simple() {
|
fn plain_list_simple() {
|
||||||
let input = "1. foo";
|
let input = OrgSource::new("1. foo");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(plain_list)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(plain_list)(&document_context);
|
|
||||||
let (remaining, result) = plain_list_matcher(input).unwrap();
|
let (remaining, result) = plain_list_matcher(input).unwrap();
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(result.source, "1. foo");
|
assert_eq!(result.source, "1. foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_list_cant_start_line_with_asterisk() {
|
fn plain_list_cant_start_line_with_asterisk() {
|
||||||
// Plain lists with an asterisk bullet must be indented or else they would be a headline
|
// Plain lists with an asterisk bullet must be indented or else they would be a headline
|
||||||
let input = "* foo";
|
let input = OrgSource::new("* foo");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(plain_list)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(plain_list)(&document_context);
|
|
||||||
let result = plain_list_matcher(input);
|
let result = plain_list_matcher(input);
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
}
|
}
|
||||||
@ -307,32 +296,30 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn indented_can_start_line_with_asterisk() {
|
fn indented_can_start_line_with_asterisk() {
|
||||||
// Plain lists with an asterisk bullet must be indented or else they would be a headline
|
// Plain lists with an asterisk bullet must be indented or else they would be a headline
|
||||||
let input = " * foo";
|
let input = OrgSource::new(" * foo");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(plain_list)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(plain_list)(&document_context);
|
|
||||||
let result = plain_list_matcher(input);
|
let result = plain_list_matcher(input);
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn two_blank_lines_ends_list() {
|
fn two_blank_lines_ends_list() {
|
||||||
let input = r#"1. foo
|
let input = OrgSource::new(
|
||||||
|
r#"1. foo
|
||||||
2. bar
|
2. bar
|
||||||
baz
|
baz
|
||||||
3. lorem
|
3. lorem
|
||||||
|
|
||||||
|
|
||||||
ipsum
|
ipsum
|
||||||
"#;
|
"#,
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, result) =
|
let (remaining, result) =
|
||||||
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
||||||
assert_eq!(remaining, " ipsum\n");
|
assert_eq!(Into::<&str>::into(remaining), " ipsum\n");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.get_source(),
|
result.get_source(),
|
||||||
r#"1. foo
|
r#"1. foo
|
||||||
@ -347,18 +334,18 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn two_blank_lines_ends_nested_list() {
|
fn two_blank_lines_ends_nested_list() {
|
||||||
let input = r#"1. foo
|
let input = OrgSource::new(
|
||||||
|
r#"1. foo
|
||||||
1. bar
|
1. bar
|
||||||
|
|
||||||
|
|
||||||
baz"#;
|
baz"#,
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, result) =
|
let (remaining, result) =
|
||||||
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
||||||
assert_eq!(remaining, "baz");
|
assert_eq!(Into::<&str>::into(remaining), "baz");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.get_source(),
|
result.get_source(),
|
||||||
r#"1. foo
|
r#"1. foo
|
||||||
@ -371,7 +358,8 @@ baz"#;
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn interior_trailing_whitespace() {
|
fn interior_trailing_whitespace() {
|
||||||
let input = r#"1. foo
|
let input = OrgSource::new(
|
||||||
|
r#"1. foo
|
||||||
|
|
||||||
bar
|
bar
|
||||||
|
|
||||||
@ -382,14 +370,13 @@ baz"#;
|
|||||||
ipsum
|
ipsum
|
||||||
|
|
||||||
|
|
||||||
dolar"#;
|
dolar"#,
|
||||||
|
);
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_list_matcher = parser_with_context!(element(true))(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_list_matcher = parser_with_context!(element(true))(&document_context);
|
|
||||||
let (remaining, result) =
|
let (remaining, result) =
|
||||||
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
plain_list_matcher(input).expect("Should parse the plain list successfully.");
|
||||||
assert_eq!(remaining, "dolar");
|
assert_eq!(Into::<&str>::into(remaining), "dolar");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.get_source(),
|
result.get_source(),
|
||||||
r#"1. foo
|
r#"1. foo
|
||||||
|
@ -69,20 +69,17 @@ mod tests {
|
|||||||
use nom::combinator::map;
|
use nom::combinator::map;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::parser::parser_context::ContextElement;
|
|
||||||
use crate::parser::parser_context::ContextTree;
|
use crate::parser::parser_context::ContextTree;
|
||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
use crate::parser::source::Source;
|
use crate::parser::source::Source;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_text_simple() {
|
fn plain_text_simple() {
|
||||||
let input = "foobarbaz";
|
let input = OrgSource::new("foobarbaz");
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context =
|
let plain_text_matcher = parser_with_context!(plain_text)(&initial_context);
|
||||||
initial_context.with_additional_node(ContextElement::DocumentRoot(input));
|
|
||||||
let plain_text_matcher = parser_with_context!(plain_text)(&document_context);
|
|
||||||
let (remaining, result) = map(plain_text_matcher, Object::PlainText)(input).unwrap();
|
let (remaining, result) = map(plain_text_matcher, Object::PlainText)(input).unwrap();
|
||||||
assert_eq!(remaining, "");
|
assert_eq!(Into::<&str>::into(remaining), "");
|
||||||
assert_eq!(result.get_source(), input);
|
assert_eq!(result.get_source(), Into::<&str>::into(input));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,11 +144,10 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_text_radio_target() {
|
fn plain_text_radio_target() {
|
||||||
let input = "foo bar baz";
|
let input = OrgSource::new("foo bar baz");
|
||||||
let radio_target_match = vec![Object::PlainText(PlainText { source: "bar" })];
|
let radio_target_match = vec![Object::PlainText(PlainText { source: "bar" })];
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context = initial_context
|
let document_context = initial_context
|
||||||
.with_additional_node(ContextElement::DocumentRoot(input))
|
|
||||||
.with_additional_node(ContextElement::RadioTarget(vec![&radio_target_match]));
|
.with_additional_node(ContextElement::RadioTarget(vec![&radio_target_match]));
|
||||||
let paragraph_matcher = parser_with_context!(element(true))(&document_context);
|
let paragraph_matcher = parser_with_context!(element(true))(&document_context);
|
||||||
let (remaining, first_paragraph) = paragraph_matcher(input).expect("Parse first paragraph");
|
let (remaining, first_paragraph) = paragraph_matcher(input).expect("Parse first paragraph");
|
||||||
@ -173,14 +172,13 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn bold_radio_target() {
|
fn bold_radio_target() {
|
||||||
let input = "foo *bar* baz";
|
let input = OrgSource::new("foo *bar* baz");
|
||||||
let radio_target_match = vec![Object::Bold(Bold {
|
let radio_target_match = vec![Object::Bold(Bold {
|
||||||
source: "*bar*",
|
source: "*bar*",
|
||||||
children: vec![Object::PlainText(PlainText { source: "bar" })],
|
children: vec![Object::PlainText(PlainText { source: "bar" })],
|
||||||
})];
|
})];
|
||||||
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
||||||
let document_context = initial_context
|
let document_context = initial_context
|
||||||
.with_additional_node(ContextElement::DocumentRoot(input))
|
|
||||||
.with_additional_node(ContextElement::RadioTarget(vec![&radio_target_match]));
|
.with_additional_node(ContextElement::RadioTarget(vec![&radio_target_match]));
|
||||||
let paragraph_matcher = parser_with_context!(element(true))(&document_context);
|
let paragraph_matcher = parser_with_context!(element(true))(&document_context);
|
||||||
let (remaining, first_paragraph) =
|
let (remaining, first_paragraph) =
|
||||||
|
@ -206,18 +206,3 @@ pub fn not_yet_implemented() -> Res<OrgSource<'static>, ()> {
|
|||||||
"Not implemented yet.".into(),
|
"Not implemented yet.".into(),
|
||||||
))));
|
))));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn get_one_before_unicode() {
|
|
||||||
let input = "🧡💛💚💙💜";
|
|
||||||
let (green_heart_index, _) = input.char_indices().skip(2).next().unwrap();
|
|
||||||
let starting_with_green_heart = &input[green_heart_index..];
|
|
||||||
let yellow_heart = get_one_before(input, starting_with_green_heart).unwrap();
|
|
||||||
assert!(is_slice_of(input, yellow_heart));
|
|
||||||
assert_eq!(yellow_heart, "💛");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user