aboutsummaryrefslogtreecommitdiffstats
path: root/parser/src/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'parser/src/tests.rs')
-rw-r--r--parser/src/tests.rs242
1 files changed, 242 insertions, 0 deletions
diff --git a/parser/src/tests.rs b/parser/src/tests.rs
new file mode 100644
index 0000000..1ef965a
--- /dev/null
+++ b/parser/src/tests.rs
@@ -0,0 +1,242 @@
+use pest::consumes_to;
+use pest::parses_to;
+
+use crate::pest_rst::{RstParser, Rule};
+
+#[test]
+fn plain() {
+ parses_to! {
+ parser: RstParser,
+ input: "line\n",
+ rule: Rule::paragraph,
+ tokens: [
+ paragraph(0, 4, [
+ str(0, 4)
+ ])
+ ]
+ };
+}
+
+#[test]
+fn emph_only() {
+ parses_to! {
+ parser: RstParser,
+ input: "*emphasis*",
+ rule: Rule::emph_outer,
+ tokens: [
+ emph(1, 9, [str_nested(1, 9)])
+ ]
+ };
+}
+
+#[test]
+fn emph() {
+ parses_to! {
+ parser: RstParser,
+ input: "line *with markup*\n",
+ rule: Rule::paragraph,
+ tokens: [
+ paragraph(0, 18, [
+ str(0, 5),
+ emph(6, 17, [str_nested(6, 17)]),
+ ])
+ ]
+ };
+}
+
+#[test]
+fn title() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+Title
+=====
+",
+ rule: Rule::title,
+ tokens: [
+ title(0, 12, [ title_single(0, 12, [
+ line(0, 6, [ str(0, 5) ]),
+ adornments(6, 11),
+ ]) ])
+ ]
+ };
+}
+
+#[test]
+fn title_overline() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+-----
+Title
+-----
+",
+ rule: Rule::title,
+ tokens: [
+ title(0, 17, [ title_double(0, 17, [
+ adornments(0, 5),
+ line(6, 12, [ str(6, 11) ]),
+ ]) ])
+ ]
+ };
+}
+
+#[allow(clippy::cognitive_complexity)]
+#[test]
+fn two_targets() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+.. _a: http://example.com
+.. _`b_`: https://example.org
+",
+ rule: Rule::document,
+ tokens: [
+ target(0, 26, [
+ target_name_uq(4, 5),
+ link_target(7, 25),
+ ]),
+ target(26, 56, [
+ target_name_qu(31, 33),
+ link_target(36, 55),
+ ]),
+ ]
+ };
+}
+
+#[allow(clippy::cognitive_complexity)]
+#[test]
+fn admonitions() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+.. note::
+ Just next line
+.. admonition:: In line title
+
+ Next line
+
+.. danger:: Just this line
+",
+ rule: Rule::document,
+ tokens: [
+ admonition_gen(0, 27, [
+ admonition_type(3, 7),
+ paragraph(13, 27, [ str(13, 27) ]),
+ ]),
+ admonition(28, 71, [
+ line(43, 58, [ str(43, 57) ]),
+ paragraph(62, 71, [ str(62, 71) ]),
+ ]),
+ admonition_gen(73, 100, [
+ admonition_type(76, 82),
+ line(84, 100, [ str(84, 99) ]),
+ ]),
+ ]
+ };
+}
+
+
+#[allow(clippy::cognitive_complexity)]
+#[test]
+fn substitutions() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+A |subst| in-line
+
+.. |subst| replace:: substitution
+.. |subst2| replace:: it can also
+ be hanging
+",
+ rule: Rule::document,
+ tokens: [
+ paragraph(0, 17, [
+ str(0, 2),
+ substitution_name(3, 8),
+ str(9, 17),
+ ]),
+ substitution_def(19, 52, [
+ substitution_name(23, 28),
+ replace(30, 52, [ paragraph(40, 52, [str(40, 52)]) ]),
+ ]),
+ substitution_def(53, 101, [
+ substitution_name(57, 63),
+ replace(65, 101, [ paragraph(75, 101, [
+ str(75, 86), ws_newline(86, 87),
+ str(88, 100),
+ ]) ]),
+ ]),
+ ]
+ };
+}
+
+
+#[allow(clippy::cognitive_complexity)]
+#[test]
+fn substitution_image() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+.. |subst| image:: thing.png
+ :target: foo.html
+",
+ rule: Rule::document,
+ tokens: [
+ substitution_def(0, 50, [
+ substitution_name(4, 9),
+ image(11, 50, [
+ line(18, 29, [ str(18, 28) ]),
+ image_option(32, 50, [
+ image_opt_name(33, 39),
+ line(40, 50, [ str(40, 49) ]),
+ ]),
+ ]),
+ ]),
+ ]
+ };
+}
+
+// TODO: test images
+
+#[allow(clippy::cognitive_complexity)]
+#[test]
+fn nested_lists() {
+ parses_to! {
+ parser: RstParser,
+ input: "\
+paragraph
+
+- item 1
+- item 2
+ more text
+ more text 2
+ more text 3
+ - nested item 1
+ - nested item 2
+ - nested item 3
+",
+ rule: Rule::document,
+ tokens: [
+ paragraph(0, 9, [ str(0, 9) ]),
+ bullet_list(11, 131, [
+ bullet_item(11, 21, [
+ line(14, 21, [ str(14, 20) ]),
+ ]),
+ bullet_item(21, 131, [
+ line(24, 31, [ str(24, 30) ]),
+ paragraph(34, 74, [
+ str(34, 43), ws_newline(43, 44),
+ str(47, 58), ws_newline(58, 59),
+ str(62, 73),
+ ]),
+ bullet_list(77, 131, [
+ bullet_item( 77, 93, [ line( 79, 93, [str( 79, 92)]) ]),
+ bullet_item( 96, 112, [ line( 98, 112, [str( 98, 111)]) ]),
+ bullet_item(115, 131, [ line(117, 131, [str(117, 130)]) ]),
+ ]),
+ ]),
+ ]),
+ ]
+ }
+}