# pylint: disable=missing-docstring import pytest from acpi_backlight.evaluate import evaluate_expression @pytest.mark.parametrize(('expr_str', 'names', 'expected'), [ ('0', {}, 0), ('0.0', {}, 0), ('1.0', {}, 1), ('-1', {}, -1), ('0.1 + 0.2', {}, 0.3), ('0.3 - 0.2', {}, 0.1), ('0.2 * 3', {}, 0.6), ('0.6 / 3', {}, 0.2), ('0.6 / 3 + 0.1', {}, 0.3), ('(0.6 - 0.2) / 2', {}, 0.2), ('b', {'b': 0.4}, 0.4), ('-b', {'b': 0.3}, -0.3), ('0.1 + b', {'b': 0.2}, 0.3), ]) def test_evaluate_expression(expr_str, names, expected): assert expected == pytest.approx(evaluate_expression(expr_str, names)) @pytest.mark.parametrize('expr_str', [ 'read("/proc/cpuinfo")', 'os.exit(42)', 'os.system("echo evil")', '0.__class__', 'None.__class__', 'eval("1")', ]) def test_evaluate_expression_fail(expr_str): with pytest.raises(Exception): evaluate_expression(expr_str, {})