Example #1
0
    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))