#!/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 "$@"