1 package junit.swingui; 2 3 import java.awt.Component ; 4 import java.awt.Font ; 5 6 import javax.swing.DefaultListCellRenderer ; 7 import javax.swing.Icon ; 8 import javax.swing.JList ; 9 import javax.swing.JScrollPane ; 10 import javax.swing.JTabbedPane ; 11 import javax.swing.ListModel ; 12 import javax.swing.ListSelectionModel ; 13 import javax.swing.ScrollPaneConstants ; 14 import javax.swing.event.ListSelectionEvent ; 15 import javax.swing.event.ListSelectionListener ; 16 17 import junit.framework.Test; 18 import junit.framework.TestFailure; 19 import junit.framework.TestResult; 20 import junit.runner.BaseTestRunner; 21 22 23 26 public class FailureRunView implements TestRunView { 27 JList fFailureList; 28 TestRunContext fRunContext; 29 30 33 static class FailureListCellRenderer extends DefaultListCellRenderer { 34 private Icon fFailureIcon; 35 private Icon fErrorIcon; 36 37 FailureListCellRenderer() { 38 super(); 39 loadIcons(); 40 } 41 42 void loadIcons() { 43 fFailureIcon= TestRunner.getIconResource(getClass(), "icons/failure.gif"); 44 fErrorIcon= TestRunner.getIconResource(getClass(), "icons/error.gif"); 45 } 46 47 public Component getListCellRendererComponent( 48 JList list, Object value, int modelIndex, 49 boolean isSelected, boolean cellHasFocus) { 50 51 Component c= super.getListCellRendererComponent(list, value, modelIndex, isSelected, cellHasFocus); 52 TestFailure failure= (TestFailure)value; 53 String text= failure.failedTest().toString(); 54 String msg= failure.exceptionMessage(); 55 if (msg != null) 56 text+= ":" + BaseTestRunner.truncate(msg); 57 58 if (failure.isFailure()) { 59 if (fFailureIcon != null) 60 setIcon(fFailureIcon); 61 } else { 62 if (fErrorIcon != null) 63 setIcon(fErrorIcon); 64 } 65 setText(text); 66 setToolTipText(text); 67 return c; 68 } 69 } 70 71 public FailureRunView(TestRunContext context) { 72 fRunContext= context; 73 fFailureList= new JList (fRunContext.getFailures()); 74 fFailureList.setFont(new Font ("Dialog", Font.PLAIN, 12)); 75 76 fFailureList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 77 fFailureList.setCellRenderer(new FailureListCellRenderer()); 78 fFailureList.setVisibleRowCount(5); 79 80 fFailureList.addListSelectionListener( 81 new ListSelectionListener () { 82 public void valueChanged(ListSelectionEvent e) { 83 testSelected(); 84 } 85 } 86 ); 87 } 88 89 public Test getSelectedTest() { 90 int index= fFailureList.getSelectedIndex(); 91 if (index == -1) 92 return null; 93 94 ListModel model= fFailureList.getModel(); 95 TestFailure failure= (TestFailure)model.getElementAt(index); 96 return failure.failedTest(); 97 } 98 99 public void activate() { 100 testSelected(); 101 } 102 103 public void addTab(JTabbedPane pane) { 104 JScrollPane scrollPane= new JScrollPane (fFailureList, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 105 Icon errorIcon= TestRunner.getIconResource(getClass(), "icons/error.gif"); 106 pane.addTab("Failures", errorIcon, scrollPane, "The list of failed tests"); 107 } 108 109 public void revealFailure(Test failure) { 110 fFailureList.setSelectedIndex(0); 111 } 112 113 public void aboutToStart(Test suite, TestResult result) { 114 } 115 116 public void runFinished(Test suite, TestResult result) { 117 } 118 119 protected void testSelected() { 120 fRunContext.handleTestSelected(getSelectedTest()); 121 } 122 } 123 | Popular Tags |