Kaydet (Commit) 3e253963 authored tarafından Akash Jain's avatar Akash Jain Kaydeden (comit) Stephan Bergmann

Add unit tests for XTitle interface

Added several unit tests for the XTitle interface.
Tests are for bugs tdf#96044,tdf#98837,tdf#96896

Change-Id: I9b3990dff02d5d5738024b60e94555199b625a2e
Reviewed-on: https://gerrit.libreoffice.org/23834Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
üst 739cbf2e
......@@ -62,13 +62,15 @@ $(eval $(call gb_JunitTest_add_sourcefiles,framework_complex,\
framework/qa/complex/imageManager/_XUIConfigurationPersistence \
framework/qa/complex/imageManager/_XUIConfiguration \
framework/qa/complex/api_internal/CheckAPI \
framework/qa/complex/dispatches/checkdispatchapi \
framework/qa/complex/dispatches/checkdispatchapi \
framework/qa/complex/dispatches/Interceptor \
framework/qa/complex/ModuleManager/CheckXModuleManager \
framework/qa/complex/XTitle/CheckXTitle \
))
$(eval $(call gb_JunitTest_add_classes,framework_complex,\
complex.dispatches.checkdispatchapi \
complex.XTitle.CheckXTitle \
))
# these were disabled in the old build system too, please check
# carefully before reenabling
......
/*
* 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 .
*/
package complex.XTitle;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import helper.URLHelper;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
import org.openoffice.test.OfficeFileUrl;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.FrameSearchFlag;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XFrame;
import com.sun.star.frame.XFrame2;
import com.sun.star.frame.XModel;
import com.sun.star.frame.XTitle;
import com.sun.star.frame.XController;
import com.sun.star.frame.XStorable;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.XCloseable;
import com.sun.star.util.XURLTransformer;
import com.sun.star.util.URL;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XDispatch;
/** @short Check the interface XTitle
@descr These tests check in various cases the correctness of
the title in the ui window.
*/
public class CheckXTitle
{
// some const
private static final String DOCUMENT_TITLE = "documentTitle";
private static final String UNO_URL_FOR_PRINT_PREVIEW = ".uno:PrintPreview";
private static final String UNO_URL_FOR_CLOSING_PRINT_PREVIEW = ".uno:ClosePreview";
private static final String UNO_URL_FOR_CLOSING_DOC = ".uno:CloseWin";
private static final String UNO_URL_FOR_READ_ONLY = ".uno:OpenReadOnly";
// members
/** provides XComponentLoader interface */
private XFrame m_xFrame = null;
/** will be set to xDesktop OR xFrame. */
private XComponentLoader m_xLoader = null;
/** provides uno service manager */
private XMultiServiceFactory m_xMSF = null;
/** used for parsing uno query URLs */
private XURLTransformer m_xParser = null;
// test environment
/** @short Create the environment for following tests.
@descr Use either a component loader from desktop or
from frame
*/
@Before public void before() throws Exception
{
// get uno service manager from global test environment
/* points to the global uno service manager. */
m_xMSF = getMSF();
// create desktop instance
/* provides XComponentLoader interface. */
XFrame xDesktop = UnoRuntime.queryInterface(XFrame.class, m_xMSF.createInstance("com.sun.star.frame.Desktop"));
// create frame instance
m_xFrame = xDesktop.findFrame("testFrame_titleChecker",
FrameSearchFlag.TASKS | FrameSearchFlag.CREATE);
assertNotNull("Couldn't create test frame.", m_xFrame);
// define default loader
m_xLoader = UnoRuntime.queryInterface(XComponentLoader.class, xDesktop);
assertNotNull("Desktop service doesn't support needed component loader interface.", m_xLoader);
// get URL parser
m_xParser = UnoRuntime.queryInterface(XURLTransformer.class, m_xMSF.createInstance("com.sun.star.util.URLTransformer"));
assertNotNull("Could not obtain URL parser instance", m_xParser);
}
/** @short close the environment.
*/
@After public void after() throws Exception
{
XCloseable xClose = UnoRuntime.queryInterface(XCloseable.class, m_xFrame);
xClose.close(false);
m_xFrame = null;
m_xLoader = null;
m_xParser = null;
m_xMSF = null;
}
// prepare an uno URL query and dispatch it
private void prepareQueryAndDispatch(XDispatchProvider xDisProv, String unoURL)
{
XDispatch xDispatcher = null;
URL[] aParseURL = new URL[1];
aParseURL[0] = new URL();
aParseURL[0].Complete = unoURL;
m_xParser.parseStrict(aParseURL);
xDispatcher = xDisProv.queryDispatch(aParseURL[0], "", 0);
assertNotNull("Can not obtain dispatcher for query: " + unoURL, xDispatcher);
xDispatcher.dispatch(aParseURL[0], null);
}
/** @short checks the numbers displayed in the title
@descr cycles through default view and print preview
and asserts that the title doesn't change.
*/
@Test public void checkTitleNumbers() throws Exception
{
PropertyValue[] lArgs = new PropertyValue[1];
lArgs[0] = new PropertyValue();
lArgs[0].Name = "Hidden";
lArgs[0].Value = Boolean.FALSE;
// load doc
XComponent xDoc=null;
xDoc = m_xLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, lArgs);
assertNotNull("Could not load temporary document", xDoc);
XModel xModel = UnoRuntime.queryInterface( XModel.class, xDoc );
XController xController = UnoRuntime.queryInterface( XController.class, xModel.getCurrentController() );
XTitle xTitle = UnoRuntime.queryInterface( XTitle.class, xModel.getCurrentController().getFrame() );
XDispatchProvider xDisProv = null;
// get window title with ui in default mode
String defaultTitle = xTitle.getTitle();
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_PRINT_PREVIEW );
// get window title with ui in print preview mode
String printPreviewTitle = xTitle.getTitle();
assertEquals("Title mismatch between default view window title and print preview window title",
defaultTitle, printPreviewTitle);
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_CLOSING_PRINT_PREVIEW );
//get window title with ui back in default mode
String printPreviewClosedTitle = xTitle.getTitle();
assertEquals("Title mismatch between default view window title and title after switching from print preview to default view window" ,defaultTitle, printPreviewClosedTitle);
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_CLOSING_DOC );
xDoc = null;
xDisProv = null;
}
/** @short sets frame title and checks for infinite recusion
@descr sets frame title. then cycles through default and
print preview. then closes the window and checks
for infinite recursion.
*/
@Test public void setTitleAndCheck() throws Exception
{
PropertyValue[] lArgs = new PropertyValue[1];
lArgs[0] = new PropertyValue();
lArgs[0].Name = "Hidden";
lArgs[0].Value = Boolean.FALSE;
// load doc
XComponent xDoc = null;
xDoc = m_xLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, lArgs);
assertNotNull("Could not create office document", xDoc);
XModel xModel = UnoRuntime.queryInterface( XModel.class, xDoc );
XFrame2 xFrame = UnoRuntime.queryInterface( XFrame2.class, xModel.getCurrentController().getFrame() );
XDispatchProvider xDisProv = null;
// set doc title
xFrame.setTitle(DOCUMENT_TITLE);
// switch to print preview mode
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_PRINT_PREVIEW );
// switch back to default mode
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_CLOSING_PRINT_PREVIEW );
// close document
xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() );
// todo: execute this on a new thread using executorservice and terminate it after some time
try{
prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_CLOSING_DOC );
} catch( Exception e ) {
// cr: there is no exception being thrown when there should be one
fail(e.toString());
}
xDoc = null;
xDisProv = null;
}
/** @short checks loading of new document with readonly set to true
@descr loads a new document with readonly mode set to true.
this should fail because new doc can not be opened in
read only mode
*/
// cr: this test should ideally be in CheckXModuleManager
// but that test is disabled in JunitTest_framework_complex.mk
@Test public void checkLoadingWithReadOnly()
{
PropertyValue[] lArgs = new PropertyValue[2];
lArgs[0] = new PropertyValue();
lArgs[0].Name = "Hidden";
lArgs[0].Value = Boolean.FALSE;
lArgs[1] = new PropertyValue();
lArgs[1].Name = "ReadOnly";
lArgs[1].Value = Boolean.TRUE;
// load doc
XComponent xDoc = null;
try{
xDoc = m_xLoader.loadComponentFromURL("private:factory/swriter", "_default", 0, lArgs);
} catch (Exception e) {
//exception is expected. do nothing
}
assertNull("Loading new document with read only mode true should have failed", xDoc);
}
private XMultiServiceFactory getMSF()
{
return UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
}
// setup and close connections
@BeforeClass
public static void setUpConnection() throws Exception
{
System.out.println("setUpConnection()");
connection.setUp();
}
@AfterClass
public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
System.out.println("tearDownConnection()");
connection.tearDown();
}
private static final OfficeConnection connection = new OfficeConnection();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment