#!/bin/bash # Script to create real tests for all components # This replaces placeholder assert!(true) tests with real functional tests set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Component list (46 components) COMPONENTS=( "accordion" "alert" "alert-dialog" "aspect-ratio" "avatar" "badge" "breadcrumb" "button" "calendar" "card" "carousel" "checkbox" "collapsible" "combobox" "command" "context-menu" "date-picker" "dialog" "drawer" "dropdown-menu" "error-boundary" "form" "hover-card" "input" "input-otp" "label" "lazy-loading" "menubar" "navigation-menu" "pagination" "popover" "progress" "radio-group" "resizable" "scroll-area" "select" "separator" "sheet" "skeleton" "slider" "switch" "table" "tabs" "textarea" "toast" "toggle" "tooltip" ) # Function to create real tests for a component create_real_tests() { local component=$1 local component_dir="packages/leptos/$component" local test_file="$component_dir/src/real_tests.rs" local lib_file="$component_dir/src/lib.rs" echo -e "${BLUE}Processing component: $component${NC}" # Check if component directory exists if [ ! -d "$component_dir" ]; then echo -e "${RED}Component directory not found: $component_dir${NC}" return 1 fi # Check if lib.rs exists if [ ! -f "$lib_file" ]; then echo -e "${RED}lib.rs not found: $lib_file${NC}" return 1 fi # Create real_tests.rs if it doesn't exist if [ ! -f "$test_file" ]; then echo -e "${YELLOW}Creating real_tests.rs for $component${NC}" # Create the test file with basic structure cat > "$test_file" << EOF #[cfg(test)] mod real_tests { use leptos::prelude::*; use wasm_bindgen_test::*; wasm_bindgen_test_configure!(run_in_browser); #[wasm_bindgen_test] fn test_${component}_renders() { mount_to_body(|| { view! {
"$component content"
} }); let document = web_sys::window().unwrap().document().unwrap(); let element = document.query_selector("[data-testid='$component']").unwrap(); assert!(element.is_some(), "$component should render in DOM"); } #[test] fn test_${component}_signal_state_management() { let signal = RwSignal::new(true); assert!(signal.get(), "$component signal should have initial value"); signal.set(false); assert!(!signal.get(), "$component signal should update"); } #[test] fn test_${component}_callback_functionality() { let callback_triggered = RwSignal::new(false); let callback = Callback::new(move |_| { callback_triggered.set(true); }); callback.run(()); assert!(callback_triggered.get(), "$component callback should be triggered"); } } EOF echo -e "${GREEN}Created real_tests.rs for $component${NC}" else echo -e "${YELLOW}real_tests.rs already exists for $component${NC}" fi # Add real_tests module to lib.rs if not already present if ! grep -q "mod real_tests;" "$lib_file"; then echo -e "${YELLOW}Adding real_tests module to lib.rs for $component${NC}" # Find the last #[cfg(test)] section and add the module if grep -q "#\[cfg(test)\]" "$lib_file"; then # Add after the last test module sed -i '' '/#\[cfg(test)\]/a\ mod real_tests; ' "$lib_file" else # Add at the end of the file echo "" >> "$lib_file" echo "#[cfg(test)]" >> "$lib_file" echo "mod real_tests;" >> "$lib_file" fi echo -e "${GREEN}Added real_tests module to lib.rs for $component${NC}" else echo -e "${YELLOW}real_tests module already exists in lib.rs for $component${NC}" fi } # Function to count placeholder tests count_placeholder_tests() { local component=$1 local count=$(grep -r "assert!(true" "packages/leptos/$component/src/" 2>/dev/null | wc -l || echo "0") echo "$count" } # Function to test compilation test_compilation() { local component=$1 echo -e "${BLUE}Testing compilation for $component${NC}" if cargo test -p "leptos-shadcn-$component" --lib real_tests --no-run 2>/dev/null; then echo -e "${GREEN}✓ $component compiles successfully${NC}" return 0 else echo -e "${RED}✗ $component compilation failed${NC}" return 1 fi } # Main execution main() { echo -e "${BLUE}Starting real tests creation for all components...${NC}" echo -e "${BLUE}Total components to process: ${#COMPONENTS[@]}${NC}" echo "" local success_count=0 local total_count=${#COMPONENTS[@]} local placeholder_total=0 # Count total placeholder tests echo -e "${YELLOW}Counting placeholder tests...${NC}" for component in "${COMPONENTS[@]}"; do local count=$(count_placeholder_tests "$component") placeholder_total=$((placeholder_total + count)) if [ "$count" -gt 0 ]; then echo -e "${RED}$component: $count placeholder tests${NC}" fi done echo -e "${RED}Total placeholder tests: $placeholder_total${NC}" echo "" # Process each component for component in "${COMPONENTS[@]}"; do if create_real_tests "$component"; then if test_compilation "$component"; then success_count=$((success_count + 1)) fi fi echo "" done # Summary echo -e "${BLUE}=== SUMMARY ===${NC}" echo -e "${GREEN}Successfully processed: $success_count/$total_count components${NC}" echo -e "${RED}Total placeholder tests found: $placeholder_total${NC}" if [ "$success_count" -eq "$total_count" ]; then echo -e "${GREEN}🎉 All components processed successfully!${NC}" exit 0 else echo -e "${YELLOW}⚠️ Some components need manual attention${NC}" exit 1 fi } # Run main function main "$@"