def test_simple_dependency(self, *args, **kwargs):
        """
        Tests creating a DAG of task dependencies when there is only one event
        """
        A = self.create_task_class(('a',), (), ('a',))
        B = self.create_task_class((), ('a',), ())

        # Is the event dependency built correctly
        events = BaseTask.build_task_event_dependency_graph()
        self.assertEqual(len(events), 1)
        self.assertEqual(len(events['a'][0]), 1)
        self.assertIn(A, events['a'][0])
        self.assertEqual(len(events['a'][1]), 1)
        self.assertIn(B, events['a'][1])

        # Is the DAG built correctly
        g = BaseTask.build_full_task_dag()
        self.assertEqual(len(g.all_nodes), 2)
        self.assertIn(A, g.all_nodes)
        self.assertIn(B, g.all_nodes)
        # B depends on A
        self.assertIn(B, g.dependent_nodes(A))
    def test_multiple_dependency(self, *args, **kwargs):
        """
        Tests creating a DAG of tasks dependencies when there are multiple
        events.
        """
        T0 = self.create_task_class(('A', 'B'), (), ('A',))
        T1 = self.create_task_class(('D', 'D1'), ('A',), ('D'))
        T2 = self.create_task_class(('C',), ('A',), ('C',))
        T3 = self.create_task_class(('E',), ('B',), ('E',))
        T4 = self.create_task_class((), ('B',), ())
        T5 = self.create_task_class(('evt-5',), ('D',), ('evt-5',))
        T6 = self.create_task_class(('evt-6',), ('C'), ('evt-6',))
        T7 = self.create_task_class((), ('D1', 'A'), ())
        T8 = self.create_task_class((), ('evt-5', 'evt-6', 'E'), ())

        g = BaseTask.build_full_task_dag()
        self.assertEqual(len(g.dependent_nodes(T0)), 5)
        self.assert_contains_all([T1, T2, T3, T4, T7], g.dependent_nodes(T0))

        self.assertEqual(len(g.dependent_nodes(T1)), 2)
        self.assert_contains_all([T5, T7], g.dependent_nodes(T1))

        self.assertEqual(len(g.dependent_nodes(T2)), 1)
        self.assert_contains_all([T6], g.dependent_nodes(T2))

        self.assertEqual(len(g.dependent_nodes(T3)), 1)
        self.assert_contains_all([T8], g.dependent_nodes(T3))

        self.assertEqual(len(g.dependent_nodes(T4)), 0)

        self.assertEqual(len(g.dependent_nodes(T5)), 1)
        self.assert_contains_all([T8], g.dependent_nodes(T5))

        self.assertEqual(len(g.dependent_nodes(T6)), 1)
        self.assert_contains_all([T8], g.dependent_nodes(T6))

        self.assertEqual(len(g.dependent_nodes(T7)), 0)

        self.assertEqual(len(g.dependent_nodes(T8)), 0)