Skip to content

Commit ef9714d

Browse files
test: Add ModelTest annotation to spoon.test.imports (#4772)
1 parent 46cd6f1 commit ef9714d

File tree

2 files changed

+25
-56
lines changed

2 files changed

+25
-56
lines changed

src/test/java/spoon/test/imports/ImportScannerTest.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import spoon.Launcher;
2121
import spoon.SpoonModelBuilder;
2222
import spoon.compiler.SpoonResourceHelper;
23+
import spoon.reflect.CtModel;
2324
import spoon.reflect.declaration.CtClass;
2425
import spoon.reflect.declaration.CtImport;
2526
import spoon.reflect.declaration.CtType;
@@ -33,6 +34,7 @@
3334
import spoon.reflect.visitor.filter.NamedElementFilter;
3435
import spoon.support.JavaOutputProcessor;
3536
import spoon.test.imports.testclasses.ToBeModified;
37+
import spoon.testing.utils.ModelTest;
3638
import spoon.testing.utils.ModelUtils;
3739

3840
import java.io.File;
@@ -54,36 +56,30 @@
5456

5557
public class ImportScannerTest {
5658

57-
@Test
58-
public void testImportOnSpoon() throws IOException {
59+
@ModelTest("./src/main/java/spoon/")
60+
public void testImportOnSpoon(Launcher launcher, Factory factory, CtModel model) throws IOException {
5961
File targetDir = new File("./target/import-test");
60-
Launcher spoon = new Launcher();
61-
spoon.addInputResource("./src/main/java/spoon/");
62-
spoon.getEnvironment().setAutoImports(true);
63-
spoon.getEnvironment().setCommentEnabled(true);
64-
spoon.getEnvironment().setSourceOutputDirectory(targetDir);
65-
spoon.getEnvironment().setLevel("warn");
66-
spoon.buildModel();
62+
launcher.getEnvironment().setSourceOutputDirectory(targetDir);
6763

6864
// contract: ImportScannerImpl does not throw an exception on a large and complex model (OK, it's a smoke test)
6965
// Update: I found a nasty NPE bug :-), smoke tests can be useful
70-
new ImportScannerImpl().scan(spoon.getFactory().Package().getRootPackage());
66+
new ImportScannerImpl().scan(factory.Package().getRootPackage());
7167

7268

73-
PrettyPrinter prettyPrinter = new DefaultJavaPrettyPrinter(spoon.getEnvironment());
69+
PrettyPrinter prettyPrinter = new DefaultJavaPrettyPrinter(launcher.getEnvironment());
7470

7571
Map<CtType, List<String>> missingImports = new HashMap<>();
7672
Map<CtType, List<String>> unusedImports = new HashMap<>();
7773

7874
JavaOutputProcessor outputProcessor;
7975

80-
for (CtType<?> ctType : spoon.getModel().getAllTypes()) {
76+
for (CtType<?> ctType : model.getAllTypes()) {
8177
if (!ctType.isTopLevel()) {
8278
continue;
8379
}
8480

8581
outputProcessor = new JavaOutputProcessor(prettyPrinter);
86-
outputProcessor.setFactory(spoon.getFactory());
82+
outputProcessor.setFactory(factory);
8783
outputProcessor.init();
8884

8985
Set<String> computedTypeImports = new HashSet<>();
@@ -246,17 +242,12 @@ public void testComputeImportsInClass() throws Exception {
246242
assertEquals(2, imports.size());
247243
}
248244

249-
@Test
250-
public void testComputeImportsInClassWithSameName() {
245+
@ModelTest("src/test/resources/spoon/test/imports/testclasses2/")
246+
public void testComputeImportsInClassWithSameName(Factory factory) {
251247
String packageName = "spoon.test.imports.testclasses2";
252248
String className = "ImportSameName";
253249
String qualifiedName = packageName + "." + className;
254-
255-
Launcher spoon = new Launcher();
256-
spoon.addInputResource("src/test/resources/spoon/test/imports/testclasses2/");
257-
spoon.buildModel();
258-
Factory aFactory = spoon.getFactory();
259-
CtType<?> theClass = aFactory.Type().get(qualifiedName);
250+
CtType<?> theClass = factory.Type().get(qualifiedName);
260251

261252
ImportScanner importContext = new ImportScannerImpl();
262253
importContext.computeImports(theClass);

src/test/java/spoon/test/imports/ImportTest.java

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import spoon.test.imports.testclasses.Tacos;
7272
import spoon.test.imports.testclasses.ToBeModified;
7373
import spoon.test.imports.testclasses.badimportissue3320.source.TestSource;
74+
import spoon.testing.utils.ModelTest;
7475
import spoon.testing.utils.ModelUtils;
7576

7677
import java.io.BufferedReader;
@@ -1289,17 +1290,9 @@ public void testImportStarredPackageWithNonVisibleClass() throws IOException {
12891290
assertEquals(CtImportKind.ALL_TYPES, cu.getImports().iterator().next().getImportKind());
12901291
}
12911292

1292-
@Test
1293-
public void testImportWithGenerics() {
1293+
@ModelTest(value = "./src/test/resources/import-with-generics/TestWithGenerics.java", autoImport = true)
1294+
public void testImportWithGenerics(Launcher launcher) {
12941295
// contract: in noclasspath autoimport, we should be able to use generic type
1295-
final Launcher launcher = new Launcher();
1296-
// this class is not compilable 'spoon.test.imports.testclasses.withgenerics.Target' does not exist
1297-
launcher.addInputResource("./src/test/resources/import-with-generics/TestWithGenerics.java");
1298-
launcher.getEnvironment().setAutoImports(true);
1299-
launcher.getEnvironment().setNoClasspath(true);
1300-
launcher.setSourceOutputDirectory("./target/import-with-generics");
1301-
launcher.run();
1302-
13031296
PrettyPrinter prettyPrinter = launcher.createPrettyPrinter();
13041297
CtType element = launcher.getFactory().Class().get("spoon.test.imports.testclasses.TestWithGenerics");
13051298
List<CtType<?>> toPrint = new ArrayList<>();
@@ -1441,12 +1434,9 @@ public void testNullable() throws Exception {
14411434
assertNotNull(launcher.getFactory().Type().get("TestNullable"));
14421435
}
14431436

1444-
@Test
1445-
public void testBug2369_fqn() {
1437+
@ModelTest("./src/test/java/spoon/test/imports/testclasses/JavaLongUse.java")
1438+
public void testBug2369_fqn(Factory factory) {
14461439
// see https://github.com/INRIA/spoon/issues/2369
1447-
final Launcher launcher = new Launcher();
1448-
launcher.addInputResource("./src/test/java/spoon/test/imports/testclasses/JavaLongUse.java");
1449-
launcher.buildModel();
14501440
final String nl = System.lineSeparator();
14511441
assertEquals("public class JavaLongUse {" + nl +
14521442
" public class Long {}" + nl +
@@ -1458,16 +1448,12 @@ public void testBug2369_fqn() {
14581448
" public static void main(java.lang.String[] args) {" + nl +
14591449
" java.lang.System.out.println(spoon.test.imports.testclasses.JavaLongUse.method());" + nl +
14601450
" }" + nl +
1461-
"}", launcher.getFactory().Type().get("spoon.test.imports.testclasses.JavaLongUse").toString());
1451+
"}", factory.Type().get("spoon.test.imports.testclasses.JavaLongUse").toString());
14621452
}
14631453

1464-
@Test
1465-
public void testBug2369_autoimports() {
1454+
@ModelTest(value = "./src/test/java/spoon/test/imports/testclasses/JavaLongUse.java", autoImport = true)
1455+
public void testBug2369_autoimports(Launcher launcher) {
14661456
// https://github.com/INRIA/spoon/issues/2369
1467-
final Launcher launcher = new Launcher();
1468-
launcher.addInputResource("./src/test/java/spoon/test/imports/testclasses/JavaLongUse.java");
1469-
launcher.getEnvironment().setAutoImports(true);
1470-
launcher.buildModel();
14711457
final String nl = System.lineSeparator();
14721458
assertEquals("public class JavaLongUse {" + nl +
14731459
" public class Long {}" + nl +
@@ -1581,31 +1567,23 @@ public void testFQNJavadoc() {
15811567
assertThat(output, containsString("import spoon.SpoonException;"));
15821568
}
15831569
}
1584-
@Test
1585-
public void testImportOnSpoon() throws IOException {
1586-
File targetDir = new File("./target/import-test");
1587-
Launcher spoon = new Launcher();
1588-
spoon.addInputResource("./src/main/java/spoon/");
1589-
spoon.getEnvironment().setAutoImports(true);
1590-
spoon.getEnvironment().setCommentEnabled(true);
1591-
spoon.getEnvironment().setSourceOutputDirectory(targetDir);
1592-
spoon.getEnvironment().setLevel("warn");
1593-
spoon.buildModel();
15941570

1595-
PrettyPrinter prettyPrinter = new DefaultJavaPrettyPrinter(spoon.getEnvironment());
1571+
@ModelTest(value = "./src/main/java/spoon/", autoImport = true)
1572+
public void testImportOnSpoon(Launcher launcher, CtModel model, Factory factory) throws IOException {
1573+
PrettyPrinter prettyPrinter = new DefaultJavaPrettyPrinter(launcher.getEnvironment());
15961574

15971575
Map<CtType, List<String>> missingImports = new HashMap<>();
15981576
Map<CtType, List<String>> unusedImports = new HashMap<>();
15991577

16001578
JavaOutputProcessor outputProcessor;
16011579

1602-
for (CtType<?> ctType : spoon.getModel().getAllTypes()) {
1580+
for (CtType<?> ctType : model.getAllTypes()) {
16031581
if (!ctType.isTopLevel()) {
16041582
continue;
16051583
}
16061584

16071585
outputProcessor = new JavaOutputProcessor(prettyPrinter);
1608-
outputProcessor.setFactory(spoon.getFactory());
1586+
outputProcessor.setFactory(factory);
16091587
outputProcessor.init();
16101588

16111589
Set<String> computedTypeImports = new HashSet<>();

0 commit comments

Comments
 (0)