blob: 3e73db1db872a55857972bd499769b7a9ca2eac0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.junit.tests;
import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Table;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchesListener2;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.junit.ui.FailureTableDisplay;
import org.eclipse.jdt.internal.junit.ui.FailureTrace;
import org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
public class WrappingSystemTest extends TestCase implements ILaunchesListener2 {
private boolean fLaunchHasTerminated = false;
private IJavaProject fProject;
public void launchesAdded(ILaunch[] launches) {
// nothing
}
public void launchesChanged(ILaunch[] launches) {
// nothing
}
public void launchesRemoved(ILaunch[] launches) {
// nothing
}
public void launchesTerminated(ILaunch[] launches) {
fLaunchHasTerminated = true;
}
public void test00characterizeSecondLine() throws Exception {
runTests("\\n", 1000, 2, false);
String text = getText(1);
assertTrue(text, text.startsWith("Numbers"));
}
public void test01shouldWrapSecondLine() throws Exception {
runTests("\\n", 1000, 2, false);
String text = getText(1);
assertTrue(text, text.length() < 300);
}
public void test02characterizeImages() throws Exception {
runTests("\\n", 0, 3, true);
assertEquals(getFailureTrace().getTrace(), getFailureDisplay().getExceptionIcon(), getImage(0));
assertEquals(getFailureTrace().getTrace(), null, getImage(1));
assertEquals(getFailureTrace().getTrace(), getFailureDisplay().getStackIcon(), getImage(2));
}
private FailureTableDisplay getFailureDisplay() throws PartInitException {
return getFailureTrace().getFailureTableDisplay();
}
public void test03shouldWrapFirstLine() throws Exception {
runTests("", 1000, 1, false);
String text = getText(0);
assertTrue(text, text.length() < 300);
}
private String getText(int i) throws PartInitException {
return getTable().getItem(i).getText();
}
private FailureTrace getFailureTrace() throws PartInitException {
TestRunnerViewPart viewPart = (TestRunnerViewPart) PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView(TestRunnerViewPart.NAME);
return viewPart.getFailureTrace();
}
private Image getImage(int i) throws PartInitException {
return getTable().getItem(i).getImage();
}
private Table getTable() throws PartInitException {
return getFailureDisplay().getTable();
}
protected synchronized boolean hasNotTerminated() {
return !fLaunchHasTerminated;
}
public void runTests(String prefixForErrorMessage,
int howManyNumbersInErrorString, int numExpectedTableItems, boolean lastItemHasImage)
throws CoreException, JavaModelException, PartInitException {
launchTests(prefixForErrorMessage, howManyNumbersInErrorString);
waitForTableToFill(numExpectedTableItems, 60000, lastItemHasImage);
}
protected void launchTests(String prefixForErrorMessage,
int howManyNumbersInErrorString) throws CoreException,
JavaModelException {
// have to set up an 1.3 project to avoid requiring a 5.0 VM
JavaProjectHelper.addRTJar13(fProject);
JavaProjectHelper.addVariableEntry(fProject, new Path(
"JUNIT_HOME/junit.jar"), null, null);
IPackageFragmentRoot root = JavaProjectHelper.addSourceContainer(
fProject, "src");
IPackageFragment pack = root.createPackageFragment("pack", true, null);
ICompilationUnit cu1 = pack.getCompilationUnit("LongTraceLines.java");
String initialString = prefixForErrorMessage + "Numbers:";
String initializeString = "String errorString = \"" + initialString
+ "\";";
String contents = "public class LongTraceLines extends TestCase {\n"
+ " public void testLongTraceLine() throws Exception {\n"
+ (" " + initializeString + "\n")
+ (" for (int i = 0; i < "
+ howManyNumbersInErrorString + "; i++) {\n")
+ " errorString += \" \" + i;\n"
+ " }\n"
+ " throw new RuntimeException(errorString);\n"
+ " }\n"
+ "}";
IType type = cu1.createType(contents, null, true, null);
cu1.createImport("junit.framework.TestCase", null, Flags.AccDefault,
null);
cu1.createImport("java.util.Arrays", null, Flags.AccDefault, null);
ILaunchManager lm = DebugPlugin.getDefault().getLaunchManager();
lm.addLaunchListener(this);
LaunchConfigurationManager manager = DebugUIPlugin.getDefault()
.getLaunchConfigurationManager();
List launchShortcuts = manager.getLaunchShortcuts();
LaunchShortcutExtension ext = null;
for (Iterator iter = launchShortcuts.iterator(); iter.hasNext();) {
ext = (LaunchShortcutExtension) iter.next();
if (ext.getLabel().equals("JUnit Test"))
break;
}
ext.launch(new StructuredSelection(type), ILaunchManager.RUN_MODE);
}
protected void waitForTableToFill(int numExpectedTableLines,
int millisecondTimeout, boolean lastItemHasImage) throws PartInitException {
long startTime = System.currentTimeMillis();
while (stillWaiting(numExpectedTableLines, lastItemHasImage)) {
if (System.currentTimeMillis() - startTime > millisecondTimeout)
fail("Timeout waiting for " + numExpectedTableLines
+ " lines in table. Present: " + getNumTableItems() + " items.\n"
+ "The 2nd vm has " + (hasNotTerminated() ? "not " : "") + "terminated.");
dispatchEvents();
}
}
protected void dispatchEvents() {
PlatformUI.getWorkbench().getDisplay().readAndDispatch();
}
protected boolean stillWaiting(int numExpectedTableLines, boolean lastItemHasImage)
throws PartInitException {
return hasNotTerminated() || getNumTableItems() < numExpectedTableLines || (lastItemHasImage && getImage(numExpectedTableLines - 1) == null);
}
protected int getNumTableItems() throws PartInitException {
return getTable().getItemCount();
}
protected void setUp() throws Exception {
super.setUp();
fProject = JavaProjectHelper.createJavaProject("a", "bin");
}
protected void tearDown() throws Exception {
JavaProjectHelper.delete(fProject);
}
}