platform-raspberrypi icon indicating copy to clipboard operation
platform-raspberrypi copied to clipboard

feat: Add comprehensive Python testing infrastructure

Open llbbl opened this issue 5 months ago • 0 comments

Add Comprehensive Python Testing Infrastructure

Summary

This PR establishes a complete testing infrastructure for the Raspberry Pi RP2040 platform project, providing developers with immediate capability to write and run tests effectively.

Changes Made

Package Management

  • Set up Poetry as the package manager with pyproject.toml configuration
  • Configured package-mode = false since this is a platform package, not a library
  • Added PlatformIO dependency to support platform development

Testing Dependencies

  • pytest (v8.0.0+) - Main testing framework
  • pytest-cov (v4.0.0+) - Coverage reporting and analysis
  • pytest-mock (v3.12.0+) - Advanced mocking utilities
  • All added as development dependencies for clean separation

Testing Configuration

  • Comprehensive pytest configuration in pyproject.toml:

    • Test discovery patterns for flexible test organization
    • Coverage settings with 80% threshold requirement
    • HTML and XML coverage report generation
    • Custom test markers: unit, integration, slow
    • Strict configuration and warning filters
  • Coverage configuration with:

    • Source inclusion for platform.py and builder/ directory
    • Exclusion of test files, examples, and cache directories
    • Missing line reporting enabled

Directory Structure

  • Organized test directories:
    tests/
    ├── __init__.py
    ├── conftest.py           # Shared fixtures and configuration
    ├── unit/
    │   └── __init__.py
    ├── integration/
    │   └── __init__.py
    └── test_setup_validation.py
    

Shared Testing Utilities

  • Comprehensive fixtures in conftest.py:
    • temp_dir - Temporary directory management
    • mock_platform_variables - Platform configuration mocking
    • mock_board_config - Board configuration utilities
    • sample_board_manifest - Test data for board configurations
    • mock_debug_config - Debug configuration mocking
    • mock_file_system - File system structure mocking
    • clean_environment - Environment cleanup between tests

Development Environment

  • Updated .gitignore with testing-related entries:
    • Test cache and coverage files
    • Virtual environments and build artifacts
    • IDE files and OS-specific items
    • Claude settings directory

Validation

  • Setup validation tests to verify:
    • Python import capabilities
    • Testing framework installation
    • Coverage tools availability
    • Project structure integrity
    • Platform module importability
    • Test markers functionality

Running Tests

Basic test execution:

poetry run pytest

Run specific test categories:

poetry run pytest -m unit          # Unit tests only
poetry run pytest -m integration   # Integration tests only
poetry run pytest -m "not slow"    # Exclude slow tests

Coverage reporting:

poetry run pytest --cov            # With coverage
poetry run pytest --no-cov         # Without coverage

Test discovery and verbose output:

poetry run pytest -v               # Verbose output
poetry run pytest tests/unit/      # Specific directory

Installation

  1. Install dependencies:

    poetry install
    
  2. Verify setup:

    poetry run pytest tests/test_setup_validation.py -v
    

Notes

  • No lock files in .gitignore: poetry.lock should be committed for reproducible builds
  • PlatformIO integration: Tests can import and test platform modules with appropriate mocking
  • Flexible configuration: Easy to adjust coverage thresholds and test discovery patterns
  • Ready for CI/CD: Configuration supports automated testing pipelines

The testing infrastructure is now ready for immediate use. Developers can start writing unit and integration tests using the provided fixtures and configuration.

🤖 Generated with Claude Code

llbbl avatar Sep 04 '25 12:09 llbbl