1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10*ef39d40dSAndrew Rist * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*ef39d40dSAndrew Rist * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19*ef39d40dSAndrew Rist * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package org.openoffice; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import share.LogWriter; 27cdf0e10cSrcweir import stats.InternalLogWriter; 28cdf0e10cSrcweir import lib.TestParameters; 29cdf0e10cSrcweir import util.DynamicClassLoader; 30cdf0e10cSrcweir import base.TestBase; 31cdf0e10cSrcweir import helper.ClParser; 32cdf0e10cSrcweir import helper.CfgParser; 33cdf0e10cSrcweir import com.sun.star.beans.XPropertyAccess; 34cdf0e10cSrcweir import com.sun.star.beans.PropertyValue; 35cdf0e10cSrcweir import com.sun.star.task.XJob; 36cdf0e10cSrcweir import com.sun.star.uno.XInterface; 37cdf0e10cSrcweir import com.sun.star.comp.loader.FactoryHelper; 38cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 39cdf0e10cSrcweir import com.sun.star.lang.XServiceInfo; 40cdf0e10cSrcweir import com.sun.star.lang.XSingleServiceFactory; 41cdf0e10cSrcweir import com.sun.star.lang.XTypeProvider; 42cdf0e10cSrcweir import com.sun.star.uno.Type; 43cdf0e10cSrcweir import com.sun.star.registry.XRegistryKey; 44cdf0e10cSrcweir import com.sun.star.beans.NamedValue; 45cdf0e10cSrcweir 46cdf0e10cSrcweir import java.util.Vector; 47cdf0e10cSrcweir 48cdf0e10cSrcweir /** 49cdf0e10cSrcweir * The main class, will call ClParser and CfgParser to <br> 50cdf0e10cSrcweir * fill the TestParameters.<br> 51cdf0e10cSrcweir * Will then call the appropriate Testbase to run the tests. 52cdf0e10cSrcweir */ 53cdf0e10cSrcweir public class RunnerService implements XJob, XServiceInfo, 54cdf0e10cSrcweir XTypeProvider, XPropertyAccess { 55cdf0e10cSrcweir 56cdf0e10cSrcweir static public final String __serviceName = "org.openoffice.Runner"; 57cdf0e10cSrcweir static public final String __implName = "org.openoffice.RunnerService"; 58cdf0e10cSrcweir static private XMultiServiceFactory xMSF = null; 59cdf0e10cSrcweir 60cdf0e10cSrcweir /** 61cdf0e10cSrcweir * ct'tor 62cdf0e10cSrcweir * Construct an own office provider for tests 63cdf0e10cSrcweir */ RunnerService(XMultiServiceFactory xMSF)64cdf0e10cSrcweir public RunnerService(XMultiServiceFactory xMSF) { 65cdf0e10cSrcweir } 66cdf0e10cSrcweir execute(NamedValue[] args)67cdf0e10cSrcweir public Object execute(NamedValue[] args) { 68cdf0e10cSrcweir // construct valid arguments from the given stuff 69cdf0e10cSrcweir int arg_length=args.length; 70cdf0e10cSrcweir String[] arguments = new String[arg_length*2]; 71cdf0e10cSrcweir for ( int i=0; i< arg_length; i++ ) { 72cdf0e10cSrcweir arguments[i*2] = args[i].Name; 73cdf0e10cSrcweir Object o = args[i].Value; 74cdf0e10cSrcweir arguments[i*2+1] = o.toString(); 75cdf0e10cSrcweir } 76cdf0e10cSrcweir 77cdf0e10cSrcweir TestParameters param = new TestParameters(); 78cdf0e10cSrcweir DynamicClassLoader dcl = new DynamicClassLoader(); 79cdf0e10cSrcweir 80cdf0e10cSrcweir 81cdf0e10cSrcweir // take the standard log writer 82cdf0e10cSrcweir String standardLogWriter = param.LogWriter; 83cdf0e10cSrcweir String standardOutProducer = param.OutProducer; 84cdf0e10cSrcweir 85cdf0e10cSrcweir ClParser cli = new ClParser(); 86cdf0e10cSrcweir 87cdf0e10cSrcweir //parse the arguments if an ini-parameter is given 88cdf0e10cSrcweir String iniFile = cli.getIniPath(arguments); 89cdf0e10cSrcweir 90cdf0e10cSrcweir //initialize cfgParser with ini-path 91cdf0e10cSrcweir CfgParser ini = new CfgParser(iniFile); 92cdf0e10cSrcweir 93cdf0e10cSrcweir //parse ConfigFile 94cdf0e10cSrcweir ini.getIniParameters(param); 95cdf0e10cSrcweir 96cdf0e10cSrcweir 97cdf0e10cSrcweir //parse the commandline arguments if an runnerprops-parameter is given 98cdf0e10cSrcweir String runnerIniFile = cli.getRunnerIniPath(arguments); 99cdf0e10cSrcweir 100cdf0e10cSrcweir //initialize cfgParser with ini-path 101cdf0e10cSrcweir CfgParser runnerIni = new CfgParser(runnerIniFile); 102cdf0e10cSrcweir 103cdf0e10cSrcweir //parse ConfigFile 104cdf0e10cSrcweir runnerIni.getIniParameters(param); 105cdf0e10cSrcweir 106cdf0e10cSrcweir //parse the commandline arguments 107cdf0e10cSrcweir cli.getCommandLineParameter(param,arguments); 108cdf0e10cSrcweir 109cdf0e10cSrcweir // now compare the standard log writer with the parameters: 110cdf0e10cSrcweir // if we have a new one, use the new, else use the internal 111cdf0e10cSrcweir // log writer 112cdf0e10cSrcweir if (((String)param.get("LogWriter")).equals(standardLogWriter)) 113cdf0e10cSrcweir param.put("LogWriter", "stats.InternalLogWriter"); 114cdf0e10cSrcweir if (((String)param.get("OutProducer")).equals(standardOutProducer)) 115cdf0e10cSrcweir param.put("OutProducer", "stats.InternalLogWriter"); 116cdf0e10cSrcweir LogWriter log = (LogWriter) dcl.getInstance( 117cdf0e10cSrcweir (String)param.get("LogWriter")); 118cdf0e10cSrcweir 119cdf0e10cSrcweir param.put("ServiceFactory", xMSF); 120cdf0e10cSrcweir 121cdf0e10cSrcweir param.ServiceFactory = xMSF; //(XMultiServiceFactory) 122cdf0e10cSrcweir // appProvider.getManager(param); 123cdf0e10cSrcweir 124cdf0e10cSrcweir log.println("TestJob: "+param.get("TestJob")); 125cdf0e10cSrcweir 126cdf0e10cSrcweir TestBase toExecute = (TestBase)dcl.getInstance("base.java_fat_service"); 127cdf0e10cSrcweir 128cdf0e10cSrcweir boolean worked = toExecute.executeTest(param); 129cdf0e10cSrcweir if (!worked) 130cdf0e10cSrcweir log.println("Test did not execute correctly."); 131cdf0e10cSrcweir 132cdf0e10cSrcweir String returnString = ""; 133cdf0e10cSrcweir if (log instanceof InternalLogWriter) 134cdf0e10cSrcweir returnString = ((InternalLogWriter)log).getLog(); 135cdf0e10cSrcweir return returnString; 136cdf0e10cSrcweir } 137cdf0e10cSrcweir 138cdf0e10cSrcweir /** 139cdf0e10cSrcweir * This function provides the service name 140cdf0e10cSrcweir * @return the service name 141cdf0e10cSrcweir */ getServiceName()142cdf0e10cSrcweir public String getServiceName() { 143cdf0e10cSrcweir return __serviceName; 144cdf0e10cSrcweir } 145cdf0e10cSrcweir 146cdf0e10cSrcweir /** 147cdf0e10cSrcweir * Get all implemented types of this class. 148cdf0e10cSrcweir * @return An array of implemented interface types. 149cdf0e10cSrcweir * @see com.sun.star.lang.XTypeProvider 150cdf0e10cSrcweir */ getTypes()151cdf0e10cSrcweir public Type[] getTypes() { 152cdf0e10cSrcweir Type[] type = new Type[5]; 153cdf0e10cSrcweir type[0] = new Type(XInterface.class); 154cdf0e10cSrcweir type[1] = new Type(XTypeProvider.class); 155cdf0e10cSrcweir type[2] = new Type(XJob.class); 156cdf0e10cSrcweir type[3] = new Type(XServiceInfo.class); 157cdf0e10cSrcweir type[4] = new Type(XPropertyAccess.class); 158cdf0e10cSrcweir return type; 159cdf0e10cSrcweir } 160cdf0e10cSrcweir 161cdf0e10cSrcweir /** 162cdf0e10cSrcweir * Get the implementation id. 163cdf0e10cSrcweir * @return An empty implementation id. 164cdf0e10cSrcweir * @see com.sun.star.lang.XTypeProvider 165cdf0e10cSrcweir */ getImplementationId()166cdf0e10cSrcweir public byte[] getImplementationId() { 167cdf0e10cSrcweir return new byte[0]; 168cdf0e10cSrcweir } 169cdf0e10cSrcweir /** 170cdf0e10cSrcweir * Function for reading the implementation name. 171cdf0e10cSrcweir * 172cdf0e10cSrcweir * @return the implementation name 173cdf0e10cSrcweir * @see com.sun.star.lang.XServiceInfo 174cdf0e10cSrcweir */ getImplementationName()175cdf0e10cSrcweir public String getImplementationName() { 176cdf0e10cSrcweir return __implName; 177cdf0e10cSrcweir } 178cdf0e10cSrcweir 179cdf0e10cSrcweir /** 180cdf0e10cSrcweir * Does the implementation support this service? 181cdf0e10cSrcweir * 182cdf0e10cSrcweir * @param serviceName The name of the service in question 183cdf0e10cSrcweir * @return true, if service is supported, false otherwise 184cdf0e10cSrcweir * @see com.sun.star.lang.XServiceInfo 185cdf0e10cSrcweir */ supportsService(String serviceName)186cdf0e10cSrcweir public boolean supportsService(String serviceName) { 187cdf0e10cSrcweir if(serviceName.equals(__serviceName)) 188cdf0e10cSrcweir return true; 189cdf0e10cSrcweir return false; 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir /** 193cdf0e10cSrcweir * Function for reading all supported services 194cdf0e10cSrcweir * 195cdf0e10cSrcweir * @return An aaray with all supported service names 196cdf0e10cSrcweir * @see com.sun.star.lang.XServiceInfo 197cdf0e10cSrcweir */ getSupportedServiceNames()198cdf0e10cSrcweir public String[] getSupportedServiceNames() { 199cdf0e10cSrcweir String[] supServiceNames = {__serviceName}; 200cdf0e10cSrcweir return supServiceNames; 201cdf0e10cSrcweir } 202cdf0e10cSrcweir 203cdf0e10cSrcweir /** 204cdf0e10cSrcweir * Return all valid testcases from the object descriptions 205cdf0e10cSrcweir * @return The valid testcases as property values 206cdf0e10cSrcweir */ getPropertyValues()207cdf0e10cSrcweir public PropertyValue[] getPropertyValues() { 208cdf0e10cSrcweir PropertyValue[] pVal = null; 209cdf0e10cSrcweir java.net.URL url = this.getClass().getResource("/objdsc"); 210cdf0e10cSrcweir if (url == null) { 211cdf0e10cSrcweir pVal = new PropertyValue[1]; 212cdf0e10cSrcweir pVal[0] = new PropertyValue(); 213cdf0e10cSrcweir pVal[0].Name = "Error"; 214cdf0e10cSrcweir pVal[0].Value = "OOoRunner.jar file doesn't contain object " + 215cdf0e10cSrcweir "descriptions: don't know what to test."; 216cdf0e10cSrcweir return pVal; 217cdf0e10cSrcweir } 218cdf0e10cSrcweir 219cdf0e10cSrcweir Vector v = new Vector(600); 220cdf0e10cSrcweir try { 221cdf0e10cSrcweir // open connection to Jar 222cdf0e10cSrcweir java.net.JarURLConnection con = 223cdf0e10cSrcweir (java.net.JarURLConnection)url.openConnection(); 224cdf0e10cSrcweir // get Jar file from connection 225cdf0e10cSrcweir java.util.jar.JarFile f = con.getJarFile(); 226cdf0e10cSrcweir // Enumerate over all entries 227cdf0e10cSrcweir java.util.Enumeration aEnum = f.entries(); 228cdf0e10cSrcweir 229cdf0e10cSrcweir while (aEnum.hasMoreElements()) { 230cdf0e10cSrcweir String entry = aEnum.nextElement().toString(); 231cdf0e10cSrcweir if (entry.endsWith(".csv")) { 232cdf0e10cSrcweir 233cdf0e10cSrcweir String module = null; 234cdf0e10cSrcweir String object = null; 235cdf0e10cSrcweir 236cdf0e10cSrcweir int startIndex = entry.indexOf("objdsc/") + 7; 237cdf0e10cSrcweir int endIndex = entry.lastIndexOf('/'); 238cdf0e10cSrcweir /* int endIndex = entry.indexOf('.'); 239cdf0e10cSrcweir module = entry.substring(startIndex, endIndex); 240cdf0e10cSrcweir startIndex = 0; 241cdf0e10cSrcweir endIndex = module.lastIndexOf('/'); */ 242cdf0e10cSrcweir module = entry.substring(startIndex, endIndex); 243cdf0e10cSrcweir 244cdf0e10cSrcweir // special cases 245cdf0e10cSrcweir if (entry.indexOf("/file/") != -1 || entry.indexOf("/xmloff/") != -1) { 246cdf0e10cSrcweir endIndex = entry.indexOf(".csv"); 247cdf0e10cSrcweir object = entry.substring(0, endIndex); 248cdf0e10cSrcweir endIndex = object.lastIndexOf('.'); 249cdf0e10cSrcweir startIndex = object.indexOf('.'); 250cdf0e10cSrcweir while (startIndex != endIndex) { 251cdf0e10cSrcweir object = object.substring(startIndex+1); 252cdf0e10cSrcweir startIndex = object.indexOf('.'); 253cdf0e10cSrcweir endIndex = object.lastIndexOf('.'); 254cdf0e10cSrcweir } 255cdf0e10cSrcweir } 256cdf0e10cSrcweir /* else if (entry.indexOf("/xmloff/") != -1) { 257cdf0e10cSrcweir endIndex = entry.indexOf(".csv"); 258cdf0e10cSrcweir object = entry.substring(0, endIndex); 259cdf0e10cSrcweir endIndex = entry.lastIndexOf('.'); 260cdf0e10cSrcweir while (object.indexOf('.') != endIndex) { 261cdf0e10cSrcweir object = object.substring(object.indexOf('.')+1); 262cdf0e10cSrcweir } 263cdf0e10cSrcweir } */ 264cdf0e10cSrcweir else { 265cdf0e10cSrcweir startIndex = 0; 266cdf0e10cSrcweir endIndex = entry.indexOf(".csv"); 267cdf0e10cSrcweir object = entry.substring(startIndex, endIndex); 268cdf0e10cSrcweir startIndex = object.lastIndexOf('.'); 269cdf0e10cSrcweir object = object.substring(startIndex+1); 270cdf0e10cSrcweir } 271cdf0e10cSrcweir v.add(module+"."+object); 272cdf0e10cSrcweir } 273cdf0e10cSrcweir } 274cdf0e10cSrcweir } 275cdf0e10cSrcweir catch(java.io.IOException e) { 276cdf0e10cSrcweir e.printStackTrace(); 277cdf0e10cSrcweir } 278cdf0e10cSrcweir 279cdf0e10cSrcweir int size = v.size(); 280cdf0e10cSrcweir 281cdf0e10cSrcweir String[] sTestCases = new String[size]; 282cdf0e10cSrcweir v.toArray(sTestCases); 283cdf0e10cSrcweir java.util.Arrays.sort(sTestCases); 284cdf0e10cSrcweir 285cdf0e10cSrcweir pVal = new PropertyValue[size]; 286cdf0e10cSrcweir for (int i=0; i<size; i++) { 287cdf0e10cSrcweir pVal[i] = new PropertyValue(); 288cdf0e10cSrcweir pVal[i].Name = "TestCase"+i; 289cdf0e10cSrcweir pVal[i].Value = sTestCases[i]; 290cdf0e10cSrcweir } 291cdf0e10cSrcweir return pVal; 292cdf0e10cSrcweir } 293cdf0e10cSrcweir 294cdf0e10cSrcweir 295cdf0e10cSrcweir /** 296cdf0e10cSrcweir * 297cdf0e10cSrcweir * Gives a factory for creating the service. 298cdf0e10cSrcweir * This method is called by the <code>JavaLoader</code> 299cdf0e10cSrcweir * <p> 300cdf0e10cSrcweir * @return returns a <code>XSingleServiceFactory</code> for creating the component 301cdf0e10cSrcweir * @param implName the name of the implementation for which a service is desired 302cdf0e10cSrcweir * @param multiFactory the service manager to be used if needed 303cdf0e10cSrcweir * @param regKey the registryKey 304cdf0e10cSrcweir * @see com.sun.star.comp.loader.JavaLoader 305cdf0e10cSrcweir */ __getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey)306cdf0e10cSrcweir public static XSingleServiceFactory __getServiceFactory(String implName, 307cdf0e10cSrcweir XMultiServiceFactory multiFactory, XRegistryKey regKey) 308cdf0e10cSrcweir { 309cdf0e10cSrcweir XSingleServiceFactory xSingleServiceFactory = null; 310cdf0e10cSrcweir 311cdf0e10cSrcweir if (implName.equals(RunnerService.class.getName())) 312cdf0e10cSrcweir xSingleServiceFactory = FactoryHelper.getServiceFactory( 313cdf0e10cSrcweir RunnerService.class, __serviceName, multiFactory, regKey); 314cdf0e10cSrcweir xMSF = multiFactory; 315cdf0e10cSrcweir return xSingleServiceFactory; 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir /** 319cdf0e10cSrcweir * Writes the service information into the given registry key. 320cdf0e10cSrcweir * This method is called by the <code>JavaLoader</code> 321cdf0e10cSrcweir * <p> 322cdf0e10cSrcweir * @return returns true if the operation succeeded 323cdf0e10cSrcweir * @param regKey the registryKey 324cdf0e10cSrcweir * @see com.sun.star.comp.loader.JavaLoader 325cdf0e10cSrcweir */ __writeRegistryServiceInfo(XRegistryKey regKey)326cdf0e10cSrcweir public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { 327cdf0e10cSrcweir return FactoryHelper.writeRegistryServiceInfo(RunnerService.class.getName(), 328cdf0e10cSrcweir __serviceName, regKey); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir 331cdf0e10cSrcweir /** 332cdf0e10cSrcweir * empty: not needed here. 333cdf0e10cSrcweir */ setPropertyValues(PropertyValue[] propertyValue)334cdf0e10cSrcweir public void setPropertyValues(PropertyValue[] propertyValue) 335cdf0e10cSrcweir throws com.sun.star.beans.UnknownPropertyException, 336cdf0e10cSrcweir com.sun.star.beans.PropertyVetoException, 337cdf0e10cSrcweir com.sun.star.lang.IllegalArgumentException, 338cdf0e10cSrcweir com.sun.star.lang.WrappedTargetException { 339cdf0e10cSrcweir // empty implementation 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir 345cdf0e10cSrcweir 346cdf0e10cSrcweir 347cdf0e10cSrcweir 348cdf0e10cSrcweir 349cdf0e10cSrcweir 350cdf0e10cSrcweir 351cdf0e10cSrcweir 352cdf0e10cSrcweir 353cdf0e10cSrcweir 354cdf0e10cSrcweir 355cdf0e10cSrcweir 356cdf0e10cSrcweir 357cdf0e10cSrcweir 358cdf0e10cSrcweir 359cdf0e10cSrcweir 360cdf0e10cSrcweir 361cdf0e10cSrcweir 362cdf0e10cSrcweir 363cdf0e10cSrcweir 364cdf0e10cSrcweir 365cdf0e10cSrcweir 366cdf0e10cSrcweir 367cdf0e10cSrcweir 368cdf0e10cSrcweir 369cdf0e10cSrcweir 370cdf0e10cSrcweir 371cdf0e10cSrcweir 372cdf0e10cSrcweir 373cdf0e10cSrcweir 374cdf0e10cSrcweir 375cdf0e10cSrcweir 376cdf0e10cSrcweir 377cdf0e10cSrcweir 378cdf0e10cSrcweir 379cdf0e10cSrcweir 380cdf0e10cSrcweir 381cdf0e10cSrcweir 382cdf0e10cSrcweir 383cdf0e10cSrcweir 384cdf0e10cSrcweir 385cdf0e10cSrcweir 386cdf0e10cSrcweir 387cdf0e10cSrcweir 388cdf0e10cSrcweir 389cdf0e10cSrcweir 390cdf0e10cSrcweir 391cdf0e10cSrcweir 392cdf0e10cSrcweir 393cdf0e10cSrcweir 394