diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-08-02 15:13:37 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-08-04 15:37:30 +0200 |
commit | 6ddecf61ecada646fbd6f8809270d47289727e8a (patch) | |
tree | d4d699b1a811e751e6bb948e441c4cdd822cb708 /cppuhelper | |
parent | 3aab478e77937f9e40f4fdfa04f7d202d7391fb8 (diff) |
fillUnoException not working on std::rethrow_exception exceptions
used since...
commit dacc1b40df67d154c96b256b0d920460f38c3d11
Date: Sat Jul 28 16:33:22 2018 +0100
ofz#9597 rethrown IOException not caught by catch IOException
the adjustedPtr seems to be as expected, but the type_info not. Presumably
these are thrown as 'dependent exceptions' (?)
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/eh_type.cc#L42
Change-Id: Ibd736abe941bb1d5facdb88139b3a0e6cf32cf1f
Reviewed-on: https://gerrit.libreoffice.org/58477
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'cppuhelper')
-rw-r--r-- | cppuhelper/qa/misc/test_misc.cxx | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/cppuhelper/qa/misc/test_misc.cxx b/cppuhelper/qa/misc/test_misc.cxx index 151eb15ea1f6..0e4fdf9efb42 100644 --- a/cppuhelper/qa/misc/test_misc.cxx +++ b/cppuhelper/qa/misc/test_misc.cxx @@ -19,9 +19,11 @@ class Test : public ::CppUnit::TestFixture { public: void testCatchThrow(); + void testgetCaughtException(); CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testCatchThrow); + CPPUNIT_TEST(testgetCaughtException); CPPUNIT_TEST_SUITE_END(); }; @@ -51,6 +53,36 @@ void Test::testCatchThrow() } } +void Test::testgetCaughtException() +{ + css::uno::Any aSavedExceptionAny; + std::exception_ptr + aSavedException; /// exception caught during unzipping is saved to be thrown during reading + try + { + throw css::uno::RuntimeException("RuntimeException"); + } + catch (...) + { + aSavedException = std::current_exception(); + } + CPPUNIT_ASSERT(bool(aSavedException)); + try + { + std::rethrow_exception(aSavedException); + } + catch (const css::uno::RuntimeException&) + { + // the expected case + aSavedExceptionAny = cppu::getCaughtException(); + } + catch (...) + { + CPPUNIT_ASSERT(false); + } + CPPUNIT_ASSERT(aSavedExceptionAny.hasValue()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); } |