zola/components/markdown/tests/links.rs

56 lines
1.9 KiB
Rust
Raw Normal View History

mod common;
Shortcodes (#1640) * Next version * Added tests for shortcode insertion * Added TOC tests * Added test for #1475 and #1355 * Basic internal / external links tests * Added integration test * Added pseudocode and started on logos * Logos parsing for shortcodes * Fixed string literal parsing Moved string literal parsing to a new lexer in order to have greater control of control characters which are parsed. This fixes the bug that was present in the `string_from_quoted` function and also moves the `QuoteType` to be in the `ArgValueToken`. * Moved string literal logic to seperate module * Added square bracket notation for variables * Error handling rewritten Remove the Result from the `fetch_shortcodes` function. Added proper messages within the internal parsing. * Reorganized and documented the shortcode submodule * Added all logic for ShortcodeContext spans * Added working insertion code for MD files * Made functions generic over Markdown or HTML * Add check for embedding bodies * Structure of main function clear * Added test for `new_with_transforms` function * It runs! * Added the code for handling p-ed html shortcodes * Removed placeholders in markdown function * Adjusted integration tests * fetch_shortcodes now also returns a string * Start of HTML insertion * Kinda working everything * Loading of shortcodes and builtins * Fix tests * Some missed fixes * Tweaks + fmt * Remove string literal handling * Fix benches * Grab shortcode def only once per site * Fix benches * Rewrite of parser * Fix tests * Add test for #1655 * Re-enable integration test * Add test for #1601 * Add test for #1600 * Add test for #1500 * Add test for #1320 * Fix test on windows? Co-authored-by: Gijs Burghoorn <g.burghoorn@gmail.com>
2021-11-19 19:31:42 +00:00
#[test]
fn can_detect_links() {
// no links
2022-02-25 16:13:29 +00:00
let rendered = common::render("Hello World!").unwrap();
assert_eq!(rendered.internal_links.len(), 0);
assert_eq!(rendered.external_links.len(), 0);
// external
2022-02-25 16:13:29 +00:00
let rendered = common::render("[abc](https://google.com/)").unwrap();
assert_eq!(rendered.internal_links.len(), 0);
assert_eq!(rendered.external_links.len(), 1);
assert_eq!(rendered.external_links[0], "https://google.com/");
// internal
2022-02-25 16:13:29 +00:00
let rendered = common::render("[abc](@/pages/about.md)").unwrap();
assert_eq!(rendered.internal_links, vec![("pages/about.md".to_owned(), None)]);
assert_eq!(rendered.external_links.len(), 0);
// internal with anchors
2022-02-25 16:13:29 +00:00
let rendered = common::render("[abc](@/pages/about.md#hello)").unwrap();
assert_eq!(rendered.internal_links[0], ("pages/about.md".to_owned(), Some("hello".to_owned())));
assert_eq!(rendered.external_links.len(), 0);
// internal link referring to self
2022-02-25 16:13:29 +00:00
let rendered = common::render("[abc](#hello)").unwrap();
assert_eq!(rendered.internal_links.len(), 1);
2022-02-25 16:13:29 +00:00
assert_eq!(rendered.internal_links[0], ("my_page.md".to_owned(), Some("hello".to_owned())));
assert_eq!(rendered.external_links.len(), 0);
2022-02-25 16:13:29 +00:00
// Mixed with various protocols
let rendered = common::render(
"
[a link](http://google.com)
[a link](http://google.fr)
Email: [foo@bar.baz](mailto:foo@bar.baz)
Email: <foo@bar.baz>",
)
.unwrap();
assert_eq!(rendered.internal_links.len(), 0);
assert_eq!(
rendered.external_links,
&["http://google.com".to_owned(), "http://google.fr".to_owned()]
);
// Not pointing to anything known so that's an error
let res = common::render("[abc](@/def/123.md)");
assert!(res.is_err());
// Empty link is an error as well
let res = common::render("[abc]()");
assert!(res.is_err());
2022-02-25 16:13:29 +00:00
assert_eq!(res.unwrap_err().to_string(), "There is a link that is missing a URL");
Shortcodes (#1640) * Next version * Added tests for shortcode insertion * Added TOC tests * Added test for #1475 and #1355 * Basic internal / external links tests * Added integration test * Added pseudocode and started on logos * Logos parsing for shortcodes * Fixed string literal parsing Moved string literal parsing to a new lexer in order to have greater control of control characters which are parsed. This fixes the bug that was present in the `string_from_quoted` function and also moves the `QuoteType` to be in the `ArgValueToken`. * Moved string literal logic to seperate module * Added square bracket notation for variables * Error handling rewritten Remove the Result from the `fetch_shortcodes` function. Added proper messages within the internal parsing. * Reorganized and documented the shortcode submodule * Added all logic for ShortcodeContext spans * Added working insertion code for MD files * Made functions generic over Markdown or HTML * Add check for embedding bodies * Structure of main function clear * Added test for `new_with_transforms` function * It runs! * Added the code for handling p-ed html shortcodes * Removed placeholders in markdown function * Adjusted integration tests * fetch_shortcodes now also returns a string * Start of HTML insertion * Kinda working everything * Loading of shortcodes and builtins * Fix tests * Some missed fixes * Tweaks + fmt * Remove string literal handling * Fix benches * Grab shortcode def only once per site * Fix benches * Rewrite of parser * Fix tests * Add test for #1655 * Re-enable integration test * Add test for #1601 * Add test for #1600 * Add test for #1500 * Add test for #1320 * Fix test on windows? Co-authored-by: Gijs Burghoorn <g.burghoorn@gmail.com>
2021-11-19 19:31:42 +00:00
}