    /* -*- 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 <test/unoapi_property_testers.hxx>

    #include <com/sun/star/uno/Any.hxx>
    #include <cppunit/extensions/HelperMacros.h>

    using namespace css;

    namespace apitest
    {
    void testBooleanProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                             const OUString& name)
    {
        uno::Any aNewValue;

        bool bPropertyGet = false;
        bool bPropertySet = false;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= bPropertyGet);

        aNewValue <<= !bPropertyGet;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= bPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), !bPropertyGet, bPropertySet);
    }

    void testBooleanOptionalProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                     const OUString& rName)
    {
        try
        {
            testBooleanProperty(xPropertySet, rName);
        }
        catch (css::beans::UnknownPropertyException /*ex*/)
        {
            // ignore if the property is unknown as it is optional
        }
    }

    void testBooleanReadonlyProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                     const OUString& name)
    {
        uno::Any aNewValue;

        bool bPropertyGet = false;
        bool bPropertySet = false;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= bPropertyGet);

        aNewValue <<= !bPropertyGet;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= bPropertySet);
        OString msgSet = "Able to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), bPropertyGet, bPropertySet);
    }

    void testDoubleProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                            const OUString& name, const double& dValue)
    {
        uno::Any aNewValue;

        double dPropertyGet;
        double dPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= dPropertyGet);

        aNewValue <<= dValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= dPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msgSet.getStr(), dValue, dPropertySet, 0.5);
    }

    void testDoubleReadonlyProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                    const OUString& name, const double& dValue)
    {
        uno::Any aNewValue;

        double dPropertyGet;
        double dPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= dPropertyGet);

        aNewValue <<= dValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= dPropertySet);
        OString msgSet = "Able to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msgSet.getStr(), dPropertyGet, dPropertySet, 0.5);
    }

    void testLongProperty(uno::Reference<beans::XPropertySet> const& xPropertySet, const OUString& name,
                          const sal_Int32& nValue)
    {
        uno::Any aNewValue;

        sal_Int32 nPropertyGet;
        sal_Int32 nPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= nPropertyGet);

        aNewValue <<= nValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= nPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), nValue, nPropertySet);
    }

    void testLongReadonlyProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                  const OUString& name, const sal_Int32& nValue)
    {
        uno::Any aNewValue;

        sal_Int32 nPropertyGet;
        sal_Int32 nPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= nPropertyGet);

        aNewValue <<= nValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= nPropertySet);
        OString msgSet = "Able to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), nPropertyGet, nPropertySet);
    }

    void testShortProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                           const OUString& name, const sal_Int16& nValue)
    {
        uno::Any aNewValue;

        sal_Int16 nPropertyGet;
        sal_Int16 nPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= nPropertyGet);

        aNewValue <<= nValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= nPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), nValue, nPropertySet);
    }

    void testShortReadonlyProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                   const OUString& name, const sal_Int16& nValue)
    {
        uno::Any aNewValue;

        sal_Int16 nPropertyGet;
        sal_Int16 nPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= nPropertyGet);

        aNewValue <<= nValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= nPropertySet);
        OString msgSet = "Able to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), nPropertyGet, nPropertySet);
    }

    void testStringOptionalProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                    const OUString& rName, const OUString& rValue)
    {
        try
        {
            testStringProperty(xPropertySet, rName, rValue);
        }
        catch (css::beans::UnknownPropertyException /*ex*/)
        {
            // ignore if the property is unknown as it is optional
        }
    }

    void testStringProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                            const OUString& name, const OUString& rValue)
    {
        uno::Any aNewValue;

        OUString sPropertyGet;
        OUString sPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= sPropertyGet);

        aNewValue <<= rValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= sPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), rValue, sPropertySet);
    }

    void testStringReadonlyProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                                    const OUString& name, const OUString& rValue)
    {
        uno::Any aNewValue;

        OUString sPropertyGet;
        OUString sPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= sPropertyGet);

        aNewValue <<= rValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= sPropertySet);
        OString msgSet = "Able to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), sPropertyGet, sPropertySet);
    }

    void testColorProperty(uno::Reference<beans::XPropertySet> const& xPropertySet,
                           const OUString& name, const util::Color& rValue)
    {
        uno::Any aNewValue;

        util::Color sPropertyGet;
        util::Color sPropertySet;

        OString msgGet
            = "Unable to get PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_MESSAGE(msgGet.getStr(), xPropertySet->getPropertyValue(name) >>= sPropertyGet);

        aNewValue <<= rValue;
        xPropertySet->setPropertyValue(name, aNewValue);
        CPPUNIT_ASSERT(xPropertySet->getPropertyValue(name) >>= sPropertySet);
        OString msgSet
            = "Unable to set PropertyValue: " + OUStringToOString(name, RTL_TEXTENCODING_UTF8);
        CPPUNIT_ASSERT_EQUAL_MESSAGE(msgSet.getStr(), rValue, sPropertySet);
    }

    } // namespace apitest

    /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */

↑ V614 Uninitialized variable 'nPropertySet' used. Consider checking the second actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'nPropertySet' used. Consider checking the second actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'nPropertyGet' used. Consider checking the first actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'nPropertySet' used. Consider checking the second actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'dPropertyGet' used. Consider checking the first actual argument of the 'assertDoubleEquals' function.

↑ V614 Uninitialized variable 'nPropertyGet' used. Consider checking the first actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'nPropertySet' used. Consider checking the second actual argument of the 'assertEquals' function.

↑ V614 Uninitialized variable 'dPropertySet' used. Consider checking the second actual argument of the 'assertDoubleEquals' function.

↑ V614 Uninitialized variable 'dPropertySet' used. Consider checking the second actual argument of the 'assertDoubleEquals' function.