79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
import json
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
|
|
def test_ffmpeg_exists_or_skip():
|
|
if shutil.which("ffmpeg") is None:
|
|
pytest.skip("ffmpeg not found in PATH (required for rendering).")
|
|
p = subprocess.run(["ffmpeg", "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
|
assert p.returncode == 0
|
|
|
|
|
|
def test_selection_parsing_logic():
|
|
# Minimal expectation for selection parsing behavior
|
|
def parse(selection: str, n: int):
|
|
s = selection.strip().lower()
|
|
if s in {"all", "auto"}:
|
|
return list(range(n))
|
|
out = []
|
|
for part in [p.strip() for p in s.split(",") if p.strip()]:
|
|
if "-" in part:
|
|
a, b = part.split("-", 1)
|
|
a_i = int(a) - 1
|
|
b_i = int(b) - 1
|
|
if a_i > b_i:
|
|
a_i, b_i = b_i, a_i
|
|
out.extend(list(range(a_i, b_i + 1)))
|
|
else:
|
|
out.append(int(part) - 1)
|
|
# unique + clamp
|
|
seen = set()
|
|
filtered = []
|
|
for i in out:
|
|
if 0 <= i < n and i not in seen:
|
|
seen.add(i)
|
|
filtered.append(i)
|
|
return filtered
|
|
|
|
assert parse("all", 5) == [0, 1, 2, 3, 4]
|
|
assert parse("auto", 3) == [0, 1, 2]
|
|
assert parse("1,3,5", 5) == [0, 2, 4]
|
|
assert parse("1-3", 10) == [0, 1, 2]
|
|
assert parse("3-1", 10) == [0, 1, 2]
|
|
assert parse("1-2,2-3", 10) == [0, 1, 2]
|
|
|
|
|
|
def test_example_report_schema_if_present():
|
|
# If the example JSON exists in repo root, validate basic schema.
|
|
root = Path(".").resolve()
|
|
ex = root / "example_teaser_report.json"
|
|
if not ex.exists():
|
|
pytest.skip("example_teaser_report.json not present in this environment.")
|
|
data = json.loads(ex.read_text(encoding="utf-8"))
|
|
assert "version" in data
|
|
assert "settings" in data
|
|
assert "tracks" in data
|
|
assert isinstance(data["tracks"], list)
|
|
|
|
if data["tracks"]:
|
|
t0 = data["tracks"][0]
|
|
assert "filename" in t0
|
|
if data.get("version") == "v3":
|
|
assert "camelot" in t0
|
|
|
|
|
|
def test_cli_wrapper_help_runs():
|
|
# Ensure autoclip.py exists and prints help without crashing.
|
|
root = Path(".").resolve()
|
|
cli = root / "autoclip.py"
|
|
if not cli.exists():
|
|
pytest.skip("autoclip.py not present in this environment.")
|
|
p = subprocess.run([sys.executable, str(cli), "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
|
assert p.returncode == 0
|
|
assert "Auto Clip" in (p.stdout + p.stderr)
|