summaryrefslogtreecommitdiff
path: root/toolkit/workben/layout/test.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/workben/layout/test.cxx')
-rw-r--r--toolkit/workben/layout/test.cxx369
1 files changed, 369 insertions, 0 deletions
diff --git a/toolkit/workben/layout/test.cxx b/toolkit/workben/layout/test.cxx
new file mode 100644
index 000000000000..f90317a5ae37
--- /dev/null
+++ b/toolkit/workben/layout/test.cxx
@@ -0,0 +1,369 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <vcl/svapp.hxx>
+
+// This works and was used before for standalone test, not sure why
+// we'd want it.
+#define LAYOUT_WEAK 1
+#include "uno.hxx"
+
+#include <cstdio>
+#include <cstdlib>
+#include <sys/stat.h>
+
+#include <com/sun/star/xml/sax/SAXException.hpp>
+#include <comphelper/processfactory.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <rtl/ustring.hxx>
+#include <ucbhelper/configurationkeys.hxx>
+#include <ucbhelper/contentbroker.hxx>
+
+#define SORT_DLG 1 /* requires sfx2, svx to be compiled */
+#if SORT_DLG
+#include "scitems.hxx"
+#include "uiitems.hxx"
+#endif /* SORT_DLG */
+
+#include "editor.hxx"
+
+#include "plugin.hxx"
+#undef _LAYOUT_POST_HXX
+
+#include "recover.hxx"
+#undef _LAYOUT_POST_HXX
+
+#if SORT_DLG
+#include "sortdlg.hxx"
+#undef _LAYOUT_POST_HXX
+#endif /* SORT_DLG */
+
+#include "wordcountdialog.hxx"
+#undef _LAYOUT_POST_HXX
+
+#include "zoom.hxx"
+#undef _LAYOUT_POST_HXX
+
+#include <layout/layout-pre.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+
+class LayoutTest : public Application
+{
+ Reference< XComponentContext > mxContext;
+ Reference< lang::XMultiServiceFactory > mxMSF;
+ OUString mInstallDir;
+ OUString mTestDialog;
+ bool mEditMode;
+ std::list< OUString > mFiles;
+
+public:
+ LayoutTest( char const* installDir );
+
+ void RunEditor();
+ void RunFiles();
+ void ExceptionalMain();
+ void Init();
+ void InitUCB();
+ void LoadFile( OUString const &aName );
+ void Main();
+ void ParseCommandLine();
+};
+
+static void usage()
+{
+ fprintf (stderr, "usage: test [--inst OOO_INSTALL_PREFIX] [DIALOG.XML]... | --test [DIALOG.XML]\n" );
+ exit( 2 );
+}
+
+static uno::Reference< lang::XSingleServiceFactory > get_factory( char const *service )
+{
+ uno::Reference< lang::XSingleServiceFactory > xFactory(
+ comphelper::createProcessComponent(
+ rtl::OUString::createFromAscii( service ) ), uno::UNO_QUERY );
+
+ if ( !xFactory.is() )
+ fprintf( stderr, "error loading: %s\n", service );
+ return xFactory;
+}
+
+#define GET_FACTORY(x) get_factory( #x )
+
+void LayoutTest::LoadFile( const OUString &aTestFile )
+{
+ fprintf( stderr, "TEST: layout instance\n" );
+
+ uno::Reference< lang::XSingleServiceFactory > xFactory
+ = GET_FACTORY( com.sun.star.awt.Layout );
+ if ( !xFactory.is() )
+ {
+ fprintf( stderr, "Layout engine not installed\n" );
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Layout engine not installed" ) ),
+ uno::Reference< uno::XInterface >() );
+ }
+ fprintf( stderr, "TEST: initing root\n" );
+
+ uno::Sequence< uno::Any > aParams( 1 );
+ aParams[0] <<= aTestFile;
+
+ uno::Reference< awt::XLayoutRoot > xRoot (
+ xFactory->createInstanceWithArguments( aParams ),
+ uno::UNO_QUERY );
+
+ fprintf( stderr, "TEST: file loaded\n" );
+}
+
+void LayoutTest::InitUCB()
+{
+ OUString aEmpty;
+ Sequence< Any > aArgs( 6 );
+ aArgs[0]
+ <<= OUString(RTL_CONSTASCII_USTRINGPARAM( UCB_CONFIGURATION_KEY1_LOCAL ));
+ aArgs[1]
+ <<= OUString(RTL_CONSTASCII_USTRINGPARAM( UCB_CONFIGURATION_KEY2_OFFICE ));
+ aArgs[2] <<= OUString(RTL_CONSTASCII_USTRINGPARAM("PIPE"));
+ aArgs[3] <<= aEmpty;
+ aArgs[4] <<= OUString(RTL_CONSTASCII_USTRINGPARAM("PORTAL"));
+ aArgs[5] <<= aEmpty;
+
+ if ( !::ucbhelper::ContentBroker::initialize( mxMSF, aArgs ) )
+ {
+ fprintf( stderr, "Failed to init content broker\n" );
+ fprintf( stderr, "arg[0]: %s\n", UCB_CONFIGURATION_KEY1_LOCAL );
+ fprintf( stderr, "arg[1]: %s\n", UCB_CONFIGURATION_KEY2_OFFICE );
+ }
+}
+
+static void support_upstream_brand_prefix ()
+{
+ if ( char const* inst = getenv( "OOO_INSTALL_PREFIX" ) )
+ {
+ char const *brand_prefix = "/openoffice.org3";
+ OUString brand_dir = OUString::createFromAscii( inst )
+ + OUString::createFromAscii( brand_prefix );
+ struct stat stat_info;
+ if ( !stat ( OUSTRING_CSTR( brand_dir ), &stat_info ) )
+ {
+ OSL_TRACE( "Appending %s to OOO_INSTALL_PREFIX", brand_prefix );
+ setenv( "OOO_INSTALL_PREFIX", OUSTRING_CSTR( brand_dir ), 1 );
+ }
+ }
+}
+
+void LayoutTest::Init()
+{
+ ParseCommandLine();
+ setenv( "OOO_INSTALL_PREFIX", OUSTRING_CSTR( mInstallDir ), 0 );
+ support_upstream_brand_prefix ();
+ OSL_TRACE( "OOO_INSTALL_PREFIX=%s", getenv( "OOO_INSTALL_PREFIX" ) );
+
+ mxContext = defaultBootstrap_InitialComponentContext();
+ mxMSF = new UnoBootstrapLayout( Reference< lang::XMultiServiceFactory >( mxContext->getServiceManager(), UNO_QUERY ) );
+ ::comphelper::setProcessServiceFactory( mxMSF );
+ InitUCB();
+}
+
+void LayoutTest::ParseCommandLine()
+{
+ printf ("%s\n", __PRETTY_FUNCTION__);
+ for ( sal_uInt16 i = 0; i < GetCommandLineParamCount(); i++ )
+ {
+ OUString aParam = OUString( GetCommandLineParam( i ) );
+ if ( aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-h" ) ) || aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "--help" ) ) )
+ usage();
+ if ( aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "--inst" ) ) )
+ {
+ if ( i >= GetCommandLineParamCount() - 1)
+ usage();
+ mInstallDir = GetCommandLineParam( ++i );
+ setenv( "OOO_INSTALL_PREFIX", OUSTRING_CSTR( mInstallDir ), 1 );
+ }
+ else if ( aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "--test" ) ) )
+ {
+ mTestDialog = OUString(RTL_CONSTASCII_USTRINGPARAM("zoom"));
+ if (i + 1 < GetCommandLineParamCount())
+ mTestDialog = GetCommandLineParam( ++i );
+ }
+ else if ( aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "--editor" ) ) )
+ mEditMode = true;
+ else
+ mFiles.push_back( aParam );
+ }
+
+ if ( mFiles.size() <= 0 )
+ mFiles.push_back( OUString(RTL_CONSTASCII_USTRINGPARAM("layout.xml")) );
+}
+
+void LayoutTest::RunEditor()
+{
+ OUString aFile;
+ if ( !mFiles.empty()
+ && mFiles.front().compareToAscii( "layout.xml" ) != 0 )
+ aFile = mFiles.front();
+ Editor editor( mxMSF, aFile );
+ editor.Show();
+ editor.Execute();
+}
+
+short RunDialog( Dialog& dialog )
+{
+ dialog.Show();
+ short result = dialog.Execute();
+ fprintf( stderr, "Done: dialog execute exited:%d\n", result);
+ return result;
+}
+
+#undef Dialog
+short RunDialog( ::Dialog& dialog )
+{
+ dialog.Show();
+ short result = dialog.Execute();
+ fprintf( stderr, "Done: dialog execute exited:%d\n", result);
+ return result;
+}
+
+#if SORT_DLG
+static void LoadSC()
+{
+ get_factory( "com.sun.star.comp.sfx2.DocumentTemplates" );
+ get_factory( "com.sun.star.comp.Calc.SpreadsheetDocument" );
+ GET_FACTORY( com.sun.star.i18n.Transliteration.l10n );
+}
+#endif /* SORT_DLG */
+
+void TestDialog( OUString const& name )
+{
+ if ( 0 )
+ ;
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "plugin" ) ) )
+ {
+ PluginDialog plugin ( 0 );
+ RunDialog( plugin );
+ }
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "query" ) ) )
+ {
+ QueryBox query ( 0, "Do you want to do?", "do");
+ RunDialog( query );
+ }
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "query-compat" ) ) )
+ {
+ QueryBox query ( 0,
+ WinBits( WB_YES_NO | WB_DEF_YES ),
+// WinBits( WB_ABORT_RETRY_IGNORE ),
+ OUString(RTL_CONSTASCII_USTRINGPARAM ("Do you want to do?")));
+ RunDialog( query );
+ }
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "recover" ) ) )
+ {
+ SvxRecoverDialog recover ( 0 );
+ RunDialog( recover );
+ }
+#if SORT_DLG
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "sort" ) ) )
+ {
+ LoadSC();
+ ScSortDlg sort (0, 0);
+ RunDialog( sort );
+ }
+#endif /* SORT_DLG */
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "wordcount" ) ) )
+ {
+ SwWordCountDialog words ( 0 );
+ RunDialog( words );
+ }
+ else if ( name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "zoom" ) ) )
+ {
+ SvxZoomDialog zoom( 0 );
+ RunDialog( zoom );
+ }
+}
+
+void LayoutTest::RunFiles()
+{
+ fprintf( stderr, "TEST: loading files\n" );
+ for ( std::list< OUString >::iterator i = mFiles.begin(); i != mFiles.end(); ++i )
+ LoadFile( *i );
+ fprintf( stderr, "TEST: executing\n" );
+ Execute();
+ fprintf( stderr, "TEST: done executing\n" );
+}
+
+void LayoutTest::ExceptionalMain()
+{
+ if ( mTestDialog.getLength() )
+ TestDialog( mTestDialog );
+ else if ( mEditMode )
+ RunEditor();
+ else
+ RunFiles();
+}
+
+void LayoutTest::Main()
+{
+ try
+ {
+ ExceptionalMain();
+ }
+ catch (xml::sax::SAXException & rExc)
+ {
+ OString aStr( OUStringToOString( rExc.Message,
+ RTL_TEXTENCODING_ASCII_US ) );
+ uno::Exception exc;
+ if (rExc.WrappedException >>= exc)
+ {
+ aStr += OString( " >>> " );
+ aStr += OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US );
+ }
+ fprintf (stderr, "Parsing error: '%s'\n", aStr.getStr());
+ OSL_FAIL( aStr.getStr() );
+ }
+ catch ( uno::Exception & rExc )
+ {
+ OString aStr( OUStringToOString( rExc.Message,
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf (stderr, "UNO error: '%s'\n", aStr.getStr());
+ OSL_FAIL( aStr.getStr() );
+ }
+
+ Reference< lang::XComponent > xComp( mxContext, UNO_QUERY );
+ if ( xComp.is() )
+ xComp->dispose();
+}
+
+LayoutTest::LayoutTest( char const* installDir )
+ : mInstallDir( OUString::createFromAscii ( installDir ) )
+{
+}
+
+LayoutTest layout_test( "/usr/local/lib/ooo" );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */