/*******************************************************************************
* Copyright (c) 2011, 2012 Anton Gorenkov
* All rights reserved. This program and the accompanying materials
* are 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
*
* Contributors:
* Anton Gorenkov - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.testsrunner.internal.ui.view;
import org.eclipse.cdt.testsrunner.internal.TestsRunnerPlugin;
import org.eclipse.cdt.testsrunner.model.ITestItem;
import org.eclipse.cdt.testsrunner.model.ITestingSession;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import java.text.MessageFormat;
/**
* Shows a simple tests count statics information (run/error/failed).
*/
public class CounterPanel extends Composite {
/** Testing session to show statistics for. */
private ITestingSession testingSession;
/** Widget showing the failed tests count. */
private Label failedCounterLabel;
/** Widget showing the error tests count. */
private Label abortedCounterLabel;
/** Widget showing the run tests count. */
private Label currentCounterLabel;
/**
* Shows whether there were skipped tests. It is used to force layout of the
* counter widgets after skipped tests are appeared.
*/
private boolean hasSkipped;
private final Image errorIcon = TestsRunnerPlugin.createAutoImage("ovr16/failed_counter.gif"); //$NON-NLS-1$
private final Image failureIcon = TestsRunnerPlugin.createAutoImage("ovr16/aborted_counter.gif"); //$NON-NLS-1$
public CounterPanel(Composite parent, ITestingSession testingSession) {
super(parent, SWT.WRAP);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 9;
gridLayout.makeColumnsEqualWidth = false;
gridLayout.marginWidth = 0;
setLayout(gridLayout);
currentCounterLabel = createLabel(UIViewMessages.CounterPanel_tests_run, null);
abortedCounterLabel = createLabel(UIViewMessages.CounterPanel_tests_erred, errorIcon);
failedCounterLabel = createLabel(UIViewMessages.CounterPanel_tests_failed, failureIcon);
setTestingSession(testingSession);
}
/**
* Creates counter label widget.
*
* @param name widget text prefix
* @param image widget image or <code>null</code>
* @return created label
*/
private Label createLabel(String name, Image image) {
Label label = new Label(this, SWT.NONE);
if (image != null) {
image.setBackground(label.getBackground());
label.setImage(image);
}
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
label = new Label(this, SWT.NONE);
label.setText(name);
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
Label value = new Label(this, SWT.READ_ONLY);
value.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING));
return value;
}
/**
* Sets the testing session to show information about.
*
* @param testingSession testing session (null is not acceptable)
*/
public void setTestingSession(ITestingSession testingSession) {
this.testingSession = testingSession;
this.hasSkipped = testingSession.getCount(ITestItem.Status.Skipped) != 0;
updateInfoFromSession();
}
/**
* Updates the information on the panel from the currently set testing
* session.
*/
public void updateInfoFromSession() {
setFailedCounter(testingSession.getCount(ITestItem.Status.Failed));
setAbortedCounter(testingSession.getCount(ITestItem.Status.Aborted));
setCurrentCounter(testingSession.getCurrentCounter(), testingSession.getCount(ITestItem.Status.Skipped));
redraw();
}
/**
* Sets a new value for the failed tests counter.
*
* @param newValue new counter value
*/
private void setFailedCounter(int newValue) {
failedCounterLabel.setText(Integer.toString(newValue));
}
/**
* Sets a new value for the error tests counter.
*
* @param newValue new counter value
*/
private void setAbortedCounter(int newValue) {
abortedCounterLabel.setText(Integer.toString(newValue));
}
/**
* Sets a new value for the run tests counter.
*
* @param currentValue new counter value
* @param skippedValue skipped tests counter
*/
private void setCurrentCounter(int currentValue, int skippedValue) {
if (!hasSkipped && skippedValue != 0) {
layout();
}
String runString = (skippedValue == 0)
? Integer.toString(currentValue)
: MessageFormat.format(UIViewMessages.CounterPanel_tests_skipped, currentValue, skippedValue);
currentCounterLabel.setText(runString);
}
}