use tailwind_rs_core::*;
#[test]
fn test_arbitrary_width_values() {
let builder = ClassBuilder::new()
.class("w-[100px]")
.class("w-[50%]")
.class("w-[calc(100%-2rem)]")
.class("w-[theme(spacing.32)]");
let result = builder.build();
assert!(result.has_class("w-[100px]"));
assert!(result.has_class("w-[50%]"));
assert!(result.has_class("w-[calc(100%-2rem)]"));
assert!(result.has_class("w-[theme(spacing.32)]"));
}
#[test]
fn test_arbitrary_color_values() {
let builder = ClassBuilder::new()
.class("bg-[#1da1f2]")
.class("text-[rgb(255,0,0)]")
.class("border-[hsl(120,100%,50%)]")
.class("bg-[var(--my-color)]");
let result = builder.build();
assert!(result.has_class("bg-[#1da1f2]"));
assert!(result.has_class("text-[rgb(255,0,0)]"));
assert!(result.has_class("border-[hsl(120,100%,50%)]"));
assert!(result.has_class("bg-[var(--my-color)]"));
}
#[test]
fn test_arbitrary_spacing_values() {
let builder = ClassBuilder::new()
.class("p-[13px]")
.class("m-[0.5rem]")
.class("gap-[2.5]")
.class("space-x-[1.5rem]");
let result = builder.build();
assert!(result.has_class("p-[13px]"));
assert!(result.has_class("m-[0.5rem]"));
assert!(result.has_class("gap-[2.5]"));
assert!(result.has_class("space-x-[1.5rem]"));
}
#[test]
fn test_arbitrary_font_size_values() {
let builder = ClassBuilder::new()
.class("text-[13px]")
.class("text-[0.875rem]")
.class("text-[1.2em]")
.class("text-[clamp(1rem,2.5vw,2rem)]");
let result = builder.build();
assert!(result.has_class("text-[13px]"));
assert!(result.has_class("text-[0.875rem]"));
assert!(result.has_class("text-[1.2em]"));
assert!(result.has_class("text-[clamp(1rem,2.5vw,2rem)]"));
}
#[test]
fn test_arbitrary_shadow_values() {
let builder = ClassBuilder::new()
.class("shadow-[0_4px_6px_-1px_rgba(0,0,0,0.1)]")
.class("shadow-[inset_0_2px_4px_0_rgba(0,0,0,0.06)]")
.class("shadow-[0_0_0_1px_rgba(59,130,246,0.5)]");
let result = builder.build();
assert!(result.has_class("shadow-[0_4px_6px_-1px_rgba(0,0,0,0.1)]"));
assert!(result.has_class("shadow-[inset_0_2px_4px_0_rgba(0,0,0,0.06)]"));
assert!(result.has_class("shadow-[0_0_0_1px_rgba(59,130,246,0.5)]"));
}
#[test]
fn test_arbitrary_transform_values() {
let builder = ClassBuilder::new()
.class("rotate-[17deg]")
.class("scale-[1.7]")
.class("translate-x-[117px]")
.class("skew-x-[12deg]");
let result = builder.build();
assert!(result.has_class("rotate-[17deg]"));
assert!(result.has_class("scale-[1.7]"));
assert!(result.has_class("translate-x-[117px]"));
assert!(result.has_class("skew-x-[12deg]"));
}
#[test]
fn test_arbitrary_animation_values() {
let builder = ClassBuilder::new()
.class("animate-[spin_1s_linear_infinite]")
.class("animate-[bounce_1s_infinite]")
.class("animate-[ping_1s_cubic-bezier(0,0,0.2,1)_infinite]");
let result = builder.build();
assert!(result.has_class("animate-[spin_1s_linear_infinite]"));
assert!(result.has_class("animate-[bounce_1s_infinite]"));
assert!(result.has_class("animate-[ping_1s_cubic-bezier(0,0,0.2,1)_infinite]"));
}
#[test]
fn test_arbitrary_values_validation() {
let builder = ClassBuilder::new();
let valid_values = vec![
"w-[100px]",
"bg-[#ff0000]",
"text-[1.5rem]",
"p-[calc(100%-2rem)]",
"shadow-[0_4px_6px_rgba(0,0,0,0.1)]",
];
for value in valid_values {
let result = builder.clone().class(value).build();
assert!(
result.has_class(value),
"Failed to include valid arbitrary value: {}",
value
);
}
}
#[test]
fn test_arbitrary_values_with_breakpoints() {
let builder = ClassBuilder::new()
.class("w-[100px]")
.class("md:w-[200px]")
.class("lg:w-[300px]")
.class("xl:w-[400px]");
let result = builder.build();
assert!(result.has_class("w-[100px]"));
assert!(result.has_class("md:w-[200px]"));
assert!(result.has_class("lg:w-[300px]"));
assert!(result.has_class("xl:w-[400px]"));
}
#[test]
fn test_arbitrary_values_with_pseudo_classes() {
let builder = ClassBuilder::new()
.class("w-[100px]")
.class("hover:w-[200px]")
.class("focus:w-[300px]")
.class("active:w-[400px]");
let result = builder.build();
assert!(result.has_class("w-[100px]"));
assert!(result.has_class("hover:w-[200px]"));
assert!(result.has_class("focus:w-[300px]"));
assert!(result.has_class("active:w-[400px]"));
}
#[test]
fn test_arbitrary_values_performance() {
let mut builder = ClassBuilder::new();
for i in 0..100 {
builder = builder.class(&format!("w-[{}px]", i));
}
let start = std::time::Instant::now();
let result = builder.build();
let duration = start.elapsed();
assert!(
duration.as_millis() < 10,
"Arbitrary values processing took too long: {:?}",
duration
);
for i in 0..100 {
assert!(result.has_class(&format!("w-[{}px]", i)));
}
}