157 lines
3.7 KiB
Rust
157 lines
3.7 KiB
Rust
#![feature(conservative_impl_trait, plugin)]
|
|
#![plugin(maud_macros)]
|
|
|
|
extern crate maud;
|
|
|
|
#[test]
|
|
fn if_expr() {
|
|
for (number, &name) in (1..4).zip(["one", "two", "three"].iter()) {
|
|
let s = html! {
|
|
@if number == 1 {
|
|
"one"
|
|
} @else if number == 2 {
|
|
"two"
|
|
} @else if number == 3 {
|
|
"three"
|
|
} @else {
|
|
"oh noes"
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, name);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn if_let() {
|
|
for &(input, output) in &[(Some("yay"), "yay"), (None, "oh noes")] {
|
|
let s = html! {
|
|
@if let Some(value) = input {
|
|
(value)
|
|
} @else {
|
|
"oh noes"
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, output);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn while_expr() {
|
|
let mut numbers = (0..3).into_iter().peekable();
|
|
let s = html! {
|
|
ul @while numbers.peek().is_some() {
|
|
li (numbers.next().unwrap())
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, "<ul><li>0</li><li>1</li><li>2</li></ul>");
|
|
}
|
|
|
|
#[test]
|
|
fn while_let_expr() {
|
|
let mut numbers = (0..3).into_iter();
|
|
#[allow(while_let_on_iterator)] // Clippy
|
|
let s = html! {
|
|
ul @while let Some(n) = numbers.next() {
|
|
li (n)
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, "<ul><li>0</li><li>1</li><li>2</li></ul>");
|
|
}
|
|
|
|
#[test]
|
|
fn for_expr() {
|
|
let ponies = ["Apple Bloom", "Scootaloo", "Sweetie Belle"];
|
|
let s = html! {
|
|
ul @for pony in &ponies {
|
|
li (pony)
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, concat!(
|
|
"<ul>",
|
|
"<li>Apple Bloom</li>",
|
|
"<li>Scootaloo</li>",
|
|
"<li>Sweetie Belle</li>",
|
|
"</ul>"));
|
|
}
|
|
|
|
#[test]
|
|
fn match_expr() {
|
|
for &(input, output) in &[(Some("yay"), "<div>yay</div>"), (None, "oh noes")] {
|
|
let s = html! {
|
|
@match input {
|
|
Some(value) => {
|
|
div (value)
|
|
},
|
|
None => {
|
|
"oh noes"
|
|
},
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, output);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn match_expr_without_delims() {
|
|
for &(input, output) in &[(Some("yay"), "yay"), (None, "<span>oh noes</span>")] {
|
|
let s = html! {
|
|
@match input {
|
|
Some(value) => (value),
|
|
None => span "oh noes",
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, output);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn match_expr_with_guards() {
|
|
for &(input, output) in &[(Some(1), "one"), (None, "none"), (Some(2), "2")] {
|
|
let s = html! {
|
|
@match input {
|
|
Some(value) if value == 1 => "one",
|
|
Some(value) => (value),
|
|
None => "none",
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, output);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn match_in_attribute() {
|
|
for &(input, output) in &[(1, "<span class=\"one\">1</span>"), (2, "<span class=\"two\">2</span>"), (3, "<span class=\"many\">3</span>")] {
|
|
let s = html! {
|
|
span class=@match input {
|
|
1 => "one",
|
|
2 => "two",
|
|
_ => "many",
|
|
} { (input) }
|
|
}.into_string();
|
|
assert_eq!(s, output);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn let_expr() {
|
|
let s = html! {
|
|
@let x = 42 {
|
|
"I have " (x) " cupcakes!"
|
|
}
|
|
}.into_string();
|
|
assert_eq!(s, "I have 42 cupcakes!");
|
|
}
|
|
|
|
#[test]
|
|
fn let_lexical_scope() {
|
|
let x = 42;
|
|
let s = html! {
|
|
@let x = 99 {
|
|
"Twilight thought I had " (x) " cupcakes, "
|
|
}
|
|
"but I only had " (x) "."
|
|
}.into_string();
|
|
assert_eq!(s, concat!(
|
|
"Twilight thought I had 99 cupcakes, ",
|
|
"but I only had 42."));
|
|
}
|