McRogueFace/tests
2026-02-05 12:52:18 -05:00
..
api Add Game-to-API Bridge for external client integration 2026-01-29 23:08:26 -05:00
benchmarks Timer overhaul: update tests 2026-01-03 22:44:53 -05:00
cookbook Add cookbook examples with updated callback signatures for #229, #230 2026-01-28 18:58:25 -05:00
demo Voxel functionality extension 2026-02-05 12:52:18 -05:00
docs Add API verification test suite and documentation 2026-01-15 04:05:32 +00:00
geometry_demo Timer overhaul: update tests 2026-01-03 22:44:53 -05:00
integration Timer overhaul: update tests 2026-01-03 22:44:53 -05:00
notes Timer overhaul: update tests 2026-01-03 22:44:53 -05:00
regression fix: animations modifying animations during callback is now safe 2026-02-04 10:25:59 -05:00
unit 3D viewport, milestone 1 2026-02-04 13:33:14 -05:00
vllm_demo update tests: new scene API 2026-01-03 10:59:52 -05:00
conftest.py Add API verification test suite and documentation 2026-01-15 04:05:32 +00:00
KNOWN_ISSUES.md Refactor 11 more tests to mcrfpy.step() pattern 2026-01-14 03:09:47 +00:00
pytest.ini Test suite modernization: pytest wrapper and runner fixes 2026-01-14 01:54:31 +00:00
README.md Organize test suite: add README, move loose tests to proper directories 2026-01-21 21:34:22 -05:00
run_tests.py Test suite modernization: pytest wrapper and runner fixes 2026-01-14 01:54:31 +00:00
shader_poc_test.py Shader POC: Add shader_enabled property to UIFrame (#106) 2026-01-24 20:28:53 -05:00
shader_toggle_test.py Shader POC: Add shader_enabled property to UIFrame (#106) 2026-01-24 20:28:53 -05:00
test_mcrogueface.py Test suite modernization: pytest wrapper and runner fixes 2026-01-14 01:54:31 +00:00

McRogueFace Test Suite

Automated tests for the McRogueFace game engine.

Directory Structure

tests/
├── unit/           # Unit tests for individual components (155+ tests)
├── integration/    # Integration tests for system interactions
├── regression/     # Bug regression tests (issue_XX_*.py)
├── benchmarks/     # Performance benchmarks
├── demo/           # Interactive demo system
│   ├── demo_main.py    # Demo runner
│   └── screens/        # Per-feature demo screens
├── conftest.py     # Pytest configuration and fixtures
├── pytest.ini      # Pytest settings
├── run_tests.py    # Standalone test runner
└── KNOWN_ISSUES.md # Test status and mcrfpy.step() documentation

Running Tests

# Run all tests
pytest tests/ -v

# Run specific directory
pytest tests/unit/ -v

# Run tests matching a pattern
pytest tests/ -k "bsp" -v

# Quick run with short timeout (some timeouts expected)
pytest tests/ -q --mcrf-timeout=5

# Full run with longer timeout
pytest tests/ -q --mcrf-timeout=30

# Stop on first failure
pytest tests/ -x

With run_tests.py

# Run all tests
python3 tests/run_tests.py

# Run specific category
python3 tests/run_tests.py unit
python3 tests/run_tests.py regression

# Verbose output
python3 tests/run_tests.py -v

# Quiet (no checksums)
python3 tests/run_tests.py -q

# Custom timeout
python3 tests/run_tests.py --timeout=30

Running individual tests

cd build
./mcrogueface --headless --exec ../tests/unit/some_test.py

Writing Tests

Test Pattern: Synchronous with mcrfpy.step()

Recommended: Use mcrfpy.step(t) to advance simulation time synchronously.

import mcrfpy
import sys

# Setup
scene = mcrfpy.Scene("test")
scene.activate()

# Create UI elements
frame = mcrfpy.Frame(pos=(100, 100), size=(50, 50))
scene.children.append(frame)

# Start animation
frame.animate("x", 500.0, 1.0, mcrfpy.Easing.LINEAR)

# Advance simulation synchronously
mcrfpy.step(1.5)

# Verify results
if abs(frame.x - 500.0) < 0.1:
    print("PASS")
    sys.exit(0)
else:
    print(f"FAIL: frame.x = {frame.x}, expected 500.0")
    sys.exit(1)

Test Pattern: Timer-based (legacy)

For tests that need multiple timer callbacks or complex timing:

import mcrfpy
import sys

def run_test(runtime):
    # Test code here
    print("PASS")
    sys.exit(0)

scene = mcrfpy.Scene("test")
scene.activate()

# Timer fires after 100ms
timer = mcrfpy.Timer("test", run_test, 100)
# Script ends, game loop runs timer

Test Output

  • Print PASS and sys.exit(0) for success
  • Print FAIL with details and sys.exit(1) for failure
  • Tests that timeout are marked as failures

Test Categories

Unit Tests (unit/)

Test individual components in isolation:

  • *_test.py - Standard component tests
  • api_*_test.py - Python API tests
  • automation_*_test.py - Automation module tests

Regression Tests (regression/)

Tests for specific bug fixes, named by issue number:

  • issue_XX_description_test.py

Integration Tests (integration/)

Tests for system interactions and complex scenarios.

Benchmarks (benchmarks/)

Performance measurement tests.

Demo (demo/)

Interactive demonstrations of features. Run with:

cd build
./mcrogueface ../tests/demo/demo_main.py

Tips

  • Read tests as examples: Tests show correct API usage
  • Use mcrfpy.step(): Avoids timeout issues, makes tests deterministic
  • Check KNOWN_ISSUES.md: Documents expected failures and workarounds
  • Screenshots: Use mcrfpy.automation.screenshot("name.png") after mcrfpy.step()

See Also

  • KNOWN_ISSUES.md - Current test status and the mcrfpy.step() pattern
  • conftest.py - Pytest fixtures and custom collector
  • demo/screens/ - Feature demonstrations (good API examples)