On reflection, the extra spaces around classes feels weird to me. Let's revert that (but keep the 2021 edition migration in place).
126 lines
2.8 KiB
Rust
126 lines
2.8 KiB
Rust
use maud::html;
|
|
|
|
#[test]
|
|
fn literals() {
|
|
let result = html! { ("<pinkie>") };
|
|
assert_eq!(result.into_string(), "<pinkie>");
|
|
}
|
|
|
|
#[test]
|
|
fn raw_literals() {
|
|
use maud::PreEscaped;
|
|
let result = html! { (PreEscaped("<pinkie>")) };
|
|
assert_eq!(result.into_string(), "<pinkie>");
|
|
}
|
|
|
|
#[test]
|
|
fn blocks() {
|
|
let result = html! {
|
|
({
|
|
let mut result = 1i32;
|
|
for i in 2..11 {
|
|
result *= i;
|
|
}
|
|
result
|
|
})
|
|
};
|
|
assert_eq!(result.into_string(), "3628800");
|
|
}
|
|
|
|
#[test]
|
|
fn attributes() {
|
|
let alt = "Pinkie Pie";
|
|
let result = html! { img src="pinkie.jpg" alt=(alt); };
|
|
assert_eq!(
|
|
result.into_string(),
|
|
r#"<img src="pinkie.jpg" alt="Pinkie Pie">"#
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn class_shorthand() {
|
|
let pinkie_class = "pinkie";
|
|
let result = html! { p.(pinkie_class) { "Fun!" } };
|
|
assert_eq!(result.into_string(), r#"<p class="pinkie">Fun!</p>"#);
|
|
}
|
|
|
|
#[test]
|
|
fn class_shorthand_block() {
|
|
let class_prefix = "pinkie-";
|
|
let result = html! { p.{ (class_prefix) "123" } { "Fun!" } };
|
|
assert_eq!(result.into_string(), r#"<p class="pinkie-123">Fun!</p>"#);
|
|
}
|
|
|
|
#[test]
|
|
fn id_shorthand() {
|
|
let pinkie_id = "pinkie";
|
|
let result = html! { p #(pinkie_id) { "Fun!" } };
|
|
assert_eq!(result.into_string(), r#"<p id="pinkie">Fun!</p>"#);
|
|
}
|
|
|
|
static BEST_PONY: &str = "Pinkie Pie";
|
|
|
|
#[test]
|
|
fn statics() {
|
|
let result = html! { (BEST_PONY) };
|
|
assert_eq!(result.into_string(), "Pinkie Pie");
|
|
}
|
|
|
|
#[test]
|
|
fn locals() {
|
|
let best_pony = "Pinkie Pie";
|
|
let result = html! { (best_pony) };
|
|
assert_eq!(result.into_string(), "Pinkie Pie");
|
|
}
|
|
|
|
/// An example struct, for testing purposes only
|
|
struct Creature {
|
|
name: &'static str,
|
|
/// Rating out of 10, where:
|
|
/// * 0 is a naked mole rat with dysentery
|
|
/// * 10 is Sweetie Belle in a milkshake
|
|
adorableness: u32,
|
|
}
|
|
|
|
impl Creature {
|
|
fn repugnance(&self) -> u32 {
|
|
10 - self.adorableness
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn structs() {
|
|
let pinkie = Creature {
|
|
name: "Pinkie Pie",
|
|
adorableness: 9,
|
|
};
|
|
let result = html! {
|
|
"Name: " (pinkie.name) ". Rating: " (pinkie.repugnance())
|
|
};
|
|
assert_eq!(result.into_string(), "Name: Pinkie Pie. Rating: 1");
|
|
}
|
|
|
|
#[test]
|
|
fn tuple_accessors() {
|
|
let a = ("ducks", "geese");
|
|
let result = html! { (a.0) };
|
|
assert_eq!(result.into_string(), "ducks");
|
|
}
|
|
|
|
#[test]
|
|
fn splice_with_path() {
|
|
mod inner {
|
|
pub fn name() -> &'static str {
|
|
"Maud"
|
|
}
|
|
}
|
|
let result = html! { (inner::name()) };
|
|
assert_eq!(result.into_string(), "Maud");
|
|
}
|
|
|
|
#[test]
|
|
fn nested_macro_invocation() {
|
|
let best_pony = "Pinkie Pie";
|
|
let result = html! { (format!("{} is best pony", best_pony)) };
|
|
assert_eq!(result.into_string(), "Pinkie Pie is best pony");
|
|
}
|