def test_do_method_pass_requires_another_pass(self): FLAGS = Flags("ONE", "TWO") registry = FlagRegistry() @registry.register(flag=FLAGS.ONE, key="one") def method_one(): return 1 @registry.register(flag=FLAGS.TWO, depends_on=FLAGS.ONE, key="two") def method_two(data): # Note: Any method that sets depends_on must take an argument holding the datastructure being built out return 2 result = dict() next_method_queue, executed_flag = registry._do_method_pass( [method_two, method_one], 0, result, False, flags=FLAGS.ONE | FLAGS.TWO ) self.assertEqual(len(next_method_queue), 1) self.assertEqual(executed_flag, FLAGS.ONE) self.assertEqual(set(result.keys()), set(["one"])) next_method_queue, executed_flag = registry._do_method_pass( next_method_queue, executed_flag, result, False, flags=FLAGS.ONE | FLAGS.TWO ) self.assertEqual(len(next_method_queue), 0) self.assertEqual(executed_flag, FLAGS.ONE | FLAGS.TWO) self.assertEqual(set(result.keys()), set(["one", "two"]))
def test_circular(self): FLAGS = Flags('ONE', 'TWO') registry = FlagRegistry() @registry.register(flag=FLAGS.ONE, depends_on=FLAGS.TWO, key='one') def method_one(): pass @registry.register(flag=FLAGS.TWO, depends_on=FLAGS.ONE, key='two') def method_two(): pass with self.assertRaises(Exception) as context: registry._do_method_pass([method_one, method_two], 0, dict(), False, flags=FLAGS.ONE | FLAGS.TWO) self.assertTrue( 'Circular Dependency Error' in str(context.exception)) with self.assertRaises(Exception) as context: registry._calculate_dependency_flag(method_two) self.assertTrue( 'Circular Dependency Error' in str(context.exception))