[Libreoffice-commits] .: sc/CppunitTest_sc_macros_test.mk sc/qa sc/RdbTarget_sc_macros_test.mk

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Wed Oct 19 06:24:58 PDT 2011


 sc/CppunitTest_sc_macros_test.mk |  110 +++++++++++++
 sc/RdbTarget_sc_macros_test.mk   |   67 ++++++++
 sc/qa/unit/filters-test.cxx      |   72 --------
 sc/qa/unit/macros-test.cxx       |  325 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 502 insertions(+), 72 deletions(-)

New commits:
commit 9132e6ffa7b51375ee90f14226ab3eb08ba5e85c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed Oct 19 15:18:38 2011 +0200

    separate normal calc filter tests and macro tests
    
    this should make it easier to deal with the increased complexity in the
    unit tests for vba and star basic
    we should not mess with the normal calc tests while working on advanced
    vba and basic tests

diff --git a/sc/CppunitTest_sc_macros_test.mk b/sc/CppunitTest_sc_macros_test.mk
new file mode 100644
index 0000000..9049f85
--- /dev/null
+++ b/sc/CppunitTest_sc_macros_test.mk
@@ -0,0 +1,110 @@
+# -*- 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
+#       Caolán McNamara, Red Hat, Inc. <caolanm at redhat.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_macros_test))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sc_macros_test, \
+    sc/qa/unit/macros-test \
+))
+
+$(eval $(call gb_CppunitTest_add_linked_libs,sc_macros_test, \
+    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_macros_test,\
+    -I$(realpath $(SRCDIR)/sc/inc/pch) \
+    -I$(realpath $(SRCDIR)/sc/source/ui/inc) \
+    -I$(realpath $(SRCDIR)/sc/inc) \
+    $$(INCLUDE) \
+    -I$(OUTDIR)/inc \
+))
+
+$(eval $(call gb_CppunitTest_add_api,sc_macros_test,\
+    offapi \
+    oovbaapi \
+    udkapi \
+))
+
+$(eval $(call gb_CppunitTest_uses_ure,sc_macros_test))
+
+$(eval $(call gb_CppunitTest_add_type_rdbs,sc_macros_test,\
+    oovbaapi \
+    types \
+))
+
+$(eval $(call gb_CppunitTest_add_service_rdbs,sc_macros_test,\
+    sc_macros_test \
+))
+
+$(eval $(call gb_CppunitTest_set_args,sc_macros_test,\
+    --protector unoexceptionprotector$(gb_Library_DLLEXT) unoexceptionprotector \
+    -env:OOO_CONFIG_REGISTRY_DIR=$(call gb_CppunitTarget__make_url,$(OUTDIR)/xml/registry) \
+))
+
+# 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_macros_test) : $(call gb_Library_get_target,scfilt) $(WORKDIR)/AllLangRes/sc
+
+# vim: set noet sw=4 ts=4:
diff --git a/sc/RdbTarget_sc_macros_test.mk b/sc/RdbTarget_sc_macros_test.mk
new file mode 100644
index 0000000..efbaf8d
--- /dev/null
+++ b/sc/RdbTarget_sc_macros_test.mk
@@ -0,0 +1,67 @@
+# -*- 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
+#       Caolán McNamara, Red Hat, Inc. <caolanm at redhat.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_RdbTarget_RdbTarget,sc_macros_test))
+
+$(eval $(call gb_RdbTarget_add_components,sc_macros_test,\
+    basic/util/sb \
+    comphelper/util/comphelp \
+    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/scfilt \
+    sc/util/vbaobj \
+    scripting/source/basprov/basprov \
+    scripting/util/scriptframe \
+    sfx2/util/sfx \
+    sot/util/sot \
+    toolkit/util/tk \
+    unotools/util/utl \
+    unoxml/source/rdf/unordf \
+    unoxml/source/service/unoxml \
+))
+
+$(eval $(call gb_RdbTarget_add_old_components,sc_macros_test,\
+    configmgr \
+    ucb1 \
+    ucpfile1 \
+    ucptdoc1 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 939109e..8292c38 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -171,9 +171,6 @@ public:
     void testBugFixesXLS();
     void testBugFixesXLSX();
 
-    void testStarBasic();
-    void testVba();
-
     CPPUNIT_TEST_SUITE(ScFiltersTest);
     CPPUNIT_TEST(testCVEs);
     CPPUNIT_TEST(testRangeName);
@@ -185,13 +182,6 @@ public:
     CPPUNIT_TEST(testBugFixesODS);
     CPPUNIT_TEST(testBugFixesXLS);
     CPPUNIT_TEST(testBugFixesXLSX);
-    //enable this test if you want to play with star basic macros in unit tests
-    //works but does nothing useful yet
-    CPPUNIT_TEST(testStarBasic);
-    //enable if you want to hack vba support for unit tests
-    //does not work, still problems during loading
-    //CPPUNIT_TEST(testVba);
-
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -624,68 +614,6 @@ void ScFiltersTest::testBugFixesXLSX()
     xDocSh->DoClose();
 }
 
-void ScFiltersTest::testStarBasic()
-{
-    const rtl::OUString aFileNameBase(RTL_CONSTASCII_USTRINGPARAM("StarBasic."));
-    rtl::OUString aFileExtension(aFileFormats[0].pName, strlen(aFileFormats[0].pName), RTL_TEXTENCODING_UTF8 );
-    rtl::OUString aFilterName(aFileFormats[0].pFilterName, strlen(aFileFormats[0].pFilterName), RTL_TEXTENCODING_UTF8) ;
-    rtl::OUString aFileName;
-    createFileURL(aFileNameBase, aFileExtension, aFileName);
-    rtl::OUString aFilterType(aFileFormats[0].pTypeName, strlen(aFileFormats[0].pTypeName), RTL_TEXTENCODING_UTF8);
-    std::cout << aFileFormats[0].pName << " Test" << std::endl;
-    ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[0].nFormatType);
-
-    CPPUNIT_ASSERT_MESSAGE("Failed to load StarBasic.ods", xDocSh.Is());
-
-    rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.Star.script:Standard.Module1.Macro1?language=Basic&location=document"));
-    String sUrl = aURL;
-    Any aRet;
-    Sequence< sal_Int16 > aOutParamIndex;
-    Sequence< Any > aOutParam;
-    Sequence< uno::Any > aParams;
-    ScDocument* pDoc = xDocSh->GetDocument();
-
-    xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
-    double aValue;
-    pDoc->GetValue(0,0,0,aValue);
-    std::cout << aValue << std::endl;
-    CPPUNIT_ASSERT_MESSAGE("script did not change the value of Sheet1.A1",aValue==2);
-    xDocSh->DoClose();
-}
-
-void ScFiltersTest::testVba()
-{
-    const rtl::OUString aFileNameBase(RTL_CONSTASCII_USTRINGPARAM("vba."));
-    rtl::OUString aFileExtension(aFileFormats[1].pName, strlen(aFileFormats[1].pName), RTL_TEXTENCODING_UTF8 );
-    rtl::OUString aFilterName(aFileFormats[1].pFilterName, strlen(aFileFormats[1].pFilterName), RTL_TEXTENCODING_UTF8) ;
-    rtl::OUString aFileName;
-    createFileURL(aFileNameBase, aFileExtension, aFileName);
-    rtl::OUString aFilterType(aFileFormats[1].pTypeName, strlen(aFileFormats[1].pTypeName), RTL_TEXTENCODING_UTF8);
-    std::cout << aFileFormats[1].pName << " Test" << std::endl;
-    ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[1].nFormatType);
-
-    CPPUNIT_ASSERT_MESSAGE("Failed to load vba.xls", xDocSh.Is());
-
-    //is it really the right way to call a vba macro through CallXScript?
-    //it seems that the basic ide does it differently, but then we would need to init all parts ourself
-    //the problem is that CallXScript inits the basic part
-    ////BasicIDE::RunMethod takes an SbMethod as parametre
-    rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.Star.script:VBAProject.Modul1.Modul1?language=Basic&location=document"));
-    String sUrl = aURL;
-    Any aRet;
-    Sequence< sal_Int16 > aOutParamIndex;
-    Sequence< Any > aOutParam;
-    Sequence< uno::Any > aParams;
-    ScDocument* pDoc = xDocSh->GetDocument();
-
-    xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
-    double aValue;
-    pDoc->GetValue(0,0,0,aValue);
-    std::cout << aValue << std::endl;
-    CPPUNIT_ASSERT_MESSAGE("script did not change the value of Sheet1.A1",aValue==2);
-    xDocSh->DoClose();
-}
-
 ScFiltersTest::ScFiltersTest()
       : m_aBaseString(RTL_CONSTASCII_USTRINGPARAM("/sc/qa/unit/data"))
 {
diff --git a/sc/qa/unit/macros-test.cxx b/sc/qa/unit/macros-test.cxx
new file mode 100644
index 0000000..e3c9974
--- /dev/null
+++ b/sc/qa/unit/macros-test.cxx
@@ -0,0 +1,325 @@
+/* -*- 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. 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
+ *       Caolán McNamara <caolanm at redhat.com>
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Caolán McNamara <caolanm at redhat.com>
+ *   Markus Mohrhard <markus.mohrhard at googlemail.com>
+ *
+ * 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 <sal/config.h>
+#include <unotest/filters-test.hxx>
+#include <test/bootstrapfixture.hxx>
+#include <rtl/strbuf.hxx>
+#include <osl/file.hxx>
+
+#include <sfx2/app.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/docfile.hxx>
+#include <sfx2/sfxmodelfactory.hxx>
+#include <svl/intitem.hxx>
+
+#include <editeng/brshitem.hxx>
+#include <editeng/justifyitem.hxx>
+#include <basic/sbxdef.hxx>
+
+#include "helper/csv_handler.hxx"
+#include "orcus/csv_parser.hpp"
+#include <fstream>
+#include <string>
+#include <sstream>
+
+#define ODS_FORMAT_TYPE 50331943
+#define XLS_FORMAT_TYPE 318767171
+#define XLSX_FORMAT_TYPE 268959811
+
+#define ODS     0
+#define XLS     1
+#define XLSX    2
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+
+namespace {
+
+struct FileFormat {
+    const char* pName; const char* pFilterName; const char* pTypeName; sal_uLong nFormatType;
+};
+
+FileFormat aFileFormats[] = {
+    { "ods" , "calc8", "", ODS_FORMAT_TYPE },
+    { "xls" , "MS Excel 97", "calc_MS_EXCEL_97", XLS_FORMAT_TYPE },
+    { "xlsx", "Calc MS Excel 2007 XML" , "MS Excel 2007 XML", XLSX_FORMAT_TYPE }
+};
+
+void loadFile(const rtl::OUString& aFileName, std::string& aContent)
+{
+    rtl::OString aOFileName = rtl::OUStringToOString(aFileName, RTL_TEXTENCODING_UTF8);
+    std::ifstream aFile(aOFileName.getStr());
+
+    rtl::OStringBuffer aErrorMsg("Could not open csv file: ");
+    aErrorMsg.append(aOFileName);
+    CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), aFile);
+    std::ostringstream aOStream;
+    aOStream << aFile.rdbuf();
+    aFile.close();
+    aContent = aOStream.str();
+}
+
+void testFile(rtl::OUString& aFileName, ScDocument* pDoc, SCTAB nTab, StringType aStringFormat = StringValue)
+{
+    csv_handler aHandler(pDoc, nTab, aStringFormat);
+    orcus::csv_parser_config aConfig;
+    aConfig.delimiters.push_back(',');
+    aConfig.delimiters.push_back(';');
+    aConfig.text_qualifier = '"';
+    std::string aContent;
+    loadFile(aFileName, aContent);
+    orcus::csv_parser<csv_handler> parser ( &aContent[0], aContent.size() , aHandler, aConfig);
+    try
+    {
+        parser.parse();
+    }
+    catch (const orcus::csv_parse_error& e)
+    {
+        std::cout << "reading csv content file failed: " << e.what() << std::endl;
+        rtl::OStringBuffer aErrorMsg("csv parser error: ");
+        aErrorMsg.append(e.what());
+        CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false);
+    }
+}
+
+//need own handler because conditional formatting strings must be generated
+void testCondFile(rtl::OUString& aFileName, ScDocument* pDoc, SCTAB nTab)
+{
+    conditional_format_handler aHandler(pDoc, nTab);
+    orcus::csv_parser_config aConfig;
+    aConfig.delimiters.push_back(',');
+    aConfig.delimiters.push_back(';');
+    aConfig.text_qualifier = '"';
+    std::string aContent;
+    loadFile(aFileName, aContent);
+    orcus::csv_parser<conditional_format_handler> parser ( &aContent[0], aContent.size() , aHandler, aConfig);
+    try
+    {
+        parser.parse();
+    }
+    catch (const orcus::csv_parse_error& e)
+    {
+        std::cout << "reading csv content file failed: " << e.what() << std::endl;
+        rtl::OStringBuffer aErrorMsg("csv parser error: ");
+        aErrorMsg.append(e.what());
+        CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false);
+    }
+
+}
+
+}
+
+/* Implementation of Filters test */
+
+class ScMacrosTest
+    : public test::FiltersTest
+    , public test::BootstrapFixture
+{
+public:
+    ScMacrosTest();
+
+    virtual bool load(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData);
+    ScDocShellRef load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
+        const rtl::OUString &rUserData, const rtl::OUString& rTypeName, sal_uLong nFormatType=0);
+
+    void createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath);
+    void createCSVPath(const rtl::OUString& aFileBase, rtl::OUString& rFilePath);
+
+    virtual void setUp();
+    virtual void tearDown();
+
+    void testStarBasic();
+    void testVba();
+
+    CPPUNIT_TEST_SUITE(ScMacrosTest);
+    //enable this test if you want to play with star basic macros in unit tests
+    //works but does nothing useful yet
+    CPPUNIT_TEST(testStarBasic);
+    //enable if you want to hack vba support for unit tests
+    //does not work, still problems during loading
+    //CPPUNIT_TEST(testVba);
+
+
+    CPPUNIT_TEST_SUITE_END();
+
+private:
+    uno::Reference<uno::XInterface> m_xCalcComponent;
+    ::rtl::OUString m_aBaseString;
+};
+
+ScDocShellRef ScMacrosTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
+    const rtl::OUString &rUserData, const rtl::OUString& rTypeName, sal_uLong nFormatType)
+{
+    sal_uInt32 nFormat = 0;
+    if (nFormatType)
+        nFormat = SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS;
+    SfxFilter* aFilter = new SfxFilter(
+        rFilter,
+        rtl::OUString(), nFormatType, nFormat, rTypeName, 0, rtl::OUString(),
+        rUserData, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("private:factory/scalc*")) );
+    aFilter->SetVersion(SOFFICE_FILEFORMAT_CURRENT);
+
+    ScDocShellRef xDocShRef = new ScDocShell;
+    SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READWRITE, true);
+    pSrcMed->SetFilter(aFilter);
+    if (!xDocShRef->DoLoad(pSrcMed))
+    {
+        xDocShRef->DoClose();
+        // load failed.
+        xDocShRef.Clear();
+    }
+    else if (nFormatType)
+    {
+        pSrcMed->GetItemSet()->Put( SfxUInt16Item( SID_MACROEXECMODE, 4));
+        SfxObjectShell::SetCurrentComponent( xDocShRef->GetModel() );
+    }
+
+    return xDocShRef;
+}
+
+bool ScMacrosTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
+    const rtl::OUString &rUserData)
+{
+    ScDocShellRef xDocShRef = load(rFilter, rURL, rUserData, rtl::OUString());
+    bool bLoaded = xDocShRef.Is();
+    //reference counting of ScDocShellRef is very confused.
+    if (bLoaded)
+        xDocShRef->DoClose();
+    return bLoaded;
+}
+
+void ScMacrosTest::createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath)
+{
+    rtl::OUString aSep(RTL_CONSTASCII_USTRINGPARAM("/"));
+    rtl::OUStringBuffer aBuffer( getSrcRootURL() );
+    aBuffer.append(m_aBaseString).append(aSep).append(aFileExtension);
+    aBuffer.append(aSep).append(aFileBase).append(aFileExtension);
+    rFilePath = aBuffer.makeStringAndClear();
+}
+
+void ScMacrosTest::createCSVPath(const rtl::OUString& aFileBase, rtl::OUString& rCSVPath)
+{
+    rtl::OUStringBuffer aBuffer(getSrcRootPath());
+    aBuffer.append(m_aBaseString).append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/contentCSV/")));
+    aBuffer.append(aFileBase).append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("csv")));
+    rCSVPath = aBuffer.makeStringAndClear();
+}
+
+void ScMacrosTest::testStarBasic()
+{
+    const rtl::OUString aFileNameBase(RTL_CONSTASCII_USTRINGPARAM("StarBasic."));
+    rtl::OUString aFileExtension(aFileFormats[0].pName, strlen(aFileFormats[0].pName), RTL_TEXTENCODING_UTF8 );
+    rtl::OUString aFilterName(aFileFormats[0].pFilterName, strlen(aFileFormats[0].pFilterName), RTL_TEXTENCODING_UTF8) ;
+    rtl::OUString aFileName;
+    createFileURL(aFileNameBase, aFileExtension, aFileName);
+    rtl::OUString aFilterType(aFileFormats[0].pTypeName, strlen(aFileFormats[0].pTypeName), RTL_TEXTENCODING_UTF8);
+    std::cout << aFileFormats[0].pName << " Test" << std::endl;
+    ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[0].nFormatType);
+
+    CPPUNIT_ASSERT_MESSAGE("Failed to load StarBasic.ods", xDocSh.Is());
+
+    rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.Star.script:Standard.Module1.Macro1?language=Basic&location=document"));
+    String sUrl = aURL;
+    Any aRet;
+    Sequence< sal_Int16 > aOutParamIndex;
+    Sequence< Any > aOutParam;
+    Sequence< uno::Any > aParams;
+    ScDocument* pDoc = xDocSh->GetDocument();
+
+    xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
+    double aValue;
+    pDoc->GetValue(0,0,0,aValue);
+    std::cout << aValue << std::endl;
+    CPPUNIT_ASSERT_MESSAGE("script did not change the value of Sheet1.A1",aValue==2);
+    xDocSh->DoClose();
+}
+
+void ScMacrosTest::testVba()
+{
+    const rtl::OUString aFileNameBase(RTL_CONSTASCII_USTRINGPARAM("vba."));
+    rtl::OUString aFileExtension(aFileFormats[1].pName, strlen(aFileFormats[1].pName), RTL_TEXTENCODING_UTF8 );
+    rtl::OUString aFilterName(aFileFormats[1].pFilterName, strlen(aFileFormats[1].pFilterName), RTL_TEXTENCODING_UTF8) ;
+    rtl::OUString aFileName;
+    createFileURL(aFileNameBase, aFileExtension, aFileName);
+    rtl::OUString aFilterType(aFileFormats[1].pTypeName, strlen(aFileFormats[1].pTypeName), RTL_TEXTENCODING_UTF8);
+    std::cout << aFileFormats[1].pName << " Test" << std::endl;
+    ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[1].nFormatType);
+
+    CPPUNIT_ASSERT_MESSAGE("Failed to load vba.xls", xDocSh.Is());
+
+    //is it really the right way to call a vba macro through CallXScript?
+    //it seems that the basic ide does it differently, but then we would need to init all parts ourself
+    //the problem is that CallXScript inits the basic part
+    ////BasicIDE::RunMethod takes an SbMethod as parametre
+    rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.Star.script:VBAProject.Modul1.Modul1?language=Basic&location=document"));
+    String sUrl = aURL;
+    Any aRet;
+    Sequence< sal_Int16 > aOutParamIndex;
+    Sequence< Any > aOutParam;
+    Sequence< uno::Any > aParams;
+    ScDocument* pDoc = xDocSh->GetDocument();
+
+    xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
+    double aValue;
+    pDoc->GetValue(0,0,0,aValue);
+    std::cout << aValue << std::endl;
+    CPPUNIT_ASSERT_MESSAGE("script did not change the value of Sheet1.A1",aValue==2);
+    xDocSh->DoClose();
+}
+
+ScMacrosTest::ScMacrosTest()
+      : m_aBaseString(RTL_CONSTASCII_USTRINGPARAM("/sc/qa/unit/data"))
+{
+}
+
+void ScMacrosTest::setUp()
+{
+    test::BootstrapFixture::setUp();
+
+    // This is a bit of a fudge, we do this to ensure that ScGlobals::ensure,
+    // which is a private symbol to us, gets called
+    m_xCalcComponent =
+        getMultiServiceFactory()->createInstance(rtl::OUString(
+        RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Calc.SpreadsheetDocument")));
+    CPPUNIT_ASSERT_MESSAGE("no calc component!", m_xCalcComponent.is());
+}
+
+void ScMacrosTest::tearDown()
+{
+    uno::Reference< lang::XComponent >( m_xCalcComponent, UNO_QUERY_THROW )->dispose();
+    test::BootstrapFixture::tearDown();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(ScMacrosTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list