39 lines
1.9 KiB
Python
39 lines
1.9 KiB
Python
"""Executable goal/penalty rules and delivery regressions using actual JS."""
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
|
|
import pytest
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
CASES = [
|
|
'manual_minor_goal', 'external_minor_goal', 'double_minor_first', 'double_minor_second',
|
|
'current_segment_shortest', 'major_stays', 'major_misconduct_stays', 'equal_strength_stays',
|
|
'shorthanded_goal_stays', 'empty_net_does_not_create_powerplay', 'unstarted_minor_stays',
|
|
'queued_minor_not_selected', 'coincidental_not_selected', 'equal_remaining_requires_choice',
|
|
'equal_remaining_selected', 'initial_load_and_big_jump', 'source_switch_is_baseline',
|
|
'sync_is_not_goal', 'duplicate_snapshot_rehydrates_history', 'viewer_never_changes_penalty',
|
|
'context_change_cancels_queued_goal', 'shootout_never_ends_minor', 'undo_restores_unedited_minor',
|
|
'undo_does_not_overwrite_edit', 'unknown_ack_is_not_replayed',
|
|
'goal_marker_survives_history_limit',
|
|
'external_known_annulment_restores', 'unrelated_external_negative_is_baseline',
|
|
'queued_old_zero_cannot_clear_new_assignment', 'queued_finish_preserves_foreign_overlay',
|
|
'orphan_field_zero_survives_other_field_reassignment',
|
|
'typed_manual_penalty_shot_never_releases_minor', 'armed_sql_penalty_shot_is_consumed_once',
|
|
'typed_sql_penalty_shot_never_releases_minor', 'viewer_cannot_arm_penalty_shot',
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize('case', CASES)
|
|
def test_goal_penalty(case):
|
|
node = shutil.which('node')
|
|
assert node, 'Node is required'
|
|
result = subprocess.run(
|
|
[node, str(ROOT / 'tests/build199_goal_penalty.cjs'), case,
|
|
os.environ.get('BUILD199_RUNTIME_ROOT', str(ROOT))],
|
|
cwd=ROOT, text=True, capture_output=True, timeout=20,
|
|
)
|
|
assert result.returncode == 0, result.stdout + result.stderr
|
|
assert f'PASS BUILD199 goal penalty: {case}' in result.stdout, result.stdout + result.stderr
|