[Libreoffice-commits] .: 2 commits - configmgr/source sc/qa sc/RdbTarget_sc_macros_test.mk test/user-template

Noel Power noelp at kemper.freedesktop.org
Tue Oct 25 11:24:30 PDT 2011


 configmgr/source/components.cxx                   |    1 
 sc/RdbTarget_sc_macros_test.mk                    |    2 
 sc/qa/unit/macros-test.cxx                        |   83 +++++++++++++++++++---
 test/user-template/user/registrymodifications.xcu |    1 
 4 files changed, 77 insertions(+), 10 deletions(-)

New commits:
commit 87d8dc5a025d437f912b875c6e068a7b4a3619ff
Author: Noel Power <noel.power at novell.com>
Date:   Tue Oct 25 19:25:13 2011 +0100

    more support for basic/vba unit tests
    
    add moggis work and some tweaks from me too

diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 0b5ea78..f6257b6 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -520,6 +520,7 @@ Components::Components(
         parseXcsXcuLayer( 0, aUnitTestDir );
         // next is required for the (somewhat strange) filter configuration
         parseModuleLayer( 1, aUnitTestDir + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/spool")));
+        parseModificationLayer();
         return;
     }
 
diff --git a/sc/RdbTarget_sc_macros_test.mk b/sc/RdbTarget_sc_macros_test.mk
index efbaf8d..4333184 100644
--- a/sc/RdbTarget_sc_macros_test.mk
+++ b/sc/RdbTarget_sc_macros_test.mk
@@ -45,12 +45,14 @@ $(eval $(call gb_RdbTarget_add_components,sc_macros_test,\
     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 \
diff --git a/sc/qa/unit/macros-test.cxx b/sc/qa/unit/macros-test.cxx
index fcc59ba..067a255 100644
--- a/sc/qa/unit/macros-test.cxx
+++ b/sc/qa/unit/macros-test.cxx
@@ -34,6 +34,38 @@
 #include <rtl/strbuf.hxx>
 #include <osl/file.hxx>
 
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/frame/XUntitledNumbers.hpp>
+
+#include <com/sun/star/frame/XController.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/frame/WindowArrange.hpp>
+#include <com/sun/star/frame/TerminationVetoException.hpp>
+#include <com/sun/star/frame/XTerminateListener.hpp>
+#include <com/sun/star/frame/XWindowArranger.hpp>
+#include <com/sun/star/frame/XTask.hpp>
+#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/frame/XFramesSupplier.hpp>
+#include <com/sun/star/frame/XFrames.hpp>
+#include <com/sun/star/lang/XServiceName.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+#include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/frame/FrameAction.hpp>
+#include <com/sun/star/task/XStatusIndicatorFactory.hpp>
+#include <com/sun/star/frame/XTasksSupplier.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/frame/XDispatchResultListener.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/frame/FeatureStateEvent.hpp>
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include <com/sun/star/frame/XDispatchRecorderSupplier.hpp>
+#include <com/sun/star/document/MacroExecMode.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+
 #include <sfx2/app.hxx>
 #include <sfx2/docfilt.hxx>
 #include <sfx2/docfile.hxx>
@@ -84,6 +116,7 @@ public:
     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);
+    uno::Reference< com::sun::star::frame::XModel > loadFromDesktop(const rtl::OUString& rURL);
 
     void createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath);
 
@@ -96,16 +129,17 @@ public:
     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);
+//    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(testVba);
 
 
     CPPUNIT_TEST_SUITE_END();
 
 private:
     uno::Reference<uno::XInterface> m_xCalcComponent;
+    uno::Reference<frame::XDesktop> mxDesktop;
     ::rtl::OUString m_aBaseString;
 };
 
@@ -139,6 +173,23 @@ ScDocShellRef ScMacrosTest::load(const rtl::OUString &rFilter, const rtl::OUStri
     return xDocShRef;
 }
 
