| 
					
				 | 
			
			
				@@ -0,0 +1,37 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 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, {}) 
			 |