class ArbitrationTests(unittest.TestCase): def setUp(self): self.ch = ConditionHandler() def test__arbitration_protocol(self): rel_id = self.ch.add_relation_condition() t1_id = self.ch.add_match_condition() t2_id = self.ch.add_match_condition() self.ch.add_child_for(rel_id, 0, t1_id) self.ch.add_child_for(rel_id, 1, t2_id) self.ch._execute_arbitration() self.assertEqual(rel_id, self.ch.conditions[2].id)
class ConditionHandlerBasicTests(unittest.TestCase): def setUp(self): self.ch = ConditionHandler() def test__initial_values(self): self.assertEqual(self.ch.conditions, []) self.assertEqual(self.ch.prev_id, 0) def test__adding_conditions(self): result = self.ch.add_match_condition() expected = 1 self.assertEqual(expected, result) result = self.ch.add_compare_condition() expected = 2 self.assertEqual(expected, result) result = self.ch.add_relation_condition() expected = 3 self.assertEqual(expected, result) self.assertEqual(3, len(self.ch.conditions)) def test_get_condition_for_id(self): self.ch.add_match_condition() test_id = self.ch.add_compare_condition() condition = self.ch.get_condition(test_id) self.assertEqual(test_id, condition.id) def test__connecting_conditions(self): t1_id = self.ch.add_match_condition() t2_id = self.ch.add_match_condition() rel_id = self.ch.add_relation_condition() self.ch.add_child_for(rel_id, 0, t1_id) self.ch.add_child_for(rel_id, 1, t2_id) eval_c = self.ch.get_condition(rel_id) self.assertEqual(t1_id, eval_c.children[0].id) self.assertEqual(t2_id, eval_c.children[1].id)
class LoopDetectionTests(unittest.TestCase): def setUp(self): self.ch = ConditionHandler() def test__loop_protocol_for_terminations__returns_false(self): t1_id = self.ch.add_compare_condition() t2_id = self.ch.add_match_condition() t1 = self.ch.get_condition(t1_id) t2 = self.ch.get_condition(t2_id) self.assertEqual(False, t1._loop_protocol(None)) self.assertEqual(False, t2._loop_protocol(None)) def test__loop_protocol_for_empty_related_list__resturns_false(self): r_id = self.ch.add_relation_condition() r = self.ch.get_condition(r_id) self.assertEqual(False, r._loop_protocol(None)) def test__starting_node_in_the_related_list__returns_true(self): r1_id = self.ch.add_relation_condition() r2_id = self.ch.add_relation_condition() r1 = self.ch.get_condition(r1_id) r2 = self.ch.get_condition(r2_id) try: self.ch.add_child_for(r2_id, 1, r1_id) self.ch.add_child_for(r1_id, 0, r2_id) except ConditionLoopError: pass self.assertEqual(True, r2._loop_protocol(r1)) def test__get_possible_children__two_relation_with_loop(self): r1_id = self.ch.add_relation_condition() r2_id = self.ch.add_relation_condition() self.ch.add_child_for(r2_id, 0, r1_id) with self.assertRaises(ConditionLoopError): self.ch.add_child_for(r1_id, 0, r2_id) def test__get_possible_children__three_relation_with_loop(self): r1_id = self.ch.add_relation_condition() r2_id = self.ch.add_relation_condition() r3_id = self.ch.add_relation_condition() self.ch.add_child_for(r2_id, 0, r1_id) self.ch.add_child_for(r3_id, 0, r2_id) with self.assertRaises(ConditionLoopError): self.ch.add_child_for(r1_id, 0, r3_id) def test__get_possible_children__four_relation_with_loop(self): r1_id = self.ch.add_relation_condition() r2_id = self.ch.add_relation_condition() r3_id = self.ch.add_relation_condition() r4_id = self.ch.add_relation_condition() self.ch.add_child_for(r2_id, 0, r1_id) self.ch.add_child_for(r3_id, 0, r2_id) self.ch.add_child_for(r4_id, 0, r3_id) with self.assertRaises(ConditionLoopError): self.ch.add_child_for(r1_id, 0, r4_id)