diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:51:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:51:28 +0000 |
commit | 940b4d1848e8c70ab7642901a68594e8016caffc (patch) | |
tree | eb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /qadevOOo/runner/base | |
parent | Initial commit. (diff) | |
download | libreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.tar.xz libreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.zip |
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'qadevOOo/runner/base')
-rw-r--r-- | qadevOOo/runner/base/TestBase.java | 30 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_complex.java | 150 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_fat.java | 472 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_fat_service.java | 237 |
4 files changed, 889 insertions, 0 deletions
diff --git a/qadevOOo/runner/base/TestBase.java b/qadevOOo/runner/base/TestBase.java new file mode 100644 index 000000000..9fd0b2deb --- /dev/null +++ b/qadevOOo/runner/base/TestBase.java @@ -0,0 +1,30 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +package base; + +import lib.TestParameters; +/** + * + * Base Interface to execute a given TestJob + */ +public interface TestBase { + + boolean executeTest(TestParameters param) throws Exception; + +} diff --git a/qadevOOo/runner/base/java_complex.java b/qadevOOo/runner/base/java_complex.java new file mode 100644 index 000000000..e0f6b7967 --- /dev/null +++ b/qadevOOo/runner/base/java_complex.java @@ -0,0 +1,150 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +package base; + +import complexlib.ComplexTestCase; +import util.DynamicClassLoader; +import share.DescGetter; +import stats.OutProducerFactory; +import helper.ComplexDescGetter; +import helper.AppProvider; +import helper.CfgParser; +import share.DescEntry; +import share.LogWriter; +import stats.Summarizer; +import lib.TestParameters; +import util.PropertyName; +import java.io.UnsupportedEncodingException; + +/** + * Test base for executing a java complex test. + * @see base.TestBase + */ +public class java_complex implements TestBase +{ + + /** + * This function executes the complex tests given as parameter "-o" or "TestJob". It queries for the correspond class + * and creates the JobDescription. + * @return true of all tests run successfully, else false + */ + public boolean executeTest(TestParameters param) + { + // get the test job + String testJob = ((String) param.get("TestJob")); + + DescGetter descGetter = new ComplexDescGetter(); + // get the test jobs + DescEntry[] entries = descGetter.getDescriptionFor(testJob, null, true); + + if (entries == null) { + System.out.println("Couldn't get Description for Job: " + testJob); + + return false; + } + + return executeTest(param, entries); + } + + /** + * This function run the given DescEntry[] as ComplexTest + * @return true of all tests run successfully, else false + */ + public boolean executeTest(TestParameters param, DescEntry[] entries) + { + DynamicClassLoader dcl = new DynamicClassLoader(); + ComplexTestCase testClass = null; + boolean returnVal = true; + +// the concept of the TimeOut depends on runner logs. If the runner log, +// for example to start a test method, the timeout was reset. This is not +// while the test itself log something like "open document...". +// A property of complex test could be that it has only one test method +// which works for several minutes. In this case the TimeOut get not trigger +// and the office was killed. +// In complex tests just use "ThreadTimeOut" as timeout. + + for (int i = 0; i < entries.length; i++) + { + + if (entries[i] == null) + { + continue; + } + String iniName = entries[i].longName; + iniName = iniName.replace('.', '/'); + CfgParser ini = new CfgParser(iniName + ".props"); + ini.getIniParameters(param); + + LogWriter log = (LogWriter) dcl.getInstance((String) param.get("LogWriter")); + + AppProvider office = null; + if (!param.getBool("NoOffice")) + { + try + { + office = (AppProvider) dcl.getInstance("helper.OfficeProvider"); + Object msf = office.getManager(param); + if (msf == null) + { + returnVal = false; + continue; + } + param.put("ServiceFactory", msf); + } + catch (IllegalArgumentException e) + { + office = null; + } + catch (UnsupportedEncodingException e) + { + office = null; + } + } + log.initialize(entries[i], param.getBool(PropertyName.LOGGING_IS_ACTIVE)); + entries[i].Logger = log; + + // create an instance + try + { + testClass = (ComplexTestCase) dcl.getInstance(entries[i].longName); + } + catch (java.lang.Exception e) + { + e.printStackTrace(); + return false; + } + testClass.executeMethods(entries[i], param); + + Summarizer sum = new Summarizer(); + sum.summarizeUp(entries[i]); + + if (office != null) + { + office.closeExistingOffice(param, false); + } + + LogWriter out = OutProducerFactory.createOutProducer(param); + + out.initialize(entries[i], true); + out.summary(entries[i]); + returnVal &= entries[i].State.endsWith("OK"); + } + return returnVal; + } +} diff --git a/qadevOOo/runner/base/java_fat.java b/qadevOOo/runner/base/java_fat.java new file mode 100644 index 000000000..bd21b0861 --- /dev/null +++ b/qadevOOo/runner/base/java_fat.java @@ -0,0 +1,472 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +package base; + +import helper.APIDescGetter; +import helper.AppProvider; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import lib.MultiMethodTest; +import lib.TestCase; +import lib.TestEnvironment; +import lib.TestParameters; +import lib.TestResult; +import share.DescEntry; +import share.DescGetter; +import share.LogWriter; +import stats.OutProducerFactory; +import stats.Summarizer; +import util.DynamicClassLoader; + +import com.sun.star.lang.XMultiServiceFactory; + +/** + * + * this class handles tests written in java and running on a fat Office + */ +public class java_fat implements TestBase { + + private boolean logging = true; + private DynamicClassLoader m_aDynamicClassLoader = null; + + private lib.TestParameters m_aParams; + private AppProvider m_aOffice; + + public boolean executeTest(lib.TestParameters _aParams) throws Exception { + m_aParams = _aParams; + + m_aDynamicClassLoader = new DynamicClassLoader(); + + DescGetter dg = new APIDescGetter(); + String job = (String) m_aParams.get("TestJob"); + String ExclusionFile = (String) m_aParams.get("ExclusionList"); + ArrayList<String> exclusions = null; + boolean retValue = true; + boolean isDebug = m_aParams.getBool("DebugIsActive"); + logging = m_aParams.getBool("LoggingIsActive"); + boolean keepdocument = m_aParams.getBool("KeepDocument"); + boolean newOffice = m_aParams + .getBool(util.PropertyName.NEW_OFFICE_INSTANCE); + if (keepdocument) { + System.setProperty("KeepDocument", "true"); + } + if (ExclusionFile != null) { + exclusions = getExclusionList(ExclusionFile, isDebug); + } + + String sDescriptionPath = (String) m_aParams.get("DescriptionPath"); + DescEntry[] entries = dg.getDescriptionFor(job, sDescriptionPath, + isDebug); + + if (entries == null) { + System.out.println("Couldn't get Description for Job: " + job); + + return false; + } + + m_aOffice = startOffice(m_aParams); + + boolean firstRun = true; + + // Run through all entries (e.g. sw.SwXBookmark.*) + + for (int l = 0; l < entries.length; l++) { + DescEntry entry = entries[l]; + + if (entry == null) { + continue; + } + + if (entry.hasErrorMsg) { + System.out.println(entries[l].ErrorMsg); + retValue = false; + continue; + } + + if (!firstRun && newOffice) { + if (!m_aOffice.closeExistingOffice(m_aParams, true)) { + m_aOffice.disposeManager(m_aParams); + } + startOffice(m_aParams); + } + firstRun = false; + + XMultiServiceFactory msf = m_aParams.getMSF(); + + if (msf == null) { + retValue = false; + continue; + } + + // get some helper classes + Summarizer sumIt = new Summarizer(); + TestCase tCase = getTestCase(entry); + if (tCase == null) { + continue; + } + + util.utils.pause(2000); + + System.out.println("Creating: " + entry.entryName); + + LogWriter log = (LogWriter) m_aDynamicClassLoader + .getInstance((String) m_aParams.get("LogWriter")); + log.initialize(entry, logging); + entry.UserDefinedParams = m_aParams; + + tCase.setLogWriter((PrintWriter) log); + tCase.initializeTestCase(m_aParams); + + TestEnvironment tEnv = getTestEnvironment(tCase, entry); + if (tEnv == null) { + continue; + } + + for (int j = 0; j < entry.SubEntryCount; j++) { + DescEntry aSubEntry = entry.SubEntries[j]; + final boolean bIsToTest = aSubEntry.isToTest; + if (!bIsToTest) { + Summarizer.summarizeDown(aSubEntry, "not part of the job"); + continue; + } + + final String sLongEntryName = aSubEntry.longName; + + if ((exclusions != null) + && (exclusions.contains(sLongEntryName))) { + Summarizer.summarizeDown(aSubEntry, "known issue"); + continue; + } + + // this will shown in test itself + + LogWriter ifclog = (LogWriter) m_aDynamicClassLoader + .getInstance((String) m_aParams.get("LogWriter")); + + ifclog.initialize(aSubEntry, logging); + aSubEntry.UserDefinedParams = m_aParams; + aSubEntry.Logger = ifclog; + + if (tEnv.isDisposed()) { + closeExistingOffice(); + tEnv = getEnv(entry, m_aParams); + tCase = tEnv.getTestCase(); + } + + lib.TestResult res = null; + + // run the interface test twice if it failed. + int countInterfaceTestRun = 0; + boolean finished = false; + while (!finished) { + try { + countInterfaceTestRun++; + finished = true; + res = executeInterfaceTest(aSubEntry, tEnv, m_aParams); + } catch (IllegalArgumentException iae) { + System.out.println("Couldn't load class " + + aSubEntry.entryName + ":"); + iae.printStackTrace(System.out); + Summarizer.summarizeDown(aSubEntry, iae.getMessage()); + } catch (java.lang.NoClassDefFoundError iae) { + System.out.println("Couldn't load class " + + aSubEntry.entryName + ":"); + iae.printStackTrace(System.out); + Summarizer.summarizeDown(aSubEntry, iae.getMessage()); + } catch (java.lang.RuntimeException e) { + closeExistingOffice(); + tEnv = getEnv(entry, m_aParams); + tCase = tEnv.getTestCase(); + if (countInterfaceTestRun < 2) { + finished = false; + } else { + Summarizer.summarizeDown(aSubEntry, e.toString() + + ".FAILED"); + } + } + } + setState(aSubEntry, res); + + sumIt.summarizeUp(aSubEntry); + + LogWriter sumIfc = OutProducerFactory + .createOutProducer(m_aParams); + aSubEntry.UserDefinedParams = m_aParams; + sumIfc.initialize(aSubEntry, logging); + sumIfc.summary(aSubEntry); + } + + try { + if (!keepdocument) { + tCase.cleanupTestCase(m_aParams); + } + } catch (Exception e) { + System.err.println("couldn't cleanup:" + e.toString()); + } catch (java.lang.NoClassDefFoundError e) { + System.err.println("couldn't cleanup:" + e.toString()); + } + + sumIt.summarizeUp(entry); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + + sumObj.initialize(entry, logging); + sumObj.summary(entry); + } + + if (entries.length > 0) { + System.out.println(); + + int counter = 0; + System.out + .println("Failures that appeared during scenario execution:"); + + for (int i = 0; i < entries.length; i++) { + final String sState = entries[i].State; + if (!sState.endsWith("OK")) { + System.out.println("\t " + entries[i].longName); + counter++; + } + } + + System.out.println(counter + " of " + entries.length + + " tests failed"); + if (counter != 0) { + retValue = false; + } + } + + closeExistingOffice(); + return retValue; + } + + private TestEnvironment getTestEnvironment(TestCase tCase, DescEntry entry) { + TestEnvironment tEnv = null; + + try { + tEnv = tCase.getTestEnvironment(m_aParams); + } catch (Exception e) { + System.out.println("Exception while creating " + + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + e.printStackTrace(); + tEnv = null; + } catch (java.lang.UnsatisfiedLinkError e) { + System.out.println("Exception while creating " + + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + tEnv = null; + } catch (java.lang.NoClassDefFoundError e) { + System.out.println("Exception while creating " + + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + tEnv = null; + } + + if (tEnv == null) { + Summarizer.summarizeDown(entry, + "Couldn't create " + tCase.getObjectName()); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + entry.UserDefinedParams = m_aParams; + sumObj.initialize(entry, logging); + sumObj.summary(entry); + } + return tEnv; + } + + private TestCase getTestCase(DescEntry _aEntry) { + TestCase tCase = null; + + try { + tCase = (TestCase) m_aDynamicClassLoader.getInstance("mod._" + + _aEntry.entryName); + } catch (java.lang.IllegalArgumentException ie) { + _aEntry.ErrorMsg = ie.getMessage(); + _aEntry.hasErrorMsg = true; + } catch (java.lang.NoClassDefFoundError ie) { + _aEntry.ErrorMsg = ie.getMessage(); + _aEntry.hasErrorMsg = true; + } + + if (tCase == null) { + Summarizer.summarizeDown(_aEntry, _aEntry.ErrorMsg); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + _aEntry.UserDefinedParams = m_aParams; + sumObj.initialize(_aEntry, logging); + sumObj.summary(_aEntry); + } + return tCase; + } + + private void setState(DescEntry aSubEntry, lib.TestResult res) { + if (res != null) { + for (int k = 0; k < aSubEntry.SubEntryCount; k++) { + DescEntry aSubSubEntry = aSubEntry.SubEntries[k]; + if (res.hasMethod(aSubSubEntry.entryName)) { + aSubSubEntry.State = res.getStatusFor( + aSubSubEntry.entryName).toString(); + } + } + } + } + + private TestEnvironment getEnv(DescEntry entry, TestParameters param) throws Exception { + TestCase tCase = null; + + try { + tCase = (TestCase) m_aDynamicClassLoader.getInstance("mod._" + + entry.entryName); + } catch (java.lang.IllegalArgumentException ie) { + entry.ErrorMsg = ie.getMessage(); + entry.hasErrorMsg = true; + } catch (java.lang.NoClassDefFoundError ie) { + entry.ErrorMsg = ie.getMessage(); + entry.hasErrorMsg = true; + } + + System.out.println("Creating: " + entry.entryName); + + entry.UserDefinedParams = param; + + LogWriter log = (LogWriter) m_aDynamicClassLoader + .getInstance((String) param.get("LogWriter")); + log.initialize(entry, logging); + tCase.setLogWriter((PrintWriter) log); + + try { + tCase.initializeTestCase(param); + TestEnvironment tEnv = tCase.getTestEnvironment(param); + if (tEnv == null) { + throw new Exception("Could not get env for '" + entry.entryName + "'"); + } + return tEnv; + } catch (com.sun.star.lang.DisposedException de) { + System.out.println("Office disposed"); + closeExistingOffice(); + throw de; + } catch (Exception e) { + System.out.println(e.getMessage()); + + closeExistingOffice(); + + entry.ErrorMsg = e.getMessage(); + entry.hasErrorMsg = true; + throw e; + } + } + + private void closeExistingOffice() { + helper.ProcessHandler ph = (helper.ProcessHandler) m_aParams + .get("AppProvider"); + + if (ph != null) { + m_aOffice.closeExistingOffice(m_aParams, true); + util.utils.pause(5000); + } + + } + + private ArrayList<String> getExclusionList(String url, boolean debug) { + ArrayList<String> entryList = new ArrayList<String>(); + String line = "#"; + BufferedReader exclusion = null; + + try { + InputStreamReader reader = new InputStreamReader(new FileInputStream(url), "UTF-8"); + exclusion = new BufferedReader(reader); + } catch (java.io.UnsupportedEncodingException uee) { + if (debug) { + System.out.println("Couldn't decode file " + url); + } + + return entryList; + } catch (java.io.FileNotFoundException fnfe) { + if (debug) { + System.out.println("Couldn't find file " + url); + } + + return entryList; + } + + try { + while (line != null) { + try { + if (!line.startsWith("#") && (line.length() > 1)) { + entryList.add(line.trim()); + } + + line = exclusion.readLine(); + } catch (java.io.IOException ioe) { + if (debug) { + System.out + .println("Exception while reading exclusion list"); + } + + return entryList; + } + } + } finally { + try { + exclusion.close(); + } catch (java.io.IOException ioe) { + } + } + + return entryList; + } + + private TestResult executeInterfaceTest(DescEntry entry, + TestEnvironment tEnv, TestParameters param) + throws IllegalArgumentException, java.lang.NoClassDefFoundError { + MultiMethodTest ifc = (MultiMethodTest) m_aDynamicClassLoader + .getInstance(entry.entryName); + return ifc.run(entry, tEnv, param); + } + + private AppProvider startOffice(lib.TestParameters param) throws UnsupportedEncodingException { + if (m_aDynamicClassLoader == null) { + m_aDynamicClassLoader = new DynamicClassLoader(); + } + + String officeProviderName = (String) param.get("OfficeProvider"); + AppProvider office = (AppProvider) m_aDynamicClassLoader + .getInstance(officeProviderName); + + if (office == null) { + System.out.println("ERROR: Wrong parameter 'OfficeProvider', " + + " it cannot be instantiated."); + System.exit(-1); + } + + XMultiServiceFactory msf = (XMultiServiceFactory) office + .getManager(param); + + if (msf != null) { + param.put("ServiceFactory", msf); + } + + return office; + } +} diff --git a/qadevOOo/runner/base/java_fat_service.java b/qadevOOo/runner/base/java_fat_service.java new file mode 100644 index 000000000..5a1a72bab --- /dev/null +++ b/qadevOOo/runner/base/java_fat_service.java @@ -0,0 +1,237 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +package base; + + +import java.io.PrintWriter; + +import lib.TestParameters; +import lib.TestCase; +import lib.MultiMethodTest; +import lib.TestEnvironment; +import util.DynamicClassLoader; + +import share.DescEntry; +import share.DescGetter; +import helper.APIDescGetter; + +import share.LogWriter; +import stats.Summarizer; + +/** + * this class handles tests written in java and running on a fat Office + * with the runner as a service. + */ +public class java_fat_service implements TestBase { + + protected boolean debug = false; + protected LogWriter log = null; + + public boolean executeTest(lib.TestParameters param) { + DynamicClassLoader dcl = new DynamicClassLoader(); + log = (LogWriter)dcl.getInstance((String)param.get("LogWriter")); + debug = ((Boolean) param.get("DebugIsActive")).booleanValue(); + + DescGetter dg = new APIDescGetter(); + String job = (String) param.get("TestJob"); + boolean retValue = true; + + //get Job-Descriptions + log.println("Getting Descriptions for Job: "+job); + DescEntry[] entries = dg.getDescriptionFor(job, + (String) param.get("DescriptionPath"),debug); + + if (entries == null ) { + log.println("Couldn't get Description for Job"); + return false; + } + + for (int l=0;l<entries.length;l++) { + + if (entries[l] == null ) { + continue; + } + + if (entries[l].hasErrorMsg) { + log.println(entries[l].ErrorMsg); + continue; + } + + DescEntry entry = entries[l]; + + //get some helper classes + Summarizer sumIt = new Summarizer(); + + TestCase tCase = null; + try { + tCase = (TestCase) + dcl.getInstance("mod._"+entry.entryName); + } catch (java.lang.IllegalArgumentException ie) { + entry.ErrorMsg=ie.getMessage(); + entry.hasErrorMsg=true; + } + + if (tCase == null) { + Summarizer.summarizeDown(entry,entry.ErrorMsg); + LogWriter sumObj = (LogWriter)dcl.getInstance( + (String)param.get("OutProducer")); + sumObj.initialize(entry,true); + entry.UserDefinedParams = param; + sumObj.summary(entry); + continue; + } + + log.println("Creating: "+tCase.getObjectName()); + + log.initialize(entry,true); + entry.UserDefinedParams = param; + TestEnvironment tEnv = null; + try { + tCase.setLogWriter((PrintWriter) log); + tCase.initializeTestCase(param); + tEnv = tCase.getTestEnvironment(param); + } catch (Exception e) { + log.println("Exception while creating "+tCase.getObjectName()); + log.println("Exception: " + e); + log.println("Message "+e.getMessage()); + tEnv = null; + } + if (tEnv == null) { + Summarizer.summarizeDown(entry,"Couldn't create "+tCase.getObjectName()); + LogWriter sumObj = (LogWriter)dcl.getInstance( + (String)param.get("OutProducer")); + sumObj.initialize(entry,true); + entry.UserDefinedParams = param; + sumObj.summary(entry); + continue; + } + log.println("Created "+tCase.getObjectName()+"\n"); + + for (int j=0;j<entry.SubEntryCount;j++) { + if (!entry.SubEntries[j].isToTest) { + Summarizer.summarizeDown(entry.SubEntries[j],"not part of the job"); + continue; + } + + log.println("running: "+entry.SubEntries[j].entryName); + + LogWriter ifclog = (LogWriter)dcl.getInstance( + (String)param.get("LogWriter")); + + ifclog.initialize(entry.SubEntries[j],true); + entry.SubEntries[j].UserDefinedParams = param; + entry.SubEntries[j].Logger = ifclog; + + if (tEnv == null || tEnv.isDisposed()) { + tEnv = getEnv(entry,param); + } + + MultiMethodTest ifc = null; + lib.TestResult res = null; + try { + ifc = (MultiMethodTest) dcl.getInstance( + entry.SubEntries[j].entryName); + res = ifc.run(entry.SubEntries[j],tEnv,param); + } catch (IllegalArgumentException iae) { + log.println("Couldn't load class "+entry.SubEntries[j].entryName); + log.println("**** "+iae.getMessage()+" ****"); + Summarizer.summarizeDown(entry.SubEntries[j],iae.getMessage()); + } catch (java.lang.RuntimeException e) { + tEnv = getEnv(entry,param); + ifc = (MultiMethodTest) dcl.getInstance( + entry.SubEntries[j].entryName); + if ((tEnv != null) && (ifc != null)) { + res = ifc.run(entry.SubEntries[j],tEnv,param); + } + else + { + res = null; + } + } + if (res != null) { + for (int k=0;k<entry.SubEntries[j].SubEntryCount;k++) { + if (res.hasMethod(entry.SubEntries[j].SubEntries[k].entryName)) { + entry.SubEntries[j].SubEntries[k].State= + res.getStatusFor(entry.SubEntries[j].SubEntries[k].entryName).toString(); + } + } + } + sumIt.summarizeUp(entry.SubEntries[j]); + + LogWriter sumIfc = (LogWriter)dcl.getInstance( + (String)param.get("OutProducer")); + + sumIfc.initialize(entry.SubEntries[j],true); + entry.SubEntries[j].UserDefinedParams = param; + sumIfc.summary(entry.SubEntries[j]); + } + try { + tCase.cleanupTestCase(param); + } catch (Exception e) { + e.printStackTrace((PrintWriter)log); + } + sumIt.summarizeUp(entry); + LogWriter sumObj = (LogWriter)dcl.getInstance( + (String)param.get("OutProducer")); + sumObj.initialize(entry,true); + sumObj.summary(entry); + } + if (entries.length > 1) { + log.println(""); + int counter = 0; + log.println("Failures that appeared during scenario execution:"); + for (int i=0;i<entries.length;i++) { + if (! entries[i].State.endsWith("OK")) { + log.println("\t "+entries[i].longName); + counter++; + } + } + log.println(counter +" of "+entries.length + " tests failed" ); + } + + return retValue; + } + + protected TestEnvironment getEnv(DescEntry entry, TestParameters param) { + DynamicClassLoader dcl = new DynamicClassLoader(); + log = (LogWriter)dcl.getInstance((String)param.get("LogWriter")); + + TestEnvironment tEnv = null; + + try { + TestCase tCase = (TestCase) dcl.getInstance("mod._"+entry.entryName); + log.println("Creating: " + tCase.getObjectName()); + log.initialize(entry, true); + entry.UserDefinedParams = param; + tCase.setLogWriter((PrintWriter) log); + try { + tCase.initializeTestCase(param); + tEnv = tCase.getTestEnvironment(param); + } catch (com.sun.star.lang.DisposedException de) { + log.println("Office disposed"); + } + } catch (java.lang.Exception ie) { + entry.ErrorMsg=ie.getMessage(); + entry.hasErrorMsg=true; + } + + return tEnv; + } + +} |