"""Tests for configuration system.""" import pytest import json import tempfile import os from config.simulation_config import SimulationConfig, HeadlessConfig, InteractiveConfig, ExperimentConfig from config.config_loader import ConfigLoader class TestSimulationConfig: """Test simulation configuration.""" def test_custom_values(self): """Test custom configuration values.""" config = SimulationConfig( grid_width=50, grid_height=40, cell_size=15, initial_cells=100, initial_food=200, food_spawning=False, random_seed=999, default_tps=120.0 ) assert config.grid_width == 50 assert config.grid_height == 40 assert config.cell_size == 15 assert config.initial_cells == 100 assert config.initial_food == 200 assert config.food_spawning == False assert config.random_seed == 999 assert config.default_tps == 120.0 class TestConfigLoader: """Test configuration loader.""" def test_load_headless_config(self): """Test loading headless configuration from file.""" # Create a temporary file with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f: temp_file = f.name json.dump({ "max_ticks": 10000, "max_duration": 300.0, "output": { "enabled": True, "directory": "test_output", "formats": ["json", "csv"] }, "simulation": { "grid_width": 50, "grid_height": 40, "initial_cells": 100, "default_tps": 60.0 } }, f) try: config = ConfigLoader.load_headless_config(temp_file) assert config.max_ticks == 10000 assert config.max_duration == 300.0 assert config.output.enabled == True assert config.output.directory == "test_output" assert config.output.formats == ["json", "csv"] assert config.simulation.grid_width == 50 assert config.simulation.grid_height == 40 assert config.simulation.initial_cells == 100 assert config.simulation.default_tps == 60.0 finally: os.unlink(temp_file) def test_save_load_json(self): """Test saving and loading configuration from JSON file.""" # Create a temporary file with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f: temp_file = f.name try: # Create test configuration original_config = HeadlessConfig( max_ticks=5000, simulation=SimulationConfig( grid_width=25, grid_height=20, initial_cells=75, default_tps=90.0 ) ) # Save to JSON ConfigLoader.save_config(original_config, temp_file) # Load from JSON loaded_config = ConfigLoader.load_headless_config(temp_file) # Verify loaded config matches original assert loaded_config.max_ticks == original_config.max_ticks assert loaded_config.simulation.grid_width == original_config.simulation.grid_width assert loaded_config.simulation.grid_height == original_config.simulation.grid_height assert loaded_config.simulation.initial_cells == original_config.simulation.initial_cells assert loaded_config.simulation.default_tps == original_config.simulation.default_tps finally: # Clean up temporary file if os.path.exists(temp_file): os.unlink(temp_file)