tailwind-rs-core 0.15.4

Core types and utilities for tailwind-rs
Documentation
//! Simple test to verify our improvements work

use tailwind_rs_core::css_generator::{CssGenerator, CssGenerationConfig};
use tailwind_rs_core::classes::{ClassSet, ClassBuilder};

#[test]
fn test_hover_states_work() {
    let mut generator = CssGenerator::new();
    
    // Test hover states that were previously broken
    let hover_classes = vec![
        "hover:bg-zinc-700",
        "hover:text-teal-400", 
        "hover:shadow-xl",
        "hover:opacity-80",
    ];
    
    for class in hover_classes {
        let result = generator.add_class(class);
        assert!(result.is_ok(), "Failed to add hover class: {}", class);
    }
    
    let css = generator.generate_css();
    assert!(!css.is_empty(), "Generated CSS should not be empty");
    
    // Verify hover states are in the CSS
    assert!(css.contains(":hover"), "CSS should contain hover selectors");
    assert!(css.contains("background-color"), "CSS should contain background-color properties");
}

#[test]
fn test_dark_mode_works() {
    let mut generator = CssGenerator::new();
    
    // Test dark mode classes that were previously broken
    let dark_classes = vec![
        "dark:bg-zinc-800",
        "dark:text-zinc-200",
        "dark:border-zinc-700",
    ];
    
    for class in dark_classes {
        let result = generator.add_class(class);
        assert!(result.is_ok(), "Failed to add dark mode class: {}", class);
    }
    
    let css = generator.generate_css();
    assert!(!css.is_empty(), "Generated CSS should not be empty");
    
    // Verify dark mode is in the CSS
    assert!(css.contains(".dark"), "CSS should contain dark mode selectors");
}

#[test]
fn test_interactive_utilities_work() {
    let mut generator = CssGenerator::new();
    
    // Test interactive utilities that were previously broken
    let interactive_classes = vec![
        "pointer-events-none",
        "pointer-events-auto",
        "cursor-pointer",
        "select-none",
    ];
    
    for class in interactive_classes {
        let result = generator.add_class(class);
        assert!(result.is_ok(), "Failed to add interactive class: {}", class);
    }
    
    let css = generator.generate_css();
    assert!(!css.is_empty(), "Generated CSS should not be empty");
    
    // Verify interactive properties are in the CSS
    assert!(css.contains("pointer-events"), "CSS should contain pointer-events");
    assert!(css.contains("cursor"), "CSS should contain cursor");
    assert!(css.contains("user-select"), "CSS should contain user-select");
}

#[test]
fn test_advanced_utilities_work() {
    let mut generator = CssGenerator::new();
    
    // Test advanced utilities that were previously broken
    let advanced_classes = vec![
        "text-transparent",
        "backdrop-blur-sm",
        "backdrop-opacity-50",
        "shadow-lg",
        "opacity-75",
    ];
    
    for class in advanced_classes {
        let result = generator.add_class(class);
        assert!(result.is_ok(), "Failed to add advanced class: {}", class);
    }
    
    let css = generator.generate_css();
    assert!(!css.is_empty(), "Generated CSS should not be empty");
    
    // Verify advanced properties are in the CSS
    assert!(css.contains("transparent"), "CSS should contain transparent");
    assert!(css.contains("backdrop-filter"), "CSS should contain backdrop-filter");
    assert!(css.contains("box-shadow"), "CSS should contain box-shadow");
    assert!(css.contains("opacity"), "CSS should contain opacity");
}

#[test]
fn test_classset_api_works() {
    let mut class_set = ClassSet::new();
    class_set.add_class("bg-blue-500");
    class_set.add_class("text-white");
    class_set.add_class("p-4");
    
    // Test the to_css_classes method that was mentioned as missing
    let css_classes = class_set.to_css_classes();
    assert!(!css_classes.is_empty(), "to_css_classes should return non-empty string");
    assert!(css_classes.contains("bg-blue-500"), "Should contain bg-blue-500");
    assert!(css_classes.contains("text-white"), "Should contain text-white");
    assert!(css_classes.contains("p-4"), "Should contain p-4");
}

#[test]
fn test_classbuilder_api_works() {
    let class_set = ClassBuilder::new()
        .class("bg-blue-500")
        .class("text-white")
        .class("p-4")
        .build();
    
    let css_classes = class_set.to_css_classes();
    assert!(!css_classes.is_empty(), "ClassBuilder should produce non-empty CSS classes");
    assert!(css_classes.contains("bg-blue-500"), "Should contain bg-blue-500");
}