package junit.swingui; | |
import java.awt.*; | |
import java.util.*; | |
import javax.swing.*; | |
import junit.framework.TestFailure; | |
import junit.runner.*; | |
/** | |
* A view that shows a stack trace of a failure | |
*/ | |
public class DefaultFailureDetailView implements FailureDetailView { | |
JList fList; | |
/** | |
* A ListModel representing the scanned failure stack trace. | |
*/ | |
static class StackTraceListModel extends AbstractListModel { | |
private Vector fLines= new Vector(20); | |
public Object getElementAt(int index) { | |
return fLines.elementAt(index); | |
} | |
public int getSize() { | |
return fLines.size(); | |
} | |
public void setTrace(String trace) { | |
scan(trace); | |
fireContentsChanged(this, 0, fLines.size()); | |
} | |
public void clear() { | |
fLines.removeAllElements(); | |
fireContentsChanged(this, 0, fLines.size()); | |
} | |
private void scan(String trace) { | |
fLines.removeAllElements(); | |
StringTokenizer st= new StringTokenizer(trace, "\n\r", false); | |
while (st.hasMoreTokens()) | |
fLines.add(st.nextToken()); | |
} | |
} | |
/** | |
* Renderer for stack entries | |
*/ | |
static class StackEntryRenderer extends DefaultListCellRenderer { | |
public Component getListCellRendererComponent( | |
JList list, Object value, int modelIndex, | |
boolean isSelected, boolean cellHasFocus) { | |
String text= ((String)value).replace('\t', ' '); | |
Component c= super.getListCellRendererComponent(list, text, modelIndex, isSelected, cellHasFocus); | |
setText(text); | |
setToolTipText(text); | |
return c; | |
} | |
} | |
/** | |
* Returns the component used to present the trace | |
*/ | |
public Component getComponent() { | |
if (fList == null) { | |
fList= new JList(new StackTraceListModel()); | |
fList.setFont(new Font("Dialog", Font.PLAIN, 12)); | |
fList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | |
fList.setVisibleRowCount(5); | |
fList.setCellRenderer(new StackEntryRenderer()); | |
} | |
return fList; | |
} | |
/** | |
* Shows a TestFailure | |
*/ | |
public void showFailure(TestFailure failure) { | |
getModel().setTrace(BaseTestRunner.getFilteredTrace(failure.trace())); | |
} | |
/** | |
* Clears the output. | |
*/ | |
public void clear() { | |
getModel().clear(); | |
} | |
private StackTraceListModel getModel() { | |
return (StackTraceListModel)fList.getModel(); | |
} | |
} |