diff options
Diffstat (limited to 'cppu/qa')
-rw-r--r-- | cppu/qa/any-external.cxx | 63 | ||||
-rw-r--r-- | cppu/qa/cppumaker/test_cppumaker.cxx | 559 | ||||
-rw-r--r-- | cppu/qa/cppumaker/types.idl | 710 | ||||
-rw-r--r-- | cppu/qa/test_any.cxx | 2127 | ||||
-rw-r--r-- | cppu/qa/test_recursion.cxx | 53 | ||||
-rw-r--r-- | cppu/qa/test_reference.cxx | 203 | ||||
-rw-r--r-- | cppu/qa/test_unotype.cxx | 558 | ||||
-rw-r--r-- | cppu/qa/typelib.cxx | 293 | ||||
-rw-r--r-- | cppu/qa/types.idl | 57 |
9 files changed, 4623 insertions, 0 deletions
diff --git a/cppu/qa/any-external.cxx b/cppu/qa/any-external.cxx new file mode 100644 index 000000000..bac613427 --- /dev/null +++ b/cppu/qa/any-external.cxx @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include <cppunit/TestAssert.h> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> + +#include <com/sun/star/uno/Any.hxx> +#include <sal/types.h> + +namespace { + +class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testGet); + CPPUNIT_TEST(testHas); + CPPUNIT_TEST(testExtract); + CPPUNIT_TEST(testInsert); + CPPUNIT_TEST_SUITE_END(); + + void testGet() { + css::uno::Any a(false); + CPPUNIT_ASSERT_EQUAL(a, a.get<css::uno::Any>()); + CPPUNIT_ASSERT_EQUAL(false, a.get<bool>()); + } + + void testHas() { + css::uno::Any a(false); + CPPUNIT_ASSERT_EQUAL(true, a.has<css::uno::Any>()); + CPPUNIT_ASSERT_EQUAL(true, a.has<bool>()); + } + + void testExtract() { + css::uno::Any a1(false); + css::uno::Any a2; + CPPUNIT_ASSERT(a1 >>= a2); + CPPUNIT_ASSERT_EQUAL(a1, a2); + } + + void testInsert() { + css::uno::Any a; + a <<= css::uno::Any(false); + CPPUNIT_ASSERT_EQUAL(css::uno::Any(false), a); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/cppu/qa/cppumaker/test_cppumaker.cxx b/cppu/qa/cppumaker/test_cppumaker.cxx new file mode 100644 index 000000000..78097e26e --- /dev/null +++ b/cppu/qa/cppumaker/test_cppumaker.cxx @@ -0,0 +1,559 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <FILE.hpp> +#include <lconv.hpp> +#include <tm.hpp> +#include <std.hpp> +#include <test/codemaker/cppumaker/XTest.hpp> +#include <test/codemaker/cppumaker/S1.hpp> +#include <test/codemaker/cppumaker/services/asm.hpp> +#include <test/codemaker/cppumaker/services/auto.hpp> +#include <test/codemaker/cppumaker/services/bool.hpp> +#include <test/codemaker/cppumaker/services/break.hpp> +//TODO: #include "test/codemaker/cppumaker/services/case.hpp" +#include <test/codemaker/cppumaker/services/catch.hpp> +//TODO: #include "test/codemaker/cppumaker/services/char.hpp" +#include <test/codemaker/cppumaker/services/class.hpp> +//TODO: #include "test/codemaker/cppumaker/services/const.hpp" +#include <test/codemaker/cppumaker/services/continue.hpp> +//TODO: #include "test/codemaker/cppumaker/services/default.hpp" +#include <test/codemaker/cppumaker/services/delete.hpp> +#include <test/codemaker/cppumaker/services/do.hpp> +//TODO: #include "test/codemaker/cppumaker/services/double.hpp" +#include <test/codemaker/cppumaker/services/else.hpp> +//TODO: #include "test/codemaker/cppumaker/services/enum.hpp" +#include <test/codemaker/cppumaker/services/explicit.hpp> +#include <test/codemaker/cppumaker/services/export.hpp> +#include <test/codemaker/cppumaker/services/extern.hpp> +#include <test/codemaker/cppumaker/services/false.hpp> +//TODO: #include "test/codemaker/cppumaker/services/float.hpp" +#include <test/codemaker/cppumaker/services/for.hpp> +#include <test/codemaker/cppumaker/services/friend.hpp> +#include <test/codemaker/cppumaker/services/goto.hpp> +#include <test/codemaker/cppumaker/services/if.hpp> +#include <test/codemaker/cppumaker/services/inline.hpp> +#include <test/codemaker/cppumaker/services/int.hpp> +//TODO: #include "test/codemaker/cppumaker/services/long.hpp" +#include <test/codemaker/cppumaker/services/mutable.hpp> +#include <test/codemaker/cppumaker/services/namespace.hpp> +#include <test/codemaker/cppumaker/services/new.hpp> +#include <test/codemaker/cppumaker/services/operator.hpp> +#include <test/codemaker/cppumaker/services/private.hpp> +#include <test/codemaker/cppumaker/services/protected.hpp> +#include <test/codemaker/cppumaker/services/public.hpp> +#include <test/codemaker/cppumaker/services/register.hpp> +#include <test/codemaker/cppumaker/services/return.hpp> +//TODO: #include "test/codemaker/cppumaker/services/short.hpp" +#include <test/codemaker/cppumaker/services/signed.hpp> +#include <test/codemaker/cppumaker/services/sizeof.hpp> +#include <test/codemaker/cppumaker/services/static.hpp> +//TODO: #include "test/codemaker/cppumaker/services/struct.hpp" +//TODO: #include "test/codemaker/cppumaker/services/switch.hpp" +#include <test/codemaker/cppumaker/services/template.hpp> +#include <test/codemaker/cppumaker/services/this.hpp> +#include <test/codemaker/cppumaker/services/throw.hpp> +#include <test/codemaker/cppumaker/services/true.hpp> +#include <test/codemaker/cppumaker/services/try.hpp> +//TODO: #include "test/codemaker/cppumaker/services/typedef.hpp" +#include <test/codemaker/cppumaker/services/typeid.hpp> +#include <test/codemaker/cppumaker/services/typename.hpp> +//TODO: #include "test/codemaker/cppumaker/services/union.hpp" +//TODO: #include "test/codemaker/cppumaker/services/unsigned.hpp" +#include <test/codemaker/cppumaker/services/using.hpp> +#include <test/codemaker/cppumaker/services/virtual.hpp> +//TODO: #include "test/codemaker/cppumaker/services/void.hpp" +#include <test/codemaker/cppumaker/services/volatile.hpp> +#include <test/codemaker/cppumaker/services/while.hpp> +#include <test/codemaker/cppumaker/services/and.hpp> +#include <test/codemaker/cppumaker/services/bitand.hpp> +#include <test/codemaker/cppumaker/services/bitor.hpp> +#include <test/codemaker/cppumaker/services/compl.hpp> +#include <test/codemaker/cppumaker/services/not.hpp> +#include <test/codemaker/cppumaker/services/or.hpp> +#include <test/codemaker/cppumaker/services/xor.hpp> +#include <test/codemaker/cppumaker/services/BUFSIZ.hpp> +#include <test/codemaker/cppumaker/services/CLOCKS_PER_SEC.hpp> +#include <test/codemaker/cppumaker/services/EDOM.hpp> +#include <test/codemaker/cppumaker/services/EOF.hpp> +#include <test/codemaker/cppumaker/services/ERANGE.hpp> +#include <test/codemaker/cppumaker/services/EXIT_FAILURE.hpp> +#include <test/codemaker/cppumaker/services/EXIT_SUCCESS.hpp> +#include <test/codemaker/cppumaker/services/FILENAME_MAX.hpp> +#include <test/codemaker/cppumaker/services/FOPEN_MAX.hpp> +#include <test/codemaker/cppumaker/services/HUGE_VAL.hpp> +#include <test/codemaker/cppumaker/services/LC_ALL.hpp> +#include <test/codemaker/cppumaker/services/LC_COLLATE.hpp> +#include <test/codemaker/cppumaker/services/LC_CTYPE.hpp> +#include <test/codemaker/cppumaker/services/LC_MONETARY.hpp> +#include <test/codemaker/cppumaker/services/LC_NUMERIC.hpp> +#include <test/codemaker/cppumaker/services/LC_TIME.hpp> +#include <test/codemaker/cppumaker/services/L_tmpnam.hpp> +#include <test/codemaker/cppumaker/services/MB_CUR_MAX.hpp> +#include <test/codemaker/cppumaker/services/NULL.hpp> +#include <test/codemaker/cppumaker/services/RAND_MAX.hpp> +#include <test/codemaker/cppumaker/services/SEEK_CUR.hpp> +#include <test/codemaker/cppumaker/services/SEEK_END.hpp> +#include <test/codemaker/cppumaker/services/SEEK_SET.hpp> +#include <test/codemaker/cppumaker/services/SIGABRT.hpp> +#include <test/codemaker/cppumaker/services/SIGFPE.hpp> +#include <test/codemaker/cppumaker/services/SIGILL.hpp> +#include <test/codemaker/cppumaker/services/SIGINT.hpp> +#include <test/codemaker/cppumaker/services/SIGSEGV.hpp> +#include <test/codemaker/cppumaker/services/SIGTERM.hpp> +#include <test/codemaker/cppumaker/services/SIG_DFL.hpp> +#include <test/codemaker/cppumaker/services/SIG_ERR.hpp> +#include <test/codemaker/cppumaker/services/SIG_IGN.hpp> +#include <test/codemaker/cppumaker/services/TMP_MAX.hpp> +#include <test/codemaker/cppumaker/services/WCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/services/WCHAR_MIN.hpp> +#include <test/codemaker/cppumaker/services/WEOF.hpp> +#include <test/codemaker/cppumaker/services/assert.hpp> +#include <test/codemaker/cppumaker/services/errno.hpp> +#include <test/codemaker/cppumaker/services/offsetof.hpp> +#include <test/codemaker/cppumaker/services/setjmp.hpp> +#include <test/codemaker/cppumaker/services/stderr.hpp> +#include <test/codemaker/cppumaker/services/stdin.hpp> +#include <test/codemaker/cppumaker/services/stdout.hpp> +#include <test/codemaker/cppumaker/services/CHAR_BIT.hpp> +#include <test/codemaker/cppumaker/services/CHAR_MAX.hpp> +#include <test/codemaker/cppumaker/services/CHAR_MIN.hpp> +#include <test/codemaker/cppumaker/services/DBL_DIG.hpp> +#include <test/codemaker/cppumaker/services/DBL_EPSILON.hpp> +#include <test/codemaker/cppumaker/services/DBL_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/services/DBL_MAX.hpp> +#include <test/codemaker/cppumaker/services/DBL_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/DBL_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/services/DBL_MIN.hpp> +#include <test/codemaker/cppumaker/services/DBL_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/DBL_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/services/FLT_DIG.hpp> +#include <test/codemaker/cppumaker/services/FLT_EPSILON.hpp> +#include <test/codemaker/cppumaker/services/FLT_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/services/FLT_MAX.hpp> +#include <test/codemaker/cppumaker/services/FLT_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/FLT_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/services/FLT_MIN.hpp> +#include <test/codemaker/cppumaker/services/FLT_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/FLT_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/services/FLT_RADIX.hpp> +#include <test/codemaker/cppumaker/services/FLT_ROUNDS.hpp> +#include <test/codemaker/cppumaker/services/INT_MAX.hpp> +#include <test/codemaker/cppumaker/services/INT_MIN.hpp> +#include <test/codemaker/cppumaker/services/LDBL_DIG.hpp> +#include <test/codemaker/cppumaker/services/LDBL_EPSILON.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MAX.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MIN.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/services/LDBL_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/services/LONG_MAX.hpp> +#include <test/codemaker/cppumaker/services/LONG_MIN.hpp> +#include <test/codemaker/cppumaker/services/MB_LEN_MAX.hpp> +#include <test/codemaker/cppumaker/services/SCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/services/SCHAR_MIN.hpp> +#include <test/codemaker/cppumaker/services/SHRT_MAX.hpp> +#include <test/codemaker/cppumaker/services/SHRT_MIN.hpp> +#include <test/codemaker/cppumaker/services/UCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/services/UINT_MAX.hpp> +#include <test/codemaker/cppumaker/services/ULONG_MAX.hpp> +#include <test/codemaker/cppumaker/services/USHRT_MAX.hpp> +#include <test/codemaker/cppumaker/services/FILE.hpp> +#include <test/codemaker/cppumaker/services/lconv.hpp> +#include <test/codemaker/cppumaker/services/tm.hpp> +#include <test/codemaker/cppumaker/services/std.hpp> +#include <test/codemaker/cppumaker/services/NDEBUG.hpp> +#include <test/codemaker/cppumaker/services/create.hpp> +#include <test/codemaker/cppumaker/singletons/asm.hpp> +#include <test/codemaker/cppumaker/singletons/auto.hpp> +#include <test/codemaker/cppumaker/singletons/bool.hpp> +#include <test/codemaker/cppumaker/singletons/break.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/case.hpp" +#include <test/codemaker/cppumaker/singletons/catch.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/char.hpp" +#include <test/codemaker/cppumaker/singletons/class.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/const.hpp" +#include <test/codemaker/cppumaker/singletons/continue.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/default.hpp" +#include <test/codemaker/cppumaker/singletons/delete.hpp> +#include <test/codemaker/cppumaker/singletons/do.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/double.hpp" +#include <test/codemaker/cppumaker/singletons/else.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/enum.hpp" +#include <test/codemaker/cppumaker/singletons/explicit.hpp> +#include <test/codemaker/cppumaker/singletons/export.hpp> +#include <test/codemaker/cppumaker/singletons/extern.hpp> +#include <test/codemaker/cppumaker/singletons/false.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/float.hpp" +#include <test/codemaker/cppumaker/singletons/for.hpp> +#include <test/codemaker/cppumaker/singletons/friend.hpp> +#include <test/codemaker/cppumaker/singletons/goto.hpp> +#include <test/codemaker/cppumaker/singletons/if.hpp> +#include <test/codemaker/cppumaker/singletons/inline.hpp> +#include <test/codemaker/cppumaker/singletons/int.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/long.hpp" +#include <test/codemaker/cppumaker/singletons/mutable.hpp> +#include <test/codemaker/cppumaker/singletons/namespace.hpp> +#include <test/codemaker/cppumaker/singletons/new.hpp> +#include <test/codemaker/cppumaker/singletons/operator.hpp> +#include <test/codemaker/cppumaker/singletons/private.hpp> +#include <test/codemaker/cppumaker/singletons/protected.hpp> +#include <test/codemaker/cppumaker/singletons/public.hpp> +#include <test/codemaker/cppumaker/singletons/register.hpp> +#include <test/codemaker/cppumaker/singletons/return.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/short.hpp" +#include <test/codemaker/cppumaker/singletons/signed.hpp> +#include <test/codemaker/cppumaker/singletons/sizeof.hpp> +#include <test/codemaker/cppumaker/singletons/static.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/struct.hpp" +//TODO: #include "test/codemaker/cppumaker/singletons/switch.hpp" +#include <test/codemaker/cppumaker/singletons/template.hpp> +#include <test/codemaker/cppumaker/singletons/this.hpp> +#include <test/codemaker/cppumaker/singletons/throw.hpp> +#include <test/codemaker/cppumaker/singletons/true.hpp> +#include <test/codemaker/cppumaker/singletons/try.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/typedef.hpp" +#include <test/codemaker/cppumaker/singletons/typeid.hpp> +#include <test/codemaker/cppumaker/singletons/typename.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/union.hpp" +//TODO: #include "test/codemaker/cppumaker/singletons/unsigned.hpp" +#include <test/codemaker/cppumaker/singletons/using.hpp> +#include <test/codemaker/cppumaker/singletons/virtual.hpp> +//TODO: #include "test/codemaker/cppumaker/singletons/void.hpp" +#include <test/codemaker/cppumaker/singletons/volatile.hpp> +#include <test/codemaker/cppumaker/singletons/while.hpp> +#include <test/codemaker/cppumaker/singletons/and.hpp> +#include <test/codemaker/cppumaker/singletons/bitand.hpp> +#include <test/codemaker/cppumaker/singletons/bitor.hpp> +#include <test/codemaker/cppumaker/singletons/compl.hpp> +#include <test/codemaker/cppumaker/singletons/not.hpp> +#include <test/codemaker/cppumaker/singletons/or.hpp> +#include <test/codemaker/cppumaker/singletons/xor.hpp> +#include <test/codemaker/cppumaker/singletons/BUFSIZ.hpp> +#include <test/codemaker/cppumaker/singletons/CLOCKS_PER_SEC.hpp> +#include <test/codemaker/cppumaker/singletons/EDOM.hpp> +#include <test/codemaker/cppumaker/singletons/EOF.hpp> +#include <test/codemaker/cppumaker/singletons/ERANGE.hpp> +#include <test/codemaker/cppumaker/singletons/EXIT_FAILURE.hpp> +#include <test/codemaker/cppumaker/singletons/EXIT_SUCCESS.hpp> +#include <test/codemaker/cppumaker/singletons/FILENAME_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/FOPEN_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/HUGE_VAL.hpp> +#include <test/codemaker/cppumaker/singletons/LC_ALL.hpp> +#include <test/codemaker/cppumaker/singletons/LC_COLLATE.hpp> +#include <test/codemaker/cppumaker/singletons/LC_CTYPE.hpp> +#include <test/codemaker/cppumaker/singletons/LC_MONETARY.hpp> +#include <test/codemaker/cppumaker/singletons/LC_NUMERIC.hpp> +#include <test/codemaker/cppumaker/singletons/LC_TIME.hpp> +#include <test/codemaker/cppumaker/singletons/L_tmpnam.hpp> +#include <test/codemaker/cppumaker/singletons/MB_CUR_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/NULL.hpp> +#include <test/codemaker/cppumaker/singletons/RAND_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/SEEK_CUR.hpp> +#include <test/codemaker/cppumaker/singletons/SEEK_END.hpp> +#include <test/codemaker/cppumaker/singletons/SEEK_SET.hpp> +#include <test/codemaker/cppumaker/singletons/SIGABRT.hpp> +#include <test/codemaker/cppumaker/singletons/SIGFPE.hpp> +#include <test/codemaker/cppumaker/singletons/SIGILL.hpp> +#include <test/codemaker/cppumaker/singletons/SIGINT.hpp> +#include <test/codemaker/cppumaker/singletons/SIGSEGV.hpp> +#include <test/codemaker/cppumaker/singletons/SIGTERM.hpp> +#include <test/codemaker/cppumaker/singletons/SIG_DFL.hpp> +#include <test/codemaker/cppumaker/singletons/SIG_ERR.hpp> +#include <test/codemaker/cppumaker/singletons/SIG_IGN.hpp> +#include <test/codemaker/cppumaker/singletons/TMP_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/WCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/WCHAR_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/WEOF.hpp> +#include <test/codemaker/cppumaker/singletons/assert.hpp> +#include <test/codemaker/cppumaker/singletons/errno.hpp> +#include <test/codemaker/cppumaker/singletons/offsetof.hpp> +#include <test/codemaker/cppumaker/singletons/setjmp.hpp> +#include <test/codemaker/cppumaker/singletons/stderr.hpp> +#include <test/codemaker/cppumaker/singletons/stdin.hpp> +#include <test/codemaker/cppumaker/singletons/stdout.hpp> +#include <test/codemaker/cppumaker/singletons/CHAR_BIT.hpp> +#include <test/codemaker/cppumaker/singletons/CHAR_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/CHAR_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_EPSILON.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/DBL_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_EPSILON.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_RADIX.hpp> +#include <test/codemaker/cppumaker/singletons/FLT_ROUNDS.hpp> +#include <test/codemaker/cppumaker/singletons/INT_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/INT_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_EPSILON.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MANT_DIG.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MAX_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MAX_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MIN_10_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/LDBL_MIN_EXP.hpp> +#include <test/codemaker/cppumaker/singletons/LONG_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/LONG_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/MB_LEN_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/SCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/SCHAR_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/SHRT_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/SHRT_MIN.hpp> +#include <test/codemaker/cppumaker/singletons/UCHAR_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/UINT_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/ULONG_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/USHRT_MAX.hpp> +#include <test/codemaker/cppumaker/singletons/FILE.hpp> +#include <test/codemaker/cppumaker/singletons/lconv.hpp> +#include <test/codemaker/cppumaker/singletons/tm.hpp> +#include <test/codemaker/cppumaker/singletons/std.hpp> +#include <test/codemaker/cppumaker/singletons/NDEBUG.hpp> +#include <test/codemaker/cppumaker/singletons/get.hpp> +#include <test/codemaker/cppumaker/HelperEnum.hpp> +#include <test/codemaker/cppumaker/HelperStruct.hpp> +#include <test/codemaker/cppumaker/BigStruct.hpp> +#include <test/codemaker/cppumaker/Struct.hpp> +#include <test/codemaker/cppumaker/StructUsage.hpp> +#include <test/codemaker/cppumaker/AlignmentDerivedStruct.hpp> +#include <test/codemaker/cppumaker/TestException1.hpp> +#include <test/codemaker/cppumaker/TestException2.hpp> +#include <test/codemaker/cppumaker/Constants.hpp> + +#include <memory> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Type.hxx> +#include <com/sun/star/uno/TypeClass.hpp> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <o3tl/cppunittraitshelper.hxx> +#include <rtl/ustring.hxx> + +#include <cstddef> + +namespace test::codemaker::cppumaker { + +static bool operator ==( + test::codemaker::cppumaker::TestException1 const & e1, + test::codemaker::cppumaker::TestException1 const & e2) +{ + return e1.Message == e2.Message && e1.Context == e2.Context + && e1.m1 == e2.m1 && e1.m2 == e2.m2 && e1.m3 == e2.m3 + && e1.m4.member1 == e2.m4.member1 && e1.m4.member2 == e2.m4.member2; +} + +} + +namespace { + +class Test: public CppUnit::TestFixture { +public: + void testBigStruct(); + + void testPolyStruct(); + + void testExceptions(); + + void testConstants(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testBigStruct); + CPPUNIT_TEST(testPolyStruct); + CPPUNIT_TEST(testExceptions); + CPPUNIT_TEST(testConstants); + CPPUNIT_TEST_SUITE_END(); +}; + +struct Guard { + explicit Guard(void * buffer): + p(new(buffer) test::codemaker::cppumaker::BigStruct) {} + + ~Guard() { p->test::codemaker::cppumaker::BigStruct::~BigStruct(); } + + test::codemaker::cppumaker::BigStruct * const p; +}; + +void Test::testBigStruct() { + // Default-initialize a BigStruct instance on top of a memory buffer filled + // with random data, and make sure that all members are default-initialized: + std::unique_ptr< char []> buffer( + new char[sizeof (test::codemaker::cppumaker::BigStruct)]); + for (std::size_t i = 0; i < sizeof (test::codemaker::cppumaker::BigStruct); + ++i) + { + buffer[i] = '\x56'; + } + Guard guard(buffer.get()); + CPPUNIT_ASSERT_EQUAL(sal_False, guard.p->m1); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int8 >(0), guard.p->m2); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int16 >(0), guard.p->m3); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_uInt16 >(0), guard.p->m4); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m5); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_uInt32 >(0), guard.p->m6); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int64 >(0), guard.p->m7); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_uInt64 >(0), guard.p->m8); + CPPUNIT_ASSERT_EQUAL(0.0f, guard.p->m9); + CPPUNIT_ASSERT_EQUAL(0.0, guard.p->m10); + CPPUNIT_ASSERT_EQUAL( u'\0', guard.p->m11); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m12.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(css::uno::TypeClass_VOID), static_cast<sal_Int32>(guard.p->m13.getTypeClass())); + CPPUNIT_ASSERT_EQUAL(false, guard.p->m14.hasValue()); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m15.getLength()); + CPPUNIT_ASSERT_EQUAL(int(test::codemaker::cppumaker::HelperEnum_ZERO), static_cast<int>(guard.p->m16)); + CPPUNIT_ASSERT_EQUAL(sal_False, guard.p->m17.m1); + CPPUNIT_ASSERT_EQUAL(false, guard.p->m17.m2.is()); + CPPUNIT_ASSERT_EQUAL(false, guard.p->m18.is()); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int8 >(0), guard.p->m19); + CPPUNIT_ASSERT_EQUAL(sal_Int32(test::codemaker::cppumaker::HelperEnum_ZERO), static_cast<sal_Int32>(guard.p->m20)); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m21.getLength()); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m22.getLength()); + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), guard.p->m23.getLength()); + +//This is a very platform specific test. +#if defined __GNUC__ // see CPPU_GCC3_ALIGN +#if defined(LINUX) && (defined (X86_64) || defined(X86) || defined(PPC)) + static_assert( + sizeof (test::codemaker::cppumaker::AlignmentDerivedStruct) == +#if defined X86_64 || defined PPC + 24 +#else + 16 +#endif + ); +#endif +#endif + + css::uno::Type t( + cppu::UnoType< test::codemaker::cppumaker::BigStruct >::get()); + typelib_TypeDescription * td = nullptr; + t.getDescription(&td); + typelib_typedescription_complete(&td); + fprintf(stdout, "#### 1\n"); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT_EQUAL(+typelib_TypeClass_STRUCT, +td->eTypeClass); + typelib_StructTypeDescription * std = + reinterpret_cast< typelib_StructTypeDescription * >(td); + CPPUNIT_ASSERT_EQUAL(+typelib_TypeClass_UNSIGNED_SHORT, +std->aBase.ppTypeRefs[3]->eTypeClass); // unsigned short m4; + CPPUNIT_ASSERT_EQUAL(+typelib_TypeClass_CHAR, +std->aBase.ppTypeRefs[10]->eTypeClass); // char m11; +} + +void Test::testPolyStruct() { + CPPUNIT_ASSERT_EQUAL( + OUString( + "test.codemaker.cppumaker.Struct<char,short>"), + (css::uno::makeAny( + test::codemaker::cppumaker::Struct< sal_Unicode, sal_Int16 >()). + getValueType().getTypeName())); + + css::uno::Sequence< css::uno::Sequence< css::uno::Any > > + aEmptySequence; + + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_uInt32 >(5), + (test::codemaker::cppumaker::make_Struct< sal_uInt32, sal_Bool >(5, + aEmptySequence).member1)); +} + +void Test::testExceptions() { + css::uno::Sequence< css::uno::Sequence< css::uno::Any > > + aEmptySequence; + + test::codemaker::cppumaker::TestException1 e11( + "abc", nullptr, 1, + css::uno::makeAny(123.0), + test::codemaker::cppumaker::HelperEnum_ONE, + test::codemaker::cppumaker::Struct<sal_Int32, sal_Int32>(5, aEmptySequence), 2); + test::codemaker::cppumaker::TestException1 e12(e11); + CPPUNIT_ASSERT_EQUAL(e11, e12); + test::codemaker::cppumaker::TestException1 e13; + e13 = e11; + CPPUNIT_ASSERT_EQUAL(e11, e13); + test::codemaker::cppumaker::TestException2 e21( + "abc", nullptr, 1, + css::uno::makeAny(123.0), + test::codemaker::cppumaker::HelperEnum_ONE, + test::codemaker::cppumaker::Struct<sal_Int32, sal_Int32>(5, aEmptySequence), 2); + test::codemaker::cppumaker::TestException2 e22(e21); + CPPUNIT_ASSERT_EQUAL(e21, e22); + test::codemaker::cppumaker::TestException2 e23; + e23 = e21; + CPPUNIT_ASSERT_EQUAL(e21, e23); +} + +void Test::testConstants() { + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT8, test::codemaker::cppumaker::Constants::byteMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_INT8, test::codemaker::cppumaker::Constants::byteMax); + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT16, test::codemaker::cppumaker::Constants::shortMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_INT16, test::codemaker::cppumaker::Constants::shortMax); + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_uInt16 >(0), + test::codemaker::cppumaker::Constants::unsignedShortMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_UINT16, + test::codemaker::cppumaker::Constants::unsignedShortMax); + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT32, test::codemaker::cppumaker::Constants::longMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_INT32, test::codemaker::cppumaker::Constants::longMax); + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_uInt32 >(0), + test::codemaker::cppumaker::Constants::unsignedLongMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_UINT32, test::codemaker::cppumaker::Constants::unsignedLongMax); + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT64, test::codemaker::cppumaker::Constants::hyperMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_INT64, test::codemaker::cppumaker::Constants::hyperMax); + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_uInt64 >(0), + test::codemaker::cppumaker::Constants::unsignedHyperMin); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_UINT64, + test::codemaker::cppumaker::Constants::unsignedHyperMax); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/cppumaker/types.idl b/cppu/qa/cppumaker/types.idl new file mode 100644 index 000000000..98ed1f867 --- /dev/null +++ b/cppu/qa/cppumaker/types.idl @@ -0,0 +1,710 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/*TODO: Do not depend on types for which C++ header files are only generated + later in the build process in offuh: */ +#include <com/sun/star/lang/ClassNotFoundException.idl> +#include <com/sun/star/lang/IllegalAccessException.idl> +#include <com/sun/star/lang/Locale.idl> +#include <com/sun/star/uno/DeploymentException.idl> +#include <com/sun/star/uno/Exception.idl> +#include <com/sun/star/uno/RuntimeException.idl> +#include <com/sun/star/uno/XInterface.idl> +#include <com/sun/star/uno/XNamingService.idl> + +singleton FILE: com::sun::star::uno::XInterface; +singleton lconv: com::sun::star::uno::XInterface; +singleton tm: com::sun::star::uno::XInterface; + +singleton std: com::sun::star::uno::XInterface; + +module test { module codemaker { module cppumaker { + +interface XTest { + boolean test(); + + [attribute, bound] long A1; + [attribute, bound, readonly] long A2; + [attribute] long A3 { + get raises + (com::sun::star::uno::Exception, + com::sun::star::lang::ClassNotFoundException); + set raises (com::sun::star::uno::RuntimeException); + }; + [attribute, readonly] long A4 { + get raises (com::sun::star::uno::DeploymentException); + }; +}; + +typedef boolean Boolean; +typedef byte Byte; +typedef short Short; +typedef unsigned short UnsignedShort; +typedef long Long; +typedef unsigned long UnsignedLong; +typedef hyper Hyper; +typedef unsigned hyper UnsignedHyper; +typedef float Float; +typedef double Double; +typedef char Char; +typedef string String; +typedef type Type; +typedef any Any; +typedef com::sun::star::lang::Locale Locale; +typedef com::sun::star::uno::XInterface XInterface; +typedef com::sun::star::uno::XNamingService XNamingService; + +typedef sequence< Boolean > SequenceBoolean; +typedef sequence< Byte > SequenceByte; +typedef sequence< Short > SequenceShort; +typedef sequence< UnsignedShort > SequenceUnsignedShort; +typedef sequence< Long > SequenceLong; +typedef sequence< UnsignedLong > SequenceUnsignedLong; +typedef sequence< Hyper > SequenceHyper; +typedef sequence< UnsignedHyper > SequenceUnsignedHyper; +typedef sequence< Float > SequenceFloat; +typedef sequence< Double > SequenceDouble; +typedef sequence< Char > SequenceChar; +typedef sequence< String > SequenceString; +typedef sequence< Type > SequenceType; +typedef sequence< Any > SequenceAny; +typedef sequence< Locale > SequenceLocale; +typedef sequence< XInterface > SequenceXInterface; +typedef sequence< XNamingService > SequenceXNamingService; + +service S1: XTest { + create1(); + + create2([in] any... create2) + raises (com::sun::star::uno::RuntimeException, + com::sun::star::lang::ClassNotFoundException, + com::sun::star::uno::Exception, + com::sun::star::lang::IllegalAccessException, + com::sun::star::uno::DeploymentException); + + create3([in] sequence<any> S1) + raises (com::sun::star::uno::RuntimeException, + com::sun::star::lang::ClassNotFoundException, + com::sun::star::lang::IllegalAccessException, + com::sun::star::uno::DeploymentException); + + create4([in] long javamaker, [in] long S1, [in] long create4); + + create5( + [in] boolean p1, + [in] byte p2, + [in] short p3, + [in] unsigned short p4, + [in] long p5, + [in] unsigned long p6, + [in] hyper p7, + [in] unsigned hyper p8, + [in] float p9, + [in] double p10, + [in] char p11, + [in] string p12, + [in] type p13, + [in] any p14, + [in] com::sun::star::lang::Locale p15, + [in] com::sun::star::uno::XInterface p16, + [in] com::sun::star::uno::XNamingService p17, + [in] Boolean t1, + [in] Byte t2, + [in] Short t3, + [in] UnsignedShort t4, + [in] Long t5, + [in] UnsignedLong t6, + [in] Hyper t7, + [in] UnsignedHyper t8, + [in] Float t9, + [in] Double t10, + [in] Char t11, + [in] String t12, + [in] Type t13, + [in] Any t14, + [in] Locale t15, + [in] XInterface t16, + [in] XNamingService t17, + [in] sequence< sequence< boolean > > a1, + [in] sequence< sequence< byte > > a2, + [in] sequence< sequence< short > > a3, + [in] sequence< sequence< unsigned short > > a4, + [in] sequence< sequence< long > > a5, + [in] sequence< sequence< unsigned long > > a6, + [in] sequence< sequence< hyper > > a7, + [in] sequence< sequence< unsigned hyper > > a8, + [in] sequence< sequence< float > > a9, + [in] sequence< sequence< double > > a10, + [in] sequence< sequence< char > > a11, + [in] sequence< sequence< string > > a12, + [in] sequence< sequence< type > > a13, + [in] sequence< sequence< any > > a14, + [in] sequence< sequence< com::sun::star::lang::Locale > > a15, + [in] sequence< sequence< com::sun::star::uno::XInterface > > a16, + [in] sequence< sequence< + com::sun::star::uno::XNamingService > > a17, + [in] sequence< SequenceBoolean > at1, + [in] sequence< SequenceByte > at2, + [in] sequence< SequenceShort > at3, + [in] sequence< SequenceUnsignedShort > at4, + [in] sequence< SequenceLong > at5, + [in] sequence< SequenceUnsignedLong > at6, + [in] sequence< SequenceHyper > at7, + [in] sequence< SequenceUnsignedHyper > at8, + [in] sequence< SequenceFloat > at9, + [in] sequence< SequenceDouble > at10, + [in] sequence< SequenceChar > at11, + [in] sequence< SequenceString > at12, + [in] sequence< SequenceType > at13, + [in] sequence< SequenceAny > at14, + [in] sequence< SequenceLocale > at15, + [in] sequence< SequenceXInterface > at16, + [in] sequence< SequenceXNamingService > at17); +}; + +service S2: XTest; + +service S3 { interface XTest; }; + +singleton S4 { service S3; }; + +module services { + +service asm: com::sun::star::uno::XInterface { asm([in] long asm); }; +service auto: com::sun::star::uno::XInterface { auto([in] long auto); }; +service bool: com::sun::star::uno::XInterface { bool([in] long bool); }; +service break: com::sun::star::uno::XInterface { break([in] long break); }; +//TODO: service case: com::sun::star::uno::XInterface { case([in] long case); }; +service catch: com::sun::star::uno::XInterface { catch([in] long catch); }; +//TODO: service char: com::sun::star::uno::XInterface { char([in] long char); }; +service class: com::sun::star::uno::XInterface { class([in] long class); }; +//TODO: service const: com::sun::star::uno::XInterface { +// const([in] long const); }; +service continue: com::sun::star::uno::XInterface { + continue([in] long continue); }; +//TODO: service default: com::sun::star::uno::XInterface { +// default([in] long default); }; +service delete: com::sun::star::uno::XInterface { delete([in] long delete); }; +service do: com::sun::star::uno::XInterface { do([in] long do); }; +//TODO: service double: com::sun::star::uno::XInterface { +// double([in] long double); }; +service else: com::sun::star::uno::XInterface { else([in] long else); }; +//TODO: service enum: com::sun::star::uno::XInterface { enum([in] long enum); }; +service explicit: com::sun::star::uno::XInterface { + explicit([in] long explicit); }; +service export: com::sun::star::uno::XInterface { export([in] long export); }; +service extern: com::sun::star::uno::XInterface { extern([in] long extern); }; +service false: com::sun::star::uno::XInterface { false([in] long false); }; +//TODO: service float: com::sun::star::uno::XInterface { +// float([in] long float); }; +service for: com::sun::star::uno::XInterface { for([in] long for); }; +service friend: com::sun::star::uno::XInterface { friend([in] long friend); }; +service goto: com::sun::star::uno::XInterface { goto([in] long goto); }; +service if: com::sun::star::uno::XInterface { if([in] long if); }; +service inline: com::sun::star::uno::XInterface { inline([in] long inline); }; +service int: com::sun::star::uno::XInterface { int([in] long int); }; +//TODO: service long: com::sun::star::uno::XInterface { long([in] long long); }; +service mutable: com::sun::star::uno::XInterface { + mutable([in] long mutable); }; +service namespace: com::sun::star::uno::XInterface { + namespace([in] long namespace); }; +service new: com::sun::star::uno::XInterface { new([in] long new); }; +service operator: com::sun::star::uno::XInterface { + operator([in] long operator); }; +service private: com::sun::star::uno::XInterface { + private([in] long private); }; +service protected: com::sun::star::uno::XInterface { + protected([in] long protected); }; +service public: com::sun::star::uno::XInterface { public([in] long public); }; +service register: com::sun::star::uno::XInterface { + register([in] long register); }; +service return: com::sun::star::uno::XInterface { return([in] long return); }; +//TODO: service short: com::sun::star::uno::XInterface { +// short([in] long short); }; +service signed: com::sun::star::uno::XInterface { signed([in] long signed); }; +service sizeof: com::sun::star::uno::XInterface { sizeof([in] long sizeof); }; +service static: com::sun::star::uno::XInterface { static([in] long static); }; +//TODO: service struct: com::sun::star::uno::XInterface { +// struct([in] long struct); }; +//TODO: service switch: com::sun::star::uno::XInterface { +// switch([in] long switch); }; +service template: com::sun::star::uno::XInterface { + template([in] long template); }; +service this: com::sun::star::uno::XInterface { this([in] long this); }; +service throw: com::sun::star::uno::XInterface { throw([in] long throw); }; +service true: com::sun::star::uno::XInterface { true([in] long true); }; +service try: com::sun::star::uno::XInterface { try([in] long try); }; +//TODO: service typedef: com::sun::star::uno::XInterface { +// typedef([in] long typedef); }; +service typeid: com::sun::star::uno::XInterface { typeid([in] long typeid); }; +service typename: com::sun::star::uno::XInterface { + typename([in] long typename); }; +//TODO: service union: com::sun::star::uno::XInterface { +// union([in] long union); }; +//TODO: service unsigned: com::sun::star::uno::XInterface { +// unsigned([in] long unsigned); }; +service using: com::sun::star::uno::XInterface { using([in] long using); }; +service virtual: com::sun::star::uno::XInterface { + virtual([in] long virtual); }; +//TODO: service void: com::sun::star::uno::XInterface { void([in] long void); }; +service volatile: com::sun::star::uno::XInterface { + volatile([in] long volatile); }; +service while: com::sun::star::uno::XInterface { while([in] long while); }; + +service and: com::sun::star::uno::XInterface { and([in] long and); }; +service bitand: com::sun::star::uno::XInterface { bitand([in] long bitand); }; +service bitor: com::sun::star::uno::XInterface { bitor([in] long bitor); }; +service compl: com::sun::star::uno::XInterface { compl([in] long compl); }; +service not: com::sun::star::uno::XInterface { not([in] long not); }; +service or: com::sun::star::uno::XInterface { or([in] long or); }; +service xor: com::sun::star::uno::XInterface { xor([in] long xor); }; + +service BUFSIZ: com::sun::star::uno::XInterface { BUFSIZ([in] long BUFSIZ); }; +service CLOCKS_PER_SEC: com::sun::star::uno::XInterface { + CLOCKS_PER_SEC([in] long CLOCKS_PER_SEC); }; +service EDOM: com::sun::star::uno::XInterface { EDOM([in] long EDOM); }; +service EOF: com::sun::star::uno::XInterface { EOF([in] long EOF); }; +service ERANGE: com::sun::star::uno::XInterface { ERANGE([in] long ERANGE); }; +service EXIT_FAILURE: com::sun::star::uno::XInterface { + EXIT_FAILURE([in] long EXIT_FAILURE); }; +service EXIT_SUCCESS: com::sun::star::uno::XInterface { + EXIT_SUCCESS([in] long EXIT_SUCCESS); }; +service FILENAME_MAX: com::sun::star::uno::XInterface { + FILENAME_MAX([in] long FILENAME_MAX); }; +service FOPEN_MAX: com::sun::star::uno::XInterface { + FOPEN_MAX([in] long FOPEN_MAX); }; +service HUGE_VAL: com::sun::star::uno::XInterface { + HUGE_VAL([in] long HUGE_VAL); }; +service LC_ALL: com::sun::star::uno::XInterface { LC_ALL([in] long LC_ALL); }; +service LC_COLLATE: com::sun::star::uno::XInterface { + LC_COLLATE([in] long LC_COLLATE); }; +service LC_CTYPE: com::sun::star::uno::XInterface { + LC_CTYPE([in] long LC_CTYPE); }; +service LC_MONETARY: com::sun::star::uno::XInterface { + LC_MONETARY([in] long LC_MONETARY); }; +service LC_NUMERIC: com::sun::star::uno::XInterface { + LC_NUMERIC([in] long LC_NUMERIC); }; +service LC_TIME: com::sun::star::uno::XInterface { + LC_TIME([in] long LC_TIME); }; +service L_tmpnam: com::sun::star::uno::XInterface { + L_tmpnam([in] long L_tmpnam); }; +service MB_CUR_MAX: com::sun::star::uno::XInterface { + MB_CUR_MAX([in] long MB_CUR_MAX); }; +service NULL: com::sun::star::uno::XInterface { NULL([in] long NULL); }; +service RAND_MAX: com::sun::star::uno::XInterface { + RAND_MAX([in] long RAND_MAX); }; +service SEEK_CUR: com::sun::star::uno::XInterface { + SEEK_CUR([in] long SEEK_CUR); }; +service SEEK_END: com::sun::star::uno::XInterface { + SEEK_END([in] long SEEK_END); }; +service SEEK_SET: com::sun::star::uno::XInterface { + SEEK_SET([in] long SEEK_SET); }; +service SIGABRT: com::sun::star::uno::XInterface { + SIGABRT([in] long SIGABRT); }; +service SIGFPE: com::sun::star::uno::XInterface { SIGFPE([in] long SIGFPE); }; +service SIGILL: com::sun::star::uno::XInterface { SIGILL([in] long SIGILL); }; +service SIGINT: com::sun::star::uno::XInterface { SIGINT([in] long SIGINT); }; +service SIGSEGV: com::sun::star::uno::XInterface { + SIGSEGV([in] long SIGSEGV); }; +service SIGTERM: com::sun::star::uno::XInterface { + SIGTERM([in] long SIGTERM); }; +service SIG_DFL: com::sun::star::uno::XInterface { + SIG_DFL([in] long SIG_DFL); }; +service SIG_ERR: com::sun::star::uno::XInterface { + SIG_ERR([in] long SIG_ERR); }; +service SIG_IGN: com::sun::star::uno::XInterface { + SIG_IGN([in] long SIG_IGN); }; +service TMP_MAX: com::sun::star::uno::XInterface { + TMP_MAX([in] long TMP_MAX); }; +service WCHAR_MAX: com::sun::star::uno::XInterface { + WCHAR_MAX([in] long WCHAR_MAX); }; +service WCHAR_MIN: com::sun::star::uno::XInterface { + WCHAR_MIN([in] long WCHAR_MIN); }; +service WEOF: com::sun::star::uno::XInterface { WEOF([in] long WEOF); }; +service assert: com::sun::star::uno::XInterface { assert([in] long assert); }; +service errno: com::sun::star::uno::XInterface { errno([in] long errno); }; +service offsetof: com::sun::star::uno::XInterface { + offsetof([in] long offsetof); }; +service setjmp: com::sun::star::uno::XInterface { setjmp([in] long setjmp); }; +service stderr: com::sun::star::uno::XInterface { stderr([in] long stderr); }; +service stdin: com::sun::star::uno::XInterface { stdin([in] long stdin); }; +service stdout: com::sun::star::uno::XInterface { stdout([in] long stdout); }; + +service CHAR_BIT: com::sun::star::uno::XInterface { + CHAR_BIT([in] long CHAR_BIT); }; +service CHAR_MAX: com::sun::star::uno::XInterface { + CHAR_MAX([in] long CHAR_MAX); }; +service CHAR_MIN: com::sun::star::uno::XInterface { + CHAR_MIN([in] long CHAR_MIN); }; +service DBL_DIG: com::sun::star::uno::XInterface { + DBL_DIG([in] long DBL_DIG); }; +service DBL_EPSILON: com::sun::star::uno::XInterface { + DBL_EPSILON([in] long DBL_EPSILON); }; +service DBL_MANT_DIG: com::sun::star::uno::XInterface { + DBL_MANT_DIG([in] long DBL_MANT_DIG); }; +service DBL_MAX: com::sun::star::uno::XInterface { + DBL_MAX([in] long DBL_MAX); }; +service DBL_MAX_10_EXP: com::sun::star::uno::XInterface { + DBL_MAX_10_EXP([in] long DBL_MAX_10_EXP); }; +service DBL_MAX_EXP: com::sun::star::uno::XInterface { + DBL_MAX_EXP([in] long DBL_MAX_EXP); }; +service DBL_MIN: com::sun::star::uno::XInterface { + DBL_MIN([in] long DBL_MIN); }; +service DBL_MIN_10_EXP: com::sun::star::uno::XInterface { + DBL_MIN_10_EXP([in] long DBL_MIN_10_EXP); }; +service DBL_MIN_EXP: com::sun::star::uno::XInterface { + DBL_MIN_EXP([in] long DBL_MIN_EXP); }; +service FLT_DIG: com::sun::star::uno::XInterface { + FLT_DIG([in] long FLT_DIG); }; +service FLT_EPSILON: com::sun::star::uno::XInterface { + FLT_EPSILON([in] long FLT_EPSILON); }; +service FLT_MANT_DIG: com::sun::star::uno::XInterface { + FLT_MANT_DIG([in] long FLT_MANT_DIG); }; +service FLT_MAX: com::sun::star::uno::XInterface { + FLT_MAX([in] long FLT_MAX); }; +service FLT_MAX_10_EXP: com::sun::star::uno::XInterface { + FLT_MAX_10_EXP([in] long FLT_MAX_10_EXP); }; +service FLT_MAX_EXP: com::sun::star::uno::XInterface { + FLT_MAX_EXP([in] long FLT_MAX_EXP); }; +service FLT_MIN: com::sun::star::uno::XInterface { + FLT_MIN([in] long FLT_MIN); }; +service FLT_MIN_10_EXP: com::sun::star::uno::XInterface { + FLT_MIN_10_EXP([in] long FLT_MIN_10_EXP); }; +service FLT_MIN_EXP: com::sun::star::uno::XInterface { + FLT_MIN_EXP([in] long FLT_MIN_EXP); }; +service FLT_RADIX: com::sun::star::uno::XInterface { + FLT_RADIX([in] long FLT_RADIX); }; +service FLT_ROUNDS: com::sun::star::uno::XInterface { + FLT_ROUNDS([in] long FLT_ROUNDS); }; +service INT_MAX: com::sun::star::uno::XInterface { + INT_MAX([in] long INT_MAX); }; +service INT_MIN: com::sun::star::uno::XInterface { + INT_MIN([in] long INT_MIN); }; +service LDBL_DIG: com::sun::star::uno::XInterface { + LDBL_DIG([in] long LDBL_DIG); }; +service LDBL_EPSILON: com::sun::star::uno::XInterface { + LDBL_EPSILON([in] long LDBL_EPSILON); }; +service LDBL_MANT_DIG: com::sun::star::uno::XInterface { + LDBL_MANT_DIG([in] long LDBL_MANT_DIG); }; +service LDBL_MAX: com::sun::star::uno::XInterface { + LDBL_MAX([in] long LDBL_MAX); }; +service LDBL_MAX_10_EXP: com::sun::star::uno::XInterface { + LDBL_MAX_10_EXP([in] long LDBL_MAX_10_EXP); }; +service LDBL_MAX_EXP: com::sun::star::uno::XInterface { + LDBL_MAX_EXP([in] long LDBL_MAX_EXP); }; +service LDBL_MIN: com::sun::star::uno::XInterface { + LDBL_MIN([in] long LDBL_MIN); }; +service LDBL_MIN_10_EXP: com::sun::star::uno::XInterface { + LDBL_MIN_10_EXP([in] long LDBL_MIN_10_EXP); }; +service LDBL_MIN_EXP: com::sun::star::uno::XInterface { + LDBL_MIN_EXP([in] long LDBL_MIN_EXP); }; +service LONG_MAX: com::sun::star::uno::XInterface { + LONG_MAX([in] long LONG_MAX); }; +service LONG_MIN: com::sun::star::uno::XInterface { + LONG_MIN([in] long LONG_MIN); }; +service MB_LEN_MAX: com::sun::star::uno::XInterface { + MB_LEN_MAX([in] long MB_LEN_MAX); }; +service SCHAR_MAX: com::sun::star::uno::XInterface { + SCHAR_MAX([in] long SCHAR_MAX); }; +service SCHAR_MIN: com::sun::star::uno::XInterface { + SCHAR_MIN([in] long SCHAR_MIN); }; +service SHRT_MAX: com::sun::star::uno::XInterface { + SHRT_MAX([in] long SHRT_MAX); }; +service SHRT_MIN: com::sun::star::uno::XInterface { + SHRT_MIN([in] long SHRT_MIN); }; +service UCHAR_MAX: com::sun::star::uno::XInterface { + UCHAR_MAX([in] long UCHAR_MAX); }; +service UINT_MAX: com::sun::star::uno::XInterface { + UINT_MAX([in] long UINT_MAX); }; +service ULONG_MAX: com::sun::star::uno::XInterface { + ULONG_MAX([in] long ULONG_MAX); }; +service USHRT_MAX: com::sun::star::uno::XInterface { + USHRT_MAX([in] long USHRT_MAX); }; + +service FILE: com::sun::star::uno::XInterface { FILE([in] long FILE); }; +service lconv: com::sun::star::uno::XInterface { lconv([in] long lconv); }; +service tm: com::sun::star::uno::XInterface { tm([in] long tm); }; + +service std: com::sun::star::uno::XInterface { std([in] long std); }; + +service NDEBUG: com::sun::star::uno::XInterface { NDEBUG([in] long NDEBUG); }; + +service create: com::sun::star::uno::XInterface; + +}; + +module singletons { + +singleton asm: com::sun::star::uno::XInterface; +singleton auto: com::sun::star::uno::XInterface; +singleton bool: com::sun::star::uno::XInterface; +singleton break: com::sun::star::uno::XInterface; +//TODO: singleton case: com::sun::star::uno::XInterface; +singleton catch: com::sun::star::uno::XInterface; +//TODO: singleton char: com::sun::star::uno::XInterface; +singleton class: com::sun::star::uno::XInterface; +//TODO: singleton const: com::sun::star::uno::XInterface; +singleton continue: com::sun::star::uno::XInterface; +//TODO: singleton default: com::sun::star::uno::XInterface; +singleton delete: com::sun::star::uno::XInterface; +singleton do: com::sun::star::uno::XInterface; +//TODO: singleton double: com::sun::star::uno::XInterface; +singleton else: com::sun::star::uno::XInterface; +//TODO: singleton enum: com::sun::star::uno::XInterface; +singleton explicit: com::sun::star::uno::XInterface; +singleton export: com::sun::star::uno::XInterface; +singleton extern: com::sun::star::uno::XInterface; +singleton false: com::sun::star::uno::XInterface; +//TODO: singleton float: com::sun::star::uno::XInterface; +singleton for: com::sun::star::uno::XInterface; +singleton friend: com::sun::star::uno::XInterface; +singleton goto: com::sun::star::uno::XInterface; +singleton if: com::sun::star::uno::XInterface; +singleton inline: com::sun::star::uno::XInterface; +singleton int: com::sun::star::uno::XInterface; +//TODO: singleton long: com::sun::star::uno::XInterface; +singleton mutable: com::sun::star::uno::XInterface; +singleton namespace: com::sun::star::uno::XInterface; +singleton new: com::sun::star::uno::XInterface; +singleton operator: com::sun::star::uno::XInterface; +singleton private: com::sun::star::uno::XInterface; +singleton protected: com::sun::star::uno::XInterface; +singleton public: com::sun::star::uno::XInterface; +singleton register: com::sun::star::uno::XInterface; +singleton return: com::sun::star::uno::XInterface; +//TODO: singleton short: com::sun::star::uno::XInterface; +singleton signed: com::sun::star::uno::XInterface; +singleton sizeof: com::sun::star::uno::XInterface; +singleton static: com::sun::star::uno::XInterface; +//TODO: singleton struct: com::sun::star::uno::XInterface; +//TODO: singleton switch: com::sun::star::uno::XInterface; +singleton template: com::sun::star::uno::XInterface; +singleton this: com::sun::star::uno::XInterface; +singleton throw: com::sun::star::uno::XInterface; +singleton true: com::sun::star::uno::XInterface; +singleton try: com::sun::star::uno::XInterface; +//TODO: singleton typedef: com::sun::star::uno::XInterface; +singleton typeid: com::sun::star::uno::XInterface; +singleton typename: com::sun::star::uno::XInterface; +//TODO: singleton union: com::sun::star::uno::XInterface; +//TODO: singleton unsigned: com::sun::star::uno::XInterface; +singleton using: com::sun::star::uno::XInterface; +singleton virtual: com::sun::star::uno::XInterface; +//TODO: singleton void: com::sun::star::uno::XInterface; +singleton volatile: com::sun::star::uno::XInterface; +singleton while: com::sun::star::uno::XInterface; + +singleton and: com::sun::star::uno::XInterface; +singleton bitand: com::sun::star::uno::XInterface; +singleton bitor: com::sun::star::uno::XInterface; +singleton compl: com::sun::star::uno::XInterface; +singleton not: com::sun::star::uno::XInterface; +singleton or: com::sun::star::uno::XInterface; +singleton xor: com::sun::star::uno::XInterface; + +singleton BUFSIZ: com::sun::star::uno::XInterface; +singleton CLOCKS_PER_SEC: com::sun::star::uno::XInterface; +singleton EDOM: com::sun::star::uno::XInterface; +singleton EOF: com::sun::star::uno::XInterface; +singleton ERANGE: com::sun::star::uno::XInterface; +singleton EXIT_FAILURE: com::sun::star::uno::XInterface; +singleton EXIT_SUCCESS: com::sun::star::uno::XInterface; +singleton FILENAME_MAX: com::sun::star::uno::XInterface; +singleton FOPEN_MAX: com::sun::star::uno::XInterface; +singleton HUGE_VAL: com::sun::star::uno::XInterface; +singleton LC_ALL: com::sun::star::uno::XInterface; +singleton LC_COLLATE: com::sun::star::uno::XInterface; +singleton LC_CTYPE: com::sun::star::uno::XInterface; +singleton LC_MONETARY: com::sun::star::uno::XInterface; +singleton LC_NUMERIC: com::sun::star::uno::XInterface; +singleton LC_TIME: com::sun::star::uno::XInterface; +singleton L_tmpnam: com::sun::star::uno::XInterface; +singleton MB_CUR_MAX: com::sun::star::uno::XInterface; +singleton NULL: com::sun::star::uno::XInterface; +singleton RAND_MAX: com::sun::star::uno::XInterface; +singleton SEEK_CUR: com::sun::star::uno::XInterface; +singleton SEEK_END: com::sun::star::uno::XInterface; +singleton SEEK_SET: com::sun::star::uno::XInterface; +singleton SIGABRT: com::sun::star::uno::XInterface; +singleton SIGFPE: com::sun::star::uno::XInterface; +singleton SIGILL: com::sun::star::uno::XInterface; +singleton SIGINT: com::sun::star::uno::XInterface; +singleton SIGSEGV: com::sun::star::uno::XInterface; +singleton SIGTERM: com::sun::star::uno::XInterface; +singleton SIG_DFL: com::sun::star::uno::XInterface; +singleton SIG_ERR: com::sun::star::uno::XInterface; +singleton SIG_IGN: com::sun::star::uno::XInterface; +singleton TMP_MAX: com::sun::star::uno::XInterface; +singleton WCHAR_MAX: com::sun::star::uno::XInterface; +singleton WCHAR_MIN: com::sun::star::uno::XInterface; +singleton WEOF: com::sun::star::uno::XInterface; +singleton assert: com::sun::star::uno::XInterface; +singleton errno: com::sun::star::uno::XInterface; +singleton offsetof: com::sun::star::uno::XInterface; +singleton setjmp: com::sun::star::uno::XInterface; +singleton stderr: com::sun::star::uno::XInterface; +singleton stdin: com::sun::star::uno::XInterface; +singleton stdout: com::sun::star::uno::XInterface; + +singleton CHAR_BIT: com::sun::star::uno::XInterface; +singleton CHAR_MAX: com::sun::star::uno::XInterface; +singleton CHAR_MIN: com::sun::star::uno::XInterface; +singleton DBL_DIG: com::sun::star::uno::XInterface; +singleton DBL_EPSILON: com::sun::star::uno::XInterface; +singleton DBL_MANT_DIG: com::sun::star::uno::XInterface; +singleton DBL_MAX: com::sun::star::uno::XInterface; +singleton DBL_MAX_10_EXP: com::sun::star::uno::XInterface; +singleton DBL_MAX_EXP: com::sun::star::uno::XInterface; +singleton DBL_MIN: com::sun::star::uno::XInterface; +singleton DBL_MIN_10_EXP: com::sun::star::uno::XInterface; +singleton DBL_MIN_EXP: com::sun::star::uno::XInterface; +singleton FLT_DIG: com::sun::star::uno::XInterface; +singleton FLT_EPSILON: com::sun::star::uno::XInterface; +singleton FLT_MANT_DIG: com::sun::star::uno::XInterface; +singleton FLT_MAX: com::sun::star::uno::XInterface; +singleton FLT_MAX_10_EXP: com::sun::star::uno::XInterface; +singleton FLT_MAX_EXP: com::sun::star::uno::XInterface; +singleton FLT_MIN: com::sun::star::uno::XInterface; +singleton FLT_MIN_10_EXP: com::sun::star::uno::XInterface; +singleton FLT_MIN_EXP: com::sun::star::uno::XInterface; +singleton FLT_RADIX: com::sun::star::uno::XInterface; +singleton FLT_ROUNDS: com::sun::star::uno::XInterface; +singleton INT_MAX: com::sun::star::uno::XInterface; +singleton INT_MIN: com::sun::star::uno::XInterface; +singleton LDBL_DIG: com::sun::star::uno::XInterface; +singleton LDBL_EPSILON: com::sun::star::uno::XInterface; +singleton LDBL_MANT_DIG: com::sun::star::uno::XInterface; +singleton LDBL_MAX: com::sun::star::uno::XInterface; +singleton LDBL_MAX_10_EXP: com::sun::star::uno::XInterface; +singleton LDBL_MAX_EXP: com::sun::star::uno::XInterface; +singleton LDBL_MIN: com::sun::star::uno::XInterface; +singleton LDBL_MIN_10_EXP: com::sun::star::uno::XInterface; +singleton LDBL_MIN_EXP: com::sun::star::uno::XInterface; +singleton LONG_MAX: com::sun::star::uno::XInterface; +singleton LONG_MIN: com::sun::star::uno::XInterface; +singleton MB_LEN_MAX: com::sun::star::uno::XInterface; +singleton SCHAR_MAX: com::sun::star::uno::XInterface; +singleton SCHAR_MIN: com::sun::star::uno::XInterface; +singleton SHRT_MAX: com::sun::star::uno::XInterface; +singleton SHRT_MIN: com::sun::star::uno::XInterface; +singleton UCHAR_MAX: com::sun::star::uno::XInterface; +singleton UINT_MAX: com::sun::star::uno::XInterface; +singleton ULONG_MAX: com::sun::star::uno::XInterface; +singleton USHRT_MAX: com::sun::star::uno::XInterface; + +singleton FILE: com::sun::star::uno::XInterface; +singleton lconv: com::sun::star::uno::XInterface; +singleton tm: com::sun::star::uno::XInterface; + +singleton std: com::sun::star::uno::XInterface; + +singleton NDEBUG: com::sun::star::uno::XInterface; + +singleton get: com::sun::star::uno::XInterface; + +}; + +enum HelperEnum { ZERO, ONE }; + +struct HelperStruct { boolean m1; com::sun::star::uno::XInterface m2; }; + +typedef byte TDByte; +typedef HelperEnum TDEnum1; +typedef TDEnum1 TDEnum; + +struct BigStruct { + boolean m1; + byte m2; + short m3; + unsigned short m4; + long m5; + unsigned long m6; + hyper m7; + unsigned hyper m8; + float m9; + double m10; + char m11; + string m12; + type m13; + any m14; + sequence<boolean> m15; + HelperEnum m16; + HelperStruct m17; + com::sun::star::uno::XInterface m18; + TDByte m19; + TDEnum m20; + sequence<unsigned short> m21; + sequence<char> m22; + sequence< sequence<char> > m23; +}; + +struct Struct<T, U> { + T member1; + sequence<SequenceAny> member2; +}; + +struct StructUsage { + Struct< long, short > member1; + sequence< + sequence< + Struct< + sequence< Struct< any, boolean > >, + com::sun::star::uno::XInterface > > > + member2; +}; + +struct AlignmentBaseStruct { + double member1; + short member2; +}; + +struct AlignmentDerivedStruct: AlignmentBaseStruct { + short member3; +}; + +exception TestException1: com::sun::star::uno::RuntimeException { + long m1; + any m2; + HelperEnum m3; + Struct<long, long> m4; + unsigned short m5; +}; + +exception TestException2: TestException1 {}; + +constants Constants { + const byte byteMin = -128; + const byte byteMax = 127; + const short shortMin = -32768; + const short shortMax = 32767; + const unsigned short unsignedShortMin = 0; + const unsigned short unsignedShortMax = 65535; + const long longMin = -2147483648; + const long longMax = 2147483647; + const unsigned long unsignedLongMin = 0; + const unsigned long unsignedLongMax = 4294967295; + const hyper hyperMin = -9223372036854775808; + const hyper hyperMax = 9223372036854775807; + const unsigned hyper unsignedHyperMin = 0; + const unsigned hyper unsignedHyperMax = 18446744073709551615; +}; + +}; }; }; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/test_any.cxx b/cppu/qa/test_any.cxx new file mode 100644 index 000000000..7dfed7a71 --- /dev/null +++ b/cppu/qa/test_any.cxx @@ -0,0 +1,2127 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <stdlib.h> +#include <type_traits> + +#include <cppunit/TestFixture.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <Enum1.hpp> +#include <Enum2.hpp> +#include <Exception1.hpp> +#include <Exception2.hpp> +#include <Exception2a.hpp> +#include <Exception2b.hpp> +#include <Interface1.hpp> +#include <Interface2.hpp> +#include <Interface2a.hpp> +#include <Interface2b.hpp> +#include <Interface3.hpp> +#include <Poly.hpp> +#include <Struct1.hpp> +#include <Struct2.hpp> +#include <Struct2a.hpp> +#include <Struct2b.hpp> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/uno/Type.hxx> +#include <o3tl/cppunittraitshelper.hxx> +#include <osl/interlck.h> +#include <rtl/ustring.hxx> + +namespace { + +class Base { +public: + Base(): m_count(0) {} + + Base(const Base&) = delete; + const Base& operator=(const Base&) = delete; + + void acquire() { + if (osl_atomic_increment(&m_count) == SAL_MAX_INT32) { + abort(); + } + } + + void release() { + if (osl_atomic_decrement(&m_count) == 0) { + delete this; + } + } + +protected: + virtual ~Base() {} + +private: + oslInterlockedCount m_count; +}; + +class Impl1: public Interface1, private Base { +public: + virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const & type) override + { + if (type == cppu::UnoType<css::uno::XInterface>::get()) { + css::uno::Reference< css::uno::XInterface > ref( + static_cast< css::uno::XInterface * >(this)); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface1>::get()) { + css::uno::Reference< Interface1 > ref(this); + return css::uno::Any(&ref, type); + } + return css::uno::Any(); + } + + virtual void SAL_CALL acquire() throw () override { + Base::acquire(); + } + + virtual void SAL_CALL release() throw () override { + Base::release(); + } +}; + +class Impl2: public Interface2a, public Interface3, private Base { +public: + virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const & type) override + { + if (type == cppu::UnoType<css::uno::XInterface>::get()) { + css::uno::Reference< css::uno::XInterface > ref( + static_cast< css::uno::XInterface * >( + static_cast< Interface2a * >(this))); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface2>::get()) { + css::uno::Reference< Interface2 > ref(this); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface2a>::get()) { + css::uno::Reference< Interface2a > ref(this); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface3>::get()) { + css::uno::Reference< Interface3 > ref(this); + return css::uno::Any(&ref, type); + } + return css::uno::Any(); + } + + virtual void SAL_CALL acquire() throw () override { + Base::acquire(); + } + + virtual void SAL_CALL release() throw () override { + Base::release(); + } +}; + +class Impl2b: public Interface2b, private Base { +public: + virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const & type) override + { + if (type == cppu::UnoType<css::uno::XInterface>::get()) { + css::uno::Reference< css::uno::XInterface > ref( + static_cast< css::uno::XInterface * >( + static_cast< Interface2a * >(this))); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface2>::get()) { + css::uno::Reference< Interface2 > ref(this); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface2a>::get()) { + css::uno::Reference< Interface2a > ref(this); + return css::uno::Any(&ref, type); + } + if (type == cppu::UnoType<Interface2b>::get()) { + css::uno::Reference< Interface2b > ref(this); + return css::uno::Any(&ref, type); + } + return css::uno::Any(); + } + + virtual void SAL_CALL acquire() throw () override { + Base::acquire(); + } + + virtual void SAL_CALL release() throw () override { + Base::release(); + } +}; + +class Test: public CppUnit::TestFixture { +public: + void testVoid(); + void testBoolean(); + void testByte(); + void testShort(); + void testUnsignedShort(); + void testLong(); + void testUnsignedLong(); + void testHyper(); + void testUnsignedHyper(); + void testFloat(); + void testDouble(); + void testChar(); + void testString(); + void testType(); + void testSequence(); + void testEnum(); + void testStruct(); + void testPoly(); + void testException(); + void testInterface(); + void testNull(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testVoid); + CPPUNIT_TEST(testBoolean); + CPPUNIT_TEST(testByte); + CPPUNIT_TEST(testShort); + CPPUNIT_TEST(testUnsignedShort); + CPPUNIT_TEST(testLong); + CPPUNIT_TEST(testUnsignedLong); + CPPUNIT_TEST(testHyper); + CPPUNIT_TEST(testUnsignedHyper); + CPPUNIT_TEST(testFloat); + CPPUNIT_TEST(testDouble); + CPPUNIT_TEST(testChar); + CPPUNIT_TEST(testString); + CPPUNIT_TEST(testType); + CPPUNIT_TEST(testSequence); + CPPUNIT_TEST(testEnum); + CPPUNIT_TEST(testStruct); + CPPUNIT_TEST(testPoly); + CPPUNIT_TEST(testException); + CPPUNIT_TEST(testInterface); + CPPUNIT_TEST(testNull); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testVoid() { + css::uno::Any a; + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<void>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b)); + CPPUNIT_ASSERT_MESSAGE("bool", b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b)); + CPPUNIT_ASSERT_MESSAGE("sal_Bool", b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int8", sal_Int8(2), b); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int16", sal_Int16(2), b); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt16", sal_uInt16(2), b); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int32", sal_Int32(2), b); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt32", sal_uInt32(2), b); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int64", sal_Int64(2), b); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt64", sal_uInt64(2), b); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("float", 2.0f, b); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("double", 2.0, b); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Unicode", u'2', b); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "OUString", OUString("2"), b ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "css::uno::Type", + cppu::UnoType<OUString>::get(), b); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "css::uno::Sequence<OUString>", sal_Int32(2), b.getLength()); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Enum1", Enum1_M2, b); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Struct1", sal_Int32(2), b.member); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Exception1", sal_Int32(2), b.member); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Interface1", i, b); + } +} + +void Test::testBoolean() { + css::uno::Any a(false); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<bool>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", (a >>= b)); + CPPUNIT_ASSERT_MESSAGE("bool", !b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", (a >>= b)); + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int8", sal_Int8(2), b); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int16", sal_Int16(2), b); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt16", sal_uInt16(2), b); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int32", sal_Int32(2), b); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt32", sal_uInt32(2), b); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int64", sal_Int64(2), b); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_uInt64", sal_uInt64(2), b); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("float", 2.0f, b); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("double", 2.0, b); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Unicode", u'2', b); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "OUString", OUString("2"), b ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "css::uno::Type", + cppu::UnoType<OUString>::get(), b); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "css::uno::Sequence<OUString>", + sal_Int32(2), b.getLength()); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Enum1", Enum1_M2, b); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Struct1", sal_Int32(2), b.member); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Exception1", sal_Int32(2), b.member); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Interface1", i, b); + } +} + +void Test::testByte() { + css::uno::Any a(static_cast< sal_Int8 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_Int8>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b)); + CPPUNIT_ASSERT_MESSAGE("bool", b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b)); + CPPUNIT_ASSERT_MESSAGE("sal_Bool", b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", (a >>= b)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("sal_Int8", sal_Int8(1), b); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", (a >>= b) && b == 1); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", (a >>= b) && b == 1); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", (a >>= b) && b == 1); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", (a >>= b) && b == 1); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", (a >>= b) && b == 1); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + if (std::is_same< sal_Unicode, sal_uInt16 >::value) { + CPPUNIT_ASSERT_MESSAGE("@sal_Unicode", (a >>= b) && b == 1); + } else { + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testShort() { + css::uno::Any a(static_cast< sal_Int16 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_Int16>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", (a >>= b) && b == 1); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", (a >>= b) && b == 1); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", (a >>= b) && b == 1); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", (a >>= b) && b == 1); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", (a >>= b) && b == 1); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + if (std::is_same< sal_Unicode, sal_uInt16 >::value) { + CPPUNIT_ASSERT_MESSAGE("@sal_Unicode", (a >>= b) && b == 1); + } else { + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testUnsignedShort() { + sal_uInt16 n = 1; + css::uno::Any a(&n, cppu::UnoType<cppu::UnoUnsignedShortType>::get()); + CPPUNIT_ASSERT( + bool(a.getValueType() == cppu::UnoType<cppu::UnoUnsignedShortType>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", (a >>= b) && b == 1); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", (a >>= b) && b == 1); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", (a >>= b) && b == 1); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", (a >>= b) && b == 1); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", (a >>= b) && b == 1); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + if (std::is_same< sal_Unicode, sal_uInt16 >::value) { + CPPUNIT_ASSERT_MESSAGE("@sal_Unicode", (a >>= b) && b == 1); + } else { + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testLong() { + css::uno::Any a(static_cast< sal_Int32 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_Int32>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", (a >>= b) && b == 1); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", (a >>= b) && b == 1); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testUnsignedLong() { + css::uno::Any a(static_cast< sal_uInt32 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_uInt32>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", (a >>= b) && b == 1); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", (a >>= b) && b == 1); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testHyper() { + css::uno::Any a(static_cast< sal_Int64 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_Int64>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testUnsignedHyper() { + css::uno::Any a(static_cast< sal_uInt64 >(1)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<sal_uInt64>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", (a >>= b) && b == 1); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", (a >>= b) && b == 1); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testFloat() { + css::uno::Any a(1.f); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<float>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", (a >>= b) && b == 1); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testDouble() { + css::uno::Any a(1.); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<double>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", (a >>= b) && b == 1); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testChar() { + sal_Unicode c = '1'; + css::uno::Any a(&c, cppu::UnoType<cppu::UnoCharType>::get()); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<cppu::UnoCharType>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + if (std::is_same< sal_Unicode, sal_uInt16 >::value) { + CPPUNIT_ASSERT_MESSAGE("@sal_Unicode", !(a >>= b) && b == '2'); + } else { + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", (a >>= b) && b == '1'); + } + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testString() { + css::uno::Any a(OUString("1")); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<OUString>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", (a >>= b) && b == "1" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testType() { + css::uno::Any a(cppu::UnoType<sal_Int32>::get()); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<css::uno::Type>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", (a >>= b) && b == cppu::UnoType<sal_Int32>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testSequence() { + sal_Int32 n = 1; + css::uno::Any a(css::uno::Sequence< sal_Int32 >(&n, 1)); + CPPUNIT_ASSERT( + bool(a.getValueType() + == cppu::UnoType<css::uno::Sequence<sal_Int32>>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + css::uno::Sequence< sal_Int32 > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<sal_Int32>", + (a >>= b) && b.getLength() == 1 && b[0] == 1); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testEnum() { + css::uno::Any a(Enum2_M1); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<Enum2>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Enum2 b = Enum2_M2; + CPPUNIT_ASSERT_MESSAGE("Enum2", (a >>= b) && b == Enum2_M1); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testStruct() { + css::uno::Any a(Struct2a(1, 3)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<Struct2a>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Struct2 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct2", (a >>= b) && b.member == 1); + } + { + Struct2a b(2, 2); + CPPUNIT_ASSERT_MESSAGE( + "Struct2a", (a >>= b) && b.member == 1 && b.member2 == 3); + } + { + Struct2b b(2, 2, 2); + CPPUNIT_ASSERT_MESSAGE("Struct2b", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testPoly() { + css::uno::Any a; + a <<= Poly< css::uno::Sequence< ::sal_Unicode > >(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "type name", OUString("Poly<[]char>"), a.getValueType().getTypeName() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "constructor", + css::uno::Any(Poly< css::uno::Sequence< ::sal_Unicode > >()), a); +} + +void Test::testException() { + css::uno::Any a( + Exception2a( + OUString(), css::uno::Reference< css::uno::XInterface >(), 1, + 3)); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<Exception2a>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + Exception2 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception2", (a >>= b) && b.member == 1); + } + { + Exception2a b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2, + 2); + CPPUNIT_ASSERT_MESSAGE( + "Exception2a", (a >>= b) && b.member == 1 && b.member2 == 3); + } + { + Exception2b b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2, + 2); + CPPUNIT_ASSERT_MESSAGE("Exception2b", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } +} + +void Test::testInterface() { + css::uno::Reference< Interface2a > i2(new Impl2); + css::uno::Any a(i2); + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<Interface2a>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > i(new Impl1); + css::uno::Reference< Interface1 > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface1", !(a >>= b) && b == i); + } + { + css::uno::Reference< Interface2 > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE("Interface2", (a >>= b) && b == i2); + } + { + css::uno::Reference< Interface2a > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE("Interface2a", (a >>= b) && b == i2); + } + { + css::uno::Reference< Interface2b > i(new Impl2b); + css::uno::Reference< Interface2b > b(i); + CPPUNIT_ASSERT_MESSAGE("Interface2b", !(a >>= b) && b == i); + } + { + css::uno::Reference< Interface3 > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE("Interface3", (a >>= b) && b == i2); + } +} + +void Test::testNull() { + css::uno::Any a { css::uno::Reference< Interface2a >() }; + CPPUNIT_ASSERT(bool(a.getValueType() == cppu::UnoType<Interface2a>::get())); + { + bool b = true; + CPPUNIT_ASSERT_MESSAGE("bool", !(a >>= b) && b); + } + { + sal_Bool b = true; + CPPUNIT_ASSERT_MESSAGE("sal_Bool", !(a >>= b) && b); + } + { + sal_Int8 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int8", !(a >>= b) && b == 2); + } + { + sal_Int16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int16", !(a >>= b) && b == 2); + } + { + sal_uInt16 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt16", !(a >>= b) && b == 2); + } + { + sal_Int32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int32", !(a >>= b) && b == 2); + } + { + sal_uInt32 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt32", !(a >>= b) && b == 2); + } + { + sal_Int64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_Int64", !(a >>= b) && b == 2); + } + { + sal_uInt64 b = 2; + CPPUNIT_ASSERT_MESSAGE("sal_uInt64", !(a >>= b) && b == 2); + } + { + float b = 2; + CPPUNIT_ASSERT_MESSAGE("float", !(a >>= b) && b == 2); + } + { + double b = 2; + CPPUNIT_ASSERT_MESSAGE("double", !(a >>= b) && b == 2); + } + { + sal_Unicode b = '2'; + CPPUNIT_ASSERT_MESSAGE("sal_Unicode", !(a >>= b) && b == '2'); + } + { + OUString b("2"); + CPPUNIT_ASSERT_MESSAGE( "OUString", !(a >>= b) && b == "2" ); + } + { + css::uno::Type b(cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Type", + !(a >>= b) && b == cppu::UnoType<OUString>::get()); + } + { + css::uno::Sequence< OUString > b(2); + CPPUNIT_ASSERT_MESSAGE( + "css::uno::Sequence<OUString>", + !(a >>= b) && b.getLength() == 2); + } + { + Enum1 b = Enum1_M2; + CPPUNIT_ASSERT_MESSAGE("Enum1", !(a >>= b) && b == Enum1_M2); + } + { + Struct1 b(2); + CPPUNIT_ASSERT_MESSAGE("Struct1", !(a >>= b) && b.member == 2); + } + { + Exception1 b( + OUString(), css::uno::Reference< css::uno::XInterface >(), 2); + CPPUNIT_ASSERT_MESSAGE("Exception1", !(a >>= b) && b.member == 2); + } + { + css::uno::Reference< Interface1 > b(new Impl1); + CPPUNIT_ASSERT_MESSAGE( + "Interface1", (a >>= b) && !b.is()); + } + { + css::uno::Reference< Interface2 > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE( + "Interface2", (a >>= b) && !b.is()); + } + { + css::uno::Reference< Interface2a > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE("Interface2a", (a >>= b) && !b.is()); + } + { + css::uno::Reference< Interface2b > b(new Impl2b); + CPPUNIT_ASSERT_MESSAGE( + "Interface2b", (a >>= b) && !b.is()); + } + { + css::uno::Reference< Interface3 > b(new Impl2); + CPPUNIT_ASSERT_MESSAGE( + "Interface3", (a >>= b) && !b.is()); + } +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/test_recursion.cxx b/cppu/qa/test_recursion.cxx new file mode 100644 index 000000000..40aee4c30 --- /dev/null +++ b/cppu/qa/test_recursion.cxx @@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <cppunit/TestSuite.h> +#include <cppunit/TestFixture.h> +#include <cppunit/TestCase.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <Rec.hpp> + +namespace +{ + +class Test: public CppUnit::TestFixture { + +public: + void testRecursion(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testRecursion); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testRecursion() { + CPPUNIT_ASSERT_EQUAL(static_cast< sal_Int32 >(0), Rec().x.getLength()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/test_reference.cxx b/cppu/qa/test_reference.cxx new file mode 100644 index 000000000..79ff90ae4 --- /dev/null +++ b/cppu/qa/test_reference.cxx @@ -0,0 +1,203 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <cppunit/TestFixture.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <Interface1.hpp> + +namespace +{ + +using ::com::sun::star::uno::Type; +using ::com::sun::star::uno::Any; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::RuntimeException; +using ::com::sun::star::uno::UNO_SET_THROW; + +class Foo: public Interface1 +{ +public: + Foo() + :m_refCount(0) + { + } + + Foo(const Foo&) = delete; + const Foo& operator=(const Foo&) = delete; + + virtual Any SAL_CALL queryInterface(const Type & _type) override + { + if (_type == cppu::UnoType<XInterface>::get()) + { + return css::uno::makeAny<css::uno::Reference<css::uno::XInterface>>( + this); + } + if (_type == cppu::UnoType<Interface1>::get()) + { + return css::uno::makeAny<css::uno::Reference<Interface1>>(this); + } + + return Any(); + } + + virtual void SAL_CALL acquire() throw () override + { + osl_atomic_increment( &m_refCount ); + } + + virtual void SAL_CALL release() throw () override + { + if ( 0 == osl_atomic_decrement( &m_refCount ) ) + delete this; + } + +protected: + virtual ~Foo() + { + } + +private: + oslInterlockedCount m_refCount; +}; + +// Check that the up-casting Reference conversion constructor catches the +// intended cases: + +struct Base1: public css::uno::XInterface { + virtual ~Base1() = delete; + static ::css::uno::Type const & static_type(void * = nullptr) // loplugin:refcounting + { return ::cppu::UnoType<Base1>::get(); } +}; +struct Base2: public Base1 { + virtual ~Base2() override = delete; +}; +struct Base3: public Base1 { virtual ~Base3() override = delete; }; +struct Derived: public Base2, public Base3 { + virtual ~Derived() override = delete; +}; + +// The special case using the conversion operator instead: +css::uno::Reference< css::uno::XInterface > testUpcast1( + css::uno::Reference< Derived > const & ref) +{ + Base1::static_type(); // prevent loplugin:unreffun firing + return ref; +} + +// The normal up-cast case: +css::uno::Reference< Base1 > testUpcast2( + css::uno::Reference< Base2 > const & ref) +{ return ref; } + +// Commenting this in should cause a compiler error due to an ambiguous up-cast: +/* +css::uno::Reference< Base1 > testFailingUpcast3( + css::uno::Reference< Derived > const & ref) +{ return ref; } +*/ + +// Commenting this in should cause a compiler error due to a down-cast: +/* +css::uno::Reference< Base2 > testFailingUpcast4( + css::uno::Reference< Base1 > const & ref) +{ return ref; } +*/ + +// Commenting this in should cause a compiler error due to a down-cast: +/* +css::uno::Reference< Base1 > testFailingUpcast5( + css::uno::Reference< css::uno::XInterface > const & ref) +{ return ref; } +*/ + +class Test: public ::CppUnit::TestFixture +{ + +public: + void testUnoSetThrow(); + void testUpcastCompilation(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testUnoSetThrow); + CPPUNIT_TEST(testUpcastCompilation); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testUnoSetThrow() +{ + Reference< Interface1 > xNull; + Reference< Interface1 > xFoo( new Foo ); + + // ctor taking Reference< interface_type > + bool bCaughtException = false; + try { Reference< Interface1 > x( xNull, UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( true, bCaughtException ); + + bCaughtException = false; + try { Reference< Interface1 > x( xFoo, UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( false, bCaughtException ); + + // ctor taking interface_type* + bCaughtException = false; + try { Reference< Interface1 > x( xNull.get(), UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( true, bCaughtException ); + + bCaughtException = false; + try { Reference< Interface1 > x( xFoo.get(), UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( false, bCaughtException ); + + Reference< Interface1 > x; + // "set" taking Reference< interface_type > + bCaughtException = false; + try { x.set( xNull, UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( true, bCaughtException ); + + bCaughtException = false; + try { x.set( xFoo, UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( false, bCaughtException ); + + // "set" taking interface_type* + bCaughtException = false; + try { x.set( xNull.get(), UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( true, bCaughtException ); + + bCaughtException = false; + try { x.set( xFoo.get(), UNO_SET_THROW ); } catch( const RuntimeException& ) { bCaughtException = true; } + CPPUNIT_ASSERT_EQUAL( false, bCaughtException ); +} + +// Include a dummy test calling those functions, to avoid warnings about those +// functions being unused: +void Test::testUpcastCompilation() +{ + testUpcast1(css::uno::Reference< Derived >()); + testUpcast2(css::uno::Reference< Base2 >()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} // namespace + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/test_unotype.cxx b/cppu/qa/test_unotype.cxx new file mode 100644 index 000000000..829676a14 --- /dev/null +++ b/cppu/qa/test_unotype.cxx @@ -0,0 +1,558 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <cppunit/TestFixture.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <typeinfo> + +#include <com/sun/star/beans/Optional.hpp> +#include <com/sun/star/beans/PropertyChangeEvent.hpp> +#include <com/sun/star/lang/EventObject.hpp> +#include <com/sun/star/uno/Exception.hpp> +#include <com/sun/star/uno/RuntimeException.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/uno/Type.hxx> +#include <com/sun/star/uno/TypeClass.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/uno/XInterface.hpp> +#include <cppu/unotype.hxx> +#include <rtl/ustring.hxx> + +namespace com::sun::star::uno { + class Any; +} + +namespace com::sun::star::uno { template <class interface_type> class Reference; } + +namespace { + +struct DerivedStruct1: css::lang::EventObject {}; + +struct DerivedStruct2: css::beans::PropertyChangeEvent {}; + +struct DerivedException1: css::uno::Exception {}; + +struct DerivedException2: css::uno::RuntimeException {}; + +struct DerivedInterface1: css::uno::XInterface { +private: + ~DerivedInterface1() {} + // avoid warnings about virtual members and non-virtual dtor + +public: + static void dummy(DerivedInterface1 * p) + { p->DerivedInterface1::~DerivedInterface1(); } + // ...and avoid warnings about unused ~DerivedInterface1 (see below) +}; + +struct DerivedInterface2: css::uno::XComponentContext { +private: + ~DerivedInterface2() {} + // avoid warnings about virtual members and non-virtual dtor + +public: + static void dummy(DerivedInterface2 * p) + { p->DerivedInterface2::~DerivedInterface2(); } + // ...and avoid warnings about unused ~DerivedInterface2 (see below) +}; + +class Test: public CppUnit::TestFixture { +public: + void testUnoType(); + + void testGetTypeFavourUnsigned(); + + void testGetTypeFavourChar(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testUnoType); + CPPUNIT_TEST(testGetTypeFavourUnsigned); + CPPUNIT_TEST(testGetTypeFavourChar); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testUnoType() { + // Avoid warnings about unused ~DerivedInterface1/2 (see above): + if ((false)) { + DerivedInterface1::dummy(nullptr); + DerivedInterface2::dummy(nullptr); + } + + css::uno::Type t; + t = cppu::UnoType<cppu::UnoVoidType>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_VOID, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("void"), t.getTypeName()); + CPPUNIT_ASSERT(bool(cppu::UnoType<void>::get() == t)); + t = cppu::UnoType<bool>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_BOOLEAN, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("boolean"), t.getTypeName()); + CPPUNIT_ASSERT(bool(cppu::UnoType<sal_Bool>::get() == t)); + t = cppu::UnoType<sal_Int8>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_BYTE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("byte"), t.getTypeName()); + t = cppu::UnoType<sal_Int16>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SHORT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("short"), t.getTypeName()); + t = cppu::UnoType<cppu::UnoUnsignedShortType>::get(); + CPPUNIT_ASSERT_EQUAL( + css::uno::TypeClass_UNSIGNED_SHORT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("unsigned short"), t.getTypeName()); + t = cppu::UnoType<sal_Int32>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_LONG, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("long"), t.getTypeName()); + t = cppu::UnoType<sal_uInt32>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_UNSIGNED_LONG, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("unsigned long"), t.getTypeName()); + t = cppu::UnoType<sal_Int64>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_HYPER, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("hyper"), t.getTypeName()); + t = cppu::UnoType<sal_uInt64>::get(); + CPPUNIT_ASSERT_EQUAL( + css::uno::TypeClass_UNSIGNED_HYPER, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("unsigned hyper"), t.getTypeName()); + t = cppu::UnoType<float>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_FLOAT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("float"), t.getTypeName()); + t = cppu::UnoType<double>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_DOUBLE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("double"), t.getTypeName()); + t = cppu::UnoType<cppu::UnoCharType>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_CHAR, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("char"), t.getTypeName()); + t = cppu::UnoType<OUString>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_STRING, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("string"), t.getTypeName()); + t = cppu::UnoType<css::uno::Type>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_TYPE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("type"), t.getTypeName()); + t = cppu::UnoType<css::uno::Any>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_ANY, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("any"), t.getTypeName()); + t = cppu::UnoType<cppu::UnoSequenceType<sal_Int8>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[]byte"), t.getTypeName()); + CPPUNIT_ASSERT(bool(cppu::UnoType<css::uno::Sequence<sal_Int8>>::get() == t)); + t = cppu::UnoType<cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[]unsigned short"), t.getTypeName()); + t = cppu::UnoType<cppu::UnoSequenceType<cppu::UnoCharType>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[]char"), t.getTypeName()); + t = cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoSequenceType<sal_Int8>>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[][]byte"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL( + cppu::UnoType<css::uno::Sequence<css::uno::Sequence<sal_Int8>>>::get(), + t); + t = cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[][]unsigned short"), t.getTypeName()); + t = cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoSequenceType<cppu::UnoCharType>>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_SEQUENCE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL(OUString("[][]char"), t.getTypeName()); + t = cppu::UnoType<css::uno::TypeClass>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_ENUM, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.uno.TypeClass"), t.getTypeName()); + t = cppu::UnoType<css::lang::EventObject>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_STRUCT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.lang.EventObject"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedStruct1>::get(), t); + t = cppu::UnoType<css::beans::PropertyChangeEvent>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_STRUCT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.beans.PropertyChangeEvent"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedStruct2>::get(), t); + t = cppu::UnoType<css::beans::Optional<sal_Int8>>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_STRUCT, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.beans.Optional<byte>"), t.getTypeName()); + t = cppu::UnoType<css::uno::Exception>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_EXCEPTION, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.uno.Exception"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedException1>::get(), t); + t = cppu::UnoType<css::uno::RuntimeException>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_EXCEPTION, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.uno.RuntimeException"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedException2>::get(), t); + t = cppu::UnoType<css::uno::XInterface>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_INTERFACE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.uno.XInterface"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL( + cppu::UnoType<css::uno::Reference<css::uno::XInterface>>::get(), t); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedInterface1>::get(), t); + CPPUNIT_ASSERT_EQUAL( + cppu::UnoType<css::uno::Reference<DerivedInterface1>>::get(), t); + t = cppu::UnoType<css::uno::XComponentContext>::get(); + CPPUNIT_ASSERT_EQUAL(css::uno::TypeClass_INTERFACE, t.getTypeClass()); + CPPUNIT_ASSERT_EQUAL( + OUString("com.sun.star.uno.XComponentContext"), t.getTypeName()); + CPPUNIT_ASSERT_EQUAL( + cppu::UnoType<css::uno::Reference<css::uno::XComponentContext>>::get(), + t); + CPPUNIT_ASSERT_EQUAL(cppu::UnoType<DerivedInterface2>::get(), t); + CPPUNIT_ASSERT_EQUAL( + cppu::UnoType<css::uno::Reference<DerivedInterface2>>::get(), t); +} + +void Test::testGetTypeFavourUnsigned() { + CPPUNIT_ASSERT(typeid(sal_Unicode) != typeid(sal_uInt16)); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<cppu::UnoVoidType *>(nullptr)), + cppu::UnoType<cppu::UnoVoidType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<bool *>(nullptr)), + cppu::UnoType<bool>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Bool *>(nullptr)), + cppu::UnoType<bool>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Int8 *>(nullptr)), + cppu::UnoType<sal_Int8>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Int16 *>(nullptr)), + cppu::UnoType<sal_Int16>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<cppu::UnoUnsignedShortType *>(nullptr)), + cppu::UnoType<cppu::UnoUnsignedShortType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_uInt16 *>(nullptr)), + cppu::UnoType<cppu::UnoUnsignedShortType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Int32 *>(nullptr)), + cppu::UnoType<sal_Int32>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_uInt32 *>(nullptr)), + cppu::UnoType<sal_uInt32>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Int64 *>(nullptr)), + cppu::UnoType<sal_Int64>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_uInt64 *>(nullptr)), + cppu::UnoType<sal_uInt64>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<float *>(nullptr)), + cppu::UnoType<float>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<double *>(nullptr)), + cppu::UnoType<double>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<cppu::UnoCharType *>(nullptr)), + cppu::UnoType<cppu::UnoCharType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<sal_Unicode *>(nullptr)), + cppu::UnoType<cppu::UnoCharType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<OUString *>(nullptr)), + cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<css::uno::Type *>(nullptr)), + cppu::UnoType<css::uno::Type>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<css::uno::Any *>(nullptr)), + cppu::UnoType<css::uno::Any>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Sequence<sal_uInt16> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast< + cppu::UnoSequenceType< + cppu::UnoSequenceType< + cppu::UnoUnsignedShortType>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast< + css::uno::Sequence<css::uno::Sequence<sal_uInt16>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Sequence<sal_Unicode> *>(nullptr)), + cppu::UnoType<cppu::UnoSequenceType<cppu::UnoCharType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast< + css::uno::Sequence< + css::uno::Sequence<sal_Unicode>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoCharType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::TypeClass *>(nullptr)), + cppu::UnoType<css::uno::TypeClass>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::lang::EventObject *>(nullptr)), + cppu::UnoType<css::lang::EventObject>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedStruct1 *>(nullptr)), + cppu::UnoType<css::lang::EventObject>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::beans::PropertyChangeEvent *>(nullptr)), + cppu::UnoType<css::beans::PropertyChangeEvent>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedStruct2 *>(nullptr)), + cppu::UnoType<css::beans::PropertyChangeEvent>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::beans::Optional<sal_Int8> *>(nullptr)), + cppu::UnoType<css::beans::Optional<sal_Int8>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Exception *>(nullptr)), + cppu::UnoType<css::uno::Exception>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedException1 *>(nullptr)), + cppu::UnoType<css::uno::Exception>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::RuntimeException *>(nullptr)), + cppu::UnoType<css::uno::RuntimeException>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedException2 *>(nullptr)), + cppu::UnoType<css::uno::RuntimeException>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::XInterface *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Reference<css::uno::XInterface> *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedInterface1 *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Reference<DerivedInterface1> *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::XComponentContext *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast< + css::uno::Reference<css::uno::XComponentContext> *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned(static_cast<DerivedInterface2 *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourUnsigned( + static_cast<css::uno::Reference<DerivedInterface2> *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); +} + +void Test::testGetTypeFavourChar() { + CPPUNIT_ASSERT(typeid(sal_Unicode) != typeid(sal_uInt16)); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<cppu::UnoVoidType *>(nullptr)), + cppu::UnoType<cppu::UnoVoidType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<bool *>(nullptr)), + cppu::UnoType<bool>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Bool *>(nullptr)), + cppu::UnoType<bool>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Int8 *>(nullptr)), + cppu::UnoType<sal_Int8>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Int16 *>(nullptr)), + cppu::UnoType<sal_Int16>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<cppu::UnoUnsignedShortType *>(nullptr)), + cppu::UnoType<cppu::UnoUnsignedShortType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_uInt16 *>(nullptr)), + cppu::UnoType<cppu::UnoUnsignedShortType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Int32 *>(nullptr)), + cppu::UnoType<sal_Int32>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_uInt32 *>(nullptr)), + cppu::UnoType<sal_uInt32>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Int64 *>(nullptr)), + cppu::UnoType<sal_Int64>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_uInt64 *>(nullptr)), + cppu::UnoType<sal_uInt64>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<float *>(nullptr)), + cppu::UnoType<float>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<double *>(nullptr)), + cppu::UnoType<double>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<cppu::UnoCharType *>(nullptr)), + cppu::UnoType<cppu::UnoCharType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<sal_Unicode *>(nullptr)), + cppu::UnoType<cppu::UnoCharType>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<OUString *>(nullptr)), + cppu::UnoType<OUString>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::uno::Type *>(nullptr)), + cppu::UnoType<css::uno::Type>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::uno::Any *>(nullptr)), + cppu::UnoType<css::uno::Any>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::Sequence<sal_uInt16> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast< + cppu::UnoSequenceType< + cppu::UnoSequenceType< + cppu::UnoUnsignedShortType>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast< + css::uno::Sequence<css::uno::Sequence<sal_uInt16>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoUnsignedShortType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::Sequence<sal_Unicode> *>(nullptr)), + cppu::UnoType<cppu::UnoSequenceType<cppu::UnoCharType>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast< + css::uno::Sequence< + css::uno::Sequence<sal_Unicode>> *>(nullptr)), + cppu::UnoType< + cppu::UnoSequenceType< + cppu::UnoSequenceType<cppu::UnoCharType>>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::uno::TypeClass *>(nullptr)), + cppu::UnoType<css::uno::TypeClass>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::lang::EventObject *>(nullptr)), + cppu::UnoType<css::lang::EventObject>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedStruct1 *>(nullptr)), + cppu::UnoType<css::lang::EventObject>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::beans::PropertyChangeEvent *>(nullptr)), + cppu::UnoType<css::beans::PropertyChangeEvent>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedStruct2 *>(nullptr)), + cppu::UnoType<css::beans::PropertyChangeEvent>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::beans::Optional<sal_Int8> *>(nullptr)), + cppu::UnoType<css::beans::Optional<sal_Int8>>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::uno::Exception *>(nullptr)), + cppu::UnoType<css::uno::Exception>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedException1 *>(nullptr)), + cppu::UnoType<css::uno::Exception>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::RuntimeException *>(nullptr)), + cppu::UnoType<css::uno::RuntimeException>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedException2 *>(nullptr)), + cppu::UnoType<css::uno::RuntimeException>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<css::uno::XInterface *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::Reference<css::uno::XInterface> *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedInterface1 *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::Reference<DerivedInterface1> *>(nullptr)), + cppu::UnoType<css::uno::XInterface>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::XComponentContext *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast< + css::uno::Reference<css::uno::XComponentContext> *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar(static_cast<DerivedInterface2 *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); + CPPUNIT_ASSERT_EQUAL( + cppu::getTypeFavourChar( + static_cast<css::uno::Reference<DerivedInterface2> *>(nullptr)), + cppu::UnoType<css::uno::XComponentContext>::get()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppu/qa/typelib.cxx b/cppu/qa/typelib.cxx new file mode 100644 index 000000000..227e5731c --- /dev/null +++ b/cppu/qa/typelib.cxx @@ -0,0 +1,293 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> + +#include <com/sun/star/io/XActiveDataSink.hpp> +#include <com/sun/star/io/XTextInputStream.hpp> +#include <com/sun/star/lang/EventObject.hpp> +#include <com/sun/star/script/FinishReason.hpp> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Type.hxx> +#include <com/sun/star/uno/XInterface.hpp> +#include <cppu/unotype.hxx> +#include <rtl/ustring.hxx> +#include <sal/types.h> +#include <typelib/typedescription.h> +#include <typelib/typedescription.hxx> + +// Test that typelib_typedescription_register as called from typelib_typedescription_complete +// returns a correct typelib_TypeDescription and keeps pointers from the original +// typelib_TypeDescription intact (see tdf#115399 "Data race in typelib_typedescription_register"). +// This code uses sufficiently "obscure" types in typelib_static_*_type_init to make it unlikely +// that they are already instantiated and registered with the type description manager, which might +// cause inconsistencies. + +namespace +{ +class Test : public CppUnit::TestFixture +{ +public: + void testEnum() + { + typelib_TypeDescriptionReference* ref = nullptr; + typelib_static_enum_type_init(&ref, "com.sun.star.script.MemberType", 0); + CPPUNIT_ASSERT(ref != nullptr); + typelib_TypeDescription* td = ref->pType; + CPPUNIT_ASSERT(td != nullptr); + typelib_typedescription_acquire(td); + CPPUNIT_ASSERT(!td->bComplete); + auto t = reinterpret_cast<typelib_EnumTypeDescription*>(td); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nDefaultEnumValue); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nEnumValues); + CPPUNIT_ASSERT(t->ppEnumNames == nullptr); + CPPUNIT_ASSERT(t->pEnumValues == nullptr); + CPPUNIT_ASSERT(typelib_typedescription_complete(&td)); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT(td->bComplete); + t = reinterpret_cast<typelib_EnumTypeDescription*>(td); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nDefaultEnumValue); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), t->nEnumValues); + CPPUNIT_ASSERT(t->ppEnumNames != nullptr); + CPPUNIT_ASSERT_EQUAL(OUString("METHOD"), OUString::unacquired(&t->ppEnumNames[0])); + CPPUNIT_ASSERT_EQUAL(OUString("PROPERTY"), OUString::unacquired(&t->ppEnumNames[1])); + CPPUNIT_ASSERT_EQUAL(OUString("UNKNOWN"), OUString::unacquired(&t->ppEnumNames[2])); + CPPUNIT_ASSERT(t->pEnumValues != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->pEnumValues[0]); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), t->pEnumValues[1]); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->pEnumValues[2]); + typelib_typedescription_release(td); + typelib_typedescriptionreference_release(ref); + } + + void testStruct() + { + auto const t0 = cppu::UnoType<css::lang::EventObject>::get(); + auto const t1 = cppu::UnoType<css::script::FinishReason>::get(); + auto const t2 = cppu::UnoType<OUString>::get(); + auto const t3 = cppu::UnoType<css::uno::Any>::get(); + typelib_TypeDescriptionReference* ref = nullptr; + typelib_TypeDescriptionReference* members[3] + = { t1.getTypeLibType(), t2.getTypeLibType(), t3.getTypeLibType() }; + typelib_static_struct_type_init(&ref, "com.sun.star.script.FinishEngineEvent", + t0.getTypeLibType(), 3, members, nullptr); + CPPUNIT_ASSERT(ref != nullptr); + typelib_TypeDescription* td = ref->pType; + CPPUNIT_ASSERT(td != nullptr); + typelib_typedescription_acquire(td); + CPPUNIT_ASSERT(!td->bComplete); + auto t = reinterpret_cast<typelib_StructTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->aBase.pBaseTypeDescription->aBase).equals(t0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), t->aBase.nMembers); + auto const offsets = t->aBase.pMemberOffsets; + CPPUNIT_ASSERT(offsets != nullptr); + auto const typerefs = t->aBase.ppTypeRefs; + CPPUNIT_ASSERT(typerefs != nullptr); + CPPUNIT_ASSERT_EQUAL(t1, css::uno::Type(typerefs[0])); + CPPUNIT_ASSERT_EQUAL(t2, css::uno::Type(typerefs[1])); + CPPUNIT_ASSERT_EQUAL(t3, css::uno::Type(typerefs[2])); + CPPUNIT_ASSERT(t->aBase.ppMemberNames == nullptr); + CPPUNIT_ASSERT(t->pParameterizedTypes == nullptr); + CPPUNIT_ASSERT(typelib_typedescription_complete(&td)); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT(td->bComplete); + t = reinterpret_cast<typelib_StructTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->aBase.pBaseTypeDescription->aBase).equals(t0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), t->aBase.nMembers); + CPPUNIT_ASSERT(t->aBase.pMemberOffsets != nullptr); + CPPUNIT_ASSERT(t->aBase.ppTypeRefs != nullptr); + CPPUNIT_ASSERT_EQUAL(t1, css::uno::Type(t->aBase.ppTypeRefs[0])); + CPPUNIT_ASSERT_EQUAL(t2, css::uno::Type(t->aBase.ppTypeRefs[1])); + CPPUNIT_ASSERT_EQUAL(t3, css::uno::Type(t->aBase.ppTypeRefs[2])); + CPPUNIT_ASSERT(t->aBase.ppMemberNames != nullptr); + CPPUNIT_ASSERT_EQUAL(OUString("Finish"), OUString::unacquired(&t->aBase.ppMemberNames[0])); + CPPUNIT_ASSERT_EQUAL(OUString("ErrorMessage"), + OUString::unacquired(&t->aBase.ppMemberNames[1])); + CPPUNIT_ASSERT_EQUAL(OUString("Return"), OUString::unacquired(&t->aBase.ppMemberNames[2])); + CPPUNIT_ASSERT(t->pParameterizedTypes == nullptr); + // `offsets` and `typerefs` must still be valid: + CPPUNIT_ASSERT_EQUAL(t->aBase.pMemberOffsets[0], offsets[0]); + CPPUNIT_ASSERT_EQUAL(t->aBase.pMemberOffsets[1], offsets[1]); + CPPUNIT_ASSERT_EQUAL(t->aBase.pMemberOffsets[2], offsets[2]); + CPPUNIT_ASSERT_EQUAL(css::uno::Type(t->aBase.ppTypeRefs[0]), css::uno::Type(typerefs[0])); + CPPUNIT_ASSERT_EQUAL(css::uno::Type(t->aBase.ppTypeRefs[1]), css::uno::Type(typerefs[1])); + CPPUNIT_ASSERT_EQUAL(css::uno::Type(t->aBase.ppTypeRefs[2]), css::uno::Type(typerefs[2])); + typelib_typedescription_release(td); + typelib_typedescriptionreference_release(ref); + } + + void testPolyStruct() + { + auto const t1 = cppu::UnoType<bool>::get(); + auto const t2 = cppu::UnoType<sal_Int32>::get(); + typelib_TypeDescriptionReference* ref = nullptr; + typelib_TypeDescriptionReference* members[2] = { t1.getTypeLibType(), t2.getTypeLibType() }; + sal_Bool const param[2] = { false, true }; + typelib_static_struct_type_init(&ref, "com.sun.star.beans.Optional<long>", nullptr, 2, + members, param); + CPPUNIT_ASSERT(ref != nullptr); + typelib_TypeDescription* td = ref->pType; + CPPUNIT_ASSERT(td != nullptr); + typelib_typedescription_acquire(td); + CPPUNIT_ASSERT(!td->bComplete); + auto t = reinterpret_cast<typelib_StructTypeDescription*>(td); + CPPUNIT_ASSERT(t->aBase.pBaseTypeDescription == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->aBase.nMembers); + auto const offsets = t->aBase.pMemberOffsets; + CPPUNIT_ASSERT(offsets != nullptr); + auto const typerefs = t->aBase.ppTypeRefs; + CPPUNIT_ASSERT(typerefs != nullptr); + CPPUNIT_ASSERT_EQUAL(t1, css::uno::Type(typerefs[0])); + CPPUNIT_ASSERT_EQUAL(t2, css::uno::Type(typerefs[1])); + CPPUNIT_ASSERT(t->aBase.ppMemberNames == nullptr); + CPPUNIT_ASSERT(t->pParameterizedTypes != nullptr); + CPPUNIT_ASSERT_EQUAL(param[0], t->pParameterizedTypes[0]); + CPPUNIT_ASSERT_EQUAL(param[1], t->pParameterizedTypes[1]); + CPPUNIT_ASSERT(typelib_typedescription_complete(&td)); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT(td->bComplete); + t = reinterpret_cast<typelib_StructTypeDescription*>(td); + CPPUNIT_ASSERT(t->aBase.pBaseTypeDescription == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->aBase.nMembers); + CPPUNIT_ASSERT(t->aBase.pMemberOffsets != nullptr); + CPPUNIT_ASSERT(t->aBase.ppTypeRefs != nullptr); + CPPUNIT_ASSERT_EQUAL(t1, css::uno::Type(t->aBase.ppTypeRefs[0])); + CPPUNIT_ASSERT_EQUAL(t2, css::uno::Type(t->aBase.ppTypeRefs[1])); + CPPUNIT_ASSERT(t->aBase.ppMemberNames != nullptr); + CPPUNIT_ASSERT_EQUAL(OUString("IsPresent"), + OUString::unacquired(&t->aBase.ppMemberNames[0])); + CPPUNIT_ASSERT_EQUAL(OUString("Value"), OUString::unacquired(&t->aBase.ppMemberNames[1])); + CPPUNIT_ASSERT(t->pParameterizedTypes != nullptr); + CPPUNIT_ASSERT_EQUAL(param[0], t->pParameterizedTypes[0]); + CPPUNIT_ASSERT_EQUAL(param[1], t->pParameterizedTypes[1]); + // `offsets` and `typerefs` must still be valid: + CPPUNIT_ASSERT_EQUAL(t->aBase.pMemberOffsets[0], offsets[0]); + CPPUNIT_ASSERT_EQUAL(t->aBase.pMemberOffsets[1], offsets[1]); + CPPUNIT_ASSERT_EQUAL(css::uno::Type(t->aBase.ppTypeRefs[0]), css::uno::Type(typerefs[0])); + CPPUNIT_ASSERT_EQUAL(css::uno::Type(t->aBase.ppTypeRefs[1]), css::uno::Type(typerefs[1])); + typelib_typedescription_release(td); + typelib_typedescriptionreference_release(ref); + } + + void testInterface() + { + auto const t0 = cppu::UnoType<css::uno::XInterface>::get(); + typelib_TypeDescriptionReference* ref = nullptr; + typelib_TypeDescriptionReference* bases[1] = { t0.getTypeLibType() }; + typelib_static_mi_interface_type_init(&ref, "com.sun.star.script.XTypeConverter", 1, bases); + CPPUNIT_ASSERT(ref != nullptr); + typelib_TypeDescription* td = ref->pType; + CPPUNIT_ASSERT(td != nullptr); + typelib_typedescription_acquire(td); + CPPUNIT_ASSERT(!td->bComplete); + auto t = reinterpret_cast<typelib_InterfaceTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->pBaseTypeDescription->aBase).equals(t0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nMembers); + CPPUNIT_ASSERT(t->ppMembers == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nAllMembers); + CPPUNIT_ASSERT(t->ppAllMembers == nullptr); + CPPUNIT_ASSERT(t->pMapMemberIndexToFunctionIndex == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nMapFunctionIndexToMemberIndex); + CPPUNIT_ASSERT(t->pMapFunctionIndexToMemberIndex == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), t->nBaseTypes); + auto const basetypes = t->ppBaseTypes; + CPPUNIT_ASSERT(basetypes != nullptr); + CPPUNIT_ASSERT(css::uno::TypeDescription(&basetypes[0]->aBase).equals(t0)); + CPPUNIT_ASSERT(typelib_typedescription_complete(&td)); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT(td->bComplete); + t = reinterpret_cast<typelib_InterfaceTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->pBaseTypeDescription->aBase).equals(t0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->nMembers); + CPPUNIT_ASSERT(t->ppMembers != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), t->nAllMembers); + CPPUNIT_ASSERT(t->ppAllMembers != nullptr); + CPPUNIT_ASSERT(t->pMapMemberIndexToFunctionIndex != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), t->nMapFunctionIndexToMemberIndex); + CPPUNIT_ASSERT(t->pMapFunctionIndexToMemberIndex != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), t->nBaseTypes); + CPPUNIT_ASSERT(t->ppBaseTypes != nullptr); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->ppBaseTypes[0]->aBase).equals(t0)); + // `basetypes` must still be valid: + CPPUNIT_ASSERT( + css::uno::TypeDescription(&basetypes[0]->aBase).equals(&t->ppBaseTypes[0]->aBase)); + typelib_typedescription_release(td); + typelib_typedescriptionreference_release(ref); + } + + void testMultiInterface() + { + auto const t1 = cppu::UnoType<css::io::XTextInputStream>::get(); + auto const t2 = cppu::UnoType<css::io::XActiveDataSink>::get(); + typelib_TypeDescriptionReference* ref = nullptr; + typelib_TypeDescriptionReference* bases[2] = { t1.getTypeLibType(), t2.getTypeLibType() }; + typelib_static_mi_interface_type_init(&ref, "com.sun.star.io.XTextInputStream2", 2, bases); + CPPUNIT_ASSERT(ref != nullptr); + typelib_TypeDescription* td = ref->pType; + CPPUNIT_ASSERT(td != nullptr); + typelib_typedescription_acquire(td); + CPPUNIT_ASSERT(!td->bComplete); + auto t = reinterpret_cast<typelib_InterfaceTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->pBaseTypeDescription->aBase).equals(t1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nMembers); + CPPUNIT_ASSERT(t->ppMembers == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nAllMembers); + CPPUNIT_ASSERT(t->ppAllMembers == nullptr); + CPPUNIT_ASSERT(t->pMapMemberIndexToFunctionIndex == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nMapFunctionIndexToMemberIndex); + CPPUNIT_ASSERT(t->pMapFunctionIndexToMemberIndex == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->nBaseTypes); + auto const basetypes = t->ppBaseTypes; + CPPUNIT_ASSERT(basetypes != nullptr); + CPPUNIT_ASSERT(css::uno::TypeDescription(&basetypes[0]->aBase).equals(t1)); + CPPUNIT_ASSERT(css::uno::TypeDescription(&basetypes[1]->aBase).equals(t2)); + CPPUNIT_ASSERT(typelib_typedescription_complete(&td)); + CPPUNIT_ASSERT(td != nullptr); + CPPUNIT_ASSERT(td->bComplete); + t = reinterpret_cast<typelib_InterfaceTypeDescription*>(td); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->pBaseTypeDescription->aBase).equals(t1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), t->nMembers); + CPPUNIT_ASSERT(t->ppMembers == nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(14), t->nAllMembers); + CPPUNIT_ASSERT(t->ppAllMembers != nullptr); + CPPUNIT_ASSERT(t->pMapMemberIndexToFunctionIndex != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(14), t->nMapFunctionIndexToMemberIndex); + CPPUNIT_ASSERT(t->pMapFunctionIndexToMemberIndex != nullptr); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), t->nBaseTypes); + CPPUNIT_ASSERT(t->ppBaseTypes != nullptr); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->ppBaseTypes[0]->aBase).equals(t1)); + CPPUNIT_ASSERT(css::uno::TypeDescription(&t->ppBaseTypes[1]->aBase).equals(t2)); + // `basetypes` must still be valid: + CPPUNIT_ASSERT( + css::uno::TypeDescription(&basetypes[0]->aBase).equals(&t->ppBaseTypes[0]->aBase)); + CPPUNIT_ASSERT( + css::uno::TypeDescription(&basetypes[1]->aBase).equals(&t->ppBaseTypes[1]->aBase)); + typelib_typedescription_release(td); + typelib_typedescriptionreference_release(ref); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testEnum); + CPPUNIT_TEST(testStruct); + CPPUNIT_TEST(testPolyStruct); + CPPUNIT_TEST(testInterface); + CPPUNIT_TEST(testMultiInterface); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/cppu/qa/types.idl b/cppu/qa/types.idl new file mode 100644 index 000000000..a17b035e0 --- /dev/null +++ b/cppu/qa/types.idl @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <com/sun/star/uno/Exception.idl> +#include <com/sun/star/uno/XInterface.idl> + +enum Enum1 { M0, M1, M2 }; + +enum Enum2 { M0, M1, M2 }; + +struct Struct1 { long member; }; + +struct Struct2 { long member; }; + +struct Struct2a: Struct2 { long member2; }; + +struct Struct2b: Struct2a { long member3; }; + +struct Poly< T > { long member; }; + +struct Rec { sequence< Rec > x; }; + +exception Exception1: com::sun::star::uno::Exception { long member; }; + +exception Exception2: com::sun::star::uno::Exception { long member; }; + +exception Exception2a: Exception2 { long member2; }; + +exception Exception2b: Exception2a {}; + +interface Interface1 {}; + +interface Interface2 {}; + +interface Interface2a: Interface2 {}; + +interface Interface2b: Interface2a {}; + +interface Interface3 {}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |