open Tailwind let contains_substring s sub = let len = String.length s in let sub_len = String.length sub in let rec aux i = if i > len - sub_len then false else if String.sub s i sub_len = sub then true else aux (i + 1) in if sub_len = 0 then true else aux 0 let test_flex_center () = let center = Patterns.flex_center in let result = Css.to_string center in Alcotest.(check bool) "contains flex" (contains_substring result "flex"); Alcotest.(check bool) "contains justify" (contains_substring result "justify"); Alcotest.(check bool) "contains items" (contains_substring result "items") let test_absolute_center () = let center = Patterns.absolute_center in let result = Css.to_string center in Alcotest.(check bool) "contains absolute" (contains_substring result "absolute"); Alcotest.(check bool) "contains top-1/2" (contains_substring result "top-1/2"); Alcotest.(check bool) "contains left-1/2" (contains_substring result "left-1/2") let test_stack_default () = let stack = Patterns.stack () in let result = Css.to_string stack in Alcotest.(check bool) "contains flex" (contains_substring result "flex"); Alcotest.(check bool) "non-empty" (String.length result > 0) let test_stack_with_gap () = let stack = Patterns.stack ~gap:(Size.rem 2.0) () in let result = Css.to_string stack in Alcotest.(check bool) "contains flex" (contains_substring result "flex"); Alcotest.(check bool) "non-empty" (String.length result > 0) let test_inline_stack () = let inline = Patterns.inline_stack () in let result = Css.to_string inline in Alcotest.(check bool) "contains flex" (contains_substring result "flex"); Alcotest.(check bool) "non-empty" (String.length result > 0) let test_card () = let card = Patterns.card in let result = Css.to_string card in Alcotest.(check bool) "contains bg-white" (contains_substring result "bg-white"); Alcotest.(check bool) "contains rounded" (contains_substring result "rounded"); Alcotest.(check bool) "contains shadow" (contains_substring result "shadow") let test_container () = let container = Patterns.container () in let result = Css.to_string container in Alcotest.(check bool) "contains container" (contains_substring result "container") let test_container_centered () = let container = Patterns.container ~center:true () in let result = Css.to_string container in Alcotest.(check bool) "contains container" (contains_substring result "container"); Alcotest.(check bool) "contains mx-auto" (contains_substring result "mx-auto") let suite = [ "flex_center", `Quick, test_flex_center; "absolute_center", `Quick, test_absolute_center; "stack_default", `Quick, test_stack_default; "stack_with_gap", `Quick, test_stack_with_gap; "inline_stack", `Quick, test_inline_stack; "card", `Quick, test_card; "container", `Quick, test_container; "container_centered", `Quick, test_container_centered; ]