/*
* 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 ifc.frame;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XDesktop;
import com.sun.star.frame.XDispatch;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XDispatchRecorder;
import com.sun.star.frame.XModel;
import com.sun.star.frame.XDispatchRecorderSupplier;
import com.sun.star.frame.XFrame;
import com.sun.star.lang.XComponent;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.URL;
import lib.MultiMethodTest;
import lib.StatusException;
import util.SOfficeFactory;
import util.utils;
/**
* Testing com.sun.star.frame.XDispatchRecorderSupplier
* interface methods:
*
setDispatchRecorder()
getDispatchRecorder()
dispatchAndRecord()
* Test is NOT multithread compliant.
* @see com.sun.star.frame.XDispatchRecorderSupplier
*/
public class _XDispatchRecorderSupplier extends MultiMethodTest {
public static XDispatchRecorderSupplier oObj = null;
XComponent xTextDoc = null;
XDispatchRecorder recorder = null;
/**
* Simple XDispatchRecorder
implementation
* which method getRecordedMacro
returns a fixed
* string.
*/
private static class MyRecorder implements XDispatchRecorder {
public void startRecording(XFrame p0) {}
public void recordDispatch(URL p0, PropertyValue[] p1) {}
public void recordDispatchAsComment(URL p0, PropertyValue[] p1) {}
public void endRecording(){}
public String getRecordedMacro() {
return "MyRecorder implementation";
}
}
/**
* Creates a new document which supplies a frame.
* Also a com.sun.star.frame.Desktop
* service created for obtaining document's frame.
*/
@Override
protected void before() throws Exception {
SOfficeFactory SOF = SOfficeFactory.getFactory(tParam.getMSF());
log.println( "creating a text document" );
xTextDoc = SOF.createTextDoc(null);
Object inst = tParam.getMSF().createInstance
("com.sun.star.frame.Desktop");
UnoRuntime.queryInterface(XDesktop.class, inst);
}
/**
* Creates an instance of MyRecorder
and set if,
* then get the current recorder. Second case is setting
* recorder to null. Finally restores the old macro recorder.
*
* Has OK status if in the first case custom recorder
* was successfully returned, and in second case current
* recorder is null.
*/
public void _setDispatchRecorder() {
requiredMethod("getDispatchRecorder()");
boolean res = true,
locRes = true;
log.print("Setting custom macro recorder ...");
oObj.setDispatchRecorder(new MyRecorder());
XDispatchRecorder rec = oObj.getDispatchRecorder();
locRes = rec != null &&
"MyRecorder implementation".equals(rec.getRecordedMacro());
if (locRes) log.println("OK");
else log.println("FAILED");
res &= locRes;
log.print("Setting null dispatch recorder ...");
oObj.setDispatchRecorder(null);
locRes = oObj.getDispatchRecorder() == null;
if (locRes) log.println("OK");
else log.println("FAILED");
res &= locRes;
log.println("Setting old macro recorder ...");
oObj.setDispatchRecorder(recorder);
tRes.tested("setDispatchRecorder()", res);
}
/**
* Just gets the current recorder and stores it.
*
* Has OK status.
*/
public void _getDispatchRecorder() {
recorder = oObj.getDispatchRecorder();
tRes.tested("getDispatchRecorder()", true);
}
/**
* First sets the current dispatch recorder to new
* DispatchRecorder
instance if the current one
* is null. The a Dispatch
instance is created
* which inserts some text into text document.
* A number of cases is checked :
*
before()
*/
@Override
protected void after() {
xTextDoc.dispose();
}
}