blob: 882d28a06dd0ec27f545edda3c6da455f8780d43 [file] [log] [blame]
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();
}
}