askama/testing/tests/source-in-code.rs
2025-03-11 19:31:06 +01:00

285 lines
5.8 KiB
Rust

#![cfg(feature = "code-in-doc")]
// Regarding `#[rustfmt::skip]`: `cargo fmt` strips extraneous newlines in code block,
// but we want to test if `askama_derive` works with extraneous newlines.
use askama::Template;
#[rustfmt::skip]
#[test]
fn test_code_in_comment_only() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
/// Hello world!
/// ```
struct Tmpl;
assert_eq!(Tmpl.to_string(), "Hello world!");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_with_line_break() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
/// Hello
/// world!
/// ```
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
/// Hello
///
/// world!
/// ```
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello\n\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
///
/// Hello
///
/// world!
/// ```
struct Tmpl3;
assert_eq!(Tmpl3.to_string(), "\nHello\n\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
/// Hello
///
/// world!
///
/// ```
struct Tmpl4;
assert_eq!(Tmpl4.to_string(), "Hello\n\nworld!\n");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
///
///
/// Hello
///
///
/// world!
///
///
/// ```
struct Tmpl5;
assert_eq!(Tmpl5.to_string(), "\n\nHello\n\n\nworld!\n\n");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_with_derive_in_between() {
/// ```askama
/// Hello
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// world!
/// ```
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello\nworld!");
/// This template greets the whole world
///
/// ```askama
/// Hello
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// world!
/// ```
///
/// Some more text.
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello\nworld!");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_split_up() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// Text1
/// ```askama
/// Hello
/// ```
/// Text2
/// ```askama
/// world!
/// ```
/// Text3
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// Text1
///
/// ```askama
/// Hello
/// ```
///
/// Text2
///
/// ```askama
/// world!
/// ```
///
/// Text3
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello\nworld!");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_doc() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
#[doc = "```askama\nHello world!\n```"]
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello world!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
#[doc = "```askama"]
#[doc = "Hello world!"]
#[doc = "```"]
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello world!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
#[doc = "```askama\nHello world!"]
#[doc = "```"]
struct Tmpl3;
assert_eq!(Tmpl3.to_string(), "Hello world!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
#[doc = "```askama"]
#[doc = "Hello world!\n```"]
struct Tmpl4;
assert_eq!(Tmpl4.to_string(), "Hello world!");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_multiline() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/**
```askama
Hello world!
```
*/
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello world!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/**
```askama
Hello
world!
```
*/
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/**
```askama
Hello
world!
```
*/
struct Tmpl3;
assert_eq!(Tmpl3.to_string(), "\nHello\nworld!");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/**
```askama
Hello
world!
```
*/
struct Tmpl4;
assert_eq!(Tmpl4.to_string(), "Hello\nworld!\n");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/**
```askama
Hello
world!
```
*/
struct Tmpl5;
assert_eq!(Tmpl5.to_string(), "\nHello\n\nworld!\n");
}
#[rustfmt::skip]
#[test]
fn test_code_in_comment_backticks() {
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ````askama
/// Hello
/// ````
struct Tmpl1;
assert_eq!(Tmpl1.to_string(), "Hello");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// `````askama
/// Hello
/// `````
struct Tmpl2;
assert_eq!(Tmpl2.to_string(), "Hello");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ``````````````````````````````````````````````````````````````````````````````````````askama
/// Hello
/// ``````````````````````````````````````````````````````````````````````````````````````
struct Tmpl3;
assert_eq!(Tmpl3.to_string(), "Hello");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// ```askama
/// `````
/// Hello
/// `````
/// ```
struct Tmpl4;
assert_eq!(Tmpl4.to_string(), "");
#[derive(Template)]
#[template(ext = "txt", in_doc = true)]
/// `````askama
/// ```
/// Hello
/// ```
/// `````
struct Tmpl5;
assert_eq!(Tmpl5.to_string(), "```\nHello\n```");
}