Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/qadevOOo/runner/base/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 16 kB image not shown  

Quelle  java_fat.java   Sprache: JAVA

 
/*
 * 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;
    }
}

Messung V0.5
C=88 H=95 G=91

¤ Dauer der Verarbeitung: 0.5 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.