+uno::Reference< com::sun::star::frame::XModel > ScMacrosTest::loadFromDesktop(const rtl::OUString& rURL)
+{
+    uno::Reference< com::sun::star::frame::XComponentLoader> xLoader = uno::Reference< com::sun::star::frame::XComponentLoader >( mxDesktop, UNO_QUERY );
+    com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > args(1);
+    args[0].Name = rtl::OUString(
+        RTL_CONSTASCII_USTRINGPARAM("MacroExecutionMode"));
+    args[0].Handle = -1;
+    args[0].Value <<=
+        com::sun::star::document::MacroExecMode::ALWAYS_EXECUTE_NO_WARN;
+    args[0].State = com::sun::star::beans::PropertyState_DIRECT_VALUE;
+    uno::Reference< com::sun::star::lang::XComponent> xComponent= xLoader->loadComponentFromURL(rURL, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_default")), 0, args);
+    uno::Reference< com::sun::star::frame::XModel > xModel( xComponent, UNO_QUERY );
+    CPPUNIT_ASSERT_MESSAGE("", xComponent.is());
+    return xModel;
+}
+
+
 bool ScMacrosTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
     const rtl::OUString &rUserData)
 {
@@ -168,9 +219,9 @@ void ScMacrosTest::testStarBasic()
     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);
+    uno::Reference< com::sun::star::frame::XModel > xModel = loadFromDesktop(aFileName);
 
-    CPPUNIT_ASSERT_MESSAGE("Failed to load StarBasic.ods", xDocSh.Is());
+    CPPUNIT_ASSERT_MESSAGE("Failed to load StarBasic.ods", xModel.is());
 
     rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.Star.script:Standard.Module1.Macro1?language=Basic&location=document"));
     String sUrl = aURL;
@@ -178,12 +229,17 @@ void ScMacrosTest::testStarBasic()
     Sequence< sal_Int16 > aOutParamIndex;
     Sequence< Any > aOutParam;
     Sequence< uno::Any > aParams;
+
+    com::sun::star::uno::Reference< com::sun::star::lang::XUnoTunnel >  xObjShellTunnel( xModel,com::sun::star::uno:: UNO_QUERY_THROW );
+    SfxObjectShell* pFoundShell = reinterpret_cast<SfxObjectShell*>( xObjShellTunnel->getSomething(SfxObjectShell::getUnoTunnelId()));
+    CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell);
+    ScDocShell* xDocSh = ( ScDocShell*)pFoundShell;
     ScDocument* pDoc = xDocSh->GetDocument();
 
-    xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
+    pFoundShell->CallXScript(xModel, sUrl, aParams, aRet, aOutParamIndex,aOutParam);
     double aValue;
     pDoc->GetValue(0,0,0,aValue);
-    std::cout << aValue << std::endl;
+    std::cout << "returned value = " << aValue << std::endl;
     CPPUNIT_ASSERT_MESSAGE("script did not change the value of Sheet1.A1",aValue==2);
     xDocSh->DoClose();
 }
@@ -217,10 +273,10 @@ void ScMacrosTest::testVba()
     {
         rtl::OUString aFileName;
         createFileURL(testInfo[i].sFileBaseName, aFileExtension, aFileName);
-        ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[1].nFormatType);
+        uno::Reference< com::sun::star::frame::XModel > xModel = loadFromDesktop(aFileName);
         rtl::OUString sMsg( RTL_CONSTASCII_USTRINGPARAM("Failed to load ") );
         sMsg.concat( aFileName );
-        CPPUNIT_ASSERT_MESSAGE( rtl::OUStringToOString( sMsg, RTL_TEXTENCODING_UTF8 ).getStr(), xDocSh.Is() );
+        CPPUNIT_ASSERT_MESSAGE( rtl::OUStringToOString( sMsg, RTL_TEXTENCODING_UTF8 ).getStr(), xModel.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
@@ -232,12 +288,16 @@ void ScMacrosTest::testVba()
         Sequence< Any > aOutParam;
         Sequence< uno::Any > aParams;
 
-        xDocSh->CallXScript(sUrl, aParams, aRet, aOutParamIndex,aOutParam);
+        com::sun::star::uno::Reference< com::sun::star::lang::XUnoTunnel >  xObjShellTunnel( xModel,com::sun::star::uno:: UNO_QUERY_THROW );
+        SfxObjectShell* pFoundShell = reinterpret_cast<SfxObjectShell*>( xObjShellTunnel->getSomething(SfxObjectShell::getUnoTunnelId()));
+
+        CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell);
+        pFoundShell->CallXScript(xModel, sUrl, aParams, aRet, aOutParamIndex,aOutParam);
         rtl::OUString aStringRes;
         aRet >>= aStringRes;
         std::cout << "value of Ret " << rtl::OUStringToOString( aStringRes, RTL_TEXTENCODING_UTF8 ).getStr() << std::endl;
         CPPUNIT_ASSERT_MESSAGE("script reported failure",aStringRes.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("OK") )) );
