summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Library_subsequenttest.mk1
-rw-r--r--test/Package_inc.mk1
-rw-r--r--test/inc/test/beans/xpropertyset.hxx86
-rw-r--r--test/source/beans/xpropertyset.cxx211
4 files changed, 299 insertions, 0 deletions
diff --git a/test/Library_subsequenttest.mk b/test/Library_subsequenttest.mk
index a7c5e415b32f..e10df289d7f7 100644
--- a/test/Library_subsequenttest.mk
+++ b/test/Library_subsequenttest.mk
@@ -62,6 +62,7 @@ $(eval $(call gb_Library_use_external,subsequenttest,cppunit))
$(eval $(call gb_Library_add_exception_objects,subsequenttest,\
test/source/unoapi_test \
+ test/source/beans/xpropertyset \
test/source/container/xelementaccess \
test/source/container/xindexaccess \
test/source/container/xnamecontainer \
diff --git a/test/Package_inc.mk b/test/Package_inc.mk
index aac4b3822577..474eb6df579f 100644
--- a/test/Package_inc.mk
+++ b/test/Package_inc.mk
@@ -30,6 +30,7 @@ $(eval $(call gb_Package_add_file,test_inc,inc/test/xmldiff.hxx,test/xmldiff.hxx
$(eval $(call gb_Package_add_file,test_inc,inc/test/bootstrapfixture.hxx,test/bootstrapfixture.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/testdllapi.hxx,test/testdllapi.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/unoapi_test.hxx,test/unoapi_test.hxx))
+$(eval $(call gb_Package_add_file,test_inc,inc/test/beans/xpropertyset.hxx,test/beans/xpropertyset.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/sheet/xdatapilotdescriptor.hxx,test/sheet/xdatapilotdescriptor.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/sheet/xcellrangesquery.hxx,test/sheet/xcellrangesquery.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/sheet/xnamedranges.hxx,test/sheet/xnamedranges.hxx))
diff --git a/test/inc/test/beans/xpropertyset.hxx b/test/inc/test/beans/xpropertyset.hxx
new file mode 100644
index 000000000000..747954193a9d
--- /dev/null
+++ b/test/inc/test/beans/xpropertyset.hxx
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Kohei Yoshida <kohei.yoshida@suse.com>
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef __TEST_BEANS_XPROPERTYSET_HXX__
+#define __TEST_BEANS_XPROPERTYSET_HXX__
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+
+#include "test/testdllapi.hxx"
+
+#include <vector>
+
+using namespace com::sun::star;
+
+namespace apitest {
+
+class OOO_DLLPUBLIC_TEST XPropertySet
+{
+public:
+ virtual ~XPropertySet();
+
+ virtual uno::Reference<uno::XInterface> init() = 0;
+
+ void testGetPropertySetInfo();
+ void testAddPropertyChangeListener();
+ void testAddVetoableChangeListener();
+ void testSetPropertyValue();
+ void testGetPropertyValue();
+ void testRemovePropertyChangeListener();
+ void testRemoveVetoableChangeListener();
+
+protected:
+ virtual bool isChangeable(const rtl::OUString& rName);
+
+private:
+ void fillPropsToTest(const uno::Reference<beans::XPropertySetInfo>& xPropInfo);
+ static bool getSinglePropertyValue(
+ const uno::Reference<beans::XPropertySet>& xPropSet, const rtl::OUString& rName);
+
+ struct PropsToTest
+ {
+ std::vector<rtl::OUString> constrained;
+ std::vector<rtl::OUString> bound;
+ std::vector<rtl::OUString> normal;
+ std::vector<rtl::OUString> readonly;
+
+ bool initialized;
+
+ PropsToTest();
+ };
+
+ PropsToTest maPropsToTest;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/source/beans/xpropertyset.cxx b/test/source/beans/xpropertyset.cxx
new file mode 100644
index 000000000000..1c833907b895
--- /dev/null
+++ b/test/source/beans/xpropertyset.cxx
@@ -0,0 +1,211 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Kohei Yoshida <kohei.yoshida@suse.com>
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include "test/beans/xpropertyset.hxx"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <com/sun/star/uno/Type.h>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+
+#include <set>
+
+using namespace com::sun::star::uno;
+
+namespace apitest {
+
+XPropertySet::~XPropertySet() {}
+
+XPropertySet::PropsToTest::PropsToTest() : initialized(false) {}
+
+void XPropertySet::testGetPropertySetInfo()
+{
+ uno::Reference<beans::XPropertySet> xPropSet(init(), UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySetInfo> xPropInfo = xPropSet->getPropertySetInfo();
+ if (xPropInfo.is())
+ {
+ fillPropsToTest(xPropInfo);
+ }
+ else
+ {
+ // TODO: Add a means for the client code to populate the PropsToTest.
+ }
+}
+
+void XPropertySet::testAddPropertyChangeListener()
+{
+ // TODO: implement this.
+}
+
+void XPropertySet::testAddVetoableChangeListener()
+{
+ // TODO: implement this.
+}
+
+void XPropertySet::testSetPropertyValue()
+{
+ testGetPropertySetInfo();
+
+ // TODO: implement this.
+}
+
+void XPropertySet::testGetPropertyValue()
+{
+ testGetPropertySetInfo();
+ uno::Reference<beans::XPropertySet> xPropSet(init(), UNO_QUERY_THROW);
+
+ // Check read-only properties.
+ for (size_t i = 0, n = maPropsToTest.readonly.size(); i < n; ++i)
+ {
+ bool bSuccess = getSinglePropertyValue(xPropSet, maPropsToTest.readonly[i]);
+ CPPUNIT_ASSERT(bSuccess);
+ }
+
+ // Check writable properties.
+ for (size_t i = 0, n = maPropsToTest.normal.size(); i < n; ++i)
+ {
+ bool bSuccess = getSinglePropertyValue(xPropSet, maPropsToTest.readonly[i]);
+ CPPUNIT_ASSERT(bSuccess);
+ }
+}
+
+void XPropertySet::testRemovePropertyChangeListener()
+{
+ // TODO: implement this.
+}
+
+void XPropertySet::testRemoveVetoableChangeListener()
+{
+ // TODO: implement this.
+}
+
+bool XPropertySet::isChangeable(const rtl::OUString& rName)
+{
+ uno::Reference<beans::XPropertySet> xPropSet(init(), UNO_QUERY_THROW);
+ try
+ {
+ uno::Any any = xPropSet->getPropertyValue(rName);
+ uno::Type type = any.getValueType();
+ if (type == getCppuType<sal_Bool>())
+ {
+ // boolean type
+ sal_Bool bOld = any.get<sal_Bool>();
+ xPropSet->setPropertyValue(rName, makeAny(!bOld));
+ any = xPropSet->getPropertyValue(rName);
+ sal_Bool bNew = any.get<sal_Bool>();
+
+ return bOld != bNew;
+ }
+ else if (type == getCppuType<rtl::OUString>())
+ {
+ // string type
+ rtl::OUString aOld = any.get<rtl::OUString>();
+ rtl::OUString aNew = aOld + rtl::OUString("foo");
+ xPropSet->setPropertyValue(rName, makeAny(aNew));
+ any = xPropSet->getPropertyValue(rName);
+ rtl::OUString aTest = any.get<rtl::OUString>();
+ return aOld != aTest;
+ }
+
+ // TODO: add more primitive types to cover. For specialized types,
+ // the client code should provide the test code to change their values
+ // by overwriting this method.
+
+ CPPUNIT_ASSERT_MESSAGE("XPropertySet::isChangeable: unknown type in Any tested.", false);
+ }
+ catch (const uno::Exception&)
+ {
+ CPPUNIT_ASSERT_MESSAGE("XPropertySet::isChangeable: exception thrown while retrieving the property value.", false);
+ }
+
+ return false;
+}
+
+void XPropertySet::fillPropsToTest(const uno::Reference<beans::XPropertySetInfo>& xPropInfo)
+{
+ if (maPropsToTest.initialized)
+ return;
+
+ uno::Sequence<beans::Property> aProps = xPropInfo->getProperties();
+
+ // some properties should not be changed in a unspecific way.
+ // TODO: Maybe we should mark these properties read-only, instead of
+ // giving them a special treatment here?
+ std::set<rtl::OUString> aSkip;
+ aSkip.insert("PrinterName");
+ aSkip.insert("CharRelief");
+ aSkip.insert("IsLayerMode");
+
+ for (sal_Int32 i = 0; i < aProps.getLength(); ++i)
+ {
+ beans::Property aProp = aProps[i];
+ if (aSkip.count(aProp.Name) > 0)
+ continue;
+
+ if ((aProp.Attributes & beans::PropertyAttribute::READONLY) != 0)
+ {
+ maPropsToTest.readonly.push_back(aProp.Name);
+ continue;
+ }
+
+ if ((aProp.Attributes & beans::PropertyAttribute::MAYBEVOID) != 0)
+ continue;
+
+ bool bBound = (aProp.Attributes & beans::PropertyAttribute::BOUND) != 0;
+ bool bConstrained = (aProp.Attributes & beans::PropertyAttribute::CONSTRAINED) != 0;
+ bool bCanChange = isChangeable(aProp.Name);
+
+ if (bBound && bCanChange)
+ maPropsToTest.bound.push_back(aProp.Name);
+
+ if (bConstrained && bCanChange)
+ maPropsToTest.constrained.push_back(aProp.Name);
+
+ if (bCanChange)
+ maPropsToTest.normal.push_back(aProp.Name);
+ }
+
+ maPropsToTest.initialized = true;
+}
+
+bool XPropertySet::getSinglePropertyValue(
+ const uno::Reference<beans::XPropertySet>& xPropSet, const rtl::OUString& rName)
+{
+ try
+ {
+ xPropSet->getPropertyValue(rName);
+ return true;
+ }
+ catch (const uno::Exception&)
+ {
+ }
+ return false;
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */