initial commit
This commit is contained in:
227
libraries/FastLED/ci/test_unified_build.py
Normal file
227
libraries/FastLED/ci/test_unified_build.py
Normal file
@@ -0,0 +1,227 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script to validate the new unified build system.
|
||||
|
||||
This script tests the core functionality of the BuildAPI to ensure
|
||||
the refactored build system works correctly.
|
||||
"""
|
||||
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from ci.build_api import BuildType, create_example_builder, create_unit_test_builder
|
||||
|
||||
|
||||
def test_build_api_creation():
|
||||
"""Test that BuildAPI instances can be created successfully"""
|
||||
print("Testing BuildAPI creation...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
# Test unit test builder creation
|
||||
unit_builder = create_unit_test_builder(
|
||||
build_dir=temp_path / "unit", use_pch=True, parallel=True, clean=False
|
||||
)
|
||||
|
||||
assert unit_builder.build_type == BuildType.UNIT_TEST
|
||||
assert unit_builder.build_dir == temp_path / "unit"
|
||||
assert unit_builder.use_pch == True
|
||||
|
||||
print("✓ Unit test builder created successfully")
|
||||
|
||||
# Test example builder creation
|
||||
example_builder = create_example_builder(
|
||||
build_dir=temp_path / "examples", use_pch=True, parallel=True, clean=False
|
||||
)
|
||||
|
||||
assert example_builder.build_type == BuildType.EXAMPLE
|
||||
assert example_builder.build_dir == temp_path / "examples"
|
||||
assert example_builder.use_pch == True
|
||||
|
||||
print("✓ Example builder created successfully")
|
||||
|
||||
|
||||
def test_build_configuration_loading():
|
||||
"""Test that build configurations are loaded correctly"""
|
||||
print("\nTesting build configuration loading...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
# Test unit test configuration
|
||||
unit_builder = create_unit_test_builder(build_dir=temp_path / "unit")
|
||||
|
||||
# Check that unit test specific defines are present
|
||||
unit_defines = unit_builder.compiler_settings.defines or []
|
||||
assert "FASTLED_FORCE_NAMESPACE=1" in unit_defines
|
||||
assert "FASTLED_TESTING=1" in unit_defines
|
||||
assert "STUB_PLATFORM" in unit_defines
|
||||
|
||||
print("✓ Unit test configuration loaded correctly")
|
||||
|
||||
# Test example configuration
|
||||
example_builder = create_example_builder(build_dir=temp_path / "examples")
|
||||
|
||||
# Check that example specific defines are present
|
||||
example_defines = example_builder.compiler_settings.defines or []
|
||||
assert "STUB_PLATFORM" in example_defines
|
||||
assert "ARDUINO=10808" in example_defines
|
||||
# Unit test specific defines should NOT be present
|
||||
assert "FASTLED_FORCE_NAMESPACE=1" not in example_defines
|
||||
assert "FASTLED_TESTING=1" not in example_defines
|
||||
|
||||
print("✓ Example configuration loaded correctly")
|
||||
|
||||
|
||||
def test_build_directory_structure():
|
||||
"""Test that build directory structure is created correctly"""
|
||||
print("\nTesting build directory structure...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
unit_builder = create_unit_test_builder(build_dir=temp_path / "unit")
|
||||
|
||||
# Check that all required directories are created
|
||||
assert unit_builder.build_dir.exists()
|
||||
assert unit_builder.artifacts_dir.exists()
|
||||
assert unit_builder.targets_dir.exists()
|
||||
assert unit_builder.cache_dir.exists()
|
||||
|
||||
# Check directory organization
|
||||
expected_structure = [
|
||||
unit_builder.build_dir / "artifacts",
|
||||
unit_builder.build_dir / "targets",
|
||||
unit_builder.build_dir / "cache",
|
||||
]
|
||||
|
||||
for directory in expected_structure:
|
||||
assert directory.exists(), f"Directory {directory} should exist"
|
||||
|
||||
print("✓ Build directory structure created correctly")
|
||||
|
||||
|
||||
def test_build_info():
|
||||
"""Test that build info is returned correctly"""
|
||||
print("\nTesting build info...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
unit_builder = create_unit_test_builder(build_dir=temp_path / "unit")
|
||||
info = unit_builder.get_build_info()
|
||||
|
||||
# Check required fields
|
||||
assert "config_file" in info
|
||||
assert "build_dir" in info
|
||||
assert "build_type" in info
|
||||
assert "use_pch" in info
|
||||
assert "parallel" in info
|
||||
|
||||
# Check values
|
||||
assert info["build_type"] == "unit_test"
|
||||
assert info["use_pch"] == True
|
||||
assert str(temp_path / "unit") in info["build_dir"]
|
||||
assert "build_unit.toml" in info["build_flags_toml"]
|
||||
|
||||
print("✓ Build info returned correctly")
|
||||
|
||||
|
||||
def test_clean_functionality():
|
||||
"""Test that clean functionality works"""
|
||||
print("\nTesting clean functionality...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
unit_builder = create_unit_test_builder(build_dir=temp_path / "unit")
|
||||
|
||||
# Create some fake files to test cleaning
|
||||
test_file = unit_builder.build_dir / "test_file.txt"
|
||||
test_file.write_text("test content")
|
||||
assert test_file.exists()
|
||||
|
||||
# Test clean functionality
|
||||
unit_builder.clean_build_artifacts()
|
||||
|
||||
# Build directory should still exist but be empty (except for subdirs)
|
||||
assert unit_builder.build_dir.exists()
|
||||
assert not test_file.exists()
|
||||
|
||||
# Subdirectories should be recreated
|
||||
assert unit_builder.artifacts_dir.exists()
|
||||
assert unit_builder.targets_dir.exists()
|
||||
assert unit_builder.cache_dir.exists()
|
||||
|
||||
print("✓ Clean functionality works correctly")
|
||||
|
||||
|
||||
def test_configuration_separation():
|
||||
"""Test that unit test and example configurations are properly separated"""
|
||||
print("\nTesting configuration separation...")
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
|
||||
# Create both builders
|
||||
unit_builder = create_unit_test_builder(build_dir=temp_path / "unit")
|
||||
example_builder = create_example_builder(build_dir=temp_path / "examples")
|
||||
|
||||
# Get build info for comparison
|
||||
unit_info = unit_builder.get_build_info()
|
||||
example_info = example_builder.get_build_info()
|
||||
|
||||
# Configurations should use different files
|
||||
assert "build_unit.toml" in unit_info["build_flags_toml"]
|
||||
assert "build_example.toml" in example_info["build_flags_toml"]
|
||||
|
||||
# Build types should be different
|
||||
assert unit_info["build_type"] == "unit_test"
|
||||
assert example_info["build_type"] == "example"
|
||||
|
||||
# Build directories should be different
|
||||
assert unit_info["build_dir"] != example_info["build_dir"]
|
||||
|
||||
print("✓ Configuration separation works correctly")
|
||||
|
||||
|
||||
def run_all_tests():
|
||||
"""Run all validation tests"""
|
||||
print("=" * 60)
|
||||
print("FASTLED UNIFIED BUILD SYSTEM VALIDATION")
|
||||
print("=" * 60)
|
||||
|
||||
try:
|
||||
test_build_api_creation()
|
||||
test_build_configuration_loading()
|
||||
test_build_directory_structure()
|
||||
test_build_info()
|
||||
test_clean_functionality()
|
||||
test_configuration_separation()
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("ALL TESTS PASSED ✓")
|
||||
print("=" * 60)
|
||||
print("The unified build system is working correctly!")
|
||||
print("\nKey features validated:")
|
||||
print("✓ BuildAPI creation for both unit tests and examples")
|
||||
print("✓ Proper configuration loading from separate TOML files")
|
||||
print("✓ Organized build directory structure")
|
||||
print("✓ Clean separation between unit test and example builds")
|
||||
print("✓ Build info reporting")
|
||||
print("✓ Clean functionality")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ TEST FAILED: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = run_all_tests()
|
||||
exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user