blob: a5abcaa02d626ecf222c539e9b22f49910b7c370 [file] [log] [blame]
/**************************************************************
*
* 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 org.openoffice;
import share.LogWriter;
import stats.InternalLogWriter;
import lib.TestParameters;
import util.DynamicClassLoader;
import base.TestBase;
import helper.ClParser;
import helper.CfgParser;
import com.sun.star.beans.XPropertyAccess;
import com.sun.star.beans.PropertyValue;
import com.sun.star.task.XJob;
import com.sun.star.uno.XInterface;
import com.sun.star.comp.loader.FactoryHelper;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.lang.XTypeProvider;
import com.sun.star.uno.Type;
import com.sun.star.registry.XRegistryKey;
import com.sun.star.beans.NamedValue;
import java.util.Vector;
/**
* The main class, will call ClParser and CfgParser to <br>
* fill the TestParameters.<br>
* Will then call the appropriate Testbase to run the tests.
*/
public class RunnerService implements XJob, XServiceInfo,
XTypeProvider, XPropertyAccess {
static public final String __serviceName = "org.openoffice.Runner";
static public final String __implName = "org.openoffice.RunnerService";
static private XMultiServiceFactory xMSF = null;
/**
* ct'tor
* Construct an own office provider for tests
*/
public RunnerService(XMultiServiceFactory xMSF) {
}
public Object execute(NamedValue[] args) {
// construct valid arguments from the given stuff
int arg_length=args.length;
String[] arguments = new String[arg_length*2];
for ( int i=0; i< arg_length; i++ ) {
arguments[i*2] = args[i].Name;
Object o = args[i].Value;
arguments[i*2+1] = o.toString();
}
TestParameters param = new TestParameters();
DynamicClassLoader dcl = new DynamicClassLoader();
// take the standard log writer
String standardLogWriter = param.LogWriter;
String standardOutProducer = param.OutProducer;
ClParser cli = new ClParser();
//parse the arguments if an ini-parameter is given
String iniFile = cli.getIniPath(arguments);
//initialize cfgParser with ini-path
CfgParser ini = new CfgParser(iniFile);
//parse ConfigFile
ini.getIniParameters(param);
//parse the commandline arguments if an runnerprops-parameter is given
String runnerIniFile = cli.getRunnerIniPath(arguments);
//initialize cfgParser with ini-path
CfgParser runnerIni = new CfgParser(runnerIniFile);
//parse ConfigFile
runnerIni.getIniParameters(param);
//parse the commandline arguments
cli.getCommandLineParameter(param,arguments);
// now compare the standard log writer with the parameters:
// if we have a new one, use the new, else use the internal
// log writer
if (((String)param.get("LogWriter")).equals(standardLogWriter))
param.put("LogWriter", "stats.InternalLogWriter");
if (((String)param.get("OutProducer")).equals(standardOutProducer))
param.put("OutProducer", "stats.InternalLogWriter");
LogWriter log = (LogWriter) dcl.getInstance(
(String)param.get("LogWriter"));
param.put("ServiceFactory", xMSF);
param.ServiceFactory = xMSF; //(XMultiServiceFactory)
// appProvider.getManager(param);
log.println("TestJob: "+param.get("TestJob"));
TestBase toExecute = (TestBase)dcl.getInstance("base.java_fat_service");
boolean worked = toExecute.executeTest(param);
if (!worked)
log.println("Test did not execute correctly.");
String returnString = "";
if (log instanceof InternalLogWriter)
returnString = ((InternalLogWriter)log).getLog();
return returnString;
}
/**
* This function provides the service name
* @return the service name
*/
public String getServiceName() {
return __serviceName;
}
/**
* Get all implemented types of this class.
* @return An array of implemented interface types.
* @see com.sun.star.lang.XTypeProvider
*/
public Type[] getTypes() {
Type[] type = new Type[5];
type[0] = new Type(XInterface.class);
type[1] = new Type(XTypeProvider.class);
type[2] = new Type(XJob.class);
type[3] = new Type(XServiceInfo.class);
type[4] = new Type(XPropertyAccess.class);
return type;
}
/**
* Get the implementation id.
* @return An empty implementation id.
* @see com.sun.star.lang.XTypeProvider
*/
public byte[] getImplementationId() {
return new byte[0];
}
/**
* Function for reading the implementation name.
*
* @return the implementation name
* @see com.sun.star.lang.XServiceInfo
*/
public String getImplementationName() {
return __implName;
}
/**
* Does the implementation support this service?
*
* @param serviceName The name of the service in question
* @return true, if service is supported, false otherwise
* @see com.sun.star.lang.XServiceInfo
*/
public boolean supportsService(String serviceName) {
if(serviceName.equals(__serviceName))
return true;
return false;
}
/**
* Function for reading all supported services
*
* @return An aaray with all supported service names
* @see com.sun.star.lang.XServiceInfo
*/
public String[] getSupportedServiceNames() {
String[] supServiceNames = {__serviceName};
return supServiceNames;
}
/**
* Return all valid testcases from the object descriptions
* @return The valid testcases as property values
*/
public PropertyValue[] getPropertyValues() {
PropertyValue[] pVal = null;
java.net.URL url = this.getClass().getResource("/objdsc");
if (url == null) {
pVal = new PropertyValue[1];
pVal[0] = new PropertyValue();
pVal[0].Name = "Error";
pVal[0].Value = "OOoRunner.jar file doesn't contain object " +
"descriptions: don't know what to test.";
return pVal;
}
Vector v = new Vector(600);
try {
// open connection to Jar
java.net.JarURLConnection con =
(java.net.JarURLConnection)url.openConnection();
// get Jar file from connection
java.util.jar.JarFile f = con.getJarFile();
// Enumerate over all entries
java.util.Enumeration aEnum = f.entries();
while (aEnum.hasMoreElements()) {
String entry = aEnum.nextElement().toString();
if (entry.endsWith(".csv")) {
String module = null;
String object = null;
int startIndex = entry.indexOf("objdsc/") + 7;
int endIndex = entry.lastIndexOf('/');
/* int endIndex = entry.indexOf('.');
module = entry.substring(startIndex, endIndex);
startIndex = 0;
endIndex = module.lastIndexOf('/'); */
module = entry.substring(startIndex, endIndex);
// special cases
if (entry.indexOf("/file/") != -1 || entry.indexOf("/xmloff/") != -1) {
endIndex = entry.indexOf(".csv");
object = entry.substring(0, endIndex);
endIndex = object.lastIndexOf('.');
startIndex = object.indexOf('.');
while (startIndex != endIndex) {
object = object.substring(startIndex+1);
startIndex = object.indexOf('.');
endIndex = object.lastIndexOf('.');
}
}
/* else if (entry.indexOf("/xmloff/") != -1) {
endIndex = entry.indexOf(".csv");
object = entry.substring(0, endIndex);
endIndex = entry.lastIndexOf('.');
while (object.indexOf('.') != endIndex) {
object = object.substring(object.indexOf('.')+1);
}
} */
else {
startIndex = 0;
endIndex = entry.indexOf(".csv");
object = entry.substring(startIndex, endIndex);
startIndex = object.lastIndexOf('.');
object = object.substring(startIndex+1);
}
v.add(module+"."+object);
}
}
}
catch(java.io.IOException e) {
e.printStackTrace();
}
int size = v.size();
String[] sTestCases = new String[size];
v.toArray(sTestCases);
java.util.Arrays.sort(sTestCases);
pVal = new PropertyValue[size];
for (int i=0; i<size; i++) {
pVal[i] = new PropertyValue();
pVal[i].Name = "TestCase"+i;
pVal[i].Value = sTestCases[i];
}
return pVal;
}
/**
*
* Gives a factory for creating the service.
* This method is called by the <code>JavaLoader</code>
* <p>
* @return returns a <code>XSingleServiceFactory</code> for creating the component
* @param implName the name of the implementation for which a service is desired
* @param multiFactory the service manager to be used if needed
* @param regKey the registryKey
* @see com.sun.star.comp.loader.JavaLoader
*/
public static XSingleServiceFactory __getServiceFactory(String implName,
XMultiServiceFactory multiFactory, XRegistryKey regKey)
{
XSingleServiceFactory xSingleServiceFactory = null;
if (implName.equals(RunnerService.class.getName()))
xSingleServiceFactory = FactoryHelper.getServiceFactory(
RunnerService.class, __serviceName, multiFactory, regKey);
xMSF = multiFactory;
return xSingleServiceFactory;
}
/**
* Writes the service information into the given registry key.
* This method is called by the <code>JavaLoader</code>
* <p>
* @return returns true if the operation succeeded
* @param regKey the registryKey
* @see com.sun.star.comp.loader.JavaLoader
*/
public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
return FactoryHelper.writeRegistryServiceInfo(RunnerService.class.getName(),
__serviceName, regKey);
}
/**
* empty: not needed here.
*/
public void setPropertyValues(PropertyValue[] propertyValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.beans.PropertyVetoException,
com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
// empty implementation
}
}