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 / +164 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
		private void writeSuite(TreeItem item) {
108
			writeSuiteHead(getTestRunInfo(item));
109
			TreeItem[] testCases = item.getItems();
110
			for (int i= 0, n = testCases.length; i < n; ++i)
111
				writeTestCase(item.getItems()[i]);
112
		}
113
		
114
		protected void writeSuiteHead(TestRunInfo testCase) {
115
			append("\n\n"); //$NON-NLS-1$
116
			writeNameAndStatus(testCase);
117
		}
118
119
		private void writeSingleTestCase(Iterator iterator, TreeItem item) {
120
			writeTestCase(item);
121
			for (;iterator.hasNext();)
122
				writeTestCase(((SuiteInfo) iterator.next()).fTreeItem);
123
		}
124
		
125
		private void writeTestCase(TreeItem item) {
126
			writeTestCaseHead(getTestRunInfo(item));
127
			TreeItem[] methods= item.getItems();
128
			for (int i= 0, n= methods.length; i < n; ++i)
129
				writeTestMethod(getTestRunInfo(methods[i]));
130
		}
131
				
132
		protected void writeTestCaseHead(TestRunInfo testCase) {
133
			append("\n\n"); //$NON-NLS-1$
134
			writeNameAndStatus(testCase);
135
		}
136
137
		protected void writeNameAndStatus(TestRunInfo info) {
138
			append(info.getTestMethodName());
139
			append(' ');
140
			append(getStatus(info));
141
		}
142
143
		protected void writeTestMethod(TestRunInfo testCase) {
144
			append("\n\t"); //$NON-NLS-1$
145
			writeNameAndStatus(testCase);
146
			writeTrace(testCase);
147
		}
148
149
		protected void writeTrace(TestRunInfo testMethod) {
150
			String trace = testMethod.getTrace();
151
			if (trace == null)
152
				return;
153
			append("\n\t\t"); //$NON-NLS-1$
154
			append(trace.replaceAll("\t", "\t\t"));	//$NON-NLS-1$
155
		}
156
157
		protected void writeHead() {
158
			append(JUnitMessages.getString("CounterPanel.label.runs")); //$NON-NLS-1$
159
			append(fExecuted);
160
			append(' ');
161
			append(JUnitMessages.getString("CounterPanel.label.errors")); //$NON-NLS-1$
162
			append(fErrors);
163
			append(' ');
164
			append(JUnitMessages.getString("CounterPanel.label.failures")); //$NON-NLS-1$
165
			append(fFailures);
166
		}
167
168
		private boolean isSuite(TreeItem item) {
169
			TreeItem[] items= item.getItems();
170
			if (items.length == 0)
171
				return false;
172
			return items[0].getItemCount() > 0;
173
		}
174
175
		protected String getStatus(TestRunInfo info) {
176
			int status = info.getStatus();
177
			if (status == ITestRunListener.STATUS_FAILURE)
178
				return JUnitMessages.getString("CopyHierachy.failure"); //$NON-NLS-1$
179
			if (status == ITestRunListener.STATUS_ERROR)
180
				return JUnitMessages.getString("CopyHierachy.error"); //$NON-NLS-1$
181
			if (status == ITestRunListener.STATUS_OK)
182
				return JUnitMessages.getString("CopyHierachy.ok"); //$NON-NLS-1$
183
			return JUnitMessages.getString("CopyHierachy.unknown"); //$NON-NLS-1$
184
		}
185
186
		public String format() {
187
			fBuffer= new StringBuffer();
188
			writeHead();
189
			Iterator it= fSuitInfos.iterator();
190
			TreeItem item= ((SuiteInfo) it.next()).fTreeItem;
191
			if (isSuite(item))
192
				writeSuite(item);
193
			else
194
				writeSingleTestCase(it, item);
195
			return fBuffer.toString();
196
		}
197
	}
198
		
71
	/**
199
	/**
72
	 * Vector of SuiteInfo items
200
	 * Vector of SuiteInfo items
73
	 */
201
	 */
Lines 78-83 Link Here
78
	private Map fTreeItemMap= new HashMap();
