Package com.google.eclipse.javascript.jstestdriver.ui.launch

Source Code of com.google.eclipse.javascript.jstestdriver.ui.launch.EclipseTestRunnerJob

/*
* Copyright 2010 Google Inc.
*
* Licensed 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.eclipse.javascript.jstestdriver.ui.launch;

import com.google.eclipse.javascript.jstestdriver.core.JstdTestRunner;
import com.google.eclipse.javascript.jstestdriver.core.model.JstdLaunchConfiguration;
import com.google.eclipse.javascript.jstestdriver.ui.Activator;
import com.google.jstestdriver.TestCase;
import com.google.jstestdriver.browser.BrowserPanicException;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.swt.widgets.Display;

import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Handles the execution of jstd tests into a background thread.
*
* @author m.jurcovicova
*/
public class EclipseTestRunnerJob extends Job {

  private static final String ERROR_MESSAGE = "Exception while running tests.";

  private static final Logger logger = Logger.getLogger(EclipseTestRunnerJob.class.getName());

  private final JstdTestRunner runner;
  public static final String JOB_NAME = "Run js-test-driver Tests Job";
  private final ILaunchConfiguration configuration;
  private final List<String> testsToRun;

  private final Collection<ILaunchValidator> validators;

  public EclipseTestRunnerJob(ILaunchConfiguration configuration, List<String> testsToRun,
      JstdTestRunner runner, Collection<ILaunchValidator> validators) {
    super(JOB_NAME);
    this.configuration = configuration;
    this.testsToRun = testsToRun;
    this.runner = runner;
    this.validators = validators;
  }

  @Override
  protected IStatus run(IProgressMonitor monitor) {
    try {
      JstdLaunchConfiguration launchConfiguration = new JstdLaunchConfiguration(configuration);
      for (ILaunchValidator validator : validators) {
        if (!validator.preLaunchCheck(launchConfiguration, monitor)) {
          //we do not want to report this as an error to job scheduler
          return Status.OK_STATUS;
        }
      }

      // initialize JsTestDriverView; this needs to be done in UI thread
      Display.getDefault().asyncExec(
          new BeforeTestsViewInitialization(getTestsNumber(), configuration, logger));

      if (testsToRun.isEmpty()) {
        runner.runAllTests(launchConfiguration);
      } else {
        runner.runTests(testsToRun, launchConfiguration);
      }

    } catch (CoreException e) {
      logger.log(Level.SEVERE, "", e);
      return new Status(Status.ERROR, Activator.PLUGIN_ID, ERROR_MESSAGE, e);
    } catch (BrowserPanicException e) {
      logger.log(Level.SEVERE, "", e);
      return new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
    }

    return Status.OK_STATUS;
  }

  private int getTestsNumber() throws CoreException {
    if (testsToRun.isEmpty()) {
      Collection<TestCase> testCases = runner.getTestCases(configuration);
      return calcTestsNumber(testCases);
    }

    return testsToRun.size();
  }

  private int calcTestsNumber(Collection<TestCase> testCases) {
    int result = 0;
    for (TestCase testCase : testCases) {
      result += testCase.getTests().size();
    }
    return result;
  }
}
TOP

Related Classes of com.google.eclipse.javascript.jstestdriver.ui.launch.EclipseTestRunnerJob

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.