mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-06-10 11:12:13 +00:00
ast.Num/node.n deprecated since Python 3.8; NodeVisitor falls back to visit_Num with a DeprecationWarning per dispatch. Under -W error this surfaced as a misleading fps ValueError in Video.init. Replace with visit_Constant, reject non-numeric constants, and pin parse results for int/fraction/float inputs in a regression test.
30 lines
789 B
Python
30 lines
789 B
Python
import warnings
|
|
|
|
import pytest
|
|
|
|
from unshackle.core.utilities import FPS
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("expr", "expected"),
|
|
[
|
|
("24", 24),
|
|
("23.976", pytest.approx(23.976)),
|
|
("30000/1001", pytest.approx(29.97, abs=0.001)),
|
|
],
|
|
)
|
|
def test_parse_pins_results_without_deprecation_warnings(expr: str, expected: object) -> None:
|
|
with warnings.catch_warnings():
|
|
warnings.simplefilter("error", DeprecationWarning)
|
|
assert FPS.parse(expr) == expected
|
|
|
|
|
|
def test_parse_rejects_non_numeric_constant() -> None:
|
|
with pytest.raises(ValueError, match="Invalid fps value"):
|
|
FPS.parse("'24'")
|
|
|
|
|
|
def test_parse_rejects_non_division_operation() -> None:
|
|
with pytest.raises(ValueError, match="Invalid operation"):
|
|
FPS.parse("24+1")
|