View | Details | Raw Unified | Return to bug 36352 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/internal/junit/ui/HierarchyRunView.java (-10 / +149 lines)
Lines 7-17 Link Here
7
 * 
7
 * 
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Sebastian Davids - sdavids@gmx.de bug 26754 
10
 *     Sebastian Davids - sdavids@gmx.de bugs 26754, 36352
11
*******************************************************************************/
11
*******************************************************************************/
12
package org.eclipse.jdt.internal.junit.ui;
12
package org.eclipse.jdt.internal.junit.ui;
13
13
14
import java.util.HashMap;
14
import java.util.HashMap;
15
import java.util.Iterator;
15
import java.util.Map;
16
import java.util.Map;
16
import java.util.Vector;
17
import java.util.Vector;
17
18
Lines 24-29 Link Here
24
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.custom.CTabFolder;
26
import org.eclipse.swt.custom.CTabFolder;
26
import org.eclipse.swt.custom.CTabItem;
27
import org.eclipse.swt.custom.CTabItem;
28
import org.eclipse.swt.dnd.Clipboard;
27
import org.eclipse.swt.events.DisposeEvent;
29
import org.eclipse.swt.events.DisposeEvent;
28
import org.eclipse.swt.events.DisposeListener;
30
import org.eclipse.swt.events.DisposeListener;
29
import org.eclipse.swt.events.MouseAdapter;
31
import org.eclipse.swt.events.MouseAdapter;
Lines 67-73 Link Here
67
		}
69
		}
68
	}
70
	}
69
	
71
	
70
	
72
	class PlainTextFormatter {
73
		private StringBuffer fBuffer;
74
		private Vector fSuitInfos;
75
		int fExecuted;
76
		int fErrors;
77
		int fFailures;
78
79
		public PlainTextFormatter(
80
			Vector suitInfos,
81
			int executed,
82
			int errors,
83
			int failures) {
84
				
85
			fSuitInfos= suitInfos;
86
			fExecuted= executed;
87
			fErrors= errors;
88
			fFailures= failures;
89
		}
90
91
		private TestRunInfo getTestRunInfo(TreeItem item) {
92
			return (TestRunInfo) item.getData();
93
		}
94
95
		protected void append(String s) {
96
			fBuffer.append(s);
97
		}
98
99
		protected void append(char c) {
100
			fBuffer.append(c);
101
		}
102
103
		protected void append(int i) {
104
			fBuffer.append(i);
105
		}
106
107
		protected void writeSuite(TestRunInfo testCase) {
108
			append("\n\n"); //$NON-NLS-1$
109
			writeNameAndStatus(testCase);
110
		}
111
		
112
		protected void writeTestCase(TestRunInfo testCase) {
113
			append("\n\n"); //$NON-NLS-1$
114
			writeNameAndStatus(testCase);
115
		}
116
117
		protected void writeNameAndStatus(TestRunInfo info) {
118
			append(info.getTestMethodName());
119
			append(' ');
120
			append(getStatus(info));
121
		}
122
123
		protected void writeTestMethod(TestRunInfo testCase) {
124
			append("\n\t"); //$NON-NLS-1$
125
			writeNameAndStatus(testCase);
126
			writeTrace(testCase);
127
		}
128
129
		protected void writeTrace(TestRunInfo testMethod) {
130
			String trace = testMethod.getTrace();
131
			if (trace == null)
132
				return;
133
			append("\n\t\t"); //$NON-NLS-1$
134
			append(trace.replaceAll("\t", "\t\t"));	//$NON-NLS-1$
135
		}
136
137
		protected void writeHead() {
138
			append(JUnitMessages.getString("CounterPanel.label.runs")); //$NON-NLS-1$
139
			append(fExecuted);
140
			append(' ');
141
			append(JUnitMessages.getString("CounterPanel.label.errors")); //$NON-NLS-1$
142
			append(fErrors);
143
			append(' ');
144
			append(JUnitMessages.getString("CounterPanel.label.failures")); //$NON-NLS-1$
145
			append(fFailures);
146
		}
147
148
		private boolean isSuite(TreeItem item) {
149
			TreeItem[] items= item.getItems();
150
			if (items.length == 0)
151
				return false;
152
			return items[0].getItemCount() > 0;
153
		}
154
155
		protected String getStatus(TestRunInfo info) {
156
			int status = info.getStatus();
157
			if (status == ITestRunListener.STATUS_FAILURE)
158
				return JUnitMessages.getString("CopyHierachy.failure"); //$NON-NLS-1$
159
			if (status == ITestRunListener.STATUS_ERROR)
160
				return JUnitMessages.getString("CopyHierachy.error"); //$NON-NLS-1$
161
			if (status == ITestRunListener.STATUS_OK)
162
				return JUnitMessages.getString("CopyHierachy.ok"); //$NON-NLS-1$
163
			return JUnitMessages.getString("CopyHierachy.unknown"); //$NON-NLS-1$
164
		}
165
166
		public String format() {
167
			fBuffer= new StringBuffer();
168
			writeHead();
169
			for (Iterator it= fSuitInfos.iterator(); it.hasNext();) {
170
				TreeItem item= ((SuiteInfo) it.next()).fTreeItem;
171
				if (isSuite(item)) {
172
					writeSuite(getTestRunInfo(item));
173
					item= item.getItems()[0];
174
				}
175
				writeTestCase(getTestRunInfo(item));
176
				TreeItem[] methods= item.getItems();
177
				for (int i= 0, n= methods.length; i < n; ++i)
178
					writeTestMethod(getTestRunInfo(methods[i]));				
179
			}
180
			return fBuffer.toString();
181
		}
182
	}
