org.hibernate.eclipse.console.test.mappingproject.MappingTestsBase.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.eclipse.console.test.mappingproject.MappingTestsBase.java

Source

/*******************************************************************************
 * Copyright (c) 2007-2009 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributor:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.hibernate.eclipse.console.test.mappingproject;

import java.io.IOException;
import java.util.regex.Pattern;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.internal.core.PackageFragmentRoot;
import org.eclipse.jdt.ui.IPackagesViewPart;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.hibernate.eclipse.console.HibernateConsolePerspectiveFactory;
import org.hibernate.eclipse.console.test.ConsoleTestMessages;
import org.hibernate.eclipse.console.test.project.ConfigurableTestProject;
import org.hibernate.eclipse.console.test.utils.ConsoleConfigUtils;
import org.hibernate.eclipse.console.utils.ProjectUtils;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestResult;
import junit.framework.TestSuite;

/**
 * @author Vitali Yemialyanchyk
 *
 */
@SuppressWarnings("restriction")
public abstract class MappingTestsBase extends TestCase {

    protected String consoleConfigName = null;

    protected IPackageFragment testPackage = null;

    protected ConfigurableTestProject testProject = null;

    protected TestResult result = null;

    protected int executions = 0;

    protected int openEditors = 0;

    public MappingTestsBase(String name) {
        super(name);
    }

    protected void setUp() throws Exception {
        super.setUp();

        testProject = new ConfigurableTestProject("JUnitTestProj" + System.currentTimeMillis()); //$NON-NLS-1$

        consoleConfigName = testProject.getIProject().getName();
        testPackage = null;

        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
                .setPerspective(PlatformUI.getWorkbench().getPerspectiveRegistry()
                        .findPerspectiveWithId("org.eclipse.ui.resourcePerspective")); //$NON-NLS-1$

        IPackagesViewPart packageExplorer = null;
        try {
            packageExplorer = (IPackagesViewPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                    .getActivePage().showView(JavaUI.ID_PACKAGES);
        } catch (PartInitException e) {
            throw new RuntimeException(e);
        }

        packageExplorer.selectAndReveal(testProject.getIJavaProject());

        //      PlatformUI.getWorkbench()
        //      .getActiveWorkbenchWindow().getActivePage().setPerspective(
        //            PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(HibernateConsolePerspectiveFactory.ID_CONSOLE_PERSPECTIVE));

        setUpConsoleConfig();

        ProjectUtils.toggleHibernateOnProject(testProject.getIProject(), true, consoleConfigName);
        testProject.fullBuild();
    }

    abstract protected void setUpConsoleConfig() throws Exception;

    /* (non-Javadoc)
     * @see junit.framework.TestCase#run(junit.framework.TestResult)
     */
    @Override
    public void run(TestResult result) {
        this.result = result;
        super.run(result);
    }

    public void tearDown() throws Exception {
        ProjectUtils.toggleHibernateOnProject(testProject.getIProject(), false, consoleConfigName);
        ConsoleConfigUtils.deleteConsoleConfig(consoleConfigName);
        testProject.deleteIProject(false);
        testProject = null;
        consoleConfigName = null;
        testPackage = null;
        super.tearDown();
    }

    /**
     * Inspect all it's packages of the current testProject and
     * execute all tests from TestSet, considering one test package as active.
     * @throws CoreException
     */
    public void allTestsRunForProject() throws CoreException {
        testProject.fullBuild();
        IPackageFragmentRoot[] roots = testProject.getIJavaProject().getAllPackageFragmentRoots();
        for (int i = 0; i < roots.length; i++) {
            if (roots[i].getClass() != PackageFragmentRoot.class) {
                continue;
            }
            PackageFragmentRoot packageFragmentRoot = (PackageFragmentRoot) roots[i];
            IJavaElement[] els = packageFragmentRoot.getChildren();
            for (int j = 0; j < els.length; j++) {
                IJavaElement javaElement = els[j];
                if (!(javaElement instanceof IPackageFragment)) {
                    continue;
                }
                testPackage = (IPackageFragment) javaElement;
                // use packages only with compilation units
                if (testPackage.getCompilationUnits().length == 0) {
                    continue;
                }
                if (Customization.U_TEST_PACKS_PATTERN) {
                    if (!Pattern.matches(Customization.TEST_PACKS_PATTERN, javaElement.getElementName())) {
                        continue;
                    }
                }

                long st_pack_time = System.currentTimeMillis();
                int prev_failCount = result.failureCount();
                int prev_errCount = result.errorCount();
                //
                TestSuite suite = TestSet.createTestSuite(consoleConfigName, testPackage, testProject);
                //
                customizeCfgXml(testPackage);
                //==============================
                //run all tests for package
                /** /
                suite.run(result);
                /**/
                for (int k = 0; k < suite.testCount(); k++) {
                    Test test = suite.testAt(k);
                    test.run(result);
                    closeAllEditors();
                }
                /**/
                closeAllEditors();
                //==============================
                executions++;
                if (Customization.USE_CONSOLE_OUTPUT) {
                    System.out.print(result.errorCount() - prev_errCount
                            + ConsoleTestMessages.HibernateAllMappingTests_errors + " \t"); //$NON-NLS-1$
                    System.out.print(result.failureCount() - prev_failCount
                            + ConsoleTestMessages.HibernateAllMappingTests_fails + "\t"); //$NON-NLS-1$
                    long period = System.currentTimeMillis() - st_pack_time;
                    String time = period / 1000 + "." + (period % 1000) / 100; //$NON-NLS-1$
                    System.out.println(time + ConsoleTestMessages.HibernateAllMappingTests_seconds + " {" //$NON-NLS-1$
                            + javaElement.getElementName() + "}"); //$NON-NLS-1$
                }

                if (Customization.STOP_AFTER_MISSING_PACK) {
                    if (result.failureCount() > prev_failCount) {
                        break;
                    }
                }
                prev_failCount = result.failureCount();
                prev_errCount = result.errorCount();
            }
        }
    }

    abstract public void testEachPackWithTestSet() throws CoreException, IOException;

    protected void customizeCfgXml(IPackageFragment pack) {
        assertNotNull(pack);
        try {
            ConsoleConfigUtils.customizeCfgXmlForPack(pack);
        } catch (CoreException e) {
            String out = NLS.bind(ConsoleTestMessages.UpdateConfigurationTest_error_customising_file_for_package,
                    new Object[] { ConsoleConfigUtils.CFG_FILE_NAME, pack.getPath(), e.getMessage() });
            fail(out);
        }
    }

    protected void closeAllEditors() {
        final IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        if (workbenchWindow != null) {
            final IWorkbenchPage workbenchPage = workbenchWindow.getActivePage();
            if (workbenchPage != null) {
                openEditors += workbenchPage.getEditorReferences().length;
                workbenchPage.closeAllEditors(false);
            }
        }
        // clean up event queue to avoid "memory leak",
        // this is necessary to fix https://jira.jboss.org/jira/browse/JBIDE-4824
        while (Display.getCurrent().readAndDispatch())
            ;
    }

    public String getConsoleConfigName() {
        return consoleConfigName;
    }

    public void setConsoleConfigName(String consoleConfigName) {
        this.consoleConfigName = consoleConfigName;
    }

    public IPackageFragment getTestPackage() {
        return testPackage;
    }

    public void setTestPackage(IPackageFragment testPackage) {
        this.testPackage = testPackage;
    }

    public ConfigurableTestProject getTestProject() {
        return testProject;
    }

    public void setTestProject(ConfigurableTestProject testProject) {
        this.testProject = testProject;
    }
}