blob: d19e488f4210572c69e2f258644c26ed9f89d039 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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.intellij.execution.junit2.ui;
import com.intellij.execution.junit2.TestProxy;
import com.intellij.execution.junit2.events.TestEvent;
import com.intellij.execution.junit2.ui.actions.TestContext;
import com.intellij.execution.junit2.ui.model.JUnitAdapter;
import com.intellij.execution.junit2.ui.model.JUnitRunningModel;
import com.intellij.execution.testframework.TestsUIUtil;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.ui.*;
import com.intellij.ui.table.BaseTableView;
import com.intellij.ui.table.TableView;
import com.intellij.util.EditSourceOnDoubleClickHandler;
import com.intellij.util.config.Storage;
import com.intellij.util.ui.ListTableModel;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
class StatisticsPanel extends JPanel implements DataProvider{
private final MyJUnitListener myListener = new MyJUnitListener();
private TestProxy myCurrentTest = null;
private StatisticsTable myChildInfo = null;
// private TestCaseStatistics myTestCaseInfo = new TestCaseStatistics(TestColumnInfo.COLUMN_NAMES);
private JUnitRunningModel myModel;
private final TableView myTable;
private final Storage.PropertiesComponentStorage myStorage = new Storage.PropertiesComponentStorage("junit_statistics_table_columns");
private SimpleColoredComponent myTotalLabel;
private SimpleColoredComponent myTimeLabel;
public StatisticsPanel() {
super(new BorderLayout(0, 0));
myChildInfo = new StatisticsTable(TestColumnInfo.COLUMN_NAMES);
myTable = new TableView(myChildInfo) {
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
return new TestTableRenderer(TestColumnInfo.COLUMN_NAMES);
}
};
EditSourceOnDoubleClickHandler.install(myTable);
PopupHandler.installPopupHandler(myTable,
IdeActions.GROUP_TESTSTATISTICS_POPUP,
ActionPlaces.TESTSTATISTICS_VIEW_POPUP);
// add(myTestCaseInfo, BorderLayout.NORTH);
add(ScrollPaneFactory.createScrollPane(myTable), BorderLayout.CENTER);
final JPanel eastPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));
myTotalLabel = new SimpleColoredComponent();
eastPanel.add(myTotalLabel);
myTimeLabel = new SimpleColoredComponent();
eastPanel.add(myTimeLabel);
add(eastPanel, BorderLayout.SOUTH);
}
private void updateStatistics() {
myTable.setVisible(true);
// myTestCaseInfo.setVisible(false);
TestProxy proxy = myCurrentTest != null ? myCurrentTest : myModel.getRoot();
if (proxy.isLeaf() && proxy.getParent() != null) {
proxy = proxy.getParent();
}
myChildInfo.updateStatistics(proxy);
myTotalLabel.clear();
myTotalLabel.append(TestsUIUtil.getTestSummary(proxy), SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
myTimeLabel.clear();
myTimeLabel.append("Total time: " + Formatters.statisticsFor(proxy).getTime(), SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
final int idx = myChildInfo.getIndexOf(myCurrentTest);
if (idx >= 0) TableUtil.selectRows(myTable, new int[]{myTable.convertRowIndexToView(idx)});
TableUtil.scrollSelectionToVisible(myTable);
}
public void attachTo(final JUnitRunningModel model) {
myModel = model;
myModel.addListener(myListener);
myChildInfo.setModel(model);
BaseTableView.restore(myStorage, myTable);
}
public Object getData(final String dataId) {
if (myModel == null) return null;
final int selectedRow = myTable.getSelectedRow();
final TestProxy selectedTest = selectedRow == -1 ? null : myChildInfo.getTestAt(myTable.convertRowIndexToModel(selectedRow));
if (TestContext.DATA_KEY.is(dataId)) {
return new TestContext(myModel, selectedTest);
}
return TestsUIUtil.getData(selectedTest, dataId, myModel);
}
private class MyJUnitListener extends JUnitAdapter {
public void onTestChanged(final TestEvent event) {
if (!StatisticsPanel.this.isShowing()) return;
final TestProxy source = event.getSource();
if (myCurrentTest == source || myCurrentTest == null && source == myModel.getRoot()) {
updateStatistics();
}
}
public void onTestSelected(final TestProxy test) {
if (!StatisticsPanel.this.isShowing()) return;
if (myCurrentTest == test)
return;
if (test == null) {
myTable.setVisible(false);
return;
}
myCurrentTest = test;
updateStatistics();
}
public void doDispose() {
BaseTableView.store(myStorage, myTable);
myTable.setModelAndUpdateColumns(new ListTableModel(TestColumnInfo.COLUMN_NAMES));
myModel = null;
myChildInfo = null;
myCurrentTest = null;
}
}
}