67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
from pathlib import Path
|
|
|
|
APP_JS = Path(__file__).resolve().parents[1] / "ui_builder" / "static" / "app.js"
|
|
TEXT = APP_JS.read_text(encoding="utf-8")
|
|
|
|
|
|
def block(start_marker: str, end_marker: str) -> str:
|
|
start = TEXT.index(start_marker)
|
|
end = TEXT.index(end_marker, start)
|
|
return TEXT[start:end]
|
|
|
|
|
|
def test_game_clock_helper_only_seeds_on_set():
|
|
helper = block(
|
|
"function vmixGameCountdownControlCommands",
|
|
"function buildShortcutRuntimeContext",
|
|
)
|
|
pause_branch = helper[helper.index('if (action === "pause"'):helper.index('if (action === "set"')]
|
|
set_branch = helper[helper.index('if (action === "set"'):helper.index('return [{ Function: "StartCountdown"')]
|
|
start_branch = helper[helper.index('return [{ Function: "StartCountdown"'):]
|
|
|
|
assert 'Function: "PauseCountdown"' in pause_branch
|
|
assert 'ChangeCountdown' not in pause_branch
|
|
assert 'SetCountdown' not in pause_branch
|
|
assert 'StopCountdown' not in pause_branch
|
|
|
|
assert 'Function: "ChangeCountdown"' in set_branch
|
|
assert 'Function: "StartCountdown"' not in set_branch
|
|
assert 'Function: "PauseCountdown"' not in set_branch
|
|
|
|
assert 'Function: "StartCountdown"' in start_branch
|
|
assert 'ChangeCountdown' not in start_branch
|
|
assert 'PauseCountdown' not in start_branch
|
|
|
|
|
|
def test_space_game_timer_uses_control_only_helper():
|
|
section = block('case "hockey_vmix_timers_start":', 'case "delay":')
|
|
game = section[:section.index('if (step.sync_vmix_penalties)')]
|
|
assert 'vmixGameCountdownControlCommands' in game
|
|
assert '"pause"' in game
|
|
assert '"start"' in game
|
|
# Generic helper may still be used later for penalty countdowns, but never in main game branch.
|
|
assert 'vmixCountdownSyncCommands' not in game
|
|
|
|
|
|
def test_explicit_time_change_seeds_even_before_first_space():
|
|
section = block(
|
|
'async function syncActiveVmixGameCountdown',
|
|
'function configuredHockeyVmixGameCountdownTargets',
|
|
)
|
|
assert 'explicitSeedEvent' in section
|
|
assert 'timer_set_time' in section
|
|
assert 'timer_reset' in section
|
|
assert 'state.config.shortcut_sequences' in section
|
|
assert 'vmixGameCountdownControlCommands(input, selectedName, valueProvider, "set")' in section
|
|
|
|
|
|
def test_pause_event_never_writes_browser_time_to_vmix():
|
|
section = block(
|
|
'async function syncActiveVmixGameCountdown',
|
|
'function configuredHockeyVmixGameCountdownTargets',
|
|
)
|
|
pause = section[section.index('eventName === "timer_pause"'):section.index('timer_stop', section.index('eventName === "timer_pause"'))]
|
|
assert '"pause"' in pause
|
|
assert '"set"' not in pause
|
|
assert 'ChangeCountdown' not in pause
|