183
		
71
	/**
184
	/**
72
	 * Vector of SuiteInfo items
185
	 * Vector of SuiteInfo items
73
	 */
186
	 */
Lines 78-83 Link Here
78
	private Map fTreeItemMap= new HashMap();
191
	private Map fTreeItemMap= new HashMap();
79
	
192
	
80
	private TestRunnerViewPart fTestRunnerPart;
193
	private TestRunnerViewPart fTestRunnerPart;
194
	private final Clipboard fClipboard;
81
	
195
	
82
	private final Image fOkIcon= TestRunnerViewPart.createImage("obj16/testok.gif"); //$NON-NLS-1$
196
	private final Image fOkIcon= TestRunnerViewPart.createImage("obj16/testok.gif"); //$NON-NLS-1$
83
	private final Image fErrorIcon= TestRunnerViewPart.createImage("obj16/testerr.gif"); //$NON-NLS-1$
197
	private final Image fErrorIcon= TestRunnerViewPart.createImage("obj16/testerr.gif"); //$NON-NLS-1$
Lines 99-106 Link Here
99
			expandAll();
213
			expandAll();
100
		}
214
		}
101
	}
215
	}
102
	public HierarchyRunView(CTabFolder tabFolder, TestRunnerViewPart runner) {
216
	public HierarchyRunView(CTabFolder tabFolder, Clipboard clipboard, TestRunnerViewPart runner) {
103
		fTestRunnerPart= runner;
217
		fTestRunnerPart= runner;
218
		fClipboard= clipboard;
104
		
219
		
105
		CTabItem hierarchyTab= new CTabItem(tabFolder, SWT.NONE);
220
		CTabItem hierarchyTab= new CTabItem(tabFolder, SWT.NONE);
106
		hierarchyTab.setText(getName());
221
		hierarchyTab.setText(getName());
Lines 353-372 Link Here
353
	}
468
	}
