fix: fix what a shit
This commit is contained in:
240
BallanceTasSonnet/tests/tasfile.py
Normal file
240
BallanceTasSonnet/tests/tasfile.py
Normal file
@@ -0,0 +1,240 @@
|
||||
import sys
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parent.parent / 'python' / 'blctas'))
|
||||
from blctas import tasfile
|
||||
from tasfile import TasFile, TasKey
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def get_binary_tas_file_path() -> Path:
|
||||
return Path(__file__).resolve().parent / 'assets' / 'SR_01.tas'
|
||||
|
||||
|
||||
def test_create_tasfile():
|
||||
"""Test creating a new TAS file with specified number of frames."""
|
||||
# Create a TAS file with 5 frames, each with delta time 0.1
|
||||
tas_file: TasFile = tasfile.create(5, 0.1)
|
||||
|
||||
assert tas_file.get_count() == 5
|
||||
assert not tas_file.is_empty()
|
||||
|
||||
# Check that all frames initially have the same delta time
|
||||
for i in range(5):
|
||||
assert tas_file.get_delta_time(i) == 0.1
|
||||
|
||||
|
||||
def test_load_tasfile():
|
||||
"""Test loading a TAS file from disk."""
|
||||
# Get the path to the sample TAS file
|
||||
test_file_path = get_binary_tas_file_path()
|
||||
|
||||
# Load the TAS file
|
||||
tas_file = tasfile.load(str(test_file_path))
|
||||
|
||||
# Basic checks
|
||||
assert tas_file.get_count() == 19600 # Should have this frames count
|
||||
assert not tas_file.is_empty()
|
||||
|
||||
|
||||
def test_save_tasfile():
|
||||
"""Test saving a TAS file to disk."""
|
||||
# Create a temporary directory.
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
# Fetch temporary file path
|
||||
temp_dir_path = Path(temp_dir).resolve()
|
||||
temp_file_path = temp_dir_path / 'test.tas'
|
||||
|
||||
# Create a TAS file and save it
|
||||
tas_file = tasfile.create(3, 0.05)
|
||||
tasfile.save(tas_file, str(temp_file_path))
|
||||
|
||||
# Verify the file was created
|
||||
assert temp_file_path.is_file()
|
||||
|
||||
# Load it back and verify content
|
||||
loaded_file = tasfile.load(str(temp_file_path))
|
||||
assert loaded_file.get_count() == 3
|
||||
for i in range(3):
|
||||
assert loaded_file.get_delta_time(i) == 0.05
|
||||
|
||||
|
||||
|
||||
def test_get_set_delta_time():
|
||||
"""Test getting and setting delta time for frames."""
|
||||
tas_file = tasfile.create(3, 0.1)
|
||||
|
||||
# Change delta time for the middle frame
|
||||
tas_file.set_delta_time(1, 0.25)
|
||||
|
||||
# Verify changes
|
||||
assert tas_file.get_delta_time(0) == 0.1
|
||||
assert tas_file.get_delta_time(1) == 0.25
|
||||
assert tas_file.get_delta_time(2) == 0.1
|
||||
|
||||
# Test bounds checking
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.get_delta_time(10) # Index out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.set_delta_time(10, 0.5) # Index out of range
|
||||
|
||||
|
||||
def test_key_press_operations():
|
||||
"""Test key press operations on frames."""
|
||||
tas_file = tasfile.create(2, 0.1)
|
||||
|
||||
# Initially all keys should be unpressed
|
||||
assert not tas_file.is_key_pressed(0, TasKey.KEY_SPACE)
|
||||
assert not tas_file.is_key_pressed(0, TasKey.KEY_UP)
|
||||
assert not tas_file.is_key_pressed(1, TasKey.KEY_SHIFT)
|
||||
|
||||
# Press SPACE on first frame
|
||||
tas_file.set_key_pressed(0, TasKey.KEY_SPACE, True)
|
||||
assert tas_file.is_key_pressed(0, TasKey.KEY_SPACE)
|
||||
assert not tas_file.is_key_pressed(0, TasKey.KEY_UP)
|
||||
|
||||
# Flip the SPACE key (should become unpressed)
|
||||
tas_file.flip_key_pressed(0, TasKey.KEY_SPACE)
|
||||
assert not tas_file.is_key_pressed(0, TasKey.KEY_SPACE)
|
||||
|
||||
# Press SPACE again
|
||||
tas_file.flip_key_pressed(0, TasKey.KEY_SPACE)
|
||||
assert tas_file.is_key_pressed(0, TasKey.KEY_SPACE)
|
||||
|
||||
# Clear all key presses
|
||||
tas_file.clear_key_pressed(0)
|
||||
assert not tas_file.is_key_pressed(0, TasKey.KEY_SPACE)
|
||||
|
||||
|
||||
def test_batch_operations():
|
||||
"""Test batch operations on multiple frames."""
|
||||
tas_file = tasfile.create(5, 0.1)
|
||||
|
||||
# Set delta time for frames 1-3 using batch operation
|
||||
tas_file.batchly_set_delta_time(1, 3, 0.5)
|
||||
|
||||
# Verify individual frame values
|
||||
assert tas_file.get_delta_time(0) == 0.1 # Unchanged
|
||||
assert tas_file.get_delta_time(1) == 0.5 # Changed
|
||||
assert tas_file.get_delta_time(2) == 0.5 # Changed
|
||||
assert tas_file.get_delta_time(3) == 0.5 # Changed
|
||||
assert tas_file.get_delta_time(4) == 0.1 # Unchanged
|
||||
|
||||
# Test batch key operations
|
||||
# Initially all keys should be unpressed
|
||||
assert not tas_file.is_key_pressed(2, TasKey.KEY_UP)
|
||||
assert not tas_file.is_key_pressed(3, TasKey.KEY_UP)
|
||||
|
||||
# Press KEY_UP for frames 2-3
|
||||
tas_file.batchly_set_key_pressed(2, 3, TasKey.KEY_UP, True)
|
||||
assert tas_file.is_key_pressed(2, TasKey.KEY_UP)
|
||||
assert tas_file.is_key_pressed(3, TasKey.KEY_UP)
|
||||
assert not tas_file.is_key_pressed(1, TasKey.KEY_UP) # Outside range
|
||||
|
||||
# Flip keys for frames 2-3
|
||||
tas_file.batchly_flip_key_pressed(2, 3, TasKey.KEY_UP)
|
||||
assert not tas_file.is_key_pressed(2, TasKey.KEY_UP)
|
||||
assert not tas_file.is_key_pressed(3, TasKey.KEY_UP)
|
||||
|
||||
# Test batch clear key presses
|
||||
tas_file.set_key_pressed(2, TasKey.KEY_SPACE, True)
|
||||
tas_file.set_key_pressed(2, TasKey.KEY_Q, True)
|
||||
assert tas_file.is_key_pressed(2, TasKey.KEY_SPACE)
|
||||
assert tas_file.is_key_pressed(2, TasKey.KEY_Q)
|
||||
|
||||
tas_file.batchly_clear_key_pressed(2, 2) # Just frame 2
|
||||
assert not tas_file.is_key_pressed(2, TasKey.KEY_SPACE)
|
||||
assert not tas_file.is_key_pressed(2, TasKey.KEY_Q)
|
||||
|
||||
|
||||
def test_frame_modification_operations():
|
||||
"""Test adding, inserting, and removing frames."""
|
||||
tas_file = tasfile.create(3, 0.1)
|
||||
|
||||
# Append 2 more frames
|
||||
tas_file.append(2, 0.2)
|
||||
assert tas_file.get_count() == 5
|
||||
|
||||
# Check that appended frames have correct delta time
|
||||
assert tas_file.get_delta_time(3) == 0.2
|
||||
assert tas_file.get_delta_time(4) == 0.2
|
||||
|
||||
# Insert 1 frame at position 1
|
||||
tas_file.insert(1, 1, 0.15)
|
||||
assert tas_file.get_count() == 6
|
||||
assert tas_file.get_delta_time(1) == 0.15 # New frame
|
||||
assert tas_file.get_delta_time(2) == 0.1 # Old frame 1 (now shifted)
|
||||
|
||||
# Remove frames 2-3 (inclusive)
|
||||
tas_file.remove(2, 3)
|
||||
assert tas_file.get_count() == 4
|
||||
|
||||
# Check that the right frames were removed
|
||||
assert tas_file.get_delta_time(0) == 0.1 # Original first frame
|
||||
assert tas_file.get_delta_time(1) == 0.15 # Inserted frame
|
||||
assert tas_file.get_delta_time(2) == 0.1 # Original third frame (shifted)
|
||||
assert tas_file.get_delta_time(3) == 0.2 # Original fourth frame (shifted)
|
||||
|
||||
|
||||
def test_clear_operation():
|
||||
"""Test clearing all frames from the TAS file."""
|
||||
tas_file = tasfile.create(3, 0.1)
|
||||
assert tas_file.get_count() == 3
|
||||
assert not tas_file.is_empty()
|
||||
|
||||
tas_file.clear()
|
||||
assert tas_file.get_count() == 0
|
||||
assert tas_file.is_empty()
|
||||
|
||||
|
||||
def test_edge_cases():
|
||||
"""Test edge cases and error conditions."""
|
||||
tas_file = tasfile.create(1, 0.1)
|
||||
|
||||
# Test batch operations with invalid ranges
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.batchly_set_delta_time(0, 5, 0.2) # End index out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.batchly_set_delta_time(2, 0, 0.2) # Invalid range (end < start)
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.batchly_set_key_pressed(0, 5, TasKey.KEY_SPACE, True) # Out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.batchly_flip_key_pressed(0, 5, TasKey.KEY_SPACE) # Out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.batchly_clear_key_pressed(0, 5) # Out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.remove(0, 5) # End index out of range
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
tas_file.remove(2, 0) # Invalid range (end < start)
|
||||
|
||||
|
||||
def test_available_keys():
|
||||
"""Test that all expected keys are available."""
|
||||
tas_file = tasfile.create(1, 0.1)
|
||||
|
||||
all_keys = [
|
||||
TasKey.KEY_UP, TasKey.KEY_DOWN, TasKey.KEY_LEFT, TasKey.KEY_RIGHT,
|
||||
TasKey.KEY_SHIFT, TasKey.KEY_SPACE, TasKey.KEY_Q, TasKey.KEY_ESC, TasKey.KEY_ENTER
|
||||
]
|
||||
|
||||
# Test that we can interact with all keys without errors
|
||||
for key in all_keys:
|
||||
# Initially should be unpressed
|
||||
assert not tas_file.is_key_pressed(0, key)
|
||||
|
||||
# Press the key
|
||||
tas_file.set_key_pressed(0, key, True)
|
||||
assert tas_file.is_key_pressed(0, key)
|
||||
|
||||
# Flip the key (release it)
|
||||
tas_file.flip_key_pressed(0, key)
|
||||
assert not tas_file.is_key_pressed(0, key)
|
||||
Reference in New Issue
Block a user