-
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
d5ec49f
commit 621eaef
Showing
3 changed files
with
284 additions
and
0 deletions.
There are no files selected for viewing
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
220 changes: 220 additions & 0 deletions
220
org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/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,220 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2025 Vector Informatik GmbH and others. | ||
* | ||
* This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License 2.0 | ||
* which accompanies this distribution, and is available at | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Vector Informatik GmbH - initial API and implementation | ||
*******************************************************************************/ | ||
package org.eclipse.jdt.text.tests.folding; | ||
|
||
import org.junit.After; | ||
import org.junit.Before; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
|
||
import org.eclipse.jdt.testplugin.JavaProjectHelper; | ||
|
||
import org.eclipse.core.runtime.CoreException; | ||
|
||
import org.eclipse.jdt.core.IJavaProject; | ||
import org.eclipse.jdt.core.IPackageFragment; | ||
import org.eclipse.jdt.core.IPackageFragmentRoot; | ||
|
||
import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup; | ||
|
||
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= JavaProjectHelper.addSourceContainer(jProject, "src"); | ||
} | ||
packageFragment= sourceFolder.createPackageFragment("org.example.test", false, null); | ||
} | ||
|
||
@After | ||
public void tearDown() throws CoreException { | ||
JavaProjectHelper.delete(jProject); | ||
} | ||
|
||
@Test | ||
public void testCompilationUnitFolding() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
public class A { //here should not be an annotation | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 0); | ||
} | ||
|
||
@Test | ||
public void testClassWithJavadocAsHeaderComment() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
/** //here should not be an annotation | ||
* Javadoc | ||
*/ | ||
public class HeaderCommentTest { | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 1); | ||
} | ||
|
||
@Test | ||
public void testImportsFolding() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
import java.util.List; //here should not be an annotation | ||
import java.util.ArrayList; | ||
public class ImportsTest { | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 1); | ||
} | ||
|
||
@Test | ||
public void testSingleMethodWithJavadoc() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
public class SingleMethodTest { | ||
/** //here should not be an annotation | ||
* Javadoc | ||
*/ | ||
public void foo() { //here should not be an annotation | ||
System.out.println("Hello"); | ||
} | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 2); | ||
} | ||
|
||
@Test | ||
public void testMultipleMethodsWithoutComments() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
public class MultipleMethodTest { | ||
public void foo() { //here should not be an annotation | ||
} | ||
public void bar() { //here should not be an annotation | ||
} | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 2); | ||
} | ||
|
||
@Test | ||
public void testInnerClassFolding() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
public class OuterClass { | ||
class InnerClass { //here should not be an annotation | ||
void bar() { //here should not be an annotation | ||
} | ||
} | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 2); | ||
} | ||
|
||
@Test | ||
public void testInnerClassWithJavadoc() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
public class OuterWithDocs { | ||
/** //here should not be an annotation | ||
* Javadoc | ||
*/ | ||
class InnerWithDocs { //here should not be an annotation | ||
/** //here should not be an annotation | ||
* Javadoc | ||
*/ | ||
void bar() { //here should not be an annotation | ||
} | ||
} | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 4); | ||
} | ||
|
||
@Test | ||
public void testJavadocs() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
/** //here should be an annotation | ||
* Javadoc | ||
*/ | ||
/** //here should be an annotation | ||
* Another Javadoc | ||
*/ | ||
/** //here should be an annotation | ||
* Yet another Javadoc | ||
*/ | ||
public class Example {} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 3); | ||
} | ||
|
||
@Test | ||
public void testCommentBlocks() throws Exception { | ||
String str= """ | ||
package org.example.test; | ||
/* //here should be an annotation | ||
* | ||
*/ | ||
/* //here should be an annotation | ||
* | ||
*/ | ||
/* //here should be an annotation | ||
* | ||
*/ | ||
class h { | ||
/* //here should be an annotation | ||
* | ||
*/ | ||
void b() { //here should be an annotation | ||
/* //here should NOT be an annotation | ||
* | ||
*/ | ||
int a; | ||
} | ||
} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 5); | ||
} | ||
|
||
@Test | ||
public void testCopyrightHeader() throws Exception { | ||
String str= """ | ||
/** //here should be an annotation | ||
* This is some copyright header | ||
*/ | ||
package org.example.test; | ||
class SomeClass {} | ||
"""; | ||
FoldingTestUtils.assertCodeHasRegions(packageFragment, "TestFolding.java", str, 1); | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/folding/FoldingTestUtils.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,62 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2025 Vector Informatik GmbH and others. | ||
* | ||
* This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License 2.0 | ||
* which accompanies this distribution, and is available at | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Vector Informatik GmbH - initial API and implementation | ||
* Daniel Schmid - initial API and implementation | ||
*******************************************************************************/ | ||
package org.eclipse.jdt.text.tests.folding; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
|
||
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.jdt.core.ICompilationUnit; | ||
import org.eclipse.jdt.core.IPackageFragment; | ||
|
||
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility; | ||
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; | ||
|
||
public final class FoldingTestUtils { | ||
|
||
private FoldingTestUtils() { | ||
} | ||
|
||
public static List<IRegion> getProjectionRangesOfFile(IPackageFragment packageFragment, String fileName, String code) throws Exception { | ||
ICompilationUnit cu= packageFragment.createCompilationUnit(fileName, code, 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; | ||
} | ||
|
||
public static void assertCodeHasRegions(IPackageFragment packageFragment, String fileName, String code, int regionsCount) throws Exception { | ||
List<IRegion> regions= FoldingTestUtils.getProjectionRangesOfFile(packageFragment, fileName, code); | ||
assertEquals(regionsCount, regions.size(), String.format("Expected %d regions but saw %d.", regionsCount, regions.size())); | ||
} | ||
} |