From dfdf2ee12e3a07c088264ac1c2e0d1a1a5342d6b Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sun, 10 Jul 2011 14:34:48 +0300 Subject: Add a statically linked unit tester for iOS --- sal/prj/build.lst | 1 + sal/qa/static/makefile.mk | 63 ++++++++++++++++ sal/qa/static/sal_cppunittester_all.cxx | 126 ++++++++++++++++++++++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 sal/qa/static/makefile.mk create mode 100644 sal/qa/static/sal_cppunittester_all.cxx (limited to 'sal') diff --git a/sal/prj/build.lst b/sal/prj/build.lst index 4de757265f80..c0e6a8aa3ed5 100644 --- a/sal/prj/build.lst +++ b/sal/prj/build.lst @@ -30,3 +30,4 @@ sa sal\qa\rtl\cipher nmake - all sa_qa_rtl_cipher sa_cppunittester sa_util NULL sa sal\qa\rtl\doublelock nmake - all sa_qa_rtl_doublelock sa_cppunittester sa_util NULL sa sal\qa\rtl\locale nmake - all sa_qa_rtl_locale sa_cppunittester sa_util NULL sa sal\qa\sal nmake - all sa_qa_sal sa_cppunittester sa_util NULL +sa sal\qa\static nmake - u sal_qa_static sa_qa_sal NULL diff --git a/sal/qa/static/makefile.mk b/sal/qa/static/makefile.mk new file mode 100644 index 000000000000..c76cf40bee8a --- /dev/null +++ b/sal/qa/static/makefile.mk @@ -0,0 +1,63 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# +# for a copy of the LGPLv3 License. +# +#***********************************************************************/ + +PRJ = ../.. +PRJNAME = sal +TARGET = sal_cppunittester_all + +ENABLE_EXCEPTIONS = TRUE +LIBTARGET = NO + +.INCLUDE: settings.mk + +CFLAGSCXX += $(CPPUNIT_CFLAGS) + +.IF "$(OS)" != "IOS" + +ALL : + @echo This is only for iOS + +.ENDIF + +CFLAGSCXX += -x objective-c++ -fobjc-abi-version=2 -fobjc-legacy-dispatch -D__IPHONE_OS_VERSION_MIN_REQUIRED=40300 + +OBJFILES = $(APP1OBJS) + +APP1OBJS = $(OBJ)/sal_cppunittester_all.obj +APP1RPATH = NONE +APP1LIBS += \ + $(SLB)/qa_ByteSequence.lib \ + $(SLB)/qa_ostringbuffer.lib \ + $(SLB)/qa_osl_condition.lib \ + $(SLB)/qa_osl_file.lib \ + $(SLB)/qa_osl_process.lib \ + $(SLB)/qa_osl_security.lib + +APP1STDLIBS = $(CPPUNITLIB) $(SALLIB) +APP1TARGET = $(TARGET) + +.INCLUDE: target.mk diff --git a/sal/qa/static/sal_cppunittester_all.cxx b/sal/qa/static/sal_cppunittester_all.cxx new file mode 100644 index 000000000000..b5ead718d733 --- /dev/null +++ b/sal/qa/static/sal_cppunittester_all.cxx @@ -0,0 +1,126 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* +* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2000, 2010 Oracle and/or its affiliates. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* +* for a copy of the LGPLv3 License. +* +************************************************************************/ + +#include "precompiled_sal.hxx" +#include "sal/config.h" + +#include +#include +#include +#include +#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 "cppunit/CompilerOutputter.h" +#include "cppunit/TestResult.h" +#include "cppunit/TestResultCollector.h" +#include "cppunit/TestRunner.h" +#include "cppunit/extensions/TestFactoryRegistry.h" +#include "cppunit/portability/Stream.h" + +#include "boost/noncopyable.hpp" + +namespace { + +void usageFailure() { + std::cerr + << ("Usage: cppunittester (--protector " + " )* ") + << std::endl; + std::exit(EXIT_FAILURE); +} + +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()))); +} + +//Allow the whole uniting testing framework to be run inside a "Protector" +//which knows about uno exceptions, so it can print the content of the +//exception before falling over and dying +class CPPUNIT_API ProtectedFixtureFunctor : public CppUnit::Functor, private boost::noncopyable +{ +private: + const std::string &args; + CppUnit::TestResult &result; +public: + ProtectedFixtureFunctor(const std::string &args_, CppUnit::TestResult &result_) + : args(args_) + , result(result_) + { + } + bool run() const + { + CppUnit::TestRunner runner; + runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); + CppUnit::TestResultCollector collector; + result.addListener(&collector); + runner.run(result); + CppUnit::CompilerOutputter(&collector, CppUnit::stdCErr()).write(); + return collector.wasSuccessful(); + } + virtual bool operator()() const + { + return run(); + } +}; +} + +SAL_IMPLEMENT_MAIN() { + CppUnit::TestResult result; + cppunittester::LibreOfficeProtector *throw_protector = 0; + std::string args; + sal_uInt32 index = 0; + bool ok = false; + ProtectedFixtureFunctor tests(args, result); + ok = tests.run(); + + return ok ? EXIT_SUCCESS : EXIT_FAILURE; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit