-
Notifications
You must be signed in to change notification settings - Fork 95
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8d52085
commit 2ec7c8a
Showing
6 changed files
with
916 additions
and
181 deletions.
There are no files selected for viewing
339 changes: 339 additions & 0 deletions
339
org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/folding/FoldingTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,339 @@ | ||
package org.eclipse.jdt.ui.tests.folding; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
|
||
import org.junit.After; | ||
import org.junit.Before; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
|
||
import org.eclipse.core.runtime.CoreException; | ||
|
||
import org.eclipse.jface.preference.IPreferenceStore; | ||
|
||
import org.eclipse.jface.text.IRegion; | ||
import org.eclipse.jface.text.Position; | ||
import org.eclipse.jface.text.Region; | ||
import org.eclipse.jface.text.source.Annotation; | ||
import org.eclipse.jface.text.source.projection.ProjectionAnnotation; | ||
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel; | ||
import org.eclipse.jface.text.source.projection.ProjectionViewer; | ||
|
||
import org.eclipse.ui.PartInitException; | ||
|
||
import org.eclipse.jdt.core.ICompilationUnit; | ||
import org.eclipse.jdt.core.IJavaProject; | ||
import org.eclipse.jdt.core.IPackageFragment; | ||
import org.eclipse.jdt.core.IPackageFragmentRoot; | ||
import org.eclipse.jdt.core.JavaModelException; | ||
|
||
import org.eclipse.jdt.ui.PreferenceConstants; | ||
import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup; | ||
|
||
import org.eclipse.jdt.internal.ui.JavaPlugin; | ||
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility; | ||
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; | ||
import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer; | ||
|
||
public class FoldingTest { | ||
|
||
@Rule | ||
public ProjectTestSetup projectSetup = new ProjectTestSetup(); | ||
|
||
private IJavaProject jProject; | ||
private IPackageFragmentRoot sourceFolder; | ||
private IPackageFragment packageFragment; | ||
|
||
@Before | ||
public void setUp() throws CoreException { | ||
jProject = projectSetup.getProject(); | ||
sourceFolder = jProject.findPackageFragmentRoot(jProject.getResource().getFullPath().append("src")); | ||
if (sourceFolder == null) { | ||
sourceFolder = org.eclipse.jdt.testplugin.JavaProjectHelper.addSourceContainer(jProject, "src"); | ||
} | ||
packageFragment = sourceFolder.createPackageFragment("org.example.test", false, null); | ||
IPreferenceStore store = JavaPlugin.getDefault().getPreferenceStore(); | ||
store.setValue(PreferenceConstants.EDITOR_NEW_FOLDING_ENABLED, true); | ||
} | ||
|
||
@After | ||
public void tearDown() throws CoreException { | ||
org.eclipse.jdt.testplugin.JavaProjectHelper.delete(jProject); | ||
} | ||
|
||
@Test | ||
public void testCompilationUnitFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class A { | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.isEmpty()); | ||
} | ||
|
||
@Test | ||
public void testTypeDeclarationFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class B { | ||
class Inner { | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 1); | ||
} | ||
|
||
@Test | ||
public void testMethodDeclarationFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class C { | ||
void m() { | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 1); | ||
} | ||
|
||
@Test | ||
public void testIfStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class D { | ||
void x() { | ||
if (true) { | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testTryStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class E { | ||
void x() { | ||
try { | ||
} catch (Exception e) { | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 3); | ||
} | ||
|
||
@Test | ||
public void testWhileStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class F { | ||
void x() { | ||
while (true) { | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testForStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class G { | ||
void x() { | ||
for(int i=0;i<1;i++){ | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testEnhancedForStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class H { | ||
void x() { | ||
for(String s: new String[0]){ | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testDoStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class I { | ||
void x() { | ||
do { | ||
} while(false); | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testSynchronizedStatementFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class K { | ||
void x() { | ||
synchronized(this) { | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testLambdaExpressionFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
import java.util.function.Supplier; | ||
public class L { | ||
void x() { | ||
Supplier<String> s = () -> { | ||
return ""; | ||
}; | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testAnonymousClassDeclarationFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class M { | ||
Object o = new Object(){ | ||
void y() { | ||
} | ||
}; | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
} | ||
|
||
@Test | ||
public void testEnumDeclarationFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public enum N { | ||
A, | ||
B | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 1); | ||
} | ||
|
||
@Test | ||
public void testInitializerFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class O { | ||
static { | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 1); | ||
} | ||
|
||
@Test | ||
public void testNestedFolding() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class P { | ||
void x() { | ||
if (true) { | ||
for(int i=0;i<1;i++){ | ||
while(true) { | ||
do { | ||
} while(false); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 4); | ||
} | ||
|
||
@Test | ||
public void testCollapsed() throws JavaModelException, PartInitException { | ||
String code = """ | ||
package org.example.test; | ||
public class P { | ||
void x() { | ||
if (true) { | ||
} | ||
} | ||
} | ||
"""; | ||
ICompilationUnit cu = packageFragment.createCompilationUnit("TestFolding.java", code, true, null); | ||
JavaEditor editor = (JavaEditor) EditorUtility.openInEditor(cu); | ||
JavaSourceViewer viewer = (JavaSourceViewer) editor.getViewer(); | ||
|
||
viewer.doOperation(ProjectionViewer.COLLAPSE_ALL); | ||
|
||
ProjectionAnnotationModel model = editor.getAdapter(ProjectionAnnotationModel.class); | ||
int foundCollapsed = 0; | ||
|
||
for (Iterator<Annotation> it = model.getAnnotationIterator(); it.hasNext();) { | ||
Annotation annotation = it.next(); | ||
if (annotation instanceof ProjectionAnnotation pa) { | ||
if (pa.isCollapsed()) { | ||
foundCollapsed += 1; | ||
} | ||
} | ||
} | ||
assertTrue(foundCollapsed == 2); | ||
} | ||
|
||
private List<IRegion> getProjectionRangesOfFile(String str) throws JavaModelException, PartInitException { | ||
ICompilationUnit cu = packageFragment.createCompilationUnit("TestFolding.java", str, true, null); | ||
JavaEditor editor = (JavaEditor) EditorUtility.openInEditor(cu); | ||
ProjectionAnnotationModel model = editor.getAdapter(ProjectionAnnotationModel.class); | ||
List<IRegion> regions = new ArrayList<>(); | ||
Iterator<Annotation> it = model.getAnnotationIterator(); | ||
while (it.hasNext()) { | ||
Annotation a = it.next(); | ||
if (a instanceof ProjectionAnnotation) { | ||
Position p = model.getPosition(a); | ||
regions.add(new Region(p.getOffset(), p.getLength())); | ||
} | ||
} | ||
return regions; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.