diff options
-rw-r--r-- | sc/CppunitTest_sc_macros_test.mk | 110 | ||||
-rw-r--r-- | sc/RdbTarget_sc_macros_test.mk | 67 | ||||
-rw-r--r-- | sc/qa/unit/filters-test.cxx | 72 | ||||
-rw-r--r-- | sc/qa/unit/macros-test.cxx | 325 |
4 files changed, 502 insertions, 72 deletions
diff --git a/sc/CppunitTest_sc_macros_test.mk b/sc/CppunitTest_sc_macros_test.mk new file mode 100644 index 000000000000..9049f8598c39 --- /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@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 000000000000..efbaf8dd1302 --- /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@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 939109ee46fc..8292c3821627 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 000000000000..e3c9974e3dba --- /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@redhat.com> + * Portions created by the Initial Developer are Copyright (C) 2011 the + * Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Caolán McNamara <caolanm@redhat.com> + * Markus Mohrhard <markus.mohrhard@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: */ |