slugrs 0.3.2

A fast, locale-aware slugify library for Rust
Documentation
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 only_separators_or_whitespace() {
    assert_eq!(slugify(" -- "), "");
    assert_eq!(slugify("   \t\n  "), "");
}