summaryrefslogtreecommitdiff
path: root/sal/cppunittester/cppunittester.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sal/cppunittester/cppunittester.cxx')
-rw-r--r--sal/cppunittester/cppunittester.cxx59
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;
}