Package org.testng.eclipse.ui

Source Code of org.testng.eclipse.ui.RunHistoryAction

package org.testng.eclipse.ui;

import java.text.DateFormat;
import java.util.Date;
import java.util.LinkedList;

import org.eclipse.debug.core.ILaunch;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;

/**
* Action that displays the test run history. It can:
* <ul>
* <li>open up a menu showing all the test runs with an icon displaying their
* result</li>
* <li>show the test run for which results are displayed</li>
* <li>allow to select one test run to display its results</li>
* </ul>
*/
public class RunHistoryAction extends Action implements IMenuCreator {

  private TestRunnerViewPart testRunnerViewPart;
  private Menu fMenu;

  private LinkedList<SuiteRunInfo> runs = new LinkedList<SuiteRunInfo>();
  private SuiteRunInfo currentlyDisplayedRun;

  public RunHistoryAction(TestRunnerViewPart testRunnerViewPart) {
    super("", IAction.AS_DROP_DOWN_MENU);
    this.testRunnerViewPart = testRunnerViewPart;

    setToolTipText("Test Run History...");
    setMenuCreator(this);
  }

  public void dispose() {
    if (fMenu != null) {
      fMenu.dispose();
      fMenu = null;
    }
  }

  public Menu getMenu(Menu parent) {
    return null;
  }

  public Menu getMenu(Control parent) {
    if (fMenu != null) {
      fMenu.dispose();
    }

    fMenu = new Menu(parent);
    for (final SuiteRunInfo run : runs) {
      Action filterAction = new Action(getText(run)) {
        @Override
        public void run() {
          currentlyDisplayedRun = run;
          testRunnerViewPart.reset(run);
        }
      };

      addActionToMenu(fMenu, filterAction, ImagesUtil.getImage(run.getStatus()));
    }

    new MenuItem(fMenu, SWT.SEPARATOR);

    addActionToMenu(fMenu, new Action("Clear History") {
      @Override
      public void run() {
        runs.clear();
        currentlyDisplayedRun = null;
        testRunnerViewPart.reset();
      }
    }, null);

    return fMenu;
  }

  private String getText(SuiteRunInfo run) {
    String prefix = "";
    if (this.currentlyDisplayedRun == run) {
      prefix = "\u26ab "; // put a bullet in front
    }
    final Date date = new Date(run.getStartTime());
    final String dateStr = DateFormat.getDateTimeInstance().format(date);
    final ILaunch launch = run.getLaunch();
    if (launch != null) {
      return prefix + launch.getLaunchConfiguration().getName() + " ("
          + dateStr + ")";
    }
    return prefix + "(" + dateStr + ")";
  }

  protected void addActionToMenu(Menu parent, Action action, Image image) {
    final ActionContributionItem item = new ActionContributionItem(action);
    item.fill(parent, -1);
    final MenuItem menuItem = (MenuItem) item.getWidget();
    if (image != null) {
      menuItem.setImage(image);
    }
  }

  public void add(SuiteRunInfo run) {
    this.runs.addFirst(run);
    // limit the number of displayed runs
    if (this.runs.size() > 20) {
      this.runs.removeLast();
    }
    this.currentlyDisplayedRun = run;
  }
}
TOP

Related Classes of org.testng.eclipse.ui.RunHistoryAction

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.