summaryrefslogtreecommitdiff
path: root/desktop/qa
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2016-07-11 06:38:50 +1000
committerStephan Bergmann <sbergman@redhat.com>2016-07-19 07:01:10 +0000
commitc697ad1a44323e3491451ebdc25019751d8a1bc1 (patch)
tree8426419a2944c3f671ff48e769564df48aa4f60c /desktop/qa
parent4306e6600623262964c88c1f8f66188896c3d2a6 (diff)
tdf#100837: Support Office URI Schemes
This patch adds support for Office URI Schemes (see https://msdn.microsoft.com/en-us/library/dn906146). This will enable browser (non-CMIS) integration of LibreOffice with MS SharePoint server (v.2013 tested). In this patch, in addition to ms-* schemes, a new scheme is introduced: vnd.libreoffice.command, which is analogous to ms-*. Its purpose is to enable flexible configuration of server and client, where some types of documents are declared as handled by LibreOffice, and other are handled by other software. E.g., ODTs may have "vnd.libreoffice.command" scheme, while DOCXs could be "ms-word". Client may register LibreOffice to handle both, or to handle only "vnd.libreoffice.command" scheme. Unit test included. TODO in a later patch: add a mechanism to register LibreOffice to the schemes with OS. Change-Id: I1c449a211102036f87163058a4c90a93eb32c948 Reviewed-on: https://gerrit.libreoffice.org/27094 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'desktop/qa')
-rw-r--r--desktop/qa/desktop_app/test_desktop_app.cxx101
1 files changed, 101 insertions, 0 deletions
diff --git a/desktop/qa/desktop_app/test_desktop_app.cxx b/desktop/qa/desktop_app/test_desktop_app.cxx
new file mode 100644
index 000000000000..c800b2c1486a
--- /dev/null
+++ b/desktop/qa/desktop_app/test_desktop_app.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstddef>
+#include <sal/types.h>
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+#include "cppunit/plugin/TestPlugIn.h"
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <comphelper/processfactory.hxx>
+
+#include "../../source/app/cmdlineargs.hxx"
+
+namespace {
+
+class Test: public ::CppUnit::TestFixture {
+public:
+ void testTdf100837();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testTdf100837);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class TestSupplier : public desktop::CommandLineArgs::Supplier {
+public:
+ virtual ~TestSupplier() {}
+ virtual boost::optional< OUString > getCwdUrl() override { return boost::optional< OUString >(); }
+ virtual bool next(OUString * argument) override {
+ CPPUNIT_ASSERT(argument != nullptr);
+ if (m_index < m_args.size()) {
+ *argument = m_args[m_index++];
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ TestSupplier& operator << (const OUString& arg) { m_args.push_back(arg); return *this; }
+private:
+ std::vector< OUString > m_args;
+ std::vector< OUString >::size_type m_index = 0;
+};
+
+// Test Office URI Schemes support
+void Test::testTdf100837() {
+ auto xContext = ::cppu::defaultBootstrap_InitialComponentContext();
+ ::css::uno::Reference<::css::lang::XMultiComponentFactory> xFactory(xContext->getServiceManager());
+ ::css::uno::Reference<::css::lang::XMultiServiceFactory> xSM(xFactory, ::css::uno::UNO_QUERY_THROW);
+ // Without this we're crashing because callees are using getProcessServiceFactory
+ ::comphelper::setProcessServiceFactory(xSM);
+
+ TestSupplier supplier;
+ supplier << "--view" << "foo" << "ms-word:ofe|u|bar1" << "ms-word:ofv|u|bar2" << "ms-word:nft|u|bar3" << "baz";
+ desktop::CommandLineArgs args(supplier);
+ auto vViewList = args.GetViewList();
+ auto vForceOpenList = args.GetForceOpenList();
+ auto vForceNewList = args.GetForceNewList();
+ // 3 documents go to View list: foo; bar2; baz
+ CPPUNIT_ASSERT_EQUAL(decltype(vViewList.size())(3), vViewList.size());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), vViewList[0]);
+ CPPUNIT_ASSERT_EQUAL(OUString("bar2"), vViewList[1]);
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"), vViewList[2]);
+ // 1 document goes to ForceOpen list: bar1
+ CPPUNIT_ASSERT_EQUAL(decltype(vForceOpenList.size())(1), vForceOpenList.size());
+ CPPUNIT_ASSERT_EQUAL(OUString("bar1"), vForceOpenList[0]);
+ // 1 document goes to ForceNew list: bar3
+ CPPUNIT_ASSERT_EQUAL(decltype(vForceNewList.size())(1), vForceNewList.size());
+ CPPUNIT_ASSERT_EQUAL(OUString("bar3"), vForceNewList[0]);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */