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 /** complex tests to check the UNO-API 24cdf0e10cSrcweir **/ 25cdf0e10cSrcweir package complex.unoapi; 26cdf0e10cSrcweir 27cdf0e10cSrcweir // imports 28cdf0e10cSrcweir import base.java_complex; 29cdf0e10cSrcweir import complexlib.ComplexTestCase; 30cdf0e10cSrcweir import helper.OfficeProvider; 31cdf0e10cSrcweir import helper.ParameterNotFoundException; 32cdf0e10cSrcweir import helper.ProcessHandler; 33cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 34cdf0e10cSrcweir import helper.BuildEnvTools; 35cdf0e10cSrcweir import helper.ComplexDescGetter; 36cdf0e10cSrcweir import helper.CwsDataExchangeImpl; 37cdf0e10cSrcweir import java.io.File; 38cdf0e10cSrcweir // import java.io.FileFilter; 39cdf0e10cSrcweir import java.util.ArrayList; 40cdf0e10cSrcweir import java.util.HashMap; 41cdf0e10cSrcweir import java.util.Iterator; 42cdf0e10cSrcweir import java.util.Set; 43cdf0e10cSrcweir import share.DescEntry; 44cdf0e10cSrcweir import util.PropertyName; 45cdf0e10cSrcweir import util.utils; 46cdf0e10cSrcweir 47cdf0e10cSrcweir /** 48cdf0e10cSrcweir * This Complex Test will test the UNO-API by calling dmake in <B>$MODULE</B>/qa/unoapi<p> 49cdf0e10cSrcweir * This test depends on some requirments: 50cdf0e10cSrcweir * The <B>TestJob</B> is <b>-o complex.unoapi.CheckModuleAPI::module(<CODE>MODULE</CODE>)</b><p> where <CODE>MODULE</CODE> 51cdf0e10cSrcweir * could be the following:<p> 52cdf0e10cSrcweir * <ul> 53cdf0e10cSrcweir * <li><b>all</b> iterates over <CODE>SRC_ROOT</CODE> and call <CODE>dmake</CODE> in all qa/unoapi folder</li><p> 54cdf0e10cSrcweir * <li><b>$module</b> call dmake in $module/qa/unoapi folder</li><p> 55cdf0e10cSrcweir * <li><b>$module1,$module2,...</b> call dmake in $module1/qa/unoapi folder then in $module2/qa/unoapi folder and so on</li><p> 56cdf0e10cSrcweir * </ul><p> 57cdf0e10cSrcweir * 58cdf0e10cSrcweir * Also you have to fill the following parameter: 59cdf0e10cSrcweir * <ul> 60cdf0e10cSrcweir * <li><b>SHELL</b>: fill this parameter with a shell</li> 61cdf0e10cSrcweir * </ul> 62cdf0e10cSrcweir * 63cdf0e10cSrcweir */ 64cdf0e10cSrcweir public class CheckModuleAPI extends ComplexTestCase 65cdf0e10cSrcweir { 66cdf0e10cSrcweir 67cdf0e10cSrcweir private static String mSRC_ROOT = null; 68cdf0e10cSrcweir private static boolean mIsInitialized = false; 69cdf0e10cSrcweir private final static boolean mContinue = true; 70cdf0e10cSrcweir private static boolean mDebug = false; 71cdf0e10cSrcweir private static BuildEnvTools bet = null; 72cdf0e10cSrcweir 73cdf0e10cSrcweir /** 74cdf0e10cSrcweir * Initialize the test environment. 75cdf0e10cSrcweir * This method checks for all neccesarry parameter and exit if not all parameter are set. 76cdf0e10cSrcweir * 77cdf0e10cSrcweir * Further this method starts an office instance and gets the office some more time to start. This is because 78cdf0e10cSrcweir * some freshly installed offices don not have such a user tree. The office will create it on its first start, 79cdf0e10cSrcweir * but this will take some time. 80cdf0e10cSrcweir * Note: This funktionality is only reasonable with parameter <CODE>-noOffice true</CODE> 81cdf0e10cSrcweir */ before()82cdf0e10cSrcweir public void before() 83cdf0e10cSrcweir { 84cdf0e10cSrcweir 85cdf0e10cSrcweir if (!mIsInitialized) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir mIsInitialized = true; 88cdf0e10cSrcweir 89cdf0e10cSrcweir try 90cdf0e10cSrcweir { 91cdf0e10cSrcweir 92cdf0e10cSrcweir bet = new BuildEnvTools(param, log); 93cdf0e10cSrcweir 94cdf0e10cSrcweir } 95cdf0e10cSrcweir catch (ParameterNotFoundException ex) 96cdf0e10cSrcweir { 97cdf0e10cSrcweir this.failed(ex.toString(), false); 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir mSRC_ROOT = bet.getSrcRoot(); 101cdf0e10cSrcweir 102cdf0e10cSrcweir mDebug = param.getBool(PropertyName.DEBUG_IS_ACTIVE); 103cdf0e10cSrcweir 104cdf0e10cSrcweir } 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir /** 108cdf0e10cSrcweir * let API tests run. 109cdf0e10cSrcweir * @param module 110cdf0e10cSrcweir */ checkModule(String module)111cdf0e10cSrcweir public void checkModule(String module) 112cdf0e10cSrcweir { 113cdf0e10cSrcweir log.println(utils.getDateTime() + ": start testing module '" + module + "'"); 114cdf0e10cSrcweir 115cdf0e10cSrcweir log.println(utils.getDateTime() + "start new Office instance..."); 116cdf0e10cSrcweir 117cdf0e10cSrcweir // TODO: is Office started with this program? 118cdf0e10cSrcweir final OfficeProvider officeProvider = new OfficeProvider(); 119cdf0e10cSrcweir 120cdf0e10cSrcweir log.println(utils.getDateTime() + "Receiving the ServiceManager of the Office "); 121cdf0e10cSrcweir final XMultiServiceFactory msf = (XMultiServiceFactory) officeProvider.getManager(param); 122cdf0e10cSrcweir assure("couldnot get ServiceFarcotry", msf != null, mContinue); 123cdf0e10cSrcweir param.put("ServiceFactory", msf); 124cdf0e10cSrcweir 125cdf0e10cSrcweir final String sep = System.getProperty("file.separator"); 126cdf0e10cSrcweir final String sUnoapi = getModulePath(module); 127cdf0e10cSrcweir final File fUnoapi = new File(sUnoapi); 128cdf0e10cSrcweir final String sMakeFile = sUnoapi + sep + "makefile.mk"; 129cdf0e10cSrcweir final File fMakeFile = new File(sMakeFile); 130cdf0e10cSrcweir assure("ERROR: could not find makefile: '" + sMakeFile + "'", fMakeFile.exists(), mContinue); 131cdf0e10cSrcweir 132cdf0e10cSrcweir final String[] commands = getDmakeCommands(sUnoapi); 133cdf0e10cSrcweir 134cdf0e10cSrcweir final ProcessHandler procHdl = bet.runCommandsInEnvironmentShell(commands, fUnoapi, 0); 135cdf0e10cSrcweir log.println("exit code of dmake: " + procHdl.getExitCode()); 136cdf0e10cSrcweir String test = procHdl.getOutputText(); 137cdf0e10cSrcweir test += procHdl.getErrorText(); 138cdf0e10cSrcweir // if (mDebug) { 139cdf0e10cSrcweir // log.println("---> Output of dmake:"); 140cdf0e10cSrcweir // log.println(procHdl.getOutputText()); 141cdf0e10cSrcweir // log.println("<--- Output of dmake:"); 142cdf0e10cSrcweir // log.println("---> Error output of dmake:"); 143cdf0e10cSrcweir // log.println(procHdl.getErrorText()); 144cdf0e10cSrcweir // log.println("<--- Error output of dmake:"); 145cdf0e10cSrcweir // } 146cdf0e10cSrcweir assure("module '" + module + "' failed", verifyOutput(test), mContinue); 147cdf0e10cSrcweir log.println(utils.getDateTime() + " module '" + module + "': kill existing office..."); 148cdf0e10cSrcweir 149cdf0e10cSrcweir // TODO: how to check if the office is not started with this process. 150cdf0e10cSrcweir boolean bNoOffice = param.getBool("NoOffice"); 151cdf0e10cSrcweir if (!bNoOffice) 152cdf0e10cSrcweir { 153cdf0e10cSrcweir try 154cdf0e10cSrcweir { 155cdf0e10cSrcweir officeProvider.closeExistingOffice(param, true); 156cdf0e10cSrcweir } 157cdf0e10cSrcweir catch (java.lang.UnsatisfiedLinkError exception) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir log.println("Office seems not to be running"); 160cdf0e10cSrcweir } 161cdf0e10cSrcweir } 162cdf0e10cSrcweir } getQaUnoApiPath(String srcRoot, String _sModul)163cdf0e10cSrcweir private String getQaUnoApiPath(String srcRoot, String _sModul) 164cdf0e10cSrcweir { 165cdf0e10cSrcweir File aFile = new File(srcRoot); 166cdf0e10cSrcweir if (!aFile.exists()) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir System.out.println("ERROR: srcRoot '" + srcRoot + "' does not exist."); 169cdf0e10cSrcweir return null; 170cdf0e10cSrcweir } 171cdf0e10cSrcweir String sModulePath = srcRoot; 172cdf0e10cSrcweir sModulePath += File.separator; 173cdf0e10cSrcweir sModulePath += _sModul; 174cdf0e10cSrcweir 175cdf0e10cSrcweir File aModulePath = new File(sModulePath); 176cdf0e10cSrcweir if (! aModulePath.exists()) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir aModulePath = new File(sModulePath + ".lnk"); 179cdf0e10cSrcweir if (! aModulePath.exists()) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir aModulePath = new File(sModulePath + ".link"); 182cdf0e10cSrcweir if (! aModulePath.exists()) 183cdf0e10cSrcweir { 184cdf0e10cSrcweir // module does not exist. 185cdf0e10cSrcweir return null; 186cdf0e10cSrcweir } 187cdf0e10cSrcweir } 188cdf0e10cSrcweir } 189cdf0e10cSrcweir sModulePath = aModulePath.getAbsolutePath(); 190cdf0e10cSrcweir sModulePath += File.separator; 191cdf0e10cSrcweir sModulePath += "qa"; 192cdf0e10cSrcweir sModulePath += File.separator; 193cdf0e10cSrcweir sModulePath += "unoapi"; 194cdf0e10cSrcweir File aModulePathQaUnoApi = new File(sModulePath); 195cdf0e10cSrcweir if (aModulePathQaUnoApi.exists()) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir return aModulePathQaUnoApi.getAbsolutePath(); 198cdf0e10cSrcweir } 199cdf0e10cSrcweir return null; 200cdf0e10cSrcweir } doesQaUnoApiFolderExist(String srcRoot, String _sModul)201cdf0e10cSrcweir private boolean doesQaUnoApiFolderExist(String srcRoot, String _sModul) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir if (getQaUnoApiPath(srcRoot, _sModul) != null) 204cdf0e10cSrcweir { 205cdf0e10cSrcweir return true; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir return false; 208cdf0e10cSrcweir } 209cdf0e10cSrcweir /* 210cdf0e10cSrcweir private boolean doesQaUnoApiFolderExist(File srcRoot) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir final FolderFilter qaFilter = new FolderFilter("qa"); 213cdf0e10cSrcweir final File[] qaTree = srcRoot.listFiles(qaFilter); 214cdf0e10cSrcweir if (qaTree != null) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir for (int j = 0; j < qaTree.length; j++) 217cdf0e10cSrcweir { 218cdf0e10cSrcweir final File qaFolder = qaTree[j]; 219cdf0e10cSrcweir final FolderFilter apiFilter = new FolderFilter("unoapi"); 220cdf0e10cSrcweir final File[] apiTree = qaFolder.listFiles(apiFilter); 221cdf0e10cSrcweir if (apiTree != null && apiTree.length > 0) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir return true; 224cdf0e10cSrcweir } 225cdf0e10cSrcweir } 226cdf0e10cSrcweir } 227cdf0e10cSrcweir return false; 228cdf0e10cSrcweir } 229cdf0e10cSrcweir */ 230cdf0e10cSrcweir getAllModuleCommand()231cdf0e10cSrcweir private String[] getAllModuleCommand() 232cdf0e10cSrcweir { 233cdf0e10cSrcweir String[] checkModules; 234cdf0e10cSrcweir 235cdf0e10cSrcweir final String[] names = getModulesFromSourceRoot(); 236cdf0e10cSrcweir checkModules = getCheckModuleCommand(names); 237cdf0e10cSrcweir 238cdf0e10cSrcweir return checkModules; 239cdf0e10cSrcweir } 240cdf0e10cSrcweir getCheckModuleCommand(String[] names)241cdf0e10cSrcweir private String[] getCheckModuleCommand(String[] names) 242cdf0e10cSrcweir { 243cdf0e10cSrcweir String[] checkModules; 244cdf0e10cSrcweir checkModules = new String[names.length]; 245cdf0e10cSrcweir 246cdf0e10cSrcweir for (int i = 0; i < names.length; i++) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir // if a module is not added to a cws it contains a dot in its name (forms.lnk) 249cdf0e10cSrcweir if (names[i].indexOf(".") != -1) 250cdf0e10cSrcweir { 251cdf0e10cSrcweir checkModules[i] = "checkModule(" + names[i].substring(0, names[i].indexOf(".")) + ")"; 252cdf0e10cSrcweir } 253cdf0e10cSrcweir else 254cdf0e10cSrcweir { 255cdf0e10cSrcweir checkModules[i] = "checkModule(" + names[i] + ")"; 256cdf0e10cSrcweir } 257cdf0e10cSrcweir } 258cdf0e10cSrcweir return checkModules; 259cdf0e10cSrcweir } 260cdf0e10cSrcweir getDmakeCommands(String sUnoapi)261cdf0e10cSrcweir private String[] getDmakeCommands(String sUnoapi) 262cdf0e10cSrcweir { 263cdf0e10cSrcweir 264cdf0e10cSrcweir String[] cmdLines = null; 265cdf0e10cSrcweir final String platform = (String) param.get(PropertyName.OPERATING_SYSTEM); 266cdf0e10cSrcweir log.println("prepare command for platform " + platform); 267cdf0e10cSrcweir 268cdf0e10cSrcweir if (platform.equals(PropertyName.WNTMSCI)) 269cdf0e10cSrcweir { 270cdf0e10cSrcweir if (param.getBool(PropertyName.CYGWIN)) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir // cygwin stuff 273cdf0e10cSrcweir cmdLines = new String[] 274cdf0e10cSrcweir { 275cdf0e10cSrcweir "cd `cygpath '" + sUnoapi.replaceAll("\\\\", "\\\\\\\\") + "'`", 276cdf0e10cSrcweir "dmake" 277cdf0e10cSrcweir }; 278cdf0e10cSrcweir } 279cdf0e10cSrcweir else 280cdf0e10cSrcweir { 281cdf0e10cSrcweir // old 4NT 282cdf0e10cSrcweir cmdLines = new String[] 283cdf0e10cSrcweir { 284cdf0e10cSrcweir "cdd " + sUnoapi, 285cdf0e10cSrcweir "dmake" 286cdf0e10cSrcweir }; 287cdf0e10cSrcweir } 288cdf0e10cSrcweir } 289cdf0e10cSrcweir else 290cdf0e10cSrcweir { 291cdf0e10cSrcweir // unix 292cdf0e10cSrcweir cmdLines = new String[] 293cdf0e10cSrcweir { 294cdf0e10cSrcweir "cd " + sUnoapi, 295cdf0e10cSrcweir "dmake" 296cdf0e10cSrcweir }; 297cdf0e10cSrcweir } 298cdf0e10cSrcweir return cmdLines; 299cdf0e10cSrcweir } 300cdf0e10cSrcweir getCwsModuleCommand()301cdf0e10cSrcweir private String[] getCwsModuleCommand() 302cdf0e10cSrcweir { 303cdf0e10cSrcweir String[] checkModules; 304cdf0e10cSrcweir final String version = (String) param.get(PropertyName.VERSION); 305cdf0e10cSrcweir String[] names = null; 306cdf0e10cSrcweir if (version.startsWith("cws_")) 307cdf0e10cSrcweir { 308cdf0e10cSrcweir try 309cdf0e10cSrcweir { 310cdf0e10cSrcweir // cws version: all added modules must be tested 311cdf0e10cSrcweir final String cws = version.substring(4, version.length()); 312cdf0e10cSrcweir final CwsDataExchangeImpl cde = new CwsDataExchangeImpl(cws, param, log); 313cdf0e10cSrcweir final ArrayList addedModules = cde.getModules(); 314cdf0e10cSrcweir 315cdf0e10cSrcweir final ArrayList moduleNames = new ArrayList(); 316cdf0e10cSrcweir Iterator iterator = addedModules.iterator(); 317cdf0e10cSrcweir while (iterator.hasNext()) 318cdf0e10cSrcweir { 319cdf0e10cSrcweir String sModuleName = (String) iterator.next(); 320cdf0e10cSrcweir // String sFilename = mSRC_ROOT; // + File.separator + sModuleName; 321cdf0e10cSrcweir // final File sourceRoot = new File(sFilename); 322cdf0e10cSrcweir if (doesQaUnoApiFolderExist(mSRC_ROOT, sModuleName)) 323cdf0e10cSrcweir { 324cdf0e10cSrcweir moduleNames.add(sModuleName); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir } 327cdf0e10cSrcweir names = (String[]) moduleNames.toArray(new String[0]); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir catch (ParameterNotFoundException ex) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir this.failed(ex.toString(), false); 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir 335cdf0e10cSrcweir } 336cdf0e10cSrcweir else 337cdf0e10cSrcweir { 338cdf0e10cSrcweir // major version: all modules must be tested 339cdf0e10cSrcweir names = getModulesFromSourceRoot(); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir checkModules = getCheckModuleCommand(names); 342cdf0e10cSrcweir 343cdf0e10cSrcweir return checkModules; 344cdf0e10cSrcweir } 345cdf0e10cSrcweir getDefinedModuleCommand(String module)346cdf0e10cSrcweir private String[] getDefinedModuleCommand(String module) 347cdf0e10cSrcweir { 348cdf0e10cSrcweir String[] checkModules = null; 349cdf0e10cSrcweir // list of modules to test: (sw,sc,sd) 350cdf0e10cSrcweir if (module.indexOf(",") != -1) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir final String[] names = module.split(","); 353cdf0e10cSrcweir checkModules = new String[names.length]; 354cdf0e10cSrcweir for (int i = 0; i < names.length; i++) 355cdf0e10cSrcweir { 356cdf0e10cSrcweir final String moduleName = names[i].trim(); 357cdf0e10cSrcweir 358cdf0e10cSrcweir // File sourceRoot = new File(mSRC_ROOT + File.separator + moduleName); 359cdf0e10cSrcweir // if (!sourceRoot.exists()) 360cdf0e10cSrcweir // { 361cdf0e10cSrcweir // sourceRoot = new File(mSRC_ROOT + File.separator + moduleName + ".lnk"); 362cdf0e10cSrcweir // } 363cdf0e10cSrcweir 364cdf0e10cSrcweir if (doesQaUnoApiFolderExist(mSRC_ROOT, moduleName)) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir checkModules[i] = "checkModule(" + moduleName + ")"; 367cdf0e10cSrcweir } 368cdf0e10cSrcweir } 369cdf0e10cSrcweir } 370cdf0e10cSrcweir else 371cdf0e10cSrcweir { 372cdf0e10cSrcweir // File sourceRoot = new File(mSRC_ROOT + File.separator + module); 373cdf0e10cSrcweir // if (!sourceRoot.exists()) 374cdf0e10cSrcweir // { 375cdf0e10cSrcweir // sourceRoot = new File(mSRC_ROOT + File.separator + module + ".lnk"); 376cdf0e10cSrcweir // } 377cdf0e10cSrcweir if (doesQaUnoApiFolderExist(mSRC_ROOT, module)) 378cdf0e10cSrcweir { 379cdf0e10cSrcweir checkModules = new String[] 380cdf0e10cSrcweir { 381cdf0e10cSrcweir "checkModule(" + module + ")" 382cdf0e10cSrcweir }; 383cdf0e10cSrcweir } 384cdf0e10cSrcweir } 385cdf0e10cSrcweir return checkModules; 386cdf0e10cSrcweir } 387cdf0e10cSrcweir getModulePath(String module)388cdf0e10cSrcweir private String getModulePath(String module) 389cdf0e10cSrcweir { 390cdf0e10cSrcweir 391cdf0e10cSrcweir // String sUnoapi = null; 392cdf0e10cSrcweir // final String sep = System.getProperty("file.separator"); 393cdf0e10cSrcweir // final File srcRoot = new File(mSRC_ROOT); 394cdf0e10cSrcweir 395cdf0e10cSrcweir // final FolderFilter qaFilter = new FolderFilter(module); 396cdf0e10cSrcweir // final File[] moduleTree = srcRoot.listFiles(qaFilter); 397cdf0e10cSrcweir // if (moduleTree != null) 398cdf0e10cSrcweir // { 399cdf0e10cSrcweir // if (mDebug) 400cdf0e10cSrcweir // { 401cdf0e10cSrcweir // log.println("moduleTree length:" + moduleTree.length); 402cdf0e10cSrcweir // log.println("moduleTree: " + moduleTree[0].getAbsolutePath()); 403cdf0e10cSrcweir // } 404cdf0e10cSrcweir // if (moduleTree != null) 405cdf0e10cSrcweir // { 406cdf0e10cSrcweir // sUnoapi = moduleTree[0].getAbsolutePath() + sep + "qa" + sep + "unoapi"; 407cdf0e10cSrcweir // } 408cdf0e10cSrcweir // } 409cdf0e10cSrcweir String sUnoapi = getQaUnoApiPath(mSRC_ROOT, module); 410cdf0e10cSrcweir return sUnoapi; 411cdf0e10cSrcweir } 412cdf0e10cSrcweir 413cdf0e10cSrcweir /** 414cdf0e10cSrcweir Some modules contains more the one project. This methods translates given project paramater to the 415cdf0e10cSrcweir * correspind module name. 416cdf0e10cSrcweir * 417cdf0e10cSrcweir * fwk -> framework 418cdf0e10cSrcweir * fwl -> framework 419cdf0e10cSrcweir * sch -> chart2 420cdf0e10cSrcweir * lnn -> lingu 421cdf0e10cSrcweir * lng -> linguistic 422cdf0e10cSrcweir * sfx -> sfx2 423cdf0e10cSrcweir * sm -> starmath 424cdf0e10cSrcweir */ getTranslatedNames(String module)425cdf0e10cSrcweir private String getTranslatedNames(String module) 426cdf0e10cSrcweir { 427cdf0e10cSrcweir 428cdf0e10cSrcweir final HashMap aModuleHashMap = new HashMap(); 429cdf0e10cSrcweir 430cdf0e10cSrcweir aModuleHashMap.put("fwk", "framework"); 431cdf0e10cSrcweir aModuleHashMap.put("fwl", "framework"); 432cdf0e10cSrcweir aModuleHashMap.put("sch", "chart2"); 433cdf0e10cSrcweir aModuleHashMap.put("lnn", "lingu"); 434cdf0e10cSrcweir aModuleHashMap.put("lng", "linguistic"); 435cdf0e10cSrcweir aModuleHashMap.put("sfx", "sfx2"); 436cdf0e10cSrcweir aModuleHashMap.put("sm", "starmath"); 437cdf0e10cSrcweir 438cdf0e10cSrcweir // it could the that the parameter looks like "fwk,fwl". This results in double "famework,framework". 439cdf0e10cSrcweir // The following loop correct this to only one "framework" 440cdf0e10cSrcweir 441cdf0e10cSrcweir final Set keys = aModuleHashMap.keySet(); 442cdf0e10cSrcweir final Iterator iterator = keys.iterator(); 443cdf0e10cSrcweir while (iterator.hasNext()) 444cdf0e10cSrcweir { 445cdf0e10cSrcweir 446cdf0e10cSrcweir final String key = (String) iterator.next(); 447cdf0e10cSrcweir final String value = (String) aModuleHashMap.get(key); 448cdf0e10cSrcweir 449cdf0e10cSrcweir module = module.replaceAll(key, value); 450cdf0e10cSrcweir 451cdf0e10cSrcweir final int count = module.split(value).length; 452cdf0e10cSrcweir if (count > 2) 453cdf0e10cSrcweir { 454cdf0e10cSrcweir for (int i = 2; i < count; i++) 455cdf0e10cSrcweir { 456cdf0e10cSrcweir module.replaceFirst("," + value, ""); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir return module; 462cdf0e10cSrcweir } 463cdf0e10cSrcweir verifyOutput(String output)464cdf0e10cSrcweir private boolean verifyOutput(String output) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir 467cdf0e10cSrcweir log.println("verify output..."); 468cdf0e10cSrcweir boolean ok = false; 469cdf0e10cSrcweir final String[] outs = output.split("\n"); 470cdf0e10cSrcweir 471cdf0e10cSrcweir for (int i = 0; i < outs.length; i++) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir final String line = outs[i]; 474cdf0e10cSrcweir if (line.matches("[0-9]+? of [0-9]+? tests failed")) 475cdf0e10cSrcweir { 476cdf0e10cSrcweir log.println("mached line: " + line); 477cdf0e10cSrcweir if (line.matches("0 of [0-9]+? tests failed")) 478cdf0e10cSrcweir { 479cdf0e10cSrcweir ok = true; 480cdf0e10cSrcweir log.println("Module passed OK"); 481cdf0e10cSrcweir } 482cdf0e10cSrcweir else 483cdf0e10cSrcweir { 484cdf0e10cSrcweir log.println("Module passed FAILED"); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir } 487cdf0e10cSrcweir } 488cdf0e10cSrcweir 489cdf0e10cSrcweir if (!ok) 490cdf0e10cSrcweir { 491cdf0e10cSrcweir log.println("ERROR: could not find '0 of [0-9]+? tests failed' in output"); 492cdf0e10cSrcweir } 493cdf0e10cSrcweir 494cdf0e10cSrcweir return ok; 495cdf0e10cSrcweir } 496cdf0e10cSrcweir getModulesFromSourceRoot()497cdf0e10cSrcweir private String[] getModulesFromSourceRoot() 498cdf0e10cSrcweir { 499cdf0e10cSrcweir log.println("**** run module tests over all modules ****"); 500cdf0e10cSrcweir 501cdf0e10cSrcweir log.println("search for qa/unoapi foldres in all modules based in "); 502cdf0e10cSrcweir log.println("'" + mSRC_ROOT + "'"); 503cdf0e10cSrcweir 504cdf0e10cSrcweir final ArrayList moduleNames = new ArrayList(); 505cdf0e10cSrcweir final File sourceRoot = new File(mSRC_ROOT); 506cdf0e10cSrcweir final File[] sourceTree = sourceRoot.listFiles(); 507cdf0e10cSrcweir 508cdf0e10cSrcweir // assure("Could not find any files in SOURCE_ROOT=" + mSRC_ROOT, sourceTree != null, false); 509cdf0e10cSrcweir 510cdf0e10cSrcweir for (int i = 0; i < sourceTree.length; i++) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir final File moduleName = sourceTree[i]; 513cdf0e10cSrcweir String sModuleName = moduleName.getName(); // (String)moduleNames.get(i); 514cdf0e10cSrcweir if (doesQaUnoApiFolderExist(mSRC_ROOT, sModuleName)) 515cdf0e10cSrcweir { 516cdf0e10cSrcweir // addIfQaUnoApiFolderExist(moduleName, moduleNames); 517cdf0e10cSrcweir moduleNames.add(sModuleName); 518cdf0e10cSrcweir } 519cdf0e10cSrcweir } 520cdf0e10cSrcweir 521cdf0e10cSrcweir final String[] names = (String[]) moduleNames.toArray(new String[0]); 522cdf0e10cSrcweir return names; 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir /** 526cdf0e10cSrcweir * This function generates a list of modules to test and call <CODE>checkModule</CODE> for every module. 527cdf0e10cSrcweir * <p> 528cdf0e10cSrcweir * 529cdf0e10cSrcweir * @param module names to test. This could be 530cdf0e10cSrcweir * <ul> 531cdf0e10cSrcweir * <li>a comma separated list of modules like 'sw,sc,sd'</li> 532cdf0e10cSrcweir * <li>'all' to test all modules </li> 533cdf0e10cSrcweir * <li>'auto' to check only modules which are added to the ChildWorkSpace</li> 534cdf0e10cSrcweir * </ul> 535cdf0e10cSrcweir */ module(String module)536cdf0e10cSrcweir public void module(String module) 537cdf0e10cSrcweir { 538cdf0e10cSrcweir 539cdf0e10cSrcweir String[] checkModules; 540cdf0e10cSrcweir final ComplexDescGetter desc = new ComplexDescGetter(); 541cdf0e10cSrcweir DescEntry entry = null; 542cdf0e10cSrcweir module = module.trim(); 543cdf0e10cSrcweir 544cdf0e10cSrcweir /* 545cdf0e10cSrcweir all: check all modules which contains a qa/unoapi folder 546cdf0e10cSrcweir auto: check all modules which contains a qa/unoapi folder except the module is not added 547cdf0e10cSrcweir */ 548cdf0e10cSrcweir if (module.equals("all")) 549cdf0e10cSrcweir { 550cdf0e10cSrcweir checkModules = getAllModuleCommand(); 551cdf0e10cSrcweir } 552cdf0e10cSrcweir else if (module.equals("auto")) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir checkModules = getCwsModuleCommand(); 555cdf0e10cSrcweir } 556cdf0e10cSrcweir else 557cdf0e10cSrcweir { 558cdf0e10cSrcweir module = getTranslatedNames(module); 559cdf0e10cSrcweir checkModules = getDefinedModuleCommand(module); 560cdf0e10cSrcweir } 561cdf0e10cSrcweir 562cdf0e10cSrcweir if (checkModules != null && checkModules.length > 0) 563cdf0e10cSrcweir { 564cdf0e10cSrcweir 565cdf0e10cSrcweir entry = desc.createTestDesc("complex.unoapi.CheckModuleAPI", "complex.unoapi.CheckModuleAPI", checkModules, 566cdf0e10cSrcweir log); 567cdf0e10cSrcweir 568cdf0e10cSrcweir final java_complex complex = new java_complex(); 569cdf0e10cSrcweir 570cdf0e10cSrcweir log.println("********** start test *************"); 571cdf0e10cSrcweir final boolean result = complex.executeTest(param, new DescEntry[] { entry }); 572cdf0e10cSrcweir log.println("********** end test *************"); 573cdf0e10cSrcweir 574cdf0e10cSrcweir assure("CheckModuleAPI.module(" + module + ") PASSED.FAILED", result); 575cdf0e10cSrcweir 576cdf0e10cSrcweir } 577cdf0e10cSrcweir else 578cdf0e10cSrcweir { 579cdf0e10cSrcweir log.println("No modules containing qa/unoapi folder found => OK"); 580cdf0e10cSrcweir state = true; 581cdf0e10cSrcweir } 582cdf0e10cSrcweir 583cdf0e10cSrcweir setUnoApiCwsStatus(state); 584cdf0e10cSrcweir 585cdf0e10cSrcweir } 586cdf0e10cSrcweir setUnoApiCwsStatus(boolean status)587cdf0e10cSrcweir private void setUnoApiCwsStatus(boolean status) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir 590cdf0e10cSrcweir if (!param.getBool(PropertyName.NO_CWS_ATTACH)) 591cdf0e10cSrcweir { 592cdf0e10cSrcweir 593cdf0e10cSrcweir final String version = (String) param.get(PropertyName.VERSION); 594cdf0e10cSrcweir if (version.startsWith("cws_")) 595cdf0e10cSrcweir { 596cdf0e10cSrcweir try 597cdf0e10cSrcweir { 598cdf0e10cSrcweir 599cdf0e10cSrcweir // cws version: all added modules must be tested 600cdf0e10cSrcweir final String cws = version.substring(4, version.length()); 601cdf0e10cSrcweir final CwsDataExchangeImpl cde = new CwsDataExchangeImpl(cws, param, log); 602cdf0e10cSrcweir cde.setUnoApiCwsStatus(status); 603cdf0e10cSrcweir } 604cdf0e10cSrcweir catch (ParameterNotFoundException ex) 605cdf0e10cSrcweir { 606cdf0e10cSrcweir log.println("ERROR: could not wirte status to EIS database: " + ex.toString()); 607cdf0e10cSrcweir } 608cdf0e10cSrcweir } 609cdf0e10cSrcweir } 610cdf0e10cSrcweir } 611cdf0e10cSrcweir getTestMethodNames()612cdf0e10cSrcweir public String[] getTestMethodNames() 613cdf0e10cSrcweir { 614cdf0e10cSrcweir return new String[] 615cdf0e10cSrcweir { 616cdf0e10cSrcweir "module(all)" 617cdf0e10cSrcweir }; 618cdf0e10cSrcweir } 619cdf0e10cSrcweir 620cdf0e10cSrcweir // class _FolderFilter implements FileFilter 621cdf0e10cSrcweir // { 622cdf0e10cSrcweir // 623cdf0e10cSrcweir // private String mFolderName; 624cdf0e10cSrcweir // 625cdf0e10cSrcweir // public FolderFilter(String folderName) 626cdf0e10cSrcweir // { 627cdf0e10cSrcweir // mFolderName = folderName; 628cdf0e10cSrcweir // } 629cdf0e10cSrcweir // 630cdf0e10cSrcweir // public boolean accept_(File pathname) 631cdf0e10cSrcweir // { 632cdf0e10cSrcweir // 633cdf0e10cSrcweir // boolean found = false; 634cdf0e10cSrcweir // if (pathname.isDirectory()) 635cdf0e10cSrcweir // { 636cdf0e10cSrcweir // if (pathname.getName().equals(mFolderName)) 637cdf0e10cSrcweir // { 638cdf0e10cSrcweir // found = true; 639cdf0e10cSrcweir // } 640cdf0e10cSrcweir // else if (pathname.getName().equals(mFolderName + ".lnk")) 641cdf0e10cSrcweir // { 642cdf0e10cSrcweir // found = true; 643cdf0e10cSrcweir // } 644cdf0e10cSrcweir // } 645cdf0e10cSrcweir // return found; 646cdf0e10cSrcweir // } 647cdf0e10cSrcweir // } 648cdf0e10cSrcweir } 649