-        xDocSh->DoClose();
+        pFoundShell->DoClose();
     }
 }
 
@@ -256,6 +316,9 @@ void ScMacrosTest::setUp()
         getMultiServiceFactory()->createInstance(rtl::OUString(
         RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Calc.SpreadsheetDocument")));
     CPPUNIT_ASSERT_MESSAGE("no calc component!", m_xCalcComponent.is());
+    mxDesktop = Reference<com::sun::star::frame::XDesktop>( getMultiServiceFactory()->createInstance(
+                rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY );
+    CPPUNIT_ASSERT_MESSAGE("", mxDesktop.is());
 }
 
 void ScMacrosTest::tearDown()
diff --git a/test/user-template/user/registrymodifications.xcu b/test/user-template/user/registrymodifications.xcu
index f4a2050..ce0c106 100644
--- a/test/user-template/user/registrymodifications.xcu
+++ b/test/user-template/user/registrymodifications.xcu
@@ -1,7 +1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <item oor:path="/org.openoffice.Office.Paths/Paths/org.openoffice.Office.Paths:NamedPath['UIConfig']/InternalPaths">
-    <node oor:name="${userurl}/config/">
-    </node>
-  </item>
-</oor:items>
+<?xml version="1.0" encoding="UTF-8"?><oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/ItemList"><node oor:name="file:///media/FreeAgent-3/LibreOffice-onegit/core/sc/qa/unit/data/ods/StarBasic.ods" oor:op="replace"><prop oor:name="Filter" oor:op="fuse"><value>calc8</value></prop><prop oor:name="Password" oor:op="fuse"><value></value></prop><prop oor:name="Title" oor:op="fuse"><value>StarBasic</value></prop></node></item><item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/ItemList"><node oor:name="file:///media/FreeAgent-3/LibreOffice-onegit/core/sc/qa/unit/data/xls/TestAddress.xls" oor:op="replace"><prop oor:name="Filter" oor:op="fuse"><value>MS Excel 97</value></prop><prop oor:name="Password" 
 oor:op="fuse"><value></value></prop><prop oor:name="Title" oor:op="fuse"><value>TestAddress</value></prop></node></item><item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"><node oor:name="0" oor:op="replace"><prop oor:name="HistoryItemRef" oor:op="fuse"><value>file:///media/FreeAgent-3/LibreOffice-onegit/core/sc/qa/unit/data/xls/TestAddress.xls</value></prop></node></item><item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"><node oor:name="1" oor:op="replace"><prop oor:name="HistoryItemRef" oor:op="fuse"><value>file:///media/FreeAgent-3/LibreOffice-onegit/core/sc/qa/unit/data/ods/StarBasic.ods</value></prop></node></item></oor:items>
\ No newline at end of file
commit d371b20db44b5fcbb22030511c65563010fdd010
Author: Noel Power <noel.power at novell.com>
Date:   Tue Oct 25 18:08:55 2011 +0100

    add registrymodifications.xcu to allow override of default config

diff --git a/test/user-template/user/registrymodifications.xcu b/test/user-template/user/registrymodifications.xcu
new file mode 100644
index 0000000..f4a2050
--- /dev/null
+++ b/test/user-template/user/registrymodifications.xcu
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <item oor:path="/org.openoffice.Office.Paths/Paths/org.openoffice.Office.Paths:NamedPath['UIConfig']/InternalPaths">
+    <node oor:name="${userurl}/config/">
+    </node>
+  </item>
+</oor:items>


More information about the Libreoffice-commits mailing list