mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-21 21:52:10 +02:00
First crack at junit CDT tests
This commit is contained in:
parent
734efafff7
commit
612877ef1d
29 changed files with 3442 additions and 0 deletions
17
core/org.eclipse.cdt.ui.tests/.classpath
Normal file
17
core/org.eclipse.cdt.ui.tests/.classpath
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/"/>
|
||||
<classpathentry kind="src" path="ui"/>
|
||||
<classpathentry kind="src" path="core"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.boot"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.resources"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.runtime"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.cdt.core"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.cdt.ui"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.swt"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.ui"/>
|
||||
<classpathentry kind="src" path="/org.junit"/>
|
||||
<classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
|
||||
<classpathentry kind="src" path="/org.apache.xerces"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
37
core/org.eclipse.cdt.ui.tests/.project
Normal file
37
core/org.eclipse.cdt.ui.tests/.project
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>org.eclipse.cdt.ui.tests</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>org.apache.xerces</project>
|
||||
<project>org.eclipse.cdt.core</project>
|
||||
<project>org.eclipse.cdt.ui</project>
|
||||
<project>org.eclipse.core.boot</project>
|
||||
<project>org.eclipse.core.resources</project>
|
||||
<project>org.eclipse.core.runtime</project>
|
||||
<project>org.eclipse.swt</project>
|
||||
<project>org.eclipse.ui</project>
|
||||
<project>org.junit</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.pde.PluginNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
44
core/org.eclipse.cdt.ui.tests/about.html
Normal file
44
core/org.eclipse.cdt.ui.tests/about.html
Normal file
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>About</title>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
|
||||
</head>
|
||||
<body lang="EN-US">
|
||||
<h2>About This Content</h2>
|
||||
|
||||
<p>20th June, 2002</p>
|
||||
<h3>License</h3>
|
||||
<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
|
||||
Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
|
||||
For purposes of the CPL, "Program" will mean the Content.</p>
|
||||
|
||||
<h3>Third Party Content</h3>
|
||||
|
||||
<p>The Content includes items that may be have been sourced from third parties as follows:</p>
|
||||
|
||||
<p><b>JUnit 3.7</b></p>
|
||||
<p>The plug-in is based on software developed by JUnit.org. Your use of JUnit 3.7 in both source and binary code
|
||||
form contained in the plug-in is subject to the terms and conditions of the IBM Public License 1.0 which is available at
|
||||
<a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>.
|
||||
The source code is located in testresources/junit37-noUI-src.zip.</p>
|
||||
|
||||
<p>i) IBM effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;</p>
|
||||
<p>ii) IBM effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;</p>
|
||||
<p>iii) IBM states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party.</p>
|
||||
|
||||
<h3>Contributions</h3>
|
||||
|
||||
<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
|
||||
made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
|
||||
Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
|
||||
|
||||
<p>If this Content is licensed to you under license terms and conditions other than the CPL ("Other License"), any modifications, enhancements and/or
|
||||
other code and/or documentation ("Modifications") uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
|
||||
host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
|
||||
to others under the terms of the Other License. In addition, with regard to Modifications for which you are the copyright holder, you are also
|
||||
providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
|
||||
the CPL.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
1
core/org.eclipse.cdt.ui.tests/build.properties
Normal file
1
core/org.eclipse.cdt.ui.tests/build.properties
Normal file
|
@ -0,0 +1 @@
|
|||
source.cdttests.jar = src/
|
|
@ -0,0 +1,472 @@
|
|||
/*
|
||||
* Copyright (c) 2002 IBM Corp. All rights reserved.
|
||||
* This file is made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*/
|
||||
|
||||
package org.eclipse.cdt.ui.tests.textmanipulation;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.MoveTextEdit;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.SimpleTextEdit;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.SwapTextEdit;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.TextBuffer;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.TextBufferEditor;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.TextRange;
|
||||
import org.eclipse.cdt.internal.corext.textmanipulation.UndoMemento;
|
||||
import org.eclipse.cdt.testplugin.TestPluginLauncher;
|
||||
|
||||
|
||||
|
||||
public class TextBufferTest extends TestCase {
|
||||
|
||||
private static final Class THIS= TextBufferTest.class;
|
||||
|
||||
private TextBuffer fBuffer;
|
||||
private TextBufferEditor fEditor;
|
||||
|
||||
public TextBufferTest(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite result= new TestSuite(THIS);
|
||||
if (false) { // For hot code replace when debugging test cases
|
||||
result.addTestSuite(THIS);
|
||||
result.addTestSuite(THIS);
|
||||
result.addTestSuite(THIS);
|
||||
result.addTestSuite(THIS);
|
||||
result.addTestSuite(THIS);
|
||||
result.addTestSuite(THIS);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
fBuffer= TextBuffer.create("0123456789");
|
||||
fEditor= new TextBufferEditor(fBuffer);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
fEditor= null;
|
||||
}
|
||||
|
||||
public void testOverlap1() throws Exception {
|
||||
// [ [ ] ]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
|
||||
fEditor.add(SimpleTextEdit.createReplace(1, 2, "12"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap2() throws Exception {
|
||||
// [[ ] ]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 1, "0"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap3() throws Exception {
|
||||
// [ [ ]]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
|
||||
fEditor.add(SimpleTextEdit.createReplace(1, 1, "1"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap4() throws Exception {
|
||||
// [ [ ] ]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
|
||||
fEditor.add(SimpleTextEdit.createReplace(1, 1, "1"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap5() throws Exception {
|
||||
// [ [] ]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
|
||||
fEditor.add(SimpleTextEdit.createInsert(1, "xx"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap6() throws Exception {
|
||||
// [ [] ]
|
||||
fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
|
||||
fEditor.add(SimpleTextEdit.createInsert(2, "xx"));
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testOverlap7() throws Exception {
|
||||
boolean catched= false;
|
||||
try {
|
||||
new MoveTextEdit(2,5,3);
|
||||
} catch (Exception e) {
|
||||
catched= true;
|
||||
}
|
||||
assertTrue(catched);
|
||||
}
|
||||
|
||||
public void testOverlap8() throws Exception {
|
||||
boolean catched= false;
|
||||
try {
|
||||
new MoveTextEdit(2,5,6);
|
||||
} catch (Exception e) {
|
||||
catched= true;
|
||||
}
|
||||
assertTrue(catched);
|
||||
}
|
||||
|
||||
public void testOverlap9() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(3, 1, 7);
|
||||
MoveTextEdit e2= new MoveTextEdit(2, 3, 8);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(!fEditor.canPerformEdits());
|
||||
}
|
||||
|
||||
public void testInsert1() throws Exception {
|
||||
// [][ ]
|
||||
SimpleTextEdit e1= SimpleTextEdit.createInsert(2, "yy");
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(2, 3, "3456");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 2, 2);
|
||||
assert(e2.getTextRange(), 4, 4);
|
||||
assertEquals("Buffer content", "01yy345656789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 2, 0);
|
||||
assert(e2.getTextRange(), 2, 3);
|
||||
}
|
||||
|
||||
public void testInsert2() throws Exception {
|
||||
// [][]
|
||||
SimpleTextEdit e1= SimpleTextEdit.createInsert(2, "yy");
|
||||
SimpleTextEdit e2= SimpleTextEdit.createInsert(2, "xx");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 2, 2);
|
||||
assert(e2.getTextRange(), 4, 2);
|
||||
assertEquals("Buffer content", "01yyxx23456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 2, 0);
|
||||
assert(e2.getTextRange(), 2, 0);
|
||||
}
|
||||
|
||||
public void testInsert3() throws Exception {
|
||||
// [ ][][ ]
|
||||
SimpleTextEdit e1= SimpleTextEdit.createReplace(0, 2, "011");
|
||||
SimpleTextEdit e2= SimpleTextEdit.createInsert(2, "xx");
|
||||
SimpleTextEdit e3= SimpleTextEdit.createReplace(2, 2, "2");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
fEditor.add(e3);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 0, 3);
|
||||
assert(e2.getTextRange(), 3, 2);
|
||||
assert(e3.getTextRange(), 5, 1);
|
||||
assertEquals("Buffer content", "011xx2456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 0, 2);
|
||||
assert(e2.getTextRange(), 2, 0);
|
||||
assert(e3.getTextRange(), 2, 2);
|
||||
}
|
||||
|
||||
public void testInsert4() throws Exception {
|
||||
SimpleTextEdit e1= SimpleTextEdit.createInsert(0, "xx");
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer length", 12, fBuffer.getLength());
|
||||
assert(e1.getTextRange(), 0, 2);
|
||||
assertEquals("Buffer content", "xx0123456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 0, 0);
|
||||
}
|
||||
|
||||
public void testInsert5() throws Exception {
|
||||
SimpleTextEdit e1= SimpleTextEdit.createInsert(10, "xx");
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer length", 12, fBuffer.getLength());
|
||||
assert(e1.getTextRange(), 10, 2);
|
||||
assertEquals("Buffer content", "0123456789xx", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 10, 0);
|
||||
}
|
||||
|
||||
public void testDelete1() throws Exception {
|
||||
SimpleTextEdit e1= SimpleTextEdit.createDelete(3, 1);
|
||||
fEditor.add(e1);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 3, 0);
|
||||
assertEquals("Buffer content", "012456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 3, 1);
|
||||
}
|
||||
|
||||
public void testDelete2() throws Exception {
|
||||
SimpleTextEdit e1= SimpleTextEdit.createDelete(4, 1);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createDelete(3, 1);
|
||||
SimpleTextEdit e3= SimpleTextEdit.createDelete(5, 1);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
fEditor.add(e3);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 3, 0);
|
||||
assert(e2.getTextRange(), 3, 0);
|
||||
assert(e3.getTextRange(), 3, 0);
|
||||
assertEquals("Buffer content", "0126789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 4, 1);
|
||||
assert(e2.getTextRange(), 3, 1);
|
||||
assert(e3.getTextRange(), 5, 1);
|
||||
}
|
||||
|
||||
public void testDelete3() throws Exception {
|
||||
SimpleTextEdit e1= SimpleTextEdit.createInsert(3, "x");
|
||||
SimpleTextEdit e2= SimpleTextEdit.createDelete(3, 1);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTextRange(), 3, 1);
|
||||
assert(e2.getTextRange(), 4, 0);
|
||||
assertEquals("Buffer content", "012x456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getTextRange(), 3, 0);
|
||||
assert(e2.getTextRange(), 3, 1);
|
||||
}
|
||||
|
||||
public void testMove1() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 2, 5);
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0142356789", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 3, 2);
|
||||
assert(e1.getSourceRange(), 2, 0);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 2, 2);
|
||||
assert(e1.getTargetRange(), 5, 0);
|
||||
}
|
||||
|
||||
public void testMove2() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(5, 2, 2);
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0156234789", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 2, 2);
|
||||
assert(e1.getSourceRange(), 7, 0);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 5, 2);
|
||||
assert(e1.getTargetRange(), 2, 0);
|
||||
}
|
||||
|
||||
public void testMove3() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 2, 7);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(4, 1, "x");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "01x5623789", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 5, 2);
|
||||
assert(e1.getSourceRange(), 2, 0);
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 2, 2);
|
||||
assert(e1.getTargetRange(), 7, 0);
|
||||
assert(e2.getTextRange(), 4, 1);
|
||||
}
|
||||
|
||||
public void testMove4() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(7, 2, 2);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(5, 1, "x");
|
||||
fEditor.add(e2);
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0178234x69", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 2, 2);
|
||||
assert(e1.getSourceRange(), 9, 0);
|
||||
assert(e2.getTextRange(), 7, 1);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 7, 2);
|
||||
assert(e1.getTargetRange(), 2, 0);
|
||||
assert(e2.getTextRange(), 5, 1);
|
||||
}
|
||||
|
||||
public void testMove5() throws Exception {
|
||||
// Move onto itself
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 1, 3);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(2,1,"x");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTargetRange(), 2, 1);
|
||||
assert(e1.getSourceRange(), 3, 0);
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
assertEquals("Buffer content", "01x3456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 2, 1);
|
||||
assert(e1.getTargetRange(), 3, 0);
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
}
|
||||
|
||||
public void testMove6() throws Exception {
|
||||
// Move onto itself
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 1, 2);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(2,1,"x");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTargetRange(), 2, 1);
|
||||
assert(e1.getSourceRange(), 3, 0); // This gets normalized since a move from [2,1] -> 2 == [2,1] -> 3
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
assertEquals("Buffer content", "01x3456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 2, 1);
|
||||
assert(e1.getTargetRange(), 3, 0);
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
}
|
||||
|
||||
public void testMove7() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 3, 7);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(3, 1, "x");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "01562x4789", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 4, 3);
|
||||
assert(e1.getSourceRange(), 2, 0);
|
||||
assert(e2.getTextRange(), 5, 1);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 2, 3);
|
||||
assert(e1.getTargetRange(), 7, 0);
|
||||
assert(e2.getTextRange(), 3, 1);
|
||||
}
|
||||
|
||||
public void testMove8() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(5, 3, 1);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(6, 1, "x");
|
||||
fEditor.add(e2);
|
||||
fEditor.add(e1);
|
||||
assertTrue(fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "05x7123489", fBuffer.getContent());
|
||||
assert(e1.getTargetRange(), 1, 3);
|
||||
assert(e1.getSourceRange(), 8, 0);
|
||||
assert(e2.getTextRange(), 2, 1);
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 5, 3);
|
||||
assert(e1.getTargetRange(), 1, 0);
|
||||
assert(e2.getTextRange(), 6, 1);
|
||||
}
|
||||
|
||||
public void testMove9() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(1, 1, 3);
|
||||
MoveTextEdit e2= new MoveTextEdit(1, 3, 5);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assert(e1.getTargetRange(), 3, 1);
|
||||
assert(e1.getSourceRange(), 2, 0);
|
||||
assert(e2.getTargetRange(), 2, 3);
|
||||
assert(e2.getSourceRange(), 1, 0);
|
||||
assertEquals("Buffer content", "0421356789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
assert(e1.getSourceRange(), 1, 1);
|
||||
assert(e1.getTargetRange(), 3, 0);
|
||||
assert(e2.getSourceRange(), 1, 3);
|
||||
assert(e2.getTargetRange(), 5, 0);
|
||||
}
|
||||
|
||||
public void testMove10() throws Exception {
|
||||
MoveTextEdit e1= new MoveTextEdit(2, 2, 8);
|
||||
MoveTextEdit e2= new MoveTextEdit(5, 2, 1);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0561472389", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
}
|
||||
|
||||
public void testSwap1() throws Exception {
|
||||
SwapTextEdit e1= new SwapTextEdit(1, 1, 3, 1);
|
||||
fEditor.add(e1);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0321456789", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
}
|
||||
|
||||
public void testSwap2() throws Exception {
|
||||
SwapTextEdit e1= new SwapTextEdit(1, 1, 3, 1);
|
||||
SwapTextEdit e2= new SwapTextEdit(5, 1, 7, 1);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0321476589", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
}
|
||||
|
||||
public void testSwap3() throws Exception {
|
||||
SwapTextEdit e1= new SwapTextEdit(1, 1, 3, 1);
|
||||
SwapTextEdit e2= new SwapTextEdit(5, 1, 7, 1);
|
||||
SwapTextEdit e3= new SwapTextEdit(1, 3, 5, 3);
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
fEditor.add(e3);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "0765432189", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
}
|
||||
|
||||
public void testSwapAndReplace() throws Exception {
|
||||
SwapTextEdit e1= new SwapTextEdit(1, 3, 5, 3);
|
||||
SimpleTextEdit e2= SimpleTextEdit.createReplace(6, 1, "ab");
|
||||
fEditor.add(e1);
|
||||
fEditor.add(e2);
|
||||
assertTrue("Can perform edits", fEditor.canPerformEdits());
|
||||
UndoMemento undo= fEditor.performEdits(null);
|
||||
assertEquals("Buffer content", "05ab7412389", fBuffer.getContent());
|
||||
doUndo(undo);
|
||||
}
|
||||
|
||||
private void doUndo(UndoMemento undo) throws Exception {
|
||||
fEditor.add(undo);
|
||||
fEditor.performEdits(null);
|
||||
assertBufferContent();
|
||||
}
|
||||
|
||||
private void assert(TextRange r, int offset, int length) {
|
||||
assertEquals("Offset", offset, r.getOffset());
|
||||
assertEquals("Length", length, r.getLength());
|
||||
}
|
||||
|
||||
private void assertBufferContent() {
|
||||
assertEquals("Buffer content restored", "0123456789", fBuffer.getContent());
|
||||
}
|
||||
}
|
||||
|
23
core/org.eclipse.cdt.ui.tests/plugin.xml
Normal file
23
core/org.eclipse.cdt.ui.tests/plugin.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin
|
||||
id="org.eclipse.cdt.ui.tests"
|
||||
name="org.eclipse.cdt.ui.tests"
|
||||
version="1.0.0">
|
||||
|
||||
<runtime>
|
||||
<library name="cdttests.jar"/>
|
||||
</runtime>
|
||||
<requires>
|
||||
<import plugin="org.apache.xerces"/>
|
||||
<import plugin="org.eclipse.core.boot"/>
|
||||
<import plugin="org.eclipse.core.resources"/>
|
||||
<import plugin="org.eclipse.core.runtime"/>
|
||||
<import plugin="org.eclipse.cdt.core"/>
|
||||
<import plugin="org.eclipse.cdt.ui"/>
|
||||
<import plugin="org.eclipse.swt"/>
|
||||
<import plugin="org.eclipse.ui"/>
|
||||
<import plugin="org.junit"/>
|
||||
</requires>
|
||||
|
||||
|
||||
</plugin>
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
|
||||
import org.eclipse.jface.viewers.ILabelDecorator;
|
||||
import org.eclipse.jface.viewers.LabelProvider;
|
||||
|
||||
/**
|
||||
* Allows to test decorators for Java elements
|
||||
*/
|
||||
public class CElementDecorator extends LabelProvider implements ILabelDecorator {
|
||||
|
||||
/*
|
||||
* @see ILabelDecorator#decorateImage(Image, Object)
|
||||
*/
|
||||
public Image decorateImage(Image image, Object element) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see ILabelDecorator#decorateText(String, Object)
|
||||
*/
|
||||
public String decorateText(String text, Object element) {
|
||||
return text + "*";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,196 @@
|
|||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.CProjectNature;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICFolder;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IProjectDescription;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.ui.dialogs.IOverwriteQuery;
|
||||
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
|
||||
import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
|
||||
|
||||
/**
|
||||
* Helper methods to set up a IJavaProject.
|
||||
*/
|
||||
public class CProjectHelper {
|
||||
|
||||
public static final IPath RT_STUBS= new Path("testresources/rtstubs.jar");
|
||||
public static final IPath JUNIT_SRC= new Path("testresources/junit37-noUI-src.zip");
|
||||
|
||||
public static final IPath MYLIB= new Path("testresources/mylib.jar");
|
||||
|
||||
|
||||
/**
|
||||
* Creates a ICProject.
|
||||
*/
|
||||
public static ICProject createCProject(String projectName, String binFolderName) throws CoreException {
|
||||
IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
|
||||
IProject project= root.getProject(projectName);
|
||||
if (!project.exists()) {
|
||||
project.create(null);
|
||||
} else {
|
||||
project.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
}
|
||||
|
||||
if (!project.isOpen()) {
|
||||
project.open(null);
|
||||
}
|
||||
|
||||
|
||||
if (!project.hasNature(CProjectNature.C_NATURE_ID)) {
|
||||
addNatureToProject(project, CProjectNature.C_NATURE_ID, null);
|
||||
}
|
||||
|
||||
ICProject cproject = CCorePlugin.getDefault().getCoreModel().create(project);
|
||||
|
||||
return cproject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a ICProject.
|
||||
*/
|
||||
public static void delete(ICProject cproject) throws CoreException {
|
||||
performDummySearch();
|
||||
cproject.getProject().delete(true, true, null);
|
||||
}
|
||||
|
||||
public static void performDummySearch() throws CModelException {
|
||||
/* SearchEngine().searchAllTypeNames(
|
||||
ResourcesPlugin.getWorkspace(),
|
||||
null,
|
||||
null,
|
||||
IJavaSearchConstants.EXACT_MATCH,
|
||||
IJavaSearchConstants.CASE_SENSITIVE,
|
||||
IJavaSearchConstants.CLASS,
|
||||
SearchEngine.createJavaSearchScope(new IJavaElement[0]),
|
||||
new Requestor(),
|
||||
IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
|
||||
null); */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a source container to a ICProject.
|
||||
*/
|
||||
public static ICFolder addSourceContainer(ICProject cproject, String containerName) throws CoreException {
|
||||
IProject project= cproject.getProject();
|
||||
IContainer container= null;
|
||||
if (containerName == null || containerName.length() == 0) {
|
||||
container= project;
|
||||
} else {
|
||||
IFolder folder= project.getFolder(containerName);
|
||||
if (!folder.exists()) {
|
||||
folder.create(false, true, null);
|
||||
}
|
||||
container= folder;
|
||||
}
|
||||
|
||||
return (ICFolder)container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a source container to a ICProject and imports all files contained
|
||||
* in the given Zip file.
|
||||
*/
|
||||
public static ICFolder addSourceContainerWithImport(ICProject cproject, String containerName, ZipFile zipFile) throws InvocationTargetException, CoreException {
|
||||
ICFolder root= addSourceContainer(cproject, containerName);
|
||||
importFilesFromZip(zipFile, root.getPath(), null);
|
||||
return root;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a source folder from a IJavaProject.
|
||||
*/
|
||||
public static void removeSourceContainer(ICProject cproject, String containerName) throws CoreException {
|
||||
IFolder folder= cproject.getProject().getFolder(containerName);
|
||||
folder.delete(true, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a required project entry.
|
||||
*/
|
||||
public static void addRequiredProject(ICProject cproject, ICProject required) throws CModelException {
|
||||
//IClasspathEntry cpe= JavaCore.newProjectEntry(required.getProject().getFullPath());
|
||||
//addToClasspath(cproject, cpe);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Try to find rt.jar
|
||||
*/
|
||||
public static IPath[] findRtJar() {
|
||||
File rtStubs= CTestPlugin.getDefault().getFileInPlugin(RT_STUBS);
|
||||
if (rtStubs != null && rtStubs.exists()) {
|
||||
return new IPath[] {
|
||||
new Path(rtStubs.getPath()),
|
||||
null,
|
||||
null
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
IVMInstall vmInstall= JavaRuntime.getDefaultVMInstall();
|
||||
if (vmInstall != null) {
|
||||
LibraryLocation loc= vmInstall.getVMInstallType().getDefaultLibraryLocation(vmInstall.getInstallLocation());
|
||||
if (loc != null) {
|
||||
return new IPath[] {
|
||||
new Path(loc.getSystemLibrary().getPath()),
|
||||
new Path(loc.getSystemLibrarySource().getPath()),
|
||||
loc.getPackageRootPath()
|
||||
};
|
||||
}
|
||||
}*/
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
|
||||
IProjectDescription description = proj.getDescription();
|
||||
String[] prevNatures= description.getNatureIds();
|
||||
String[] newNatures= new String[prevNatures.length + 1];
|
||||
System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
|
||||
newNatures[prevNatures.length]= natureId;
|
||||
description.setNatureIds(newNatures);
|
||||
proj.setDescription(description, monitor);
|
||||
}
|
||||
|
||||
private static void importFilesFromZip(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException {
|
||||
ZipFileStructureProvider structureProvider= new ZipFileStructureProvider(srcZipFile);
|
||||
try {
|
||||
ImportOperation op= new ImportOperation(destPath, structureProvider.getRoot(), structureProvider, new ImportOverwriteQuery());
|
||||
op.run(monitor);
|
||||
} catch (InterruptedException e) {
|
||||
// should not happen
|
||||
}
|
||||
}
|
||||
|
||||
private static class ImportOverwriteQuery implements IOverwriteQuery {
|
||||
public String queryOverwrite(String file) {
|
||||
return ALL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceDescription;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IPluginDescriptor;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.Plugin;
|
||||
|
||||
|
||||
public class CTestPlugin extends Plugin {
|
||||
|
||||
private static CTestPlugin fgDefault;
|
||||
|
||||
public CTestPlugin(IPluginDescriptor descriptor) {
|
||||
super(descriptor);
|
||||
fgDefault= this;
|
||||
}
|
||||
|
||||
public static CTestPlugin getDefault() {
|
||||
return fgDefault;
|
||||
}
|
||||
|
||||
public static IWorkspace getWorkspace() {
|
||||
return ResourcesPlugin.getWorkspace();
|
||||
}
|
||||
|
||||
public static void enableAutobuild(boolean enable) throws CoreException {
|
||||
// disable auto build
|
||||
IWorkspace workspace= fgDefault.getWorkspace();
|
||||
IWorkspaceDescription desc= workspace.getDescription();
|
||||
desc.setAutoBuilding(enable);
|
||||
workspace.setDescription(desc);
|
||||
}
|
||||
|
||||
public File getFileInPlugin(IPath path) {
|
||||
try {
|
||||
URL installURL= new URL(getDescriptor().getInstallURL(), path.toString());
|
||||
URL localURL= Platform.asLocalURL(installURL);
|
||||
return new File(localURL.getFile());
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import junit.extensions.TestSetup;
|
||||
import junit.framework.Test;
|
||||
|
||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||
|
||||
|
||||
public class CTestSetup extends TestSetup {
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* Not needed anymore. No added value
|
||||
*/
|
||||
public CTestSetup(Test test) {
|
||||
super(test);
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,528 @@
|
|||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
// copied from startup.jar. planned to be removed soon
|
||||
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
import java.net.*;
|
||||
import java.lang.reflect.*;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Startup class for Eclipse. Creates a class loader using
|
||||
* supplied URL of platform installation, loads and calls
|
||||
* the Eclipse Boot Loader. The startup arguments are as follows:
|
||||
* <dl>
|
||||
* <dd>
|
||||
* -application <id>: the identifier of the application to run
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -boot <location>: the location, expressed as a URL, of the platform's boot.jar
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -consolelog : enables log to the console. Handy when combined with -debug
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -data <location>: sets the workspace location and the default location for projects
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -debug [options file]: turns on debug mode for the platform and optionally specifies a location
|
||||
* for the .options file. This file indicates what debug points are available for a
|
||||
* plug-in and whether or not they are enabled. If a location is not specified, the platform searches
|
||||
* for the .options file under the install directory
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -dev [entries]: turns on dev mode and optionally specifies comma-separated class path entries
|
||||
* which are added to the class path of each plug-in
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -keyring <location>: the location of the authorization database on disk. This argument
|
||||
* has to be used together with the -password argument
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -password <passwd>: the password for the authorization database
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -plugins <location>: The arg is a URL pointing to a file which specs the plugin
|
||||
* path for the platform. The file is in property file format where the keys are user-defined
|
||||
* names and the values are comma separated lists of either explicit paths to plugin.xml
|
||||
* files or directories containing plugins. (e.g., .../eclipse/plugins).
|
||||
* </dd>
|
||||
* <dd>
|
||||
* -ws <window system>: sets the window system value
|
||||
* </dd>
|
||||
* </dl>
|
||||
*/
|
||||
public class Main {
|
||||
/**
|
||||
* Indicates whether this instance is running in debug mode.
|
||||
*/
|
||||
protected boolean debug = false;
|
||||
|
||||
/**
|
||||
* The location of the launcher to run.
|
||||
*/
|
||||
protected String bootLocation = null;
|
||||
|
||||
/**
|
||||
* The identifier of the application to run.
|
||||
*/
|
||||
protected String application;
|
||||
|
||||
/**
|
||||
* The path for finding find plugins.
|
||||
*/
|
||||
protected URL pluginPathLocation;
|
||||
|
||||
/**
|
||||
* The boot path location.
|
||||
*/
|
||||
protected String location;
|
||||
|
||||
/**
|
||||
* Indicates whether items for UNinstallation should be looked for.
|
||||
*/
|
||||
protected boolean uninstall = false;
|
||||
|
||||
/**
|
||||
* The item to be uninstalled.
|
||||
*/
|
||||
protected String uninstallCookie;
|
||||
|
||||
/**
|
||||
* The class path entries.
|
||||
*/
|
||||
protected String devClassPath = null;
|
||||
|
||||
/**
|
||||
* Indicates whether this instance is running in development mode.
|
||||
*/
|
||||
protected boolean inDevelopmentMode = false;
|
||||
|
||||
// static token describing how to take down the splash screen
|
||||
private static String endSplash = null;
|
||||
|
||||
// constants
|
||||
private static final String APPLICATION = "-application";
|
||||
private static final String BOOT = "-boot";
|
||||
private static final String DEBUG = "-debug";
|
||||
private static final String DEV = "-dev";
|
||||
private static final String ENDSPLASH = "-endsplash";
|
||||
private static final String UNINSTALL = "-uninstall";
|
||||
private static final String PI_BOOT = "org.eclipse.core.boot";
|
||||
private static final String BOOTLOADER = "org.eclipse.core.boot.BootLoader";
|
||||
private static final String UPDATELOADER = "org.eclipse.core.internal.boot.LaunchInfo";
|
||||
|
||||
// The project containing the boot loader code. This is used to construct
|
||||
// the correct class path for running in VAJ and VAME.
|
||||
private static final String PROJECT_NAME = "Eclipse Core Boot";
|
||||
|
||||
private static boolean inVAJ;
|
||||
static {
|
||||
try {
|
||||
Class.forName("com.ibm.uvm.lang.ProjectClassLoader");
|
||||
inVAJ = true;
|
||||
} catch (Exception e) {
|
||||
inVAJ = false;
|
||||
}
|
||||
}
|
||||
private static boolean inVAME;
|
||||
static {
|
||||
try {
|
||||
Class.forName("com.ibm.eclipse.core.VAME");
|
||||
inVAME = true;
|
||||
} catch (Exception e) {
|
||||
inVAME = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the launch.
|
||||
*
|
||||
* @return the result of performing the launch
|
||||
* @param args command-line arguments
|
||||
* @exception Exception thrown if a problem occurs during the launch
|
||||
*/
|
||||
protected Object basicRun(String[] args) throws Exception {
|
||||
Class clazz = getBootLoader(bootLocation);
|
||||
Method method = clazz.getDeclaredMethod("run", new Class[] { String.class, URL.class, String.class, String[].class });
|
||||
try {
|
||||
return method.invoke(clazz, new Object[] { application, pluginPathLocation, location, args });
|
||||
} catch (InvocationTargetException e) {
|
||||
if (e.getTargetException() instanceof Error)
|
||||
throw (Error) e.getTargetException();
|
||||
else
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the result of converting a list of comma-separated tokens into an array
|
||||
*
|
||||
* @return the array of string tokens
|
||||
* @param prop the initial comma-separated string
|
||||
*/
|
||||
private String[] getArrayFromList(String prop) {
|
||||
if (prop == null || prop.trim().equals(""))
|
||||
return new String[0];
|
||||
Vector list = new Vector();
|
||||
StringTokenizer tokens = new StringTokenizer(prop, ",");
|
||||
while (tokens.hasMoreTokens()) {
|
||||
String token = tokens.nextToken().trim();
|
||||
if (!token.equals(""))
|
||||
list.addElement(token);
|
||||
}
|
||||
return list.isEmpty() ? new String[0] : (String[]) list.toArray(new String[0]);
|
||||
}
|
||||
/**
|
||||
* Creates and returns a platform <code>BootLoader</code> which can be used to start
|
||||
* up and run the platform. The given base, if not <code>null</code>,
|
||||
* is the location of the boot loader code. If the value is <code>null</code>
|
||||
* then the boot loader is located relative to this class.
|
||||
*
|
||||
* @return the new boot loader
|
||||
* @param base the location of the boot loader
|
||||
*/
|
||||
public Class getBootLoader(String base) throws Exception {
|
||||
URLClassLoader loader = new URLClassLoader(getBootPath(base), null);
|
||||
return loader.loadClass(BOOTLOADER);
|
||||
}
|
||||
/**
|
||||
* Returns the <code>URL</code>-based class path describing where the boot classes
|
||||
* are located when running in development mode.
|
||||
*
|
||||
* @return the url-based class path
|
||||
* @param base the base location
|
||||
* @exception MalformedURLException if a problem occurs computing the class path
|
||||
*/
|
||||
protected URL[] getDevPath(URL base) throws MalformedURLException {
|
||||
URL url;
|
||||
String devBase = base.toExternalForm();
|
||||
if (!inDevelopmentMode) {
|
||||
url = new URL(devBase + "boot.jar");
|
||||
return new URL[] {url};
|
||||
}
|
||||
String[] locations = getArrayFromList(devClassPath);
|
||||
ArrayList result = new ArrayList(locations.length);
|
||||
for (int i = 0; i < locations.length; i++) {
|
||||
String spec = devBase + locations[i];
|
||||
char lastChar = spec.charAt(spec.length() - 1);
|
||||
if ((spec.endsWith(".jar") || (lastChar == '/' || lastChar == '\\')))
|
||||
url = new URL (spec);
|
||||
else
|
||||
url = new URL(spec + "/");
|
||||
//make sure URL exists before adding to path
|
||||
if (new java.io.File(url.getFile()).exists())
|
||||
result.add(url);
|
||||
}
|
||||
url = new URL(devBase + "boot.jar");
|
||||
if (new java.io.File(url.getFile()).exists())
|
||||
result.add(url);
|
||||
return (URL[])result.toArray(new URL[result.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <code>URL</code>-based class path describing where the boot classes are located.
|
||||
*
|
||||
* @return the url-based class path
|
||||
* @param base the base location
|
||||
* @exception MalformedURLException if a problem occurs computing the class path
|
||||
*/
|
||||
protected URL[] getBootPath(String base) throws MalformedURLException {
|
||||
URL url = null;
|
||||
// if the given location is not null, assume it is correct and use it.
|
||||
if (base != null) {
|
||||
url = new URL(base);
|
||||
if (debug)
|
||||
System.out.println("Boot URL: " + url.toExternalForm());
|
||||
return new URL[] {url};
|
||||
}
|
||||
// Create a URL based on the location of this class' code.
|
||||
// strip off jar file and/or last directory to get
|
||||
// to the directory containing projects.
|
||||
URL[] result = null;
|
||||
url = getClass().getProtectionDomain().getCodeSource().getLocation();
|
||||
String path = url.getFile();
|
||||
if (path.endsWith(".jar"))
|
||||
path = path.substring(0, path.lastIndexOf("/"));
|
||||
else
|
||||
if (path.endsWith("/"))
|
||||
path = path.substring(0, path.length() - 1);
|
||||
if (inVAJ || inVAME) {
|
||||
int ix = path.lastIndexOf("/");
|
||||
path = path.substring(0, ix + 1);
|
||||
path = path + PROJECT_NAME + "/";
|
||||
url = new URL(url.getProtocol(), url.getHost(), url.getPort(), path);
|
||||
result = new URL[] {url};
|
||||
} else {
|
||||
path = searchForPlugins(path);
|
||||
path = searchForBoot(path);
|
||||
// add on any dev path elements
|
||||
url = new URL(url.getProtocol(), url.getHost(), url.getPort(), path);
|
||||
result = getDevPath(url);
|
||||
}
|
||||
if (debug) {
|
||||
System.out.println("Boot URL:");
|
||||
for (int i = 0; i < result.length; i++)
|
||||
System.out.println(" " + result[i].toExternalForm());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches for a plugins root starting at a given location. If one is
|
||||
* found then this location is returned; otherwise an empty string is
|
||||
* returned.
|
||||
*
|
||||
* @return the location where plugins were found, or an empty string
|
||||
* @param start the location to begin searching at
|
||||
*/
|
||||
protected String searchForPlugins(String start) {
|
||||
File path = new File(start);
|
||||
while (path != null) {
|
||||
File test = new File(path, "plugins");
|
||||
if (test.exists())
|
||||
return test.toString();
|
||||
path = path.getParentFile();
|
||||
path = (path == null || path.length() == 1) ? null : path;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
/**
|
||||
* Searches for a boot directory starting at a given location. If one
|
||||
* is found then this location is returned; otherwise an empty string
|
||||
* is returned.
|
||||
*
|
||||
* @return the location where plugins were found, or an empty string
|
||||
* @param start the location to begin searching at
|
||||
*/
|
||||
protected String searchForBoot(String start) {
|
||||
FileFilter filter = new FileFilter() {
|
||||
public boolean accept(File candidate) {
|
||||
return candidate.getName().startsWith(PI_BOOT);
|
||||
}
|
||||
};
|
||||
File[] boots = new File(start).listFiles(filter);
|
||||
String result = null;
|
||||
String maxVersion = null;
|
||||
for (int i = 0; i < boots.length; i++) {
|
||||
String name = boots[i].getName();
|
||||
int index = name.lastIndexOf('_');
|
||||
if (index == -1) {
|
||||
result = boots[i].getAbsolutePath();
|
||||
i = boots.length;
|
||||
} else {
|
||||
if (index > 0) {
|
||||
String version = name.substring(index + 1);
|
||||
if (maxVersion == null) {
|
||||
result = boots[i].getAbsolutePath();
|
||||
maxVersion = version;
|
||||
} else
|
||||
if (maxVersion.compareTo(version) == -1) {
|
||||
result = boots[i].getAbsolutePath();
|
||||
maxVersion = version;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result == null)
|
||||
throw new RuntimeException("Could not find bootstrap code. Check location of boot plug-in or specify -boot.");
|
||||
return result.replace(File.separatorChar, '/') + "/";
|
||||
}
|
||||
/**
|
||||
* Returns the update loader for the given boot path.
|
||||
*
|
||||
* @return the update loader
|
||||
* @param base the boot path base
|
||||
* @exception Exception thrown is a problem occurs determining this loader
|
||||
*/
|
||||
public Class getUpdateLoader(String base) throws Exception {
|
||||
URLClassLoader loader = new URLClassLoader(getBootPath(base), null);
|
||||
return loader.loadClass(UPDATELOADER);
|
||||
}
|
||||
/**
|
||||
* Runs the platform with the given arguments. The arguments must identify
|
||||
* an application to run (e.g., <code>-application com.example.application</code>).
|
||||
* After running the application <code>System.exit(N)</code> is executed.
|
||||
* The value of N is derived from the value returned from running the application.
|
||||
* If the application's return value is an <code>Integer</code>, N is this value.
|
||||
* In all other cases, N = 0.
|
||||
* <p>
|
||||
* Clients wishing to run the platform without a following <code>System.exit</code>
|
||||
* call should use <code>run()</code>.
|
||||
*
|
||||
* @see #run
|
||||
*
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
Object result = null;
|
||||
try {
|
||||
result = new Main().run(args);
|
||||
} catch (Throwable e) {
|
||||
// try and take down the splash screen.
|
||||
endSplash();
|
||||
System.out.println("Exception launching the Eclipse Platform:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
int exitCode = result instanceof Integer ? ((Integer) result).intValue() : 0;
|
||||
System.exit(exitCode);
|
||||
}
|
||||
/**
|
||||
* Tears down the currently-displayed splash screen.
|
||||
*/
|
||||
public static void endSplash() {
|
||||
if (endSplash == null)
|
||||
return;
|
||||
try {
|
||||
Runtime.getRuntime().exec(endSplash);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs this launcher with the arguments specified in the given string.
|
||||
*
|
||||
* @param argString the arguments string
|
||||
* @exception Exception thrown if a problem occurs during launching
|
||||
*/
|
||||
public static void main(String argString) throws Exception {
|
||||
Vector list = new Vector(5);
|
||||
for (StringTokenizer tokens = new StringTokenizer(argString, " "); tokens.hasMoreElements();)
|
||||
list.addElement((String) tokens.nextElement());
|
||||
main((String[]) list.toArray(new String[list.size()]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the command line arguments
|
||||
*
|
||||
* @return the arguments to pass through to the launched application
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
protected String[] processCommandLine(String[] args) throws Exception {
|
||||
int[] configArgs = new int[100];
|
||||
configArgs[0] = -1; // need to initialize the first element to something that could not be an index.
|
||||
int configArgIndex = 0;
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
boolean found = false;
|
||||
// check for args without parameters (i.e., a flag arg)
|
||||
// check if debug should be enabled for the entire platform
|
||||
if (args[i].equalsIgnoreCase(DEBUG)) {
|
||||
debug = true;
|
||||
// passed thru this arg (i.e., do not set found = true
|
||||
continue;
|
||||
}
|
||||
|
||||
// check if development mode should be enabled for the entire platform
|
||||
// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -),
|
||||
// simply enable development mode. Otherwise, assume that that the following arg is
|
||||
// actually some additional development time class path entries. This will be processed below.
|
||||
if (args[i].equalsIgnoreCase(DEV) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) {
|
||||
inDevelopmentMode = true;
|
||||
// do not mark the arg as found so it will be passed through
|
||||
continue;
|
||||
}
|
||||
|
||||
// done checking for args. Remember where an arg was found
|
||||
if (found) {
|
||||
configArgs[configArgIndex++] = i;
|
||||
continue;
|
||||
}
|
||||
// check for args with parameters. If we are at the last argument or if the next one
|
||||
// has a '-' as the first character, then we can't have an arg with a parm so continue.
|
||||
if (i == args.length - 1 || args[i + 1].startsWith("-"))
|
||||
continue;
|
||||
String arg = args[++i];
|
||||
|
||||
// look for the laucher to run
|
||||
if (args[i - 1].equalsIgnoreCase(BOOT)) {
|
||||
bootLocation = arg;
|
||||
found = true;
|
||||
}
|
||||
|
||||
// look for the development mode and class path entries.
|
||||
if (args[i - 1].equalsIgnoreCase(DEV)) {
|
||||
inDevelopmentMode = true;
|
||||
devClassPath = arg;
|
||||
continue;
|
||||
}
|
||||
|
||||
// look for the application to run
|
||||
if (args[i - 1].equalsIgnoreCase(APPLICATION)) {
|
||||
application = arg;
|
||||
found = true;
|
||||
}
|
||||
|
||||
// look for token to use to end the splash screen
|
||||
if (args[i - 1].equalsIgnoreCase(ENDSPLASH)) {
|
||||
endSplash = arg;
|
||||
continue;
|
||||
}
|
||||
|
||||
// look for items to uninstall
|
||||
if (args[i - 1].equalsIgnoreCase(UNINSTALL)) {
|
||||
uninstall = true;
|
||||
uninstallCookie = arg;
|
||||
found = true;
|
||||
}
|
||||
|
||||
// done checking for args. Remember where an arg was found
|
||||
if (found) {
|
||||
configArgs[configArgIndex++] = i - 1;
|
||||
configArgs[configArgIndex++] = i;
|
||||
}
|
||||
}
|
||||
// remove all the arguments consumed by this argument parsing
|
||||
if (configArgIndex == 0)
|
||||
return args;
|
||||
String[] passThruArgs = new String[args.length - configArgIndex];
|
||||
configArgIndex = 0;
|
||||
int j = 0;
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (i == configArgs[configArgIndex])
|
||||
configArgIndex++;
|
||||
else
|
||||
passThruArgs[j++] = args[i];
|
||||
}
|
||||
return passThruArgs;
|
||||
}
|
||||
/**
|
||||
* Runs the application to be launched.
|
||||
*
|
||||
* @return the return value from the launched application
|
||||
* @param args the arguments to pass to the application
|
||||
* @exception thrown if a problem occurs during launching
|
||||
*/
|
||||
public Object run(String[] args) throws Exception {
|
||||
String[] passThruArgs = processCommandLine(args);
|
||||
if (uninstall)
|
||||
return updateRun(UNINSTALL, uninstallCookie, passThruArgs);
|
||||
else
|
||||
return basicRun(passThruArgs);
|
||||
}
|
||||
/**
|
||||
* Performs an update run.
|
||||
*
|
||||
* @return the return value from the update loader
|
||||
* @param flag flag to give to the update loader
|
||||
* @param value value to give to the update loader
|
||||
* @param args arguments to give to the update loader.
|
||||
* @exception Exception thrown if a problem occurs during execution
|
||||
*/
|
||||
protected Object updateRun(String flag, String value, String[] args) throws Exception {
|
||||
Class clazz = getUpdateLoader(bootLocation);
|
||||
Method method = clazz.getDeclaredMethod("run", new Class[] { String.class, String.class, String.class, String[].class });
|
||||
try {
|
||||
return method.invoke(clazz, new Object[] { flag, value, location, args });
|
||||
} catch (InvocationTargetException e) {
|
||||
if (e.getTargetException() instanceof Error)
|
||||
throw (Error) e.getTargetException();
|
||||
else
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Properties;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Application is responsible for calling core launch api
|
||||
*/
|
||||
|
||||
public class NewMain extends Main {
|
||||
private static final String DEFAULT_APPLICATION= "org.eclipse.ui.workbench";
|
||||
|
||||
|
||||
public NewMain(String application, String location, URL pluginPathLocation, String bootLocation, boolean debug) throws IOException {
|
||||
this.application= application;
|
||||
this.location= location;
|
||||
this.pluginPathLocation= pluginPathLocation;
|
||||
this.bootLocation= bootLocation;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
String location= getLocationFromProperties("platform");
|
||||
new NewMain(DEFAULT_APPLICATION, location, null, null, true).run(args);
|
||||
} catch (Throwable e) {
|
||||
System.out.println("Exception launching the Eclipse Platform UI:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Run this launcher with the arguments specified in the given string.
|
||||
* This is a short cut method for people running the launcher from
|
||||
* a scrapbook (i.e., swip-and-doit facility).
|
||||
*/
|
||||
public static void main(String argString) throws Exception {
|
||||
Vector list= new Vector(5);
|
||||
for (StringTokenizer tokens= new StringTokenizer(argString, " "); tokens.hasMoreElements();)
|
||||
list.addElement((String) tokens.nextElement());
|
||||
main((String[]) list.toArray(new String[list.size()]));
|
||||
}
|
||||
|
||||
public static String getLocationFromProperties(String key) {
|
||||
Properties properties= new Properties();
|
||||
try {
|
||||
FileInputStream fis= new FileInputStream(getSettingsFile());
|
||||
properties.load(fis);
|
||||
return properties.getProperty(key);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static File getSettingsFile() {
|
||||
String home= System.getProperty("user.home");
|
||||
if (home == null) {
|
||||
System.out.println("Home dir not defined");
|
||||
return null;
|
||||
}
|
||||
return new File(home, "eclipse-workspaces.properties");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Helper class to launch a test
|
||||
*/
|
||||
public class TestPluginLauncher {
|
||||
|
||||
public static final String APP_NAME= "org.eclipse.jdt.ui.tests.app";
|
||||
|
||||
public static void run(String location, Class testCase, String[] args) {
|
||||
run(APP_NAME, location, testCase, args);
|
||||
}
|
||||
|
||||
public static void run(String application, String location, Class testCase, String[] args) {
|
||||
try {
|
||||
String bootLocation= getBootLocation();
|
||||
int nArgs= args.length;
|
||||
String[] newArgs= new String[4 + nArgs];
|
||||
newArgs[0]= testCase.getName();
|
||||
for (int i= 0; i < nArgs; i++) {
|
||||
newArgs[1 + i]= args[i];
|
||||
}
|
||||
newArgs[1 + nArgs]= "-dev";
|
||||
newArgs[1 + nArgs + 1]= "bin";
|
||||
newArgs[1 + nArgs + 2]= "-debug";
|
||||
NewMain newMain= new NewMain(application, location, null, bootLocation, false);
|
||||
newMain.run(newArgs);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getLocationFromProperties(String key) {
|
||||
return NewMain.getLocationFromProperties(key);
|
||||
}
|
||||
|
||||
public static String getLocationFromProperties() {
|
||||
return NewMain.getLocationFromProperties("tests");
|
||||
}
|
||||
|
||||
public static String getBootLocation() {
|
||||
URL url= TestPluginLauncher.class.getResource("TestPluginLauncher.class");
|
||||
String s= url.toString();
|
||||
int index= s.indexOf("/org.eclipse.jdt.ui.tests");
|
||||
if (index == -1)
|
||||
throw new IllegalArgumentException();
|
||||
s= s.substring(0, index);
|
||||
s= s + "/org.eclipse.core.boot/boot.jar";
|
||||
return s;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
import junit.textui.TestRunner;
|
||||
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
|
||||
import org.eclipse.ui.internal.Workbench;
|
||||
|
||||
public class TestWorkbench extends Workbench {
|
||||
|
||||
/**
|
||||
* Run an event loop for the workbench.
|
||||
*/
|
||||
protected void runEventLoop() {
|
||||
// Dispatch all events.
|
||||
Display display = Display.getCurrent();
|
||||
while (true) {
|
||||
try {
|
||||
if (!display.readAndDispatch())
|
||||
break;
|
||||
} catch (Throwable e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
IPath location= CTestPlugin.getDefault().getWorkspace().getRoot().getLocation();
|
||||
System.out.println("Workspace-location: " + location.toString());
|
||||
|
||||
|
||||
try {
|
||||
String[] args= getCommandLineArgs();
|
||||
if (args.length > 0) {
|
||||
Test test= getTest(args[0]);
|
||||
TestRunner.run(test);
|
||||
} else {
|
||||
System.out.println("TestWorkbench: Argument must be class name");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
// Close the workbench.
|
||||
close();
|
||||
}
|
||||
|
||||
public Test getTest(String className) throws Exception {
|
||||
Class testClass= getClass().getClassLoader().loadClass(className);
|
||||
|
||||
Method suiteMethod= null;
|
||||
try {
|
||||
suiteMethod= testClass.getMethod(TestRunner.SUITE_METHODNAME, new Class[0]);
|
||||
} catch (Exception e) {
|
||||
// try to extract a test suite automatically
|
||||
return new TestSuite(testClass);
|
||||
}
|
||||
try {
|
||||
return (Test) suiteMethod.invoke(null, new Class[0]); // static method
|
||||
} catch (InvocationTargetException e) {
|
||||
System.out.println("Failed to invoke suite():" + e.getTargetException().toString());
|
||||
} catch (IllegalAccessException e) {
|
||||
System.out.println("Failed to invoke suite():" + e.toString());
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.testplugin.test;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.testplugin.TestPluginLauncher;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
|
||||
public class HelloWorld extends TestCase {
|
||||
|
||||
private ICProject fCProject;
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), HelloWorld.class, args);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite();
|
||||
suite.addTest(new HelloWorld("test1"));
|
||||
return suite;
|
||||
}
|
||||
|
||||
public HelloWorld(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
fCProject= CProjectHelper.createCProject("TestProject1", "bin");
|
||||
}
|
||||
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
CProjectHelper.delete(fCProject);
|
||||
}
|
||||
|
||||
public void test1() throws Exception {
|
||||
|
||||
assertTrue("Exception to test", 0 != 0);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class AccessibilityTestPass implements IDialogTestPass {
|
||||
private static final int CHECKLIST_SIZE = 5;
|
||||
|
||||
/**
|
||||
* @see IDialogTestPass#title()
|
||||
*/
|
||||
public String title() {
|
||||
return "Test Pass: Accessibility";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#description()
|
||||
*/
|
||||
public String description() {
|
||||
return "Verify the accessibility of the dialogs.";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#label()
|
||||
*/
|
||||
public String label() {
|
||||
return "&Accessibility";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#checkListTexts()
|
||||
*/
|
||||
public ArrayList checkListTexts() {
|
||||
ArrayList list = new ArrayList(CHECKLIST_SIZE);
|
||||
list.add("&1) all widgets are accessible by tabbing.");
|
||||
list.add("&2) forwards and backwards tabbing is in a logical order");
|
||||
list.add("&3) all the widgets with labels have an appropriate mnemonic.");
|
||||
list.add("&4) there are no duplicate mnemonics.");
|
||||
list.add("&5) selectable widgets can be selected using the spacebar.");
|
||||
return list;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#failureTexts()
|
||||
* Size of the return array must be the same size as the checkListTexts'
|
||||
* ArrayList.
|
||||
*/
|
||||
public String[] failureTexts() {
|
||||
String[] failureText = new String[CHECKLIST_SIZE];
|
||||
failureText[0] = "Some widgets aren't accessible by tabbing.";
|
||||
failureText[1] = "Tabbing order is illogical.";
|
||||
failureText[2] = "Missing or inappropriate mnemonics.";
|
||||
failureText[3] = "Duplicate mnemonics.";
|
||||
failureText[4] = "Some widgets cannot be selected using the spacebar.";
|
||||
return failureText;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#queryText()
|
||||
*/
|
||||
public String queryText() {
|
||||
return "Is the accessibility of the dialog acceptable?";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#getID()
|
||||
*/
|
||||
public int getID() {
|
||||
return VerifyDialog.TEST_ACCESS;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,225 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
|
||||
import org.eclipse.ui.internal.WorkbenchPlugin;
|
||||
|
||||
|
||||
/**
|
||||
* A <code>DialogCheck</code> is used test a dialog in
|
||||
* various ways.
|
||||
* <p>
|
||||
* For interactive tests use <code>assertDialog</code>.
|
||||
* For automated tests use <code>assert DialogTexts</code>.
|
||||
* </p>
|
||||
*/
|
||||
public class DialogCheck {
|
||||
private DialogCheck() {
|
||||
}
|
||||
private static VerifyDialog _verifyDialog;
|
||||
|
||||
|
||||
/**
|
||||
* Asserts that a given dialog is not null and that it passes
|
||||
* certain visual tests. These tests will be verified manually
|
||||
* by the tester using an input dialog. Use this assert method
|
||||
* to verify a dialog's sizing, initial focus, or accessiblity.
|
||||
* To ensure that both the input dialog and the test dialog are
|
||||
* accessible by the tester, the getShell() method should be used
|
||||
* when creating the test dialog.
|
||||
*
|
||||
* Example usage:
|
||||
* <code>Dialog dialog = new AboutDialog( DialogCheck.getShell() );
|
||||
* DialogCheck.assertDialog(dialog, this);</code>
|
||||
*
|
||||
* @param dialog the test dialog to be verified.
|
||||
* @param assert this is the test case object, assertions will be
|
||||
* executed on this object.
|
||||
*/
|
||||
public static void assertDialog(Dialog dialog, Assert assert) {
|
||||
assert.assertNotNull(dialog);
|
||||
if (_verifyDialog.getShell() == null) {
|
||||
//force the creation of the verify dialog
|
||||
getShell();
|
||||
}
|
||||
if (_verifyDialog.open(dialog) == IDialogConstants.NO_ID) {
|
||||
assert.assertTrue(_verifyDialog.getFailureText(), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Automated test that checks all the labels and buttons of a dialog
|
||||
* to make sure there is enough room to display all the text. Any
|
||||
* text that wraps is only approximated and is currently not accurate.
|
||||
*
|
||||
* @param dialog the test dialog to be verified.
|
||||
* @param assert this is the test case object, assertions will be
|
||||
* executed on this object.
|
||||
*/
|
||||
public static void assertDialogTexts(Dialog dialog, Assert assert) {
|
||||
assert.assertNotNull(dialog);
|
||||
dialog.setBlockOnOpen(false);
|
||||
dialog.open();
|
||||
Shell shell = dialog.getShell();
|
||||
verifyCompositeText(shell, assert);
|
||||
dialog.close();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method should be called when creating dialogs to test. This
|
||||
* ensures that the dialog's parent shell will be that of the
|
||||
* verification dialog.
|
||||
*
|
||||
* @return Shell The shell of the verification dialog to be used as
|
||||
* the parent shell of the test dialog.
|
||||
*/
|
||||
public static Shell getShell() {
|
||||
Shell shell =
|
||||
WorkbenchPlugin
|
||||
.getDefault()
|
||||
.getWorkbench()
|
||||
.getActiveWorkbenchWindow()
|
||||
.getShell();
|
||||
_verifyDialog = new VerifyDialog(shell);
|
||||
_verifyDialog.create();
|
||||
return _verifyDialog.getShell();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Looks at all the child widgets of a given composite and
|
||||
* verifies the text on all labels and widgets.
|
||||
* @param composite The composite to look through
|
||||
* @param assert The object to invoke assertions on.
|
||||
*/
|
||||
private static void verifyCompositeText(Composite composite, Assert assert) {
|
||||
Control children[] = composite.getChildren();
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
try {
|
||||
//verify the text if the child is a button
|
||||
verifyButtonText((Button) children[i], assert);
|
||||
} catch (ClassCastException exNotButton) {
|
||||
try {
|
||||
//child is not a button, maybe a label
|
||||
verifyLabelText((Label) children[i], assert);
|
||||
} catch (ClassCastException exNotLabel) {
|
||||
try {
|
||||
//child is not a label, make a recursive call if it is a composite
|
||||
verifyCompositeText((Composite) children[i], assert);
|
||||
} catch (ClassCastException exNotComposite) {
|
||||
//the child is not a button, label, or composite - ignore it.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Verifies that a given button is large enough to display its text.
|
||||
* @param button The button to verify,
|
||||
* @param assert The object to invoke assertions on.
|
||||
*/
|
||||
private static void verifyButtonText(Button button, Assert assert) {
|
||||
String widget = button.toString();
|
||||
Point size = button.getSize();
|
||||
|
||||
|
||||
//compute the size with no line wrapping
|
||||
Point preferred = button.computeSize(SWT.DEFAULT, SWT.DEFAULT);
|
||||
//if (size.y/preferred.y) == X, then label spans X lines, so divide
|
||||
//the calculated value of preferred.x by X
|
||||
if (preferred.y * size.y > 0) {
|
||||
preferred.y /= countLines(button.getText()); //check for '\n\'
|
||||
if (size.y / preferred.y > 1) {
|
||||
preferred.x /= (size.y / preferred.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
String message =
|
||||
new StringBuffer("Warning: ")
|
||||
.append(widget)
|
||||
.append("\n\tActual Width -> ")
|
||||
.append(size.x)
|
||||
.append("\n\tRecommended Width -> ")
|
||||
.append(preferred.x)
|
||||
.toString();
|
||||
if (preferred.x > size.x) {
|
||||
//close the dialog
|
||||
button.getShell().dispose();
|
||||
assert.assertTrue(message.toString(), false);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Verifies that a given label is large enough to display its text.
|
||||
* @param label The label to verify,
|
||||
* @param assert The object to invoke assertions on.
|
||||
*/
|
||||
private static void verifyLabelText(Label label, Assert assert) {
|
||||
String widget = label.toString();
|
||||
Point size = label.getSize();
|
||||
|
||||
|
||||
//compute the size with no line wrapping
|
||||
Point preferred = label.computeSize(SWT.DEFAULT, SWT.DEFAULT);
|
||||
//if (size.y/preferred.y) == X, then label spans X lines, so divide
|
||||
//the calculated value of preferred.x by X
|
||||
if (preferred.y * size.y > 0) {
|
||||
preferred.y /= countLines(label.getText());
|
||||
if (size.y / preferred.y > 1) {
|
||||
preferred.x /= (size.y / preferred.y);
|
||||
}
|
||||
}
|
||||
String message =
|
||||
new StringBuffer("Warning: ")
|
||||
.append(widget)
|
||||
.append("\n\tActual Width -> ")
|
||||
.append(size.x)
|
||||
.append("\n\tRecommended Width -> ")
|
||||
.append(preferred.x)
|
||||
.toString();
|
||||
if (preferred.x > size.x) {
|
||||
//close the dialog
|
||||
label.getShell().dispose();
|
||||
assert.assertTrue(message.toString(), false);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Counts the number of lines in a given String.
|
||||
* For example, if a string contains one (1) newline character,
|
||||
* a value of two (2) would be returned.
|
||||
* @param text The string to look through.
|
||||
* @return int the number of lines in text.
|
||||
*/
|
||||
private static int countLines(String text) {
|
||||
int newLines = 1;
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
if (text.charAt(i) == '\n') {
|
||||
newLines++;
|
||||
}
|
||||
}
|
||||
return newLines;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
|
||||
|
||||
/*
|
||||
* A dialog for collecting notes from the tester regarding
|
||||
* the failure of a test.
|
||||
*/
|
||||
public class FailureDialog extends Dialog {
|
||||
private Text _text;
|
||||
private String _log;
|
||||
private int SIZING_TEXT_WIDTH = 400;
|
||||
private int SIZING_TEXT_HEIGHT = 200;
|
||||
|
||||
/**
|
||||
* Constructor for FailureDialog
|
||||
*/
|
||||
public FailureDialog(Shell parentShell) {
|
||||
super(parentShell);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Window.
|
||||
*/
|
||||
protected void configureShell(Shell newShell) {
|
||||
super.configureShell(newShell);
|
||||
newShell.setText("Dialog Test Failed");
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected void createButtonsForButtonBar(Composite parent) {
|
||||
createButton(parent, IDialogConstants.OK_ID, "&OK", true);
|
||||
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected Control createDialogArea(Composite parent) {
|
||||
// page group
|
||||
Composite composite = (Composite)super.createDialogArea(parent);
|
||||
composite.setSize( composite.computeSize(SWT.DEFAULT, SWT.DEFAULT) );
|
||||
|
||||
Label label = new Label(composite, SWT.WRAP);
|
||||
label.setText("&Enter a note regarding the failure:");
|
||||
|
||||
_text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
|
||||
_text.setFont( JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT) );
|
||||
GridData data = new GridData(GridData.FILL_BOTH);
|
||||
data.widthHint = SIZING_TEXT_WIDTH;
|
||||
data.heightHint = SIZING_TEXT_HEIGHT;
|
||||
_text.setLayoutData(data);
|
||||
|
||||
return composite;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected void okPressed() {
|
||||
_log = _text.getText();
|
||||
super.okPressed();
|
||||
}
|
||||
/*
|
||||
* @return String the text contained in the input area of
|
||||
* the dialog.
|
||||
*/
|
||||
String getText() {
|
||||
if (_log == null) {
|
||||
return "Empty entry.";
|
||||
} else {
|
||||
return _log;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Sets the text of the input area. This should only be
|
||||
* called to set the initial text so only call before invoking
|
||||
* open().
|
||||
*/
|
||||
void setText(String text) {
|
||||
_text.setText(text);
|
||||
}
|
||||
/*
|
||||
* Returns a string representation of this class which
|
||||
* the text contained in the input area of the dialog.
|
||||
*/
|
||||
public String toString() {
|
||||
return getText();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/*
|
||||
* This test pass verifies the initial focus of a dialog
|
||||
* when it is given focus.
|
||||
*/
|
||||
public class FocusTestPass implements IDialogTestPass {
|
||||
private static final int CHECKLIST_SIZE = 1;
|
||||
|
||||
|
||||
/**
|
||||
* @see IDialogTestPass#title()
|
||||
*/
|
||||
public String title() {
|
||||
return "Test Pass: Initial Focus";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#description()
|
||||
*/
|
||||
public String description() {
|
||||
return "Verify the initial focus of the dialogs.";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#label()
|
||||
*/
|
||||
public String label() {
|
||||
return "&Initial Focus";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#checkListTexts()
|
||||
*/
|
||||
public ArrayList checkListTexts() {
|
||||
ArrayList list = new ArrayList(CHECKLIST_SIZE);
|
||||
list.add("&1) the initial focus is appropriate.");
|
||||
return list;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#failureTexts()
|
||||
* Size of the return array must be the same size as the checkListTexts'
|
||||
* ArrayList.
|
||||
*/
|
||||
public String[] failureTexts() {
|
||||
String[] failureText = new String[CHECKLIST_SIZE];
|
||||
failureText[0] = "The initial focus is inappropriate.";
|
||||
return failureText;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#queryText()
|
||||
*/
|
||||
public String queryText() {
|
||||
return "Is the initial focus of the dialog correct?";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#getID()
|
||||
*/
|
||||
public int getID() {
|
||||
return VerifyDialog.TEST_FOCUS;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/*
|
||||
* Interface to describe a visual test pass for a dialog test.
|
||||
*/
|
||||
public interface IDialogTestPass {
|
||||
/*
|
||||
* @return String The title of the test pass.
|
||||
*/
|
||||
public String title();
|
||||
/*
|
||||
* @return String The description of the test pass.
|
||||
*/
|
||||
public String description();
|
||||
/*
|
||||
* @return String The label of the test pass to be used
|
||||
* in a selection list. The return includes an '&'
|
||||
* if a mnemonic is desired.
|
||||
*/
|
||||
public String label();
|
||||
/*
|
||||
* @return ArrayList A list of items to appear in a checklist.
|
||||
* The items in the list must be Strings and should include an
|
||||
* '&' if a mnemonic is desired.
|
||||
*/
|
||||
public ArrayList checkListTexts();
|
||||
/*
|
||||
* @return String[] Associated failure messages that correspond
|
||||
* to the checklist items. The size of this array should be the
|
||||
* same size as the checklist.
|
||||
*/
|
||||
public String[] failureTexts();
|
||||
/*
|
||||
* @return String The test that corresponds to the test pass to
|
||||
* which the tester will respond with a 'yes' or 'no'.
|
||||
*/
|
||||
public String queryText();
|
||||
/*
|
||||
* @return int A unique number that identifies the test pass.
|
||||
*/
|
||||
public int getID();
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/*
|
||||
* This test pass verifies visually the sizing of the dialog and its
|
||||
* widgets.
|
||||
*/
|
||||
class SizingTestPass implements IDialogTestPass {
|
||||
private static final int CHECKLIST_SIZE = 5;
|
||||
|
||||
|
||||
/**
|
||||
* @see IDialogTestPass#title()
|
||||
*/
|
||||
public String title() {
|
||||
return "Test Pass: Sizing and Display";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#description()
|
||||
*/
|
||||
public String description() {
|
||||
return "Verify the sizing and display of the dialogs and widgets.";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#label()
|
||||
*/
|
||||
public String label() {
|
||||
return "&Sizing and Display";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#checkListTexts()
|
||||
*/
|
||||
public ArrayList checkListTexts() {
|
||||
ArrayList list = new ArrayList(CHECKLIST_SIZE);
|
||||
list.add("&1) the correct dialog displays.");
|
||||
list.add("&2) the dialog is an appropriate size for the required resolution (1024x768).");
|
||||
list.add("&3) the texts are correct and not cut off.");
|
||||
list.add("&4) all strings have been externalized properly.");
|
||||
list.add("&5) all the widgets are viewable and not cut off.");
|
||||
return list;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#failureTexts()
|
||||
* Size of the return array must be the same size as the checkListTexts'
|
||||
* ArrayList.
|
||||
*/
|
||||
public String[] failureTexts() {
|
||||
String[] failureText = new String[CHECKLIST_SIZE];
|
||||
failureText[0] = "The wrong dialog displayed.";
|
||||
failureText[1] = "The dialog is too large for the required resolution.";
|
||||
failureText[2] = "Text labels are wrong or cut off.";
|
||||
failureText[3] = "Some strings have not been externalized properly.";
|
||||
failureText[4] = "Some widgets are cut off.";
|
||||
return failureText;
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#queryText()
|
||||
*/
|
||||
public String queryText() {
|
||||
return "Is the sizing and display of the dialog correct?";
|
||||
}
|
||||
/**
|
||||
* @see IDialogTestPass#getID()
|
||||
*/
|
||||
public int getID() {
|
||||
return VerifyDialog.TEST_SIZING;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,305 @@
|
|||
package org.eclipse.cdt.testplugin.util;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.dialogs.TitleAreaDialog;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.events.ShellAdapter;
|
||||
import org.eclipse.swt.events.ShellEvent;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
|
||||
/*
|
||||
* This dialog is intended to verify a dialogs in a testing
|
||||
* environment. The tester can test for sizing, initial focus,
|
||||
* or accessibility.
|
||||
*/
|
||||
public class VerifyDialog extends TitleAreaDialog {
|
||||
private int SIZING_WIDTH = 400;
|
||||
|
||||
private static int TEST_TYPE;
|
||||
public static final int TEST_SIZING = 0;
|
||||
public static final int TEST_FOCUS = 1;
|
||||
public static final int TEST_ACCESS = 2;
|
||||
private IDialogTestPass _dialogTests[] = new IDialogTestPass[3];
|
||||
|
||||
|
||||
private Dialog _testDialog; //the dialog to test
|
||||
private Point _testDialogSize;
|
||||
|
||||
private Label _queryLabel;
|
||||
private Button _yesButton;
|
||||
private Button _noButton;
|
||||
private Button _checkList[];
|
||||
private String _failureText;
|
||||
|
||||
/*
|
||||
* Create an instance of the verification dialog.
|
||||
*/
|
||||
public VerifyDialog(Shell parent) {
|
||||
super(parent);
|
||||
if ( !(TEST_TYPE <= 2) && !(TEST_TYPE >= 0) ) {
|
||||
TEST_TYPE = TEST_SIZING;
|
||||
}
|
||||
_failureText = "";
|
||||
_dialogTests[0] = new SizingTestPass();
|
||||
_dialogTests[1] = new FocusTestPass();
|
||||
_dialogTests[2] = new AccessibilityTestPass();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Window.
|
||||
*/
|
||||
protected void configureShell(Shell newShell) {
|
||||
super.configureShell(newShell);
|
||||
newShell.setText("Dialog Verification");
|
||||
setShellStyle(SWT.NONE);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected void createButtonsForButtonBar(Composite parent) {
|
||||
_yesButton = createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, true);
|
||||
_noButton = createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, false);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected void buttonPressed(int buttonId) {
|
||||
if (IDialogConstants.YES_ID == buttonId) {
|
||||
setReturnCode(IDialogConstants.YES_ID);
|
||||
if (_testDialog.getShell() != null) {
|
||||
_testDialog.close();
|
||||
}
|
||||
close();
|
||||
} else if (IDialogConstants.NO_ID == buttonId) {
|
||||
handleFailure();
|
||||
}
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* Method declared on Dialog.
|
||||
*/
|
||||
protected Control createDialogArea(Composite parent) {
|
||||
// top level composite
|
||||
Composite parentComposite = (Composite)super.createDialogArea(parent);
|
||||
|
||||
|
||||
// create a composite with standard margins and spacing
|
||||
Composite composite = new Composite(parentComposite, SWT.NONE);
|
||||
composite.setSize(SIZING_WIDTH, SWT.DEFAULT);
|
||||
GridLayout layout = new GridLayout();
|
||||
layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
|
||||
layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
|
||||
layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
|
||||
layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
|
||||
composite.setLayout(layout);
|
||||
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
|
||||
|
||||
createTestSelectionGroup(composite);
|
||||
createCheckListGroup(composite);
|
||||
|
||||
|
||||
_queryLabel = new Label(composite, SWT.NONE);
|
||||
_queryLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
|
||||
initializeTest();
|
||||
return composite;
|
||||
}
|
||||
/*
|
||||
* Group for selecting type of test.
|
||||
*/
|
||||
private void createTestSelectionGroup(Composite parent) {
|
||||
Group group = new Group(parent, SWT.SHADOW_NONE);
|
||||
group.setText("Testing:");
|
||||
group.setLayout( new GridLayout() );
|
||||
GridData data = new GridData(GridData.FILL_HORIZONTAL);
|
||||
group.setLayoutData(data);
|
||||
|
||||
for (int i = 0; i < _dialogTests.length; i++) {
|
||||
Button radio = new Button(group, SWT.RADIO);
|
||||
radio.setText( _dialogTests[i].label() );
|
||||
final int testID = _dialogTests[i].getID();
|
||||
radio.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
TEST_TYPE = testID;
|
||||
initializeTest();
|
||||
_yesButton.setEnabled(true);
|
||||
}
|
||||
});
|
||||
if ( TEST_TYPE == _dialogTests[i].getID() ) {
|
||||
radio.setSelection(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Initializes the checklist with empty checks.
|
||||
*/
|
||||
private void createCheckListGroup(Composite parent) {
|
||||
Group group = new Group(parent, SWT.SHADOW_NONE);
|
||||
group.setText("Verify that:");
|
||||
group.setLayout( new GridLayout() );
|
||||
GridData data = new GridData(GridData.FILL_HORIZONTAL);
|
||||
group.setLayoutData(data);
|
||||
|
||||
int checkListSize = 0;
|
||||
for (int i = 0; i < _dialogTests.length; i++) {
|
||||
int size = _dialogTests[i].checkListTexts().size();
|
||||
if (size > checkListSize) {
|
||||
checkListSize = size;
|
||||
}
|
||||
}
|
||||
_checkList = new Button[checkListSize];
|
||||
SelectionAdapter selectionAdapter = new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
checkYesEnable();
|
||||
}
|
||||
};
|
||||
for (int i = 0; i < checkListSize; i++) {
|
||||
_checkList[i] = new Button(group, SWT.CHECK);
|
||||
_checkList[i].addSelectionListener(selectionAdapter);
|
||||
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
||||
data.grabExcessHorizontalSpace = true;
|
||||
_checkList[i].setLayoutData(data);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Disables the yes button if any of the items in the checklist
|
||||
* are unchecked. Enables the yes button otherwise.
|
||||
*/
|
||||
private void checkYesEnable() {
|
||||
boolean enable = true;
|
||||
for (int i = 0; i < _checkList.length; i++) {
|
||||
if ( !_checkList[i].getSelection() ) {
|
||||
enable = false;
|
||||
}
|
||||
}
|
||||
_yesButton.setEnabled(enable);
|
||||
}
|
||||
/*
|
||||
* Initializes the checklist, banner texts, and query label
|
||||
*/
|
||||
private void initializeTest() {
|
||||
IDialogTestPass test = _dialogTests[TEST_TYPE];
|
||||
setTitle( test.title() );
|
||||
setMessage( test.description() );
|
||||
Iterator iterator = test.checkListTexts().iterator();
|
||||
for (int i = 0; i < _checkList.length; i++) {
|
||||
if ( iterator.hasNext() ) {
|
||||
_checkList[i].setText( iterator.next().toString() );
|
||||
_checkList[i].setVisible(true);
|
||||
_checkList[i].update();
|
||||
} else {
|
||||
_checkList[i].setVisible(false);
|
||||
_checkList[i].update();
|
||||
}
|
||||
_checkList[i].setSelection(true);
|
||||
}
|
||||
_queryLabel.setText( test.queryText() );
|
||||
}
|
||||
public String getFailureText() {
|
||||
return _failureText;
|
||||
}
|
||||
/*
|
||||
* Can't open the verification dialog without a specified
|
||||
* test dialog, this simply returns a failure and prevents
|
||||
* opening. Should use open(Dialog) instead.
|
||||
*
|
||||
*/
|
||||
public int open() {
|
||||
_failureText = "Testing dialog is required, use VerifyDialog::open(Dialog)";
|
||||
return IDialogConstants.NO_ID;
|
||||
}
|
||||
/*
|
||||
* Opens the verification dialog to test the specified dialog.
|
||||
*/
|
||||
public int open(Dialog testDialog) {
|
||||
if (getShell() == null) {
|
||||
create();
|
||||
}
|
||||
getShell().setLocation(0, 0);
|
||||
getShell().setSize(Math.max(SIZING_WIDTH, getShell().getSize().x), getShell().getSize().y);
|
||||
_testDialog = testDialog;
|
||||
if (_testDialog.getShell() == null) {
|
||||
_testDialog.create();
|
||||
}
|
||||
_testDialogSize = _testDialog.getShell().getSize();
|
||||
openNewTestDialog();
|
||||
|
||||
return super.open();
|
||||
}
|
||||
/*
|
||||
* Opens the dialog to be verified.
|
||||
*/
|
||||
private void openNewTestDialog() {
|
||||
if (_testDialog.getShell() == null) {
|
||||
_testDialog.create();
|
||||
}
|
||||
_testDialog.setBlockOnOpen(false);
|
||||
_testDialog.getShell().setLocation(getShell().getSize().x + 1, 0);
|
||||
_testDialog.getShell().setSize(_testDialogSize);
|
||||
_testDialog.getShell().addShellListener(new ShellAdapter() {
|
||||
public void shellClosed(ShellEvent e) {
|
||||
e.doit = false;
|
||||
}
|
||||
|
||||
});
|
||||
_testDialog.open();
|
||||
}
|
||||
/*
|
||||
* The test dialog failed, open the failure dialog.
|
||||
*/
|
||||
private void handleFailure() {
|
||||
IDialogTestPass test = _dialogTests[TEST_TYPE];
|
||||
StringBuffer text = new StringBuffer();
|
||||
String label = test.label();
|
||||
label = label.substring(0, label.indexOf("&")) +
|
||||
label.substring(label.indexOf("&") + 1);
|
||||
text.append(label).
|
||||
append(" failed on the ").
|
||||
append(SWT.getPlatform()).
|
||||
append(" platform:\n");
|
||||
|
||||
String failureMessages[] = test.failureTexts();
|
||||
for (int i = 0; i < test.checkListTexts().size(); i++) {
|
||||
if ( !_checkList[i].getSelection() ) {
|
||||
text.append("- ").append(failureMessages[i]).append("\n");
|
||||
}
|
||||
}
|
||||
FailureDialog dialog = new FailureDialog( getShell() );
|
||||
dialog.create();
|
||||
String temp = text.toString();
|
||||
dialog.setText( text.toString() );
|
||||
if (dialog.open() == IDialogConstants.OK_ID) {
|
||||
_failureText = dialog.toString();
|
||||
setReturnCode(IDialogConstants.NO_ID);
|
||||
if (_testDialog.getShell() != null) {
|
||||
_testDialog.close();
|
||||
}
|
||||
close();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* In case the shell was closed by a means other than
|
||||
* the NO button.
|
||||
*/
|
||||
protected void handleShellCloseEvent() {
|
||||
handleFailure();
|
||||
}
|
||||
}
|
||||
|
||||
|
51
core/org.eclipse.cdt.ui.tests/test.xml
Normal file
51
core/org.eclipse.cdt.ui.tests/test.xml
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<project name="testsuite" default="run" basedir=".">
|
||||
<!-- The property ${eclipse-home} should be passed into this script -->
|
||||
<!-- Set a meaningful default value for when it is not. -->
|
||||
<property name="eclipse-home" value="${basedir}\..\.."/>
|
||||
|
||||
<!-- sets the properties eclipse-home, and library-file -->
|
||||
<property name="plugin-name" value="org.eclipse.jdt.ui.tests"/>
|
||||
<property name="library-file"
|
||||
value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/>
|
||||
|
||||
<!-- This target holds all initialization code that needs to be done for -->
|
||||
<!-- all tests that are to be run. Initialization for individual tests -->
|
||||
<!-- should be done within the body of the suite target. -->
|
||||
<target name="init">
|
||||
<tstamp/>
|
||||
<delete>
|
||||
<fileset dir="${eclipse-home}" includes="org*.xml"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<!-- This target defines the tests that need to be run. -->
|
||||
<target name="suite">
|
||||
<property name="jdt-folder"
|
||||
value="${eclipse-home}/jdt_folder"/>
|
||||
<delete dir="${jdt-folder}" quiet="true"/>
|
||||
<ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}">
|
||||
<property name="data-dir" value="${jdt-folder}"/>
|
||||
<property name="plugin-name" value="${plugin-name}"/>
|
||||
<property name="classname"
|
||||
value="org.eclipse.jdt.ui.tests.AutomatedSuite"/>
|
||||
</ant>
|
||||
</target>
|
||||
|
||||
<!-- This target holds code to cleanup the testing environment after -->
|
||||
<!-- after all of the tests have been run. You can use this target to -->
|
||||
<!-- delete temporary files that have been created. -->
|
||||
<target name="cleanup">
|
||||
</target>
|
||||
|
||||
<!-- This target runs the test suite. Any actions that need to happen -->
|
||||
<!-- after all the tests have been run should go here. -->
|
||||
<target name="run" depends="init,suite,cleanup">
|
||||
<ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
|
||||
<property name="includes" value="org*.xml"/>
|
||||
<property name="output-file" value="${plugin-name}.xml"/>
|
||||
</ant>
|
||||
</target>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,40 @@
|
|||
package org.eclipse.cdt.ui.tests;
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.ui.tests.text.PartitionTokenScannerTest;
|
||||
import org.eclipse.cdt.ui.tests.textmanipulation.TextBufferTest;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Test all areas of the UI.
|
||||
*/
|
||||
public class AutomatedSuite extends TestSuite {
|
||||
|
||||
/**
|
||||
* Returns the suite. This is required to
|
||||
* use the JUnit Launcher.
|
||||
*/
|
||||
public static Test suite() {
|
||||
return new AutomatedSuite();
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct the test suite.
|
||||
*/
|
||||
public AutomatedSuite() {
|
||||
addTest(PartitionTokenScannerTest.suite());
|
||||
addTest(TextBufferTest.suite());
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.ui.tests;
|
||||
|
||||
import org.eclipse.cdt.ui.tests.dialogs.PreferencesTest;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
|
||||
/**
|
||||
* Test all areas of the UI.
|
||||
*/
|
||||
public class UIInteractiveSuite extends TestSuite {
|
||||
|
||||
/**
|
||||
* Returns the suite. This is required to
|
||||
* use the JUnit Launcher.
|
||||
*/
|
||||
public static Test suite() {
|
||||
return new UIInteractiveSuite();
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct the test suite.
|
||||
*/
|
||||
public UIInteractiveSuite() {
|
||||
addTest(PreferencesTest.suite());
|
||||
//addTest(WizardsTest.suite());
|
||||
//addTest(DialogsTest.suite());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,193 @@
|
|||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
package org.eclipse.cdt.ui.tests.dialogs;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.internal.corext.template.c.ICompilationUnit;
|
||||
import org.eclipse.cdt.testplugin.TestPluginLauncher;
|
||||
import org.eclipse.cdt.testplugin.util.DialogCheck;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.preference.IPreferenceNode;
|
||||
import org.eclipse.jface.preference.PreferenceDialog;
|
||||
import org.eclipse.jface.preference.PreferenceManager;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.help.WorkbenchHelp;
|
||||
import org.eclipse.ui.internal.IHelpContextIds;
|
||||
import org.eclipse.ui.internal.WorkbenchMessages;
|
||||
import org.eclipse.ui.internal.WorkbenchPlugin;
|
||||
import org.eclipse.ui.internal.dialogs.PropertyDialog;
|
||||
import org.eclipse.ui.internal.dialogs.PropertyPageContributorManager;
|
||||
import org.eclipse.ui.internal.dialogs.PropertyPageManager;
|
||||
import org.eclipse.ui.model.IWorkbenchAdapter;
|
||||
|
||||
|
||||
public class PreferencesTest extends TestCase {
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), PreferencesTest.class, args);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite(PreferencesTest.class.getName());
|
||||
suite.addTest(new PreferencesTest("testCBasePrefPage"));
|
||||
suite.addTest(new PreferencesTest("testTemplatePrefPage"));
|
||||
suite.addTest(new PreferencesTest("testProjectPropertyPrefPage"));
|
||||
suite.addTest(new PreferencesTest("testCEditorPrefPage"));
|
||||
return suite;
|
||||
}
|
||||
|
||||
private static class PreferenceDialogWrapper extends PreferenceDialog {
|
||||
|
||||
public PreferenceDialogWrapper(Shell parentShell, PreferenceManager manager) {
|
||||
super(parentShell, manager);
|
||||
}
|
||||
protected boolean showPage(IPreferenceNode node) {
|
||||
return super.showPage(node);
|
||||
}
|
||||
}
|
||||
|
||||
private class PropertyDialogWrapper extends PropertyDialog {
|
||||
|
||||
public PropertyDialogWrapper(Shell parentShell, PreferenceManager manager, ISelection selection) {
|
||||
super(parentShell, manager, selection);
|
||||
}
|
||||
protected boolean showPage(IPreferenceNode node) {
|
||||
return super.showPage(node);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private boolean fIsInteractive= true;
|
||||
|
||||
private static final String PROJECT_NAME = "DummyProject";
|
||||
|
||||
public PreferencesTest(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
private Shell getShell() {
|
||||
return DialogCheck.getShell();
|
||||
}
|
||||
|
||||
public void assertDialog(Dialog dialog, Assert assertTrue) {
|
||||
if (fIsInteractive) {
|
||||
DialogCheck.assertDialog(dialog, this);
|
||||
} else {
|
||||
DialogCheck.assertDialogTexts(dialog, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private PreferenceDialog getPreferenceDialog(String id) {
|
||||
PreferenceDialogWrapper dialog = null;
|
||||
PreferenceManager manager = WorkbenchPlugin.getDefault().getPreferenceManager();
|
||||
if (manager != null) {
|
||||
dialog = new PreferenceDialogWrapper(getShell(), manager);
|
||||
dialog.create();
|
||||
WorkbenchHelp.setHelp(dialog.getShell(), IHelpContextIds.PREFERENCE_DIALOG);
|
||||
|
||||
for (Iterator iterator = manager.getElements(PreferenceManager.PRE_ORDER).iterator();
|
||||
iterator.hasNext();)
|
||||
{
|
||||
IPreferenceNode node = (IPreferenceNode)iterator.next();
|
||||
if ( node.getId().equals(id) ) {
|
||||
dialog.showPage(node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return dialog;
|
||||
}
|
||||
|
||||
private PropertyDialog getPropertyDialog(String id, IAdaptable element) {
|
||||
PropertyDialogWrapper dialog = null;
|
||||
|
||||
PropertyPageManager manager = new PropertyPageManager();
|
||||
String title = "";
|
||||
String name = "";
|
||||
|
||||
// load pages for the selection
|
||||
// fill the manager with contributions from the matching contributors
|
||||
PropertyPageContributorManager.getManager().contribute(manager, element);
|
||||
|
||||
IWorkbenchAdapter adapter = (IWorkbenchAdapter)element.getAdapter(IWorkbenchAdapter.class);
|
||||
if (adapter != null) {
|
||||
name = adapter.getLabel(element);
|
||||
}
|
||||
|
||||
// testing if there are pages in the manager
|
||||
Iterator pages = manager.getElements(PreferenceManager.PRE_ORDER).iterator();
|
||||
if (!pages.hasNext()) {
|
||||
return null;
|
||||
} else {
|
||||
title = WorkbenchMessages.format("PropertyDialog.propertyMessage", new Object[] {name});
|
||||
dialog = new PropertyDialogWrapper(getShell(), manager, new StructuredSelection(element));
|
||||
dialog.create();
|
||||
dialog.getShell().setText(title);
|
||||
WorkbenchHelp.setHelp(dialog.getShell(), IHelpContextIds.PROPERTY_DIALOG);
|
||||
for (Iterator iterator = manager.getElements(PreferenceManager.PRE_ORDER).iterator();
|
||||
iterator.hasNext();)
|
||||
{
|
||||
IPreferenceNode node = (IPreferenceNode)iterator.next();
|
||||
if ( node.getId().equals(id) ) {
|
||||
dialog.showPage(node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return dialog;
|
||||
}
|
||||
|
||||
public void testCBasePrefPage() {
|
||||
Dialog dialog = getPreferenceDialog("org.eclipse.cdt.ui.preferences.CPluginPreferencePage");
|
||||
assertDialog(dialog, this);
|
||||
}
|
||||
|
||||
public void testProjectPropertyPrefPage() {
|
||||
Dialog dialog = getPreferenceDialog("org.eclipse.cdt.ui.preferences.CProjectPropertyPage");
|
||||
assertDialog(dialog, this);
|
||||
}
|
||||
|
||||
public void testTemplatePrefPage() {
|
||||
Dialog dialog = getPreferenceDialog("org.eclipse.cdt.ui.preferences.TemplatePreferencePage");
|
||||
assertDialog(dialog, this);
|
||||
}
|
||||
|
||||
|
||||
public void testCEditorPrefPage() {
|
||||
Dialog dialog = getPreferenceDialog("org.eclipse.cdt.ui.preferences.CEditorPreferencePage");
|
||||
assertDialog(dialog, this);
|
||||
}
|
||||
|
||||
|
||||
/* public void testInfoPropPage() throws Exception {
|
||||
IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
|
||||
IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src");
|
||||
IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.wizards.dummy", true, null);
|
||||
ICompilationUnit cu= pack.getCompilationUnit("DummyCompilationUnitWizard.java");
|
||||
IType type= cu.createType("public class DummyCompilationUnitWizard {\n\n}\n", null, true, null);
|
||||
|
||||
Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.InfoPage", cu);
|
||||
assertDialog(dialog, this);
|
||||
|
||||
JavaProjectHelper.delete(jproject);
|
||||
} */
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
package org.eclipse.cdt.ui.tests.text;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.CPartitionScanner;
|
||||
import org.eclipse.cdt.internal.ui.text.FastCPartitionScanner;
|
||||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.jface.text.Document;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.text.IRegion;
|
||||
import org.eclipse.jface.text.rules.IPartitionTokenScanner;
|
||||
import org.eclipse.jface.text.rules.IToken;
|
||||
|
||||
/**
|
||||
* Compares two <code>IParitionTokenScanner</code>s for conformance and performance.
|
||||
*/
|
||||
public class PartitionTokenScannerTest extends TestCase {
|
||||
|
||||
private IPartitionTokenScanner fReference;
|
||||
private IPartitionTokenScanner fTestee;
|
||||
|
||||
public PartitionTokenScannerTest(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
protected void setUp() {
|
||||
fReference= new CPartitionScanner();
|
||||
fTestee= new FastCPartitionScanner();
|
||||
}
|
||||
|
||||
// read sample java file
|
||||
private IDocument getDocument(String name, String lineDelimiter) {
|
||||
try {
|
||||
InputStream stream= getClass().getResourceAsStream(name);
|
||||
BufferedReader reader= new BufferedReader(new InputStreamReader(stream));
|
||||
|
||||
StringBuffer buffer= new StringBuffer();
|
||||
String line= reader.readLine();
|
||||
while (line != null) {
|
||||
buffer.append(line);
|
||||
buffer.append(lineDelimiter);
|
||||
line= reader.readLine();
|
||||
}
|
||||
|
||||
return new Document(buffer.toString());
|
||||
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static IDocument getRandomDocument(int size) {
|
||||
final char[] characters= {'/', '*', '\'', '"', '\r', '\n', '\\'};
|
||||
final StringBuffer buffer= new StringBuffer();
|
||||
|
||||
for (int i= 0; i < size; i++) {
|
||||
final int randomIndex= (int) (Math.random() * characters.length);
|
||||
buffer.append(characters[randomIndex]);
|
||||
}
|
||||
|
||||
return new Document(buffer.toString());
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
return new TestSuite(PartitionTokenScannerTest.class);
|
||||
}
|
||||
|
||||
public void testTestCaseLF() {
|
||||
testConformance(getDocument("TestCase.txt", "\n"));
|
||||
}
|
||||
|
||||
public void testTestCaseCRLF() {
|
||||
testConformance(getDocument("TestCase.txt", "\r\n"));
|
||||
}
|
||||
|
||||
public void testTestCaseCR() {
|
||||
testConformance(getDocument("TestCase.txt", "\r"));
|
||||
}
|
||||
|
||||
public void testTestCase2LF() {
|
||||
testConformance(getDocument("TestCase2.txt", "\n"));
|
||||
}
|
||||
|
||||
public void testTestCase2CRLF() {
|
||||
testConformance(getDocument("TestCase2.txt", "\r\n"));
|
||||
}
|
||||
|
||||
public void testTestCase2CR() {
|
||||
testConformance(getDocument("TestCase2.txt", "\r"));
|
||||
}
|
||||
|
||||
// XXX not fully passing because of "\<LF> and '\<LF>
|
||||
// public void testRandom() {
|
||||
// testConformance(getRandomDocument(2048));
|
||||
// }
|
||||
|
||||
/**
|
||||
* Tests performance of the testee against the reference IPartitionTokenScanner.
|
||||
*/
|
||||
public void testPerformance() {
|
||||
final int COUNT= 5000;
|
||||
final IDocument document= getDocument("TestCase.txt", "\n");
|
||||
|
||||
final long referenceTime= getTime(fReference, document, COUNT);
|
||||
final long testeeTime= getTime(fTestee, document, COUNT);
|
||||
|
||||
if (false) {
|
||||
System.out.println("reference time = " + referenceTime / 1000.0f);
|
||||
System.out.println("testee time = " + testeeTime / 1000.0f);
|
||||
System.out.println("factor = " + (float) referenceTime / testeeTime);
|
||||
}
|
||||
|
||||
// dangerous: assert no regression in performance
|
||||
// assertTrue(testeeTime <= referenceTime);
|
||||
}
|
||||
|
||||
private long getTime(IPartitionTokenScanner scanner, IDocument document, int count) {
|
||||
final long start= System.currentTimeMillis();
|
||||
|
||||
for (int i= 0; i < count; i++)
|
||||
testPerformance(scanner, document);
|
||||
|
||||
final long end= System.currentTimeMillis();
|
||||
|
||||
return end - start;
|
||||
}
|
||||
|
||||
private void testConformance(final IDocument document) {
|
||||
|
||||
final StringBuffer message= new StringBuffer();
|
||||
|
||||
fReference.setRange(document, 0, document.getLength());
|
||||
fTestee.setRange(document, 0, document.getLength());
|
||||
|
||||
while (true) {
|
||||
|
||||
message.setLength(0);
|
||||
|
||||
final IToken referenceToken= fReference.nextToken();
|
||||
final IToken testeeToken= fTestee.nextToken();
|
||||
assertTokenEquals(referenceToken, testeeToken);
|
||||
|
||||
final int referenceOffset= fReference.getTokenOffset();
|
||||
final int testeeOffset= fTestee.getTokenOffset();
|
||||
message.append(", offset = " + referenceOffset);
|
||||
message.append(", " + extractString(document, referenceOffset));
|
||||
assertEquals(message.toString(), referenceOffset, testeeOffset);
|
||||
|
||||
int referenceLength= fReference.getTokenLength();
|
||||
final int testeeLength= fTestee.getTokenLength();
|
||||
if(referenceLength != testeeLength) {
|
||||
// Special case where the dum scanner creates a token for every character...
|
||||
IToken t;
|
||||
while(referenceLength < testeeLength) {
|
||||
t = fReference.nextToken();
|
||||
referenceLength += fReference.getTokenLength();
|
||||
if(referenceToken != t)
|
||||
assertEquals(message.toString(), referenceToken, t);
|
||||
}
|
||||
}
|
||||
message.append(", length = " + referenceLength);
|
||||
assertEquals(message.toString(), referenceLength, testeeLength);
|
||||
|
||||
if (referenceToken.isEOF())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void testPerformance(final IPartitionTokenScanner scanner, final IDocument document) {
|
||||
|
||||
scanner.setRange(document, 0, document.getLength());
|
||||
|
||||
IToken token;
|
||||
do {
|
||||
token= scanner.nextToken();
|
||||
scanner.getTokenOffset();
|
||||
scanner.getTokenLength();
|
||||
|
||||
} while (!token.isEOF());
|
||||
}
|
||||
|
||||
private void assertTokenEquals(IToken expected, IToken actual) {
|
||||
assertEquals(expected.isEOF(), actual.isEOF());
|
||||
assertEquals(expected.isOther(), actual.isOther());
|
||||
assertEquals(expected.isUndefined(), actual.isUndefined());
|
||||
assertEquals(expected.isWhitespace(), actual.isWhitespace());
|
||||
}
|
||||
|
||||
private static String extractString(IDocument document, int offset) {
|
||||
final StringBuffer buffer= new StringBuffer();
|
||||
|
||||
try {
|
||||
IRegion region= document.getLineInformationOfOffset(offset);
|
||||
String line= document.get(region.getOffset(), region.getLength());
|
||||
|
||||
int offsetIndex= offset - region.getOffset();
|
||||
|
||||
// XXX kludge
|
||||
if (offsetIndex > line.length())
|
||||
offsetIndex= line.length();
|
||||
|
||||
buffer.append("line = " + document.getLineOfOffset(offset) + ": [");
|
||||
buffer.append(line.substring(0, offsetIndex));
|
||||
buffer.append("<POS>");
|
||||
buffer.append(line.substring(offsetIndex));
|
||||
buffer.append(']');
|
||||
|
||||
} catch (BadLocationException e) {
|
||||
}
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes CR, LF and TAB in a string.
|
||||
*/
|
||||
private static String escape(String string) {
|
||||
final StringBuffer buffer= new StringBuffer();
|
||||
|
||||
final int length= string.length();
|
||||
for (int i= 0; i < length; i++) {
|
||||
final char character= string.charAt(i);
|
||||
switch (character) {
|
||||
case '\t':
|
||||
buffer.append("\\t");
|
||||
break;
|
||||
|
||||
case '\r':
|
||||
buffer.append("\\r");
|
||||
break;
|
||||
|
||||
case '\n':
|
||||
buffer.append("\\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
buffer.append(character);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,211 @@
|
|||
package org.eclipse.jdt.ui.tests.text;
|
||||
|
||||
import java.lang.reflect.*;
|
||||
|
||||
/**
|
||||
* A test case defines the fixture to run multiple tests. To define a test case<br>
|
||||
* 1) implement a subclass of TestCase<br>
|
||||
* 2) define instance variables that store the state of the fixture<br>
|
||||
* 3) initialize the fixture state by overriding <code>setUp</code><br>
|
||||
* 4) clean-up after a test by overriding <code>tearDown</code>.<br>
|
||||
* Each test runs in its own fixture so there
|
||||
* can be no side effects among test runs.
|
||||
* Here is an example:
|
||||
* <pre>
|
||||
* public class MathTest extends TestCase {
|
||||
* protected double fValue1;
|
||||
* protected double fValue2;
|
||||
*
|
||||
* public MathTest(String name) {
|
||||
* super(name);
|
||||
* }
|
||||
*
|
||||
* protected void setUp() {
|
||||
* fValue1= 2.0;
|
||||
* fValue2= 3.0;
|
||||
* }
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* For each test implement a method which interacts
|
||||
* with the fixture. Verify the expected results with assertions specified
|
||||
* by calling <code>assert</code> with a boolean.
|
||||
* <pre>
|
||||
* protected void testAdd() {
|
||||
* double result= fValue1 + fValue2;
|
||||
* assert(result == 5.0);
|
||||
* }
|
||||
* </pre>
|
||||
* Once the methods are defined you can run them. The framework supports
|
||||
* both a static type safe and more dynamic way to run a test.
|
||||
* In the static way you override the runTest method and define the method to
|
||||
* be invoked. A convenient way to do so is with an anonymous inner class.
|
||||
* <pre>
|
||||
* Test test= new MathTest("add") {
|
||||
* public void runTest() {
|
||||
* testAdd();
|
||||
* }
|
||||
* };
|
||||
* test.run();
|
||||
* </pre>
|
||||
* The dynamic way uses reflection to implement <code>runTest</code>. It dynamically finds
|
||||
* and invokes a method.
|
||||
* In this case the name of the test case has to correspond to the test method
|
||||
* to be run.
|
||||
* <pre>
|
||||
* Test= new MathTest("testAdd");
|
||||
* test.run();
|
||||
* </pre>
|
||||
* The tests to be run can be collected into a TestSuite. JUnit provides
|
||||
* different <i>test runners</i> which can run a test suite and collect the results.
|
||||
* A test runner either expects a static method <code>suite</code> as the entry
|
||||
* point to get a test to run or it will extract the suite automatically.
|
||||
* <pre>
|
||||
* public static Test suite() {
|
||||
* suite.addTest(new MathTest("testAdd"));
|
||||
* suite.addTest(new MathTest("testDivideByZero"));
|
||||
* return suite;
|
||||
* }
|
||||
* </pre>
|
||||
* @see TestResult
|
||||
* @see TestSuite
|
||||
*/
|
||||
|
||||
public abstract class TestCase extends Assert implements Test {
|
||||
/**
|
||||
* the name of the test case
|
||||
*/
|
||||
private String fName;
|
||||
|
||||
/**
|
||||
* No-arg constructor to enable serialization. This method
|
||||
* is not intended to be used by mere mortals.
|
||||
*/
|
||||
TestCase() {
|
||||
fName= null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a test case with the given name.
|
||||
*/
|
||||
public TestCase(String name) {
|
||||
fName= name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Counts the number of test cases executed by run(TestResult result).
|
||||
*/
|
||||
public int countTestCases() {
|
||||
return 1;
|
||||
}
|
||||
/**
|
||||
* Creates a default TestResult object
|
||||
*
|
||||
* @see TestResult
|
||||
*/
|
||||
protected TestResult createResult() {
|
||||
return new TestResult();
|
||||
}
|
||||
/**
|
||||
* Gets the name of the test case.
|
||||
* @deprecated use getName()
|
||||
*/
|
||||
public String name() {
|
||||
return fName;
|
||||
}
|
||||
/**
|
||||
* A convenience method to run this test, collecting the results with a
|
||||
* default TestResult object.
|
||||
*
|
||||
* @see TestResult
|
||||
*/
|
||||
public TestResult run() {
|
||||
TestResult result= createResult();
|
||||
run(result);
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Runs the test case and collects the results in TestResult.
|
||||
*/
|
||||
public void run(TestResult result) {
|
||||
result.run(this);
|
||||
}
|
||||
/**
|
||||
* Runs the bare test sequence.
|
||||
* @exception Throwable if any exception is thrown
|
||||
*/
|
||||
public void runBare() throws Throwable {
|
||||
setUp();
|
||||
try {
|
||||
runTest();
|
||||
}
|
||||
finally {
|
||||
tearDown();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Override to run the test and assert its state.
|
||||
* @exception Throwable if any exception is thrown
|
||||
*/
|
||||
protected void runTest() throws Throwable {
|
||||
Method runMethod= null;
|
||||
try {
|
||||
// use getMethod to get all public inherited
|
||||
// methods. getDeclaredMethods returns all
|
||||
// methods of this class but excludes the
|
||||
// inherited ones.
|
||||
runMethod= getClass().getMethod(fName, null);
|
||||
} catch (NoSuchMethodException e) {
|
||||
fail("Method \""+fName+"\" not found");
|
||||
}
|
||||
if (!Modifier.isPublic(runMethod.getModifiers())) {
|
||||
fail("Method \""+fName+"\" should be public");
|
||||
}
|
||||
|
||||
try {
|
||||
runMethod.invoke(this, new Class[0]);
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.fillInStackTrace();
|
||||
throw e.getTargetException();
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
e.fillInStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sets up the fixture, for example, open a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected void setUp() throws Exception {
|
||||
}
|
||||
/**
|
||||
* Tears down the fixture, for example, close a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected void tearDown() throws Exception {
|
||||
}
|
||||
/**
|
||||
* Returns a string representation of the test case
|
||||
*/
|
||||
public String toString() {
|
||||
return name()+"("+getClass().getName()+")";
|
||||
}
|
||||
/**
|
||||
* Gets the name of a TestCase
|
||||
* @return returns a String
|
||||
*/
|
||||
public String getName() {
|
||||
return fName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of a TestCase
|
||||
* @param name The name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
fName= name;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package org.eclipse.jdt.ui.tests.text;
|
||||
|
||||
/**
|
||||
* javadoc
|
||||
*/
|
||||
public class TestCase2 {
|
||||
/*
|
||||
* multi line comment
|
||||
*/
|
||||
private void foo() {
|
||||
// single line comment
|
||||
int value= 42;
|
||||
|
||||
/**/
|
||||
|
||||
String s= "string";
|
||||
char c= 'c';
|
||||
|
||||
String s2= "string2"/* ads*/;
|
||||
|
||||
Nastyness: ""/**/''"";
|
||||
|
||||
// open strings and characters
|
||||
'open characters
|
||||
"open strings
|
||||
|
||||
// all state transitions
|
||||
/* multi line comment */// single line comment
|
||||
/* multi line comment *//* multi line comment */
|
||||
/* multi line comment *//** java doc */
|
||||
/* multi line comment */'character'
|
||||
/* multi line comment */"string"
|
||||
/* java doc */// single line comment
|
||||
/* java doc *//* multi line comment */
|
||||
/* java doc *//** java doc */
|
||||
/* java doc */'character'
|
||||
/* java doc */"string"
|
||||
"string"// single line comment
|
||||
"string"//* multi line comment */
|
||||
"string"/** java doc */
|
||||
"string"'character'
|
||||
"string""string"
|
||||
'character'// single line comment
|
||||
'character'"//* multi line comment */
|
||||
'character'/** java doc */
|
||||
'character''character'
|
||||
'character'"string"
|
||||
|
||||
// more nasty cases
|
||||
/'asdf
|
||||
/"asdf
|
||||
|
||||
/**
|
||||
* // single line comment inside javadoc
|
||||
*/
|
||||
|
||||
/*
|
||||
* // single line comment inside multi-line comment
|
||||
*/
|
||||
|
||||
// would fail conformance, but it's ok
|
||||
"<backslash>
|
||||
'<backslash>
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue