package org.erlide.cover.ui.views; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.part.ViewPart; import org.erlide.cover.core.CoverBackend; import org.erlide.cover.core.IEUnitObserver; import org.erlide.cover.ui.views.helpers.TestViewContentProvider; import org.erlide.cover.ui.views.helpers.TestViewLabelProvider; import org.erlide.cover.views.model.TestTreeModel; import org.erlide.ui.util.DisplayUtils; /** * Simple view to show EUnit test results * * @author Aleksandra Lipiec * */ public class EUnitView extends ViewPart implements IEUnitObserver { /** * The ID of the view as specified by the extension. */ public static final String ID = "org.erlide.eunit.ui.EUnitView"; private TreeViewer viewer; private Label resultsLabel; private final CoverBackend backend; public EUnitView() { backend = CoverBackend.getInstance(); backend.addEUnitListener(this); } @Override public void createPartControl(final Composite parent) { // layout final GridLayout containerLayout = new GridLayout(1, false); containerLayout.marginWidth = 0; containerLayout.marginHeight = 0; containerLayout.verticalSpacing = 3; parent.setLayout(containerLayout); viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new TestViewContentProvider(getViewSite())); viewer.setLabelProvider(new TestViewLabelProvider()); viewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); viewer.getTree().setLinesVisible(true); viewer.setInput(TestTreeModel.getInstance()); resultsLabel = new Label(parent, SWT.SINGLE); resultsLabel.setText("Passed: 0 Failed: 0 Skipped: 0 Canceled: 0"); final FontData font = new FontData(); font.setStyle(SWT.BOLD); resultsLabel.setFont(new Font(Display.getCurrent(), font)); } @Override public void setFocus() { viewer.getControl().setFocus(); } @Override public void treeChanged() { DisplayUtils.asyncExec(new Runnable() { @Override public void run() { viewer.refresh(); } }); } @Override public void labelChanged() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { final TestTreeModel model = TestTreeModel.getInstance(); resultsLabel.setText(String.format( "Passed: %d Failed: %d Skipped: %d Canceled: %d", model.getPass(), model.getFail(), model.getSkip(), model.getCancel())); } }); } }