use regex::Regex;
use slugrs::{slugify, slugify_with_options, Locale, Options};
#[test]
fn default_basic_cases() {
assert_eq!(slugify("Hello, World!"), "hello-world");
assert_eq!(slugify(" Multiple spaces "), "multiple-spaces");
assert_eq!(slugify("already--sluggy__text"), "already-sluggy-text");
assert_eq!(slugify("Crème brûlée"), "creme-brulee");
assert_eq!(slugify("Español — prueba"), "espanol-prueba");
assert_eq!(slugify("Żubrówka"), "zubrowka");
}
#[test]
fn locale_de() {
let opts = Options::default().locale(Some(Locale::De));
assert_eq!(
slugify_with_options("Übergrößenträger", &opts),
"uebergroessentraeger"
);
assert_eq!(
slugify_with_options("Schrödinger’s Katze", &opts),
"schroedingers-katze"
);
}
#[test]
fn locale_tr() {
let opts = Options::default().locale(Some(Locale::Tr));
assert_eq!(
slugify_with_options("İstanbul'a hoş geldiniz!", &opts),
"istanbula-hos-geldiniz"
);
assert_eq!(
slugify_with_options("Çağdaş göğüs ölçüsü", &opts),
"cagdas-gogus-olcusu"
);
}
#[test]
fn custom_separator_and_collapse() {
let opts = Options::default().separator("_");
assert_eq!(slugify_with_options("A B\nC", &opts), "a_b_c");
let opts2 = Options::default().separator("--");
assert_eq!(slugify_with_options("A--B__C", &opts2), "a--b--c");
}
#[test]
fn lowercase_and_trim_flags() {
let opts = Options::default().lowercase(false);
assert_eq!(slugify_with_options("Hello, World!", &opts), "Hello-World");
let opts2 = Options::default().separator("_").trim(false);
assert_eq!(slugify_with_options(" Hello ", &opts2), "_hello_");
}
#[test]
fn max_length_enforced() {
let opts = Options::default().max_length(Some(10));
assert_eq!(
slugify_with_options("this is a very long title", &opts),
"this-is-a"
);
}
#[test]
fn remove_regex_custom() {
let opts = Options::default().remove(Some(Regex::new("[0-9]").unwrap()));
assert_eq!(slugify_with_options("a1b2c3", &opts), "abc");
}
#[test]
fn idempotent_on_slug() {
assert_eq!(slugify("already-slugified-text"), "already-slugified-text");
}
#[test]
fn emoji_and_symbols() {
assert_eq!(slugify("🔥 Rust & Friends"), "rust-friends");
}
#[test]
fn slugify_locale_arabic() {
let opts = Options::default().locale(Some(Locale::Ar));
assert_eq!(
slugify_with_options("الحرب على غزة مباشر إسرائيل", &opts),
"alharb-ealaa-ghazat-mubashir-iisrayiyl"
);
}
#[test]
fn only_separators_or_whitespace() {
assert_eq!(slugify(" -- "), "");
assert_eq!(slugify(" \t\n "), "");
}