diff options
Diffstat (limited to 'qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java')
-rw-r--r-- | qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java | 654 |
1 files changed, 654 insertions, 0 deletions
diff --git a/qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java b/qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java new file mode 100644 index 000000000000..bf05553bcb6d --- /dev/null +++ b/qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java @@ -0,0 +1,654 @@ +/* + * ************************************************************************ + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + * ********************************************************************** + */ +/** complex tests to check the UNO-API + **/ +package complex.unoapi; + +// imports +import base.java_complex; +import complexlib.ComplexTestCase; +import helper.OfficeProvider; +import helper.ParameterNotFoundException; +import helper.ProcessHandler; +import com.sun.star.lang.XMultiServiceFactory; +import helper.BuildEnvTools; +import helper.ComplexDescGetter; +import helper.CwsDataExchangeImpl; +import java.io.File; +// import java.io.FileFilter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; +import share.DescEntry; +import util.PropertyName; +import util.utils; + +/** + * This Complex Test will test the UNO-API by calling dmake in <B>$MODULE</B>/qa/unoapi<p> + * This test depends on some requirments: + * The <B>TestJob</B> is <b>-o complex.unoapi.CheckModuleAPI::module(<CODE>MODULE</CODE>)</b><p> where <CODE>MODULE</CODE> + * could be the following:<p> + * <ul> + * <li><b>all</b> iterates over <CODE>SRC_ROOT</CODE> and call <CODE>dmake</CODE> in all qa/unoapi folder</li><p> + * <li><b>$module</b> call dmake in $module/qa/unoapi folder</li><p> + * <li><b>$module1,$module2,...</b> call dmake in $module1/qa/unoapi folder then in $module2/qa/unoapi folder and so on</li><p> + * </ul><p> + * + * Also you have to fill the following parameter: + * <ul> + * <li><b>SHELL</b>: fill this parameter with a shell</li> + * </ul> + * + */ +public class CheckModuleAPI extends ComplexTestCase +{ + + private static String mSRC_ROOT = null; + private static boolean mIsInitialized = false; + private final static boolean mContinue = true; + private static boolean mDebug = false; + private static BuildEnvTools bet = null; + + /** + * Initialize the test environment. + * This method checks for all neccesarry parameter and exit if not all parameter are set. + * + * Further this method starts an office instance and gets the office some more time to start. This is because + * some freshly installed offices don not have such a user tree. The office will create it on its first start, + * but this will take some time. + * Note: This funktionality is only reasonable with parameter <CODE>-noOffice true</CODE> + */ + public void before() + { + + if (!mIsInitialized) + { + mIsInitialized = true; + + try + { + + bet = new BuildEnvTools(param, log); + + } + catch (ParameterNotFoundException ex) + { + this.failed(ex.toString(), false); + } + + mSRC_ROOT = bet.getSrcRoot(); + + mDebug = param.getBool(PropertyName.DEBUG_IS_ACTIVE); + + } + } + + /** + * let API tests run. + * @param module + */ + public void checkModule(String module) + { + log.println(utils.getDateTime() + ": start testing module '" + module + "'"); + + log.println(utils.getDateTime() + "start new Office instance..."); + + // TODO: is Office started with this program? + final OfficeProvider officeProvider = new OfficeProvider(); + + log.println(utils.getDateTime() + "Receiving the ServiceManager of the Office "); + final XMultiServiceFactory msf = (XMultiServiceFactory) officeProvider.getManager(param); + assure("couldnot get ServiceFarcotry", msf != null, mContinue); + param.put("ServiceFactory", msf); + + final String sep = System.getProperty("file.separator"); + final String sUnoapi = getModulePath(module); + final File fUnoapi = new File(sUnoapi); + final String sMakeFile = sUnoapi + sep + "makefile.mk"; + final File fMakeFile = new File(sMakeFile); + assure("ERROR: could not find makefile: '" + sMakeFile + "'", fMakeFile.exists(), mContinue); + + final String[] commands = getDmakeCommands(sUnoapi); + + final ProcessHandler procHdl = bet.runCommandsInEnvironmentShell(commands, fUnoapi, 0); + log.println("exit code of dmake: " + procHdl.getExitCode()); + String test = procHdl.getOutputText(); + test += procHdl.getErrorText(); +// if (mDebug) { +// log.println("---> Output of dmake:"); +// log.println(procHdl.getOutputText()); +// log.println("<--- Output of dmake:"); +// log.println("---> Error output of dmake:"); +// log.println(procHdl.getErrorText()); +// log.println("<--- Error output of dmake:"); +// } + assure("module '" + module + "' failed", verifyOutput(test), mContinue); + log.println(utils.getDateTime() + " module '" + module + "': kill existing office..."); + + // TODO: how to check if the office is not started with this process. + boolean bNoOffice = param.getBool("NoOffice"); + if (!bNoOffice) + { + try + { + officeProvider.closeExistingOffice(param, true); + } + catch (java.lang.UnsatisfiedLinkError exception) + { + log.println("Office seems not to be running"); + } + } + } + private String getQaUnoApiPath(String srcRoot, String _sModul) + { + File aFile = new File(srcRoot); + if (!aFile.exists()) + { + System.out.println("ERROR: srcRoot '" + srcRoot + "' does not exist."); + return null; + } + String sModulePath = srcRoot; + sModulePath += File.separator; + sModulePath += _sModul; + + File aModulePath = new File(sModulePath); + if (! aModulePath.exists()) + { + aModulePath = new File(sModulePath + ".lnk"); + if (! aModulePath.exists()) + { + aModulePath = new File(sModulePath + ".link"); + if (! aModulePath.exists()) + { + // module does not exist. + return null; + } + } + } + sModulePath = aModulePath.getAbsolutePath(); + sModulePath += File.separator; + sModulePath += "qa"; + sModulePath += File.separator; + sModulePath += "unoapi"; + File aModulePathQaUnoApi = new File(sModulePath); + if (aModulePathQaUnoApi.exists()) + { + return aModulePathQaUnoApi.getAbsolutePath(); + } + return null; + } + private boolean doesQaUnoApiFolderExist(String srcRoot, String _sModul) + { + if (getQaUnoApiPath(srcRoot, _sModul) != null) + { + return true; + } + return false; + } +/* + private boolean doesQaUnoApiFolderExist(File srcRoot) + { + final FolderFilter qaFilter = new FolderFilter("qa"); + final File[] qaTree = srcRoot.listFiles(qaFilter); + if (qaTree != null) + { + for (int j = 0; j < qaTree.length; j++) + { + final File qaFolder = qaTree[j]; + final FolderFilter apiFilter = new FolderFilter("unoapi"); + final File[] apiTree = qaFolder.listFiles(apiFilter); + if (apiTree != null && apiTree.length > 0) + { + return true; + } + } + } + return false; + } +*/ + + private String[] getAllModuleCommand() + { + String[] checkModules; + + final String[] names = getModulesFromSourceRoot(); + checkModules = getCheckModuleCommand(names); + + return checkModules; + } + + private String[] getCheckModuleCommand(String[] names) + { + String[] checkModules; + checkModules = new String[names.length]; + + for (int i = 0; i < names.length; i++) + { + // if a module is not added to a cws it contains a dot in its name (forms.lnk) + if (names[i].indexOf(".") != -1) + { + checkModules[i] = "checkModule(" + names[i].substring(0, names[i].indexOf(".")) + ")"; + } + else + { + checkModules[i] = "checkModule(" + names[i] + ")"; + } + } + return checkModules; + } + + private String[] getDmakeCommands(String sUnoapi) + { + + String[] cmdLines = null; + final String platform = (String) param.get(PropertyName.OPERATING_SYSTEM); + log.println("prepare command for platform " + platform); + + if (platform.equals(PropertyName.WNTMSCI)) + { + if (param.getBool(PropertyName.CYGWIN)) + { + // cygwin stuff + cmdLines = new String[] + { + "cd `cygpath '" + sUnoapi.replaceAll("\\\\", "\\\\\\\\") + "'`", + "dmake" + }; + } + else + { + // old 4NT + cmdLines = new String[] + { + "cdd " + sUnoapi, + "dmake" + }; + } + } + else + { + // unix + cmdLines = new String[] + { + "cd " + sUnoapi, + "dmake" + }; + } + return cmdLines; + } + + private String[] getCwsModuleCommand() + { + String[] checkModules; + final String version = (String) param.get(PropertyName.VERSION); + String[] names = null; + if (version.startsWith("cws_")) + { + try + { + // cws version: all added modules must be tested + final String cws = version.substring(4, version.length()); + final CwsDataExchangeImpl cde = new CwsDataExchangeImpl(cws, param, log); + final ArrayList addedModules = cde.getModules(); + + final ArrayList moduleNames = new ArrayList(); + Iterator iterator = addedModules.iterator(); + while (iterator.hasNext()) + { + String sModuleName = (String) iterator.next(); + // String sFilename = mSRC_ROOT; // + File.separator + sModuleName; + // final File sourceRoot = new File(sFilename); + if (doesQaUnoApiFolderExist(mSRC_ROOT, sModuleName)) + { + moduleNames.add(sModuleName); + } + } + names = (String[]) moduleNames.toArray(new String[0]); + } + catch (ParameterNotFoundException ex) + { + this.failed(ex.toString(), false); + } + + + } + else + { + // major version: all modules must be tested + names = getModulesFromSourceRoot(); + } + checkModules = getCheckModuleCommand(names); + + return checkModules; + } + + private String[] getDefinedModuleCommand(String module) + { + String[] checkModules = null; + // list of modules to test: (sw,sc,sd) + if (module.indexOf(",") != -1) + { + final String[] names = module.split(","); + checkModules = new String[names.length]; + for (int i = 0; i < names.length; i++) + { + final String moduleName = names[i].trim(); + +// File sourceRoot = new File(mSRC_ROOT + File.separator + moduleName); +// if (!sourceRoot.exists()) +// { +// sourceRoot = new File(mSRC_ROOT + File.separator + moduleName + ".lnk"); +// } + + if (doesQaUnoApiFolderExist(mSRC_ROOT, moduleName)) + { + checkModules[i] = "checkModule(" + moduleName + ")"; + } + } + } + else + { +// File sourceRoot = new File(mSRC_ROOT + File.separator + module); +// if (!sourceRoot.exists()) +// { +// sourceRoot = new File(mSRC_ROOT + File.separator + module + ".lnk"); +// } + if (doesQaUnoApiFolderExist(mSRC_ROOT, module)) + { + checkModules = new String[] + { + "checkModule(" + module + ")" + }; + } + } + return checkModules; + } + + private String getModulePath(String module) + { + + // String sUnoapi = null; + // final String sep = System.getProperty("file.separator"); + // final File srcRoot = new File(mSRC_ROOT); + + // final FolderFilter qaFilter = new FolderFilter(module); + // final File[] moduleTree = srcRoot.listFiles(qaFilter); +// if (moduleTree != null) +// { +// if (mDebug) +// { +// log.println("moduleTree length:" + moduleTree.length); +// log.println("moduleTree: " + moduleTree[0].getAbsolutePath()); +// } +// if (moduleTree != null) +// { +// sUnoapi = moduleTree[0].getAbsolutePath() + sep + "qa" + sep + "unoapi"; +// } +// } + String sUnoapi = getQaUnoApiPath(mSRC_ROOT, module); + return sUnoapi; + } + + /** + Some modules contains more the one project. This methods translates given project paramater to the + * correspind module name. + * + * fwk -> framework + * fwl -> framework + * sch -> chart2 + * lnn -> lingu + * lng -> linguistic + * sfx -> sfx2 + * sm -> starmath + */ + private String getTranslatedNames(String module) + { + + final HashMap aModuleHashMap = new HashMap(); + + aModuleHashMap.put("fwk", "framework"); + aModuleHashMap.put("fwl", "framework"); + aModuleHashMap.put("sch", "chart2"); + aModuleHashMap.put("lnn", "lingu"); + aModuleHashMap.put("lng", "linguistic"); + aModuleHashMap.put("sfx", "sfx2"); + aModuleHashMap.put("sm", "starmath"); + + // it could the that the parameter looks like "fwk,fwl". This results in double "famework,framework". + // The following loop correct this to only one "framework" + + final Set keys = aModuleHashMap.keySet(); + final Iterator iterator = keys.iterator(); + while (iterator.hasNext()) + { + + final String key = (String) iterator.next(); + final String value = (String) aModuleHashMap.get(key); + + module = module.replaceAll(key, value); + + final int count = module.split(value).length; + if (count > 2) + { + for (int i = 2; i < count; i++) + { + module.replaceFirst("," + value, ""); + } + + } + } + return module; + } + + private boolean verifyOutput(String output) + { + + log.println("verify output..."); + boolean ok = false; + final String[] outs = output.split("\n"); + + for (int i = 0; i < outs.length; i++) + { + final String line = outs[i]; + if (line.matches("[0-9]+? of [0-9]+? tests failed")) + { + log.println("mached line: " + line); + if (line.matches("0 of [0-9]+? tests failed")) + { + ok = true; + log.println("Module passed OK"); + } + else + { + log.println("Module passed FAILED"); + } + } + } + + if (!ok) + { + log.println("ERROR: could not find '0 of [0-9]+? tests failed' in output"); + } + + return ok; + } + + private String[] getModulesFromSourceRoot() + { + log.println("**** run module tests over all modules ****"); + + log.println("search for qa/unoapi foldres in all modules based in "); + log.println("'" + mSRC_ROOT + "'"); + + final ArrayList moduleNames = new ArrayList(); + final File sourceRoot = new File(mSRC_ROOT); + final File[] sourceTree = sourceRoot.listFiles(); + +// assure("Could not find any files in SOURCE_ROOT=" + mSRC_ROOT, sourceTree != null, false); + + for (int i = 0; i < sourceTree.length; i++) + { + final File moduleName = sourceTree[i]; + String sModuleName = moduleName.getName(); // (String)moduleNames.get(i); + if (doesQaUnoApiFolderExist(mSRC_ROOT, sModuleName)) + { + // addIfQaUnoApiFolderExist(moduleName, moduleNames); + moduleNames.add(sModuleName); + } + } + + final String[] names = (String[]) moduleNames.toArray(new String[0]); + return names; + } + + /** + * This function generates a list of modules to test and call <CODE>checkModule</CODE> for every module. + * <p> + * + * @param module names to test. This could be + * <ul> + * <li>a comma separated list of modules like 'sw,sc,sd'</li> + * <li>'all' to test all modules </li> + * <li>'auto' to check only modules which are added to the ChildWorkSpace</li> + * </ul> + */ + public void module(String module) + { + + String[] checkModules; + final ComplexDescGetter desc = new ComplexDescGetter(); + DescEntry entry = null; + module = module.trim(); + + /* + all: check all modules which contains a qa/unoapi folder + auto: check all modules which contains a qa/unoapi folder except the module is not added + */ + if (module.equals("all")) + { + checkModules = getAllModuleCommand(); + } + else if (module.equals("auto")) + { + checkModules = getCwsModuleCommand(); + } + else + { + module = getTranslatedNames(module); + checkModules = getDefinedModuleCommand(module); + } + + if (checkModules != null && checkModules.length > 0) + { + + entry = desc.createTestDesc("complex.unoapi.CheckModuleAPI", "complex.unoapi.CheckModuleAPI", checkModules, + log); + + final java_complex complex = new java_complex(); + + log.println("********** start test *************"); + final boolean result = complex.executeTest(param, new DescEntry[] { entry }); + log.println("********** end test *************"); + + assure("CheckModuleAPI.module(" + module + ") PASSED.FAILED", result); + + } + else + { + log.println("No modules containing qa/unoapi folder found => OK"); + state = true; + } + + setUnoApiCwsStatus(state); + + } + + private void setUnoApiCwsStatus(boolean status) + { + + if (!param.getBool(PropertyName.NO_CWS_ATTACH)) + { + + final String version = (String) param.get(PropertyName.VERSION); + if (version.startsWith("cws_")) + { + try + { + + // cws version: all added modules must be tested + final String cws = version.substring(4, version.length()); + final CwsDataExchangeImpl cde = new CwsDataExchangeImpl(cws, param, log); + cde.setUnoApiCwsStatus(status); + } + catch (ParameterNotFoundException ex) + { + log.println("ERROR: could not wirte status to EIS database: " + ex.toString()); + } + } + } + } + + public String[] getTestMethodNames() + { + return new String[] + { + "module(all)" + }; + } + +// class _FolderFilter implements FileFilter +// { +// +// private String mFolderName; +// +// public FolderFilter(String folderName) +// { +// mFolderName = folderName; +// } +// +// public boolean accept_(File pathname) +// { +// +// boolean found = false; +// if (pathname.isDirectory()) +// { +// if (pathname.getName().equals(mFolderName)) +// { +// found = true; +// } +// else if (pathname.getName().equals(mFolderName + ".lnk")) +// { +// found = true; +// } +// } +// return found; +// } +// } +} |