krik 0.1.27

A fast static site generator written in Rust with internationalization, theming, and modern web features
Documentation
use krik::generator::templates::context::*;

#[test]
fn test_clean_frontmatter_description() {
    let desc = "Line 1\nLine 2\r\nLine 3".to_string();
    let result = clean_frontmatter_description(&desc);
    assert_eq!(result, "Line 1 Line 2  Line 3");
}

#[test]
fn test_clean_frontmatter_description_with_trim() {
    let desc = "  \n  Trimmed content  \r\n  ".to_string();
    let result = clean_frontmatter_description(&desc);
    assert_eq!(result, "Trimmed content");
}

#[test]
fn test_strip_html_tags() {
    let content = "<h1>Title</h1><p>This is <strong>bold</strong> text.</p>";
    let result = strip_html_tags(content);
    assert_eq!(result, " Title  This is  bold  text. ");
}

#[test]
fn test_strip_html_tags_malformed() {
    let content = "<h1>Title<p>Missing closing tag";
    let result = strip_html_tags(content);
    assert_eq!(result, " Title Missing closing tag");
}

#[test]
fn test_strip_html_tags_no_tags() {
    let content = "Plain text with no tags";
    let result = strip_html_tags(content);
    assert_eq!(result, "Plain text with no tags");
}

#[test]
fn test_normalize_whitespace() {
    let text = "  Multiple   spaces    and\n\ttabs  ";
    let result = normalize_whitespace(text);
    assert_eq!(result, "Multiple spaces and tabs");
}

#[test]
fn test_normalize_whitespace_empty() {
    let text = "";
    let result = normalize_whitespace(text);
    assert_eq!(result, "");
}

#[test]
fn test_normalize_whitespace_only_spaces() {
    let text = "   \t\n  ";
    let result = normalize_whitespace(text);
    assert_eq!(result, "");
}

#[test]
fn test_truncate_description_short() {
    let text = "Short text";
    let result = truncate_description(text, 160);
    assert_eq!(result, "Short text");
}

#[test]
fn test_truncate_description_long() {
    let text = "a".repeat(200);
    let result = truncate_description(&text, 160);
    assert_eq!(result.len(), 160);
    assert!(result.ends_with("..."));
    assert_eq!(result, format!("{}...", "a".repeat(157)));
}

#[test]
fn test_truncate_description_exact_length() {
    let text = "a".repeat(160);
    let result = truncate_description(&text, 160);
    assert_eq!(result, text);
}

#[test]
fn test_truncate_description_zero_length() {
    let text = "Some text";
    let result = truncate_description(text, 0);
    assert_eq!(result, "...");
}

#[test]
fn test_extract_description_from_content() {
    let content = "<h1>Title</h1><p>This is the first paragraph with some content.</p><p>Second paragraph.</p>";
    let result = extract_description_from_content(content);

    assert!(!result.contains('<'));
    assert!(!result.contains('>'));
    assert!(result.contains("Title"));
    assert!(result.contains("first paragraph"));

    if result.len() > 160 {
        assert!(result.ends_with("..."));
    }
}

#[test]
fn test_extract_description_from_content_short() {
    let content = "<p>Short content</p>";
    let result = extract_description_from_content(content);
    assert_eq!(result, "Short content");
}

#[test]
fn test_generate_description_with_frontmatter() {
    let content = "<h1>Title</h1><p>Content here</p>";
    let frontmatter_desc = Some("Custom description from frontmatter".to_string());

    let result = generate_description(content, frontmatter_desc.as_ref());
    assert_eq!(result, "Custom description from frontmatter");
}

#[test]
fn test_generate_description_without_frontmatter() {
    let content = "<h1>Title</h1><p>Content extracted from HTML</p>";

    let result = generate_description(content, None);
    assert_eq!(result, "Title Content extracted from HTML");
}

#[test]
fn test_generate_description_frontmatter_with_newlines() {
    let content = "<h1>Title</h1><p>Content here</p>";
    let frontmatter_desc = Some("Description\nwith\rnewlines".to_string());

    let result = generate_description(content, frontmatter_desc.as_ref());
    assert_eq!(result, "Description with newlines");
}

#[test]
fn test_generate_description_long_content() {
    let long_content = format!("<p>{}</p>", "word ".repeat(50));

    let result = generate_description(&long_content, None);
    assert!(result.len() <= 160);
    if result.len() == 160 {
        assert!(result.ends_with("..."));
    }
}