354
469
355
	public void menuAboutToShow(IMenuManager manager) {
470
	public void menuAboutToShow(IMenuManager manager) {
356
		if (fTree.getSelectionCount() > 0) {
471
		boolean selection= fTree.getSelectionCount() > 0;
472
		if (selection) {
357
			TreeItem treeItem= fTree.getSelection()[0];
473
			TreeItem treeItem= fTree.getSelection()[0];
358
			TestRunInfo testInfo= (TestRunInfo) treeItem.getData();
474
			TestRunInfo testInfo= (TestRunInfo) treeItem.getData();
359
			String testLabel= testInfo.getTestName();
475
			String testLabel= testInfo.getTestName();
360
			if (isSuiteSelected()) {	
476
			if (isSuiteSelected())
361
				manager.add(new OpenTestAction(fTestRunnerPart, testLabel));
477
				manager.add(new OpenTestAction(fTestRunnerPart, testLabel));
362
			} else {
478
			else {
363
				manager.add(new OpenTestAction(fTestRunnerPart, getClassName(), getTestMethod()));
479
				manager.add(
364
				manager.add(new RerunAction(fTestRunnerPart, getSelectedTestId(), getClassName(), getTestMethod()));
480
					new OpenTestAction(
481
						fTestRunnerPart,
482
						getClassName(),
483
						getTestMethod()));
484
				manager.add(
485
					new RerunAction(
486
						fTestRunnerPart,
487
						getSelectedTestId(),
488
						getClassName(),
489
						getTestMethod()));
365
			}
490
			}
491
		}
492
		if (fTree.getItemCount() > 0) {
366
			manager.add(new Separator());
493
			manager.add(new Separator());
367
			manager.add(new ExpandAllAction());
494
			manager.add(new CopyHierachyAction(fTestRunnerPart, this, fClipboard));
368
		}
495
		}
369
	}	
496
		if (selection)
497
			manager.add(new ExpandAllAction());
498
	}
370
	
499
	
371
	public void newTreeEntry(String treeEntry) {
500
	public void newTreeEntry(String treeEntry) {
372
		// format: testId","testName","isSuite","testcount
501
		// format: testId","testName","isSuite","testcount
Lines 595-598 Link Here
595
			expandAll(items[i]);
724
			expandAll(items[i]);
596
		}
725
		}
597
	}
726
	}
727
	
728
	String getHierachyAsString() {
729
		PlainTextFormatter formatter=
730
			new PlainTextFormatter(
731
				fSuiteInfos,
732
				fTestRunnerPart.fExecutedTests,
733
				fTestRunnerPart.fErrorCount,
734
				fTestRunnerPart.fFailureCount);
735
		return formatter.format();
736
	}	
598
}
737
}
(-)src/org/eclipse/jdt/internal/junit/ui/IJUnitHelpContextIds.java (+1 lines)
Lines 18-23 Link Here
18
18
19
	// Actions
19
	// Actions
20
	public static final String COPYTRACE_ACTION= PREFIX + "copy_trace_action_context"; //$NON-NLS-1$
20
	public static final String COPYTRACE_ACTION= PREFIX + "copy_trace_action_context"; //$NON-NLS-1$
21
	public static final String COPYHIERACHY_ACTION= PREFIX + "copy_hierachy_action_context"; //$NON-NLS-1$
21
	public static final String COPYFAILURELIST_ACTION= PREFIX + "copy_failure_list_action_context"; //$NON-NLS-1$
22
	public static final String COPYFAILURELIST_ACTION= PREFIX + "copy_failure_list_action_context"; //$NON-NLS-1$
22
	public static final String ENABLEFILTER_ACTION= PREFIX + "enable_filter_action_context"; //$NON-NLS-1$
23
	public static final String ENABLEFILTER_ACTION= PREFIX + "enable_filter_action_context"; //$NON-NLS-1$
23
	public static final String OPENEDITORATLINE_ACTION= PREFIX + "open_editor_atline_action_context"; //$NON-NLS-1$
24
	public static final String OPENEDITORATLINE_ACTION= PREFIX + "open_editor_atline_action_context"; //$NON-NLS-1$
(-)src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties (+8 lines)
Lines 16-21 Link Here
16
CopyFailureList.problem=Problem Copying Failure List to Clipboard
16
CopyFailureList.problem=Problem Copying Failure List to Clipboard
17
CopyFailureList.clipboard_busy=There was a problem when accessing the system clipboard. Retry?
17
CopyFailureList.clipboard_busy=There was a problem when accessing the system clipboard. Retry?
18
18
19
CopyHierachy.action.label=Copy Hierachy
20
CopyHierachy.problem=Problem Copying Hierachy to Clipboard
21
CopyHierachy.clipboard_busy=There was a problem when accessing the system clipboard. Retry?
22
CopyHierachy.error=Error
23
CopyHierachy.failure=Failure
24
CopyHierachy.ok=Success
25
CopyHierachy.unknown=Unknown
26
19
CounterPanel.label.runs=Runs: 
27
CounterPanel.label.runs=Runs: 
20
CounterPanel.label.errors=Errors: 
28
CounterPanel.label.errors=Errors: 
21
CounterPanel.label.failures=Failures: 
29
CounterPanel.label.failures=Failures: 
(-)src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java (-1 / +1 lines)
Lines 758-764 Link Here
758
		tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
