def test_stderr(self):
        """Unhandled exceptions are also sent to stderr."""
        fh = cStringIO.StringIO()

        # call
        orig_stderr = sys.stderr
        sys.stderr = fh
        exc = self._get_exception_data()
        try:
            exception_handler(*exc)
        finally:
            sys.stderr = orig_stderr

        # check
        shown = fh.getvalue()
        self.assertTrue("Traceback" in shown)
        self.assertTrue("ZeroDivisionError" in shown)
    def test_logs(self):
        """Unhandled exceptions logs in error."""
        # set up logger
        handler = MementoHandler()
        handler.setLevel(logging.DEBUG)
        l = logging.getLogger('magicicada')

        # call
        l.addHandler(handler)
        self.addCleanup(l.removeHandler, handler)
        exc = self._get_exception_data()
        try:
            exception_handler(*exc)
        finally:
            l.removeHandler(handler)

        # check
        self.assertTrue(handler.check_error("Unhandled exception",
                                            "ZeroDivisionError"))