def test_cycle_check_yields_false_for_no_cycles(self):
        # given
        t1 = Task('t1')
        t2 = Task('t2')
        t1.dependants.append(t2)

        # expect
        self.assertFalse(t1.contains_dependency_cycle())
        self.assertFalse(t2.contains_dependency_cycle())
    def test_cycle_check_yields_false_for_trees(self):
        # given
        t1 = Task('t1')
        t2 = Task('t2')
        t3 = Task('t3')
        t4 = Task('t4')
        t1.dependants.append(t2)
        t1.dependants.append(t3)
        t2.dependants.append(t4)
        t3.dependants.append(t4)

        # expect
        self.assertFalse(t1.contains_dependency_cycle())
        self.assertFalse(t2.contains_dependency_cycle())
        self.assertFalse(t3.contains_dependency_cycle())
        self.assertFalse(t4.contains_dependency_cycle())
    def test_cycle_check_yields_true_for_long_cycles(self):
        # given
        t1 = Task('t1')
        t2 = Task('t2')
        t3 = Task('t3')
        t4 = Task('t4')
        t5 = Task('t5')
        t6 = Task('t6')
        t1.dependants.append(t2)
        t2.dependants.append(t3)
        t3.dependants.append(t4)
        t4.dependants.append(t5)
        t5.dependants.append(t6)
        t6.dependants.append(t1)

        # expect
        self.assertTrue(t1.contains_dependency_cycle())
        self.assertTrue(t2.contains_dependency_cycle())
        self.assertTrue(t3.contains_dependency_cycle())
        self.assertTrue(t4.contains_dependency_cycle())
        self.assertTrue(t5.contains_dependency_cycle())
        self.assertTrue(t6.contains_dependency_cycle())