758
		tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
759
759
760
		ITestRunView failureRunView= new FailureRunView(tabFolder, fClipboard, this);		
760
		ITestRunView failureRunView= new FailureRunView(tabFolder, fClipboard, this);		
761
		ITestRunView testHierarchyRunView= new HierarchyRunView(tabFolder, this);
761
		ITestRunView testHierarchyRunView= new HierarchyRunView(tabFolder, fClipboard, this);
762
		
762
		
763
		fTestRunViews.addElement(failureRunView);
763
		fTestRunViews.addElement(failureRunView);
764
		fTestRunViews.addElement(testHierarchyRunView);
764
		fTestRunViews.addElement(testHierarchyRunView);
(-)src/org/eclipse/jdt/internal/junit/ui/CopyHierachyAction.java (+78 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2003 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Common Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/cpl-v10.html
7
 * 
8
 * Contributors:
9
 *     Sebastian Davids - sdavids@gmx.de; initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.jdt.internal.junit.ui;
12
13
import java.io.BufferedReader;
14
import java.io.IOException;
15
import java.io.PrintWriter;
16
import java.io.StringReader;
17
import java.io.StringWriter;
18
19
import org.eclipse.jdt.internal.ui.JavaPlugin;
20
import org.eclipse.jface.action.Action;
21
import org.eclipse.jface.dialogs.MessageDialog;
22
import org.eclipse.swt.SWTError;
23
import org.eclipse.swt.dnd.Clipboard;
24
import org.eclipse.swt.dnd.DND;
25
import org.eclipse.swt.dnd.TextTransfer;
26
import org.eclipse.swt.dnd.Transfer;
27
import org.eclipse.ui.help.WorkbenchHelp;
28
29
/**
30
 * Copies the test hierachy to the clipboard.
31
 */
32
public class CopyHierachyAction extends Action {
33
	private HierarchyRunView fView;
34
	
35
	private final Clipboard fClipboard;
36
		
37
	/**
38
	 * Constructor for CopyHierachyAction.
39
	 */
40
	public CopyHierachyAction(TestRunnerViewPart runner, HierarchyRunView view, Clipboard clipboard) {
41
		super(JUnitMessages.getString("CopyHierachy.action.label"));  //$NON-NLS-1$
42
		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.COPYHIERACHY_ACTION);
43
		fView= view;
44
		fClipboard= clipboard;
45
	}
46
47
	/*
48
	 * @see IAction#run()
49
	 */
50
	public void run() {
51
		TextTransfer plainTextTransfer = TextTransfer.getInstance();
52
		try{
53
			fClipboard.setContents(
54
				new String[]{ convertLineTerminators(fView.getHierachyAsString())}, 
55
				new Transfer[]{ plainTextTransfer });
56
		}  catch (SWTError e){
57
			if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD) 
58
				throw e;
59
			if (MessageDialog.openQuestion(JavaPlugin.getActiveWorkbenchShell(), JUnitMessages.getString("CopyHierachy.problem"), JUnitMessages.getString("CopyHierachy.clipboard_busy")))  //$NON-NLS-1$ //$NON-NLS-2$
60
				run();
61
		}
62
	}
63
	
64
	private String convertLineTerminators(String in) {
65
		StringWriter stringWriter= new StringWriter();
66
		PrintWriter printWriter= new PrintWriter(stringWriter);
67
		StringReader stringReader= new StringReader(in);
68
		BufferedReader bufferedReader= new BufferedReader(stringReader);		
69
		String line;
70
		try {
71
			while ((line= bufferedReader.readLine()) != null)
72
				printWriter.println(line);
73
		} catch (IOException e) {
74
			return in; // return the hierachy unfiltered
75
		}
76
		return stringWriter.toString();
77
	}	
78
}

Return to bug 36352