def test_only_one_rule(self): tmp = Cs('a') ^ Cs('b') self.assertEqual(tmp({'a': '', 'b': ''}), False) self.assertEqual(tmp({'a': 'TEST', 'b': ''}), True) self.assertEqual(tmp({'a': '', 'b': 'TEST'}), True) self.assertEqual(tmp({'a': 'TEST', 'b': 'TEST'}), False)
def test_expected_values_with_operator(self): tmp = Cs('a', a='OK') | Cs('b') self.assertEqual(tmp({'a': '', 'b': ''}), True) self.assertEqual(tmp({'a': 'OK', 'b': ''}), True) self.assertEqual(tmp({'a': 'NOT OK', 'b': ''}), False) self.assertEqual(tmp({'a': '', 'b': 'TEST'}), True) self.assertEqual(tmp({'a': 'OK', 'b': 'TEST'}), True) self.assertEqual(tmp({'a': 'NOT OK', 'b': 'TEST'}), True)
def test_diffrent_operators_order_mixed_rules(self): tmp = (Cs('a') | Cs('b')) ^ Cs('c') self.assertEqual(tmp({'a': '', 'b': '', 'c': ''}), False) self.assertEqual(tmp({'a': 'TEST', 'b': '', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': 'TEST', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': 'TEST', 'c': 'TEST'}), False) self.assertEqual(tmp({'a': '', 'b': 'TEST', 'c': 'TEST'}), False) self.assertEqual(tmp({'a': '', 'b': '', 'c': 'TEST'}), True) self.assertEqual(tmp({'a': '', 'b': 'TEST', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': '', 'c': 'TEST'}), False)
def test_mixed_rules(self): tmp = Cs('a') | Cs('b') ^ Cs('c') self.assertEqual(tmp({'a': '', 'b': '', 'c': ''}), False) self.assertEqual(tmp({'a': 'TEST', 'b': '', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': 'TEST', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': 'TEST', 'c': 'TEST'}), True) self.assertEqual(tmp({'a': '', 'b': 'TEST', 'c': 'TEST'}), False) self.assertEqual(tmp({'a': '', 'b': '', 'c': 'TEST'}), True) self.assertEqual(tmp({'a': '', 'b': 'TEST', 'c': ''}), True) self.assertEqual(tmp({'a': 'TEST', 'b': '', 'c': 'TEST'}), True)
def test_expected_values_logic(self): tmp = Cs('a', b='TEST') self.assertEqual(tmp({'a': '', 'b': ''}), True) self.assertEqual(tmp({'a': 'A', 'b': ''}), False) self.assertEqual(tmp({'a': '', 'b': 'TEST'}), False) self.assertEqual(tmp({'a': 'A', 'b': 'TEST'}), True)
def test_multiple_columns(self): tmp = Cs('a', 'b', 'c') self.assertEqual(tmp({'a': '', 'b': '', 'c': ''}), False) self.assertEqual(tmp({'a': '', 'b': 'OK', 'c': ''}), False) self.assertEqual(tmp({'a': '', 'b': '', 'c': 'OK'}), False) self.assertEqual(tmp({'a': 'OK', 'b': '', 'c': ''}), False) self.assertEqual(tmp({'a': 'OK', 'b': 'OK', 'c': ''}), False) self.assertEqual(tmp({'a': 'OK', 'b': 'OK', 'c': 'OK'}), True)
def test_complex_execution_order(self): tmp = Cs('e') | ((Cs('a') | Cs('b')) ^ Cs('d')) | Cs('c') tmp_exe_order = ' '.join([str(obj) for obj in tmp.exe_order]) self.assertEqual(tmp_exe_order, "('e',) ('a',) ('b',) | ('d',) ^ | ('c',) |")
class Rules(object): rule_1 = (Cs('a') | Cs('b')).error('A or B') rule_2 = Cs('c', b=87)