def test_catch_schedule_nested(self):
        ran = False
        handled = False

        def inner(scheduler, state):
            nonlocal ran
            ran = True

        def outer(scheduler, state):
            scheduler.schedule(inner)

        def handler(_):
            nonlocal handled
            handled = True
            return True

        wrapped = CatchSchedulerTestScheduler()
        scheduler = CatchScheduler(wrapped, handler)

        scheduler.schedule(outer)
        wrapped.start()

        assert ran is True
        assert handled is False
        assert wrapped.exc is None
    def test_catch_schedule_nested_error_unhandled(self):
        ran = False
        handled = False

        def inner(scheduler, state):
            nonlocal ran
            ran = True
            raise MyException()

        def outer(scheduler, state):
            scheduler.schedule(inner)

        def handler(_):
            nonlocal handled
            handled = True
            return False

        wrapped = CatchSchedulerTestScheduler()
        scheduler = CatchScheduler(wrapped, handler)

        scheduler.schedule(outer)
        wrapped.start()
        assert ran is True
        assert handled is True
        assert isinstance(wrapped.exc, MyException)
    def test_catch_schedule_error_handled(self):
        ran = False
        handled = False

        def action(scheduler, state):
            nonlocal ran
            ran = True
            raise MyException()

        def handler(_):
            nonlocal handled
            handled = True
            return True

        wrapped = CatchSchedulerTestScheduler()
        scheduler = CatchScheduler(wrapped, handler)

        scheduler.schedule(action)
        wrapped.start()
        assert ran is True
        assert handled is True
        assert wrapped.exc is None