package junit.swingui; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import junit.framework.*; import junit.runner.BaseTestRunner; /** * A view presenting the test failures as a list. */ public class FailureRunView implements TestRunView { JList fFailureList; TestRunContext fRunContext; /** * Renders TestFailures in a JList */ static class FailureListCellRenderer extends DefaultListCellRenderer { private Icon fFailureIcon; private Icon fErrorIcon; FailureListCellRenderer() { super(); loadIcons(); } void loadIcons() { fFailureIcon= TestRunner.getIconResource(getClass(), "icons/failure.gif"); fErrorIcon= TestRunner.getIconResource(getClass(), "icons/error.gif"); } public Component getListCellRendererComponent( JList list, Object value, int modelIndex, boolean isSelected, boolean cellHasFocus) { Component c= super.getListCellRendererComponent(list, value, modelIndex, isSelected, cellHasFocus); TestFailure failure= (TestFailure)value; String text= failure.failedTest().toString(); String msg= failure.exceptionMessage(); if (msg != null) text+= ":" + BaseTestRunner.truncate(msg); if (failure.isFailure()) { if (fFailureIcon != null) setIcon(fFailureIcon); } else { if (fErrorIcon != null) setIcon(fErrorIcon); } setText(text); setToolTipText(text); return c; } } public FailureRunView(TestRunContext context) { fRunContext= context; fFailureList= new JList(fRunContext.getFailures()); fFailureList.setFont(new Font("Dialog", Font.PLAIN, 12)); fFailureList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fFailureList.setCellRenderer(new FailureListCellRenderer()); fFailureList.setVisibleRowCount(5); fFailureList.addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { testSelected(); } } ); } public Test getSelectedTest() { int index= fFailureList.getSelectedIndex(); if (index == -1) return null; ListModel model= fFailureList.getModel(); TestFailure failure= (TestFailure)model.getElementAt(index); return failure.failedTest(); } public void activate() { testSelected(); } public void addTab(JTabbedPane pane) { JScrollPane scrollPane= new JScrollPane(fFailureList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); Icon errorIcon= TestRunner.getIconResource(getClass(), "icons/error.gif"); pane.addTab("Failures", errorIcon, scrollPane, "The list of failed tests"); } public void revealFailure(Test failure) { fFailureList.setSelectedIndex(0); } public void aboutToStart(Test suite, TestResult result) { } public void runFinished(Test suite, TestResult result) { } protected void testSelected() { fRunContext.handleTestSelected(getSelectedTest()); } }