206
	private Map fTreeItemMap= new HashMap();
79
	
207
	
80
	private TestRunnerViewPart fTestRunnerPart;
208
	private TestRunnerViewPart fTestRunnerPart;
209
	private final Clipboard fClipboard;
81
	
210
	
82
	private final Image fOkIcon= TestRunnerViewPart.createImage("obj16/testok.gif"); //$NON-NLS-1$
211
	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$
212
	private final Image fErrorIcon= TestRunnerViewPart.createImage("obj16/testerr.gif"); //$NON-NLS-1$
Lines 99-106 Link Here
99
			expandAll();
228
			expandAll();
100
		}
229
		}
101
	}
230
	}
102
	public HierarchyRunView(CTabFolder tabFolder, TestRunnerViewPart runner) {
231
	public HierarchyRunView(CTabFolder tabFolder, Clipboard clipboard, TestRunnerViewPart runner) {
103
		fTestRunnerPart= runner;
232
		fTestRunnerPart= runner;
233
		fClipboard= clipboard;
104
		
234
		
105
		CTabItem hierarchyTab= new CTabItem(tabFolder, SWT.NONE);
235
		CTabItem hierarchyTab= new CTabItem(tabFolder, SWT.NONE);
106
		hierarchyTab.setText(getName());
236
		hierarchyTab.setText(getName());
Lines 353-372 Link Here
353
	}
483
	}
354
484
355
	public void menuAboutToShow(IMenuManager manager) {
485
	public void menuAboutToShow(IMenuManager manager) {
356
		if (fTree.getSelectionCount() > 0) {
486
		boolean selection= fTree.getSelectionCount() > 0;
487
		if (selection) {
357
			TreeItem treeItem= fTree.getSelection()[0];
488
			TreeItem treeItem= fTree.getSelection()[0];
358
			TestRunInfo testInfo= (TestRunInfo) treeItem.getData();
489
			TestRunInfo testInfo= (TestRunInfo) treeItem.getData();
359
			String testLabel= testInfo.getTestName();
490
			String testLabel= testInfo.getTestName();
360
			if (isSuiteSelected()) {	
491
			if (isSuiteSelected())
361
				manager.add(new OpenTestAction(fTestRunnerPart, testLabel));
492
				manager.add(new OpenTestAction(fTestRunnerPart, testLabel));
362
			} else {
493
			else {
363
				manager.add(new OpenTestAction(fTestRunnerPart, getClassName(), getTestMethod()));
494
				manager.add(
364
				manager.add(new RerunAction(fTestRunnerPart, getSelectedTestId(), getClassName(), getTestMethod()));
495
					new OpenTestAction(
496
						fTestRunnerPart,
497
						getClassName(),
498
						getTestMethod()));
499
				manager.add(
500
					new RerunAction(
501
						fTestRunnerPart,
502
						getSelectedTestId(),
503
						getClassName(),
504
						getTestMethod()));
365
			}
505
			}
506
		}
507
		if (fTree.getItemCount() > 0) {
366
			manager.add(new Separator());
508
			manager.add(new Separator());
367
			manager.add(new ExpandAllAction());
509
			manager.add(new CopyHierachyAction(fTestRunnerPart, this, fClipboard));
368
		}
510
		}
369
	}	
511
		if (selection)
512
			manager.add(new ExpandAllAction());
513
	}
370
	
514
	
371
	public void newTreeEntry(String treeEntry) {
515
	public void newTreeEntry(String treeEntry) {
372
		// format: testId","testName","isSuite","testcount
516
		// format: testId","testName","isSuite","testcount
Lines 595-598 Link Here
595
			expandAll(items[i]);
739
			expandAll(items[i]);
596
		}
740
		}
597
	}
741
	}
742
	
743
	String getHierachyAsString() {
744
		PlainTextFormatter formatter=
745
			new PlainTextFormatter(
746
				fSuiteInfos,
747
				fTestRunnerPart.fExecutedTests,
748
				fTestRunnerPart.fErrorCount,
749
				fTestRunnerPart.fFailureCount);
750
		return formatter.format();
751
	}	
598
}
752
}
(-)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