111 lines
3.6 KiB
Python
111 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test for saving and loading patterns
|
|
Run with: mpremote run test/test_patterns_save_load.py
|
|
"""
|
|
|
|
import json
|
|
import uasyncio as asyncio
|
|
from settings import Settings
|
|
from patterns import Patterns
|
|
|
|
|
|
async def test_patterns_save_load():
|
|
"""Test saving and loading patterns"""
|
|
print("Testing patterns save and load functionality...")
|
|
|
|
# Test 1: Initialize patterns and check initial state
|
|
print("\nTest 1: Initialize patterns")
|
|
s = Settings()
|
|
pin = s.get("led_pin", 10)
|
|
num_leds = s.get("num_leds", 30)
|
|
|
|
p1 = Patterns(pin=pin, num_leds=num_leds)
|
|
print(f"Initial patterns count: {len(p1.patterns)}")
|
|
print(f"Available patterns: {list(p1.patterns.keys())}")
|
|
print(f"Selected pattern: {p1.selected}")
|
|
|
|
# Test 2: Try to save patterns (will fail because patterns contain functions)
|
|
print("\nTest 2: Attempt to save patterns")
|
|
try:
|
|
result = p1.save()
|
|
if result:
|
|
print("✓ Patterns saved successfully")
|
|
else:
|
|
print("✗ Patterns save failed (expected - patterns contain functions)")
|
|
except Exception as e:
|
|
print(f"✗ Exception during save: {e}")
|
|
|
|
# Test 3: Try to load patterns
|
|
print("\nTest 3: Attempt to load patterns")
|
|
try:
|
|
result = p1.load()
|
|
if result:
|
|
print("✓ Patterns loaded successfully")
|
|
print(f"Patterns after load: {list(p1.patterns.keys())}")
|
|
else:
|
|
print("✗ Patterns load failed")
|
|
except Exception as e:
|
|
print(f"✗ Exception during load: {e}")
|
|
|
|
# Test 4: Test with empty patterns dict (simulating custom patterns)
|
|
print("\nTest 4: Test save/load with empty patterns dict")
|
|
p2 = Patterns(pin=pin, num_leds=num_leds)
|
|
# Store original patterns
|
|
original_patterns = p2.patterns.copy()
|
|
# Clear patterns to test save/load with empty dict
|
|
p2.patterns = {}
|
|
|
|
try:
|
|
result = p2.save()
|
|
if result:
|
|
print("✓ Empty patterns dict saved successfully")
|
|
else:
|
|
print("✗ Failed to save empty patterns dict")
|
|
except Exception as e:
|
|
print(f"✗ Exception saving empty patterns: {e}")
|
|
|
|
# Try to load
|
|
p3 = Patterns(pin=pin, num_leds=num_leds)
|
|
p3.patterns = {} # Start with empty
|
|
try:
|
|
result = p3.load()
|
|
if result:
|
|
print("✓ Patterns loaded successfully")
|
|
print(f"Patterns count after load: {len(p3.patterns)}")
|
|
else:
|
|
print("✗ Failed to load patterns")
|
|
except Exception as e:
|
|
print(f"✗ Exception loading patterns: {e}")
|
|
|
|
# Restore original patterns
|
|
p2.patterns = original_patterns
|
|
p3.patterns = original_patterns
|
|
|
|
# Test 5: Verify patterns object state
|
|
print("\nTest 5: Verify patterns object state")
|
|
print(f"Patterns object type: {type(p1)}")
|
|
print(f"Has save method: {hasattr(p1, 'save')}")
|
|
print(f"Has load method: {hasattr(p1, 'load')}")
|
|
print(f"PATTERNS_FILE: {p1.PATTERNS_FILE}")
|
|
|
|
# Test 6: Test pattern selection persists
|
|
print("\nTest 6: Test pattern selection")
|
|
test_pattern = "rainbow"
|
|
if test_pattern in p1.patterns:
|
|
p1.select(test_pattern)
|
|
print(f"Selected pattern: {p1.selected}")
|
|
if p1.selected == test_pattern:
|
|
print("✓ Pattern selection works")
|
|
else:
|
|
print(f"✗ Pattern selection failed. Expected '{test_pattern}', got '{p1.selected}'")
|
|
else:
|
|
print(f"Pattern '{test_pattern}' not available")
|
|
|
|
print("\n=== Patterns Save/Load test complete ===")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(test_patterns_save_load())
|
|
|