diff options
Diffstat (limited to 'sal/cppunittester/cppunittester.cxx')
-rw-r--r-- | sal/cppunittester/cppunittester.cxx | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx index e3ced7253e47..6aba6dc14b30 100644 --- a/sal/cppunittester/cppunittester.cxx +++ b/sal/cppunittester/cppunittester.cxx @@ -34,12 +34,16 @@ #include <string> #include "cppunittester/protectorfactory.hxx" +#include "osl/module.h" +#include "osl/module.hxx" #include "osl/thread.h" #include "rtl/process.h" +#include "rtl/string.h" #include "rtl/string.hxx" #include "rtl/textcvt.h" #include "rtl/ustring.hxx" #include "sal/main.h" +#include "sal/types.h" #include "preextstl.h" #include "cppunit/CompilerOutputter.h" @@ -47,14 +51,10 @@ #include "cppunit/TestResultCollector.h" #include "cppunit/TestRunner.h" #include "cppunit/extensions/TestFactoryRegistry.h" -#include "cppunit/plugin/DynamicLibraryManager.h" -#include "cppunit/plugin/DynamicLibraryManagerException.h" #include "cppunit/plugin/PlugInManager.h" #include "cppunit/portability/Stream.h" #include "postextstl.h" -#include "cast.h" - namespace { void usageFailure() { @@ -65,15 +65,29 @@ void usageFailure() { std::exit(EXIT_FAILURE); } -std::string getArgument(sal_uInt32 index) { - rtl::OUString s16; - rtl_getAppCommandArg(index, &s16.pData); +rtl::OUString getArgument(sal_Int32 index) { + rtl::OUString arg; + rtl_getAppCommandArg(index, &arg.pData); + return arg; +} + +std::string convertLazy(rtl::OUString const & s16) { + rtl::OString s8(rtl::OUStringToOString(s16, osl_getThreadTextEncoding())); + return std::string( + s8.getStr(), + ((static_cast< sal_uInt32 >(s8.getLength()) + > std::numeric_limits< std::string::size_type >::max()) + ? std::numeric_limits< std::string::size_type >::max() + : static_cast< std::string::size_type >(s8.getLength()))); +} + +std::string convertStrict(rtl::OUString const & s16) { rtl::OString s8; if (!s16.convertToString( &s8, osl_getThreadTextEncoding(), (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)) - || (s8.getLength() + || (static_cast< sal_uInt32 >(s8.getLength()) > std::numeric_limits< std::string::size_type >::max())) { std::cerr @@ -91,38 +105,39 @@ SAL_IMPLEMENT_MAIN() { CppUnit::TestResult result; sal_uInt32 index = 0; for (; index < rtl_getAppCommandArgCount(); index += 3) { - std::string arg(getArgument(index)); - if (arg.compare("--protector") != 0) { + if (!getArgument(index).equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM("--protector"))) + { break; } if (rtl_getAppCommandArgCount() - index < 3) { usageFailure(); } - try { - result.pushProtector( - (*reinterpret_cast< cppunittester::ProtectorFactory * >( - cast( - (new CppUnit::DynamicLibraryManager( - getArgument(index + 1))) - ->findSymbol(getArgument(index + 2)))))()); - } catch (CppUnit::DynamicLibraryManagerException & e) { + rtl::OUString lib(getArgument(index + 1)); + rtl::OUString sym(getArgument(index + 2)); + oslGenericFunction fn = (new osl::Module(lib))->getFunctionSymbol(sym); + CppUnit::Protector * p = fn == 0 + ? 0 + : (*reinterpret_cast< cppunittester::ProtectorFactory * >(fn))(); + if (p == 0) { std::cerr - << "Failure instantiating protector \"" - << getArgument(index + 1) << "\", \"" << getArgument(index + 2) - << "\": " << e.what() << std::endl; + << "Failure instantiating protector \"" << convertLazy(lib) + << "\", \"" << convertLazy(sym) << '"' << std::endl; std::exit(EXIT_FAILURE); } + result.pushProtector(p); } if (rtl_getAppCommandArgCount() - index != 1) { usageFailure(); } CppUnit::PlugInManager manager; - manager.load(getArgument(index)); + manager.load(convertStrict(getArgument(index))); CppUnit::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); CppUnit::TestResultCollector collector; result.addListener(&collector); runner.run(result); CppUnit::CompilerOutputter(&collector, CppUnit::stdCErr()).write(); + fprintf( stderr, "-----\n" ); fflush( stderr ); return collector.wasSuccessful() ? EXIT_SUCCESS : EXIT_FAILURE; } |