[Libreoffice-commits] .: 2 commits - sc/CppunitTest_sc_databaserangeobj.mk sc/inc sc/qa sc/source

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Thu Jan 5 18:45:10 PST 2012


 sc/CppunitTest_sc_databaserangeobj.mk |  144 +++++++++++++++++++++++++++
 sc/inc/tokenarray.hxx                 |    2 
 sc/qa/extras/xdatabaserange.cxx       |  175 ++++++++++++++++++++++++++++++++++
 sc/source/core/data/cell.cxx          |    1 
 sc/source/core/tool/token.cxx         |   13 +-
 5 files changed, 330 insertions(+), 5 deletions(-)

New commits:
commit 6069ef7976c4455c1875afecf02c41c5731f6546
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jan 6 03:15:38 2012 +0100

    add inital part for XDatabaseRange test, related fdo#44167

diff --git a/sc/CppunitTest_sc_databaserangeobj.mk b/sc/CppunitTest_sc_databaserangeobj.mk
new file mode 100644
index 0000000..187f13a
--- /dev/null
+++ b/sc/CppunitTest_sc_databaserangeobj.mk
@@ -0,0 +1,144 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+# 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.
+#
+# The Initial Developer of the Original Code is
+#       Markus Mohrhard <markus.mohrhard at googlemail.com>
+# Portions created by the Initial Developer are Copyright (C) 2011 the
+# Initial Developer. All Rights Reserved.
+#
+# Major Contributor(s):
+#
+# 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.
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,sc_databaserangeobj))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sc_databaserangeobj, \
+    sc/qa/extras/xdatabaserange \
+))
+
+$(eval $(call gb_CppunitTest_add_linked_libs,sc_databaserangeobj, \
+    avmedia \
+    basegfx \
+    comphelper \
+    cppu \
+    cppuhelper \
+    drawinglayer \
+    editeng \
+    fileacc \
+    for \
+    forui \
+    i18nisolang1 \
+    msfilter \
+    oox \
+    sal \
+    salhelper \
+    sax \
+    sb \
+    sc \
+    sfx \
+    sot \
+    svl \
+    svt \
+    svx \
+    svxcore \
+	test \
+    tl \
+    tk \
+    ucbhelper \
+	unotest \
+    utl \
+    vbahelper \
+    vcl \
+    xo \
+	$(gb_STDLIBS) \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sc_databaserangeobj,\
+    -I$(realpath $(SRCDIR)/sc/source/ui/inc) \
+    -I$(realpath $(SRCDIR)/sc/inc) \
+    $$(INCLUDE) \
+    -I$(OUTDIR)/inc \
+))
+
+$(eval $(call gb_CppunitTest_add_api,sc_databaserangeobj,\
+    offapi \
+    udkapi \
+))
+
+$(eval $(call gb_CppunitTest_uses_ure,sc_databaserangeobj))
+
+$(eval $(call gb_CppunitTest_add_type_rdbs,sc_databaserangeobj,\
+    types \
+))
+
+$(eval $(call gb_CppunitTest_add_components,sc_databaserangeobj,\
+    basic/util/sb \
+    comphelper/util/comphelp \
+    configmgr/source/configmgr \
+    dbaccess/util/dba \
+    fileaccess/source/fileacc \
+    filter/source/config/cache/filterconfig1 \
+    forms/util/frm \
+    framework/util/fwk \
+    i18npool/util/i18npool \
+    oox/util/oox \
+    package/source/xstor/xstor \
+    package/util/package2 \
+    sax/source/expatwrap/expwrap \
+    sax/source/fastparser/fastsax \
+    sc/util/sc \
+    sc/util/scd \
+    sc/util/scfilt \
+    sc/util/vbaobj \
+    scripting/source/basprov/basprov \
+    scripting/util/scriptframe \
+    sfx2/util/sfx \
+    sot/util/sot \
+    svl/source/fsstor/fsstorage \
+    toolkit/util/tk \
+    unotools/util/utl \
+    unoxml/source/rdf/unordf \
+    unoxml/source/service/unoxml \
+))
+
+$(eval $(call gb_CppunitTest_add_old_components,sc_databaserangeobj,\
+    ucb1 \
+    ucpfile1 \
+    ucptdoc1 \
+))
+
+$(eval $(call gb_CppunitTest_set_args,sc_databaserangeobj,\
+    --headless \
+    --protector unoexceptionprotector$(gb_Library_DLLEXT) unoexceptionprotector \
+    "-env:CONFIGURATION_LAYERS=xcsxcu:$(call gb_CppunitTarget__make_url,$(OUTDIR)/xml/registry) module:$(call gb_CppunitTarget__make_url,$(OUTDIR)/xml/registry/spool) xcsxcu:$(call gb_CppunitTarget__make_url,$(OUTDIR)/unittest/registry)" \
+))
+    # .../spool is required for the (somewhat strange) filter configuration
+
+# we need to
+# a) explicitly depend on library msword because it is not implied by a link
+#    relation
+# b) explicitly depend on the sc resource files needed at unit-test runtime
+$(call gb_CppunitTest_get_target,sc_databaserangeobj) : \
+    $(WORKDIR)/AllLangRes/sc \
+    $(call gb_Library_get_target,localedata_en) \
+    $(call gb_Library_get_target,scfilt) \
+
+# vim: set noet sw=4 ts=4:
diff --git a/sc/qa/extras/xdatabaserange.cxx b/sc/qa/extras/xdatabaserange.cxx
new file mode 100644
index 0000000..64a4f09
--- /dev/null
+++ b/sc/qa/extras/xdatabaserange.cxx
@@ -0,0 +1,175 @@
+/* -*- 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 Markus Mohrhard <markus.mohrhard at googlemail.com> (initial developer)
+ *
+ * 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/unoapi_test.hxx>
+#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
+#include <com/sun/star/sheet/XSpreadsheet.hpp>
+#include <com/sun/star/sheet/XSubTotalDescriptor.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/sheet/XDatabaseRange.hpp>
+#include <com/sun/star/sheet/XDatabaseRanges.hpp>
+#include <com/sun/star/table/CellRangeAddress.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <rtl/oustringostreaminserter.hxx>
+
+namespace ScDatabaseRangeObj {
+
+class ScXDatabaseRange : public UnoApiTest
+{
+    uno::Reference< sheet::XDatabaseRange > init(const rtl::OUString& rName);
+
+    void testDataArea();
+    void testGetSortDescriptor();
+    void testGetSubtotalDescriptor();
+
+    CPPUNIT_TEST_SUITE(ScXDatabaseRange);
+    CPPUNIT_TEST(testDataArea);
+    CPPUNIT_TEST(testGetSortDescriptor);
+    CPPUNIT_TEST(testGetSubtotalDescriptor);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+/**
+ * tests setDataArea and getDataArea
+ */
+void ScXDatabaseRange::testDataArea()
+{
+    uno::Reference< sheet::XDatabaseRange > xDBRange = init(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataArea")));
+
+    table::CellRangeAddress aCellAddress;
+    aCellAddress.Sheet = 0;
+    aCellAddress.StartColumn = 1;
+    aCellAddress.EndColumn = 4;
+    aCellAddress.StartRow = 2;
+    aCellAddress.EndRow = 5;
+    xDBRange->setDataArea(aCellAddress);
+    table::CellRangeAddress aValue;
+    aValue = xDBRange->getDataArea();
+    CPPUNIT_ASSERT( aCellAddress.Sheet == aValue.Sheet );
+    CPPUNIT_ASSERT( aCellAddress.StartRow == aValue.StartRow );
+    CPPUNIT_ASSERT( aCellAddress.EndRow == aValue.EndRow );
+    CPPUNIT_ASSERT( aCellAddress.StartColumn == aValue.StartColumn );
+    CPPUNIT_ASSERT( aCellAddress.EndColumn == aValue.EndColumn );
+}
+
+void ScXDatabaseRange::testGetSubtotalDescriptor()
+{
+    uno::Reference< sheet::XDatabaseRange > xDBRange = init(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SubtotalDescriptor")));
+    uno::Reference< sheet::XSubTotalDescriptor> xSubtotalDescr = xDBRange->getSubTotalDescriptor();
+    CPPUNIT_ASSERT(xSubtotalDescr.is());
+}
+
+void ScXDatabaseRange::testGetSortDescriptor()
+{
+    uno::Reference< sheet::XDatabaseRange > xDBRange = init(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SortDescriptor")));
+    uno::Sequence< beans::PropertyValue > xSortDescr = xDBRange->getSortDescriptor();
+    for (sal_Int32 i = 0; i < xSortDescr.getLength(); ++i)
+    {
+        beans::PropertyValue xProp = xSortDescr[i];
+        //std::cout << "Prop " << i << " Name: " << rtl::OUString(xProp.Name) << std::endl;
+
+        if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsSortColumns")))
+        {
+            sal_Bool bIsSortColumns;
+            xProp.Value >>= bIsSortColumns;
+            CPPUNIT_ASSERT(bIsSortColumns == false);
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContainsHeader")))
+        {
+            sal_Bool bContainsHeader;
+            xProp.Value >>= bContainsHeader;
+            CPPUNIT_ASSERT(bContainsHeader == true);
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MaxFieldCount")))
+        {
+            sal_Int32 nMaxFieldCount;
+            xProp.Value >>= nMaxFieldCount;
+            std::cout << "Value: " << nMaxFieldCount << std::endl;
+
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SortFields")))
+        {
+
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BindFormatsToContent")))
+        {
+            sal_Bool bBindFormatsToContent;
+            xProp.Value >>= bBindFormatsToContent;
+            CPPUNIT_ASSERT(bBindFormatsToContent == true);
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CopyOutputData")))
+        {
+            sal_Bool bCopyOutputData;
+            xProp.Value >>= bCopyOutputData;
+            CPPUNIT_ASSERT(bCopyOutputData == false);
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OutputPosition")))
+        {
+
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsUserListEnabled")))
+        {
+            sal_Bool bIsUserListEnabled;
+            xProp.Value >>= bIsUserListEnabled;
+            CPPUNIT_ASSERT(bIsUserListEnabled == false);
+
+        }
+        else if (xProp.Name == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UserListIndex")))
+        {
+            sal_Int32 nUserListIndex;
+            xProp.Value >>= nUserListIndex;
+            CPPUNIT_ASSERT(nUserListIndex == 0);
+        }
+    }
+}
+
+uno::Reference< sheet::XDatabaseRange > ScXDatabaseRange::init(const rtl::OUString& rName)
+{
+    rtl::OUString aFileURL;
+    const rtl::OUString aFileBase(RTL_CONSTASCII_USTRINGPARAM("xdatabaserange.ods"));
+    createFileURL(aFileBase, aFileURL);
+    std::cout << rtl::OUStringToOString(aFileURL, RTL_TEXTENCODING_UTF8).getStr() << std::endl;
+    static uno::Reference< lang::XComponent > xComponent;
+    if( !xComponent.is())
+        xComponent = loadFromDesktop(aFileURL);
+    uno::Reference< sheet::XSpreadsheetDocument> xDoc (xComponent, UNO_QUERY_THROW);
+    uno::Reference< beans::XPropertySet > xPropSet(xDoc,UNO_QUERY_THROW);
+    uno::Reference< sheet::XDatabaseRanges > xDBRanges( xPropSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DatabaseRanges"))), UNO_QUERY_THROW );
+    uno::Reference< container::XNameAccess > xName( xDBRanges, UNO_QUERY_THROW);
+    uno::Reference< sheet::XDatabaseRange > xDBRange( xName->getByName(rName), UNO_QUERY_THROW);
+    CPPUNIT_ASSERT(xDBRange.is());
+    return xDBRange;
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(ScXDatabaseRange);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 5ca17330ef0840d58c26cf50dffb60120e9664a6
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jan 6 03:05:14 2012 +0100

    correctly update absolute refs in range names if pointing to copied area

diff --git a/sc/inc/tokenarray.hxx b/sc/inc/tokenarray.hxx
index df214b0..48bf4c5 100644
--- a/sc/inc/tokenarray.hxx
+++ b/sc/inc/tokenarray.hxx
@@ -109,7 +109,7 @@ public:
     /**
      * Make all absolute references pointing to the copied range if the range is copied too
      */
-    void AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddress& rOldPos, const ScAddress& rNewPos );
+    void AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddress& rOldPos, const ScAddress& rNewPos, bool bRangeName = false );
 };
 
 #endif // SC_TOKENARRAY_HXX
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index cf5f70f..155f4bd 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -183,6 +183,7 @@ void adjustRangeName(ScToken* pToken, ScDocument& rNewDoc, const ScDocument* pOl
         if (rNewDoc.GetPool() != const_cast<ScDocument*>(pOldDoc)->GetPool())
         {
             pRangeNameToken->ReadjustAbsolute3DReferences(pOldDoc, &rNewDoc, pRangeData->GetPos(), true);
+            pRangeNameToken->AdjustAbsoluteRefs(pOldDoc, aOldPos, aNewPos, true);
         }
 
         bool bInserted;
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 83be799..68de154 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1944,7 +1944,7 @@ void ScTokenArray::ReadjustAbsolute3DReferences( const ScDocument* pOldDoc, cons
     }
 }
 
-void ScTokenArray::AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddress& rOldPos, const ScAddress& rNewPos)
+void ScTokenArray::AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddress& rOldPos, const ScAddress& rNewPos, bool bRangeName)
 {
     for ( sal_uInt16 j=0; j<nLen; ++j )
     {
@@ -1959,8 +1959,11 @@ void ScTokenArray::AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddres
                 ScSingleRefData& rRef2 = rRef.Ref2;
                 ScSingleRefData& rRef1 = rRef.Ref1;
 
-                AdjustSingleRefData( rRef1, rOldPos, rNewPos );
-                AdjustSingleRefData( rRef2, rOldPos, rNewPos );
+                // for range names only adjust if all parts are absolute
+                if (!bRangeName || !(rRef1.IsColRel() || rRef1.IsRowRel() || rRef1.IsTabRel()))
+                    AdjustSingleRefData( rRef1, rOldPos, rNewPos );
+                if (!bRangeName || !(rRef2.IsColRel() || rRef2.IsRowRel() || rRef2.IsTabRel()))
+                    AdjustSingleRefData( rRef2, rOldPos, rNewPos );
 
             }
             break;
@@ -1971,7 +1974,9 @@ void ScTokenArray::AdjustAbsoluteRefs( const ScDocument* pOldDoc, const ScAddres
 
                 ScSingleRefData& rRef = static_cast<ScToken*>(pCode[j])->GetSingleRef();
 
-                AdjustSingleRefData( rRef, rOldPos, rNewPos );
+                // for range names only adjust if all parts are absolute
+                if (!bRangeName || !(rRef.IsColRel() || rRef.IsRowRel() || rRef.IsTabRel()))
+                    AdjustSingleRefData( rRef, rOldPos, rNewPos );
 
 
             }


More information about the Libreoffice-commits mailing list