/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
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.lang.XMultiServiceFactory;
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.uno.XInterface;
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 compilant.
* @see com.sun.star.frame.XDispatchRecorderSupplier
*/
public class _XDispatchRecorderSupplier extends MultiMethodTest {
public static XDispatchRecorderSupplier oObj = null;
XComponent xTextDoc = null;
XDispatchRecorder recorder = null;
XDesktop desktop = 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.
*/
protected void before() {
SOfficeFactory SOF = SOfficeFactory.getFactory((XMultiServiceFactory) tParam.getMSF());
try {
log.println( "creating a text document" );
xTextDoc = SOF.createTextDoc(null);
Object inst = (XInterface)((XMultiServiceFactory)tParam.getMSF()).createInstance
("com.sun.star.frame.Desktop");
desktop = (XDesktop) UnoRuntime.queryInterface
(XDesktop.class, inst);
} catch ( com.sun.star.uno.Exception e ) {
// Some exception occures.FAILED
e.printStackTrace( log );
throw new StatusException( "Couldn't create document", e );
}
}
/**
* 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()
*/
protected void after() {
xTextDoc.dispose();
}
}