package spoon.test.support; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.io.File; import org.junit.Test; import spoon.Launcher; import spoon.SpoonModelBuilder; import spoon.compiler.SpoonFolder; import spoon.support.compiler.FileSystemFile; import spoon.support.compiler.FileSystemFolder; import spoon.support.compiler.FilteringFolder; import spoon.support.compiler.VirtualFolder; public class ResourceTest { @Test public void testEqualsFileSystemFile() throws Exception { // two files with equivalent paths are equals String entry = "src/test/resources/spoon/test/api/Foo.java"; assertTrue(new FileSystemFile(new File(entry)).equals(new FileSystemFile(new File("./"+entry)))); } @Test public void testFileSystemFolder() throws Exception { String dir = "src/test/resources/spoon/test/api/"; FileSystemFolder fileSystemFolder = new FileSystemFolder(new File(dir)); // there is one file in api assertEquals(2, fileSystemFolder.getAllFiles().size()); assertEquals(2, fileSystemFolder.getAllJavaFiles().size()); String entry = "src/test/resources/spoon/test/api/Foo.java"; FileSystemFile file = new FileSystemFile(new File(entry)); String entry1 = "src/test/resources/spoon/test/api/CommentedClass.java"; FileSystemFile file1 = new FileSystemFile(new File(entry1)); assertThat(fileSystemFolder.getAllFiles().contains(file), is(true)); assertThat(fileSystemFolder.getAllFiles().contains(file1), is(true)); } @Test public void testVirtualFolder() throws Exception { String dir = "src/test/resources/spoon/test/api/"; FileSystemFolder fileSystemFolder = new FileSystemFolder(new File(dir)); String dir2 = "src/test/resources/spoon/test/exceptions/"; FileSystemFolder fileSystemFolder2 = new FileSystemFolder(new File(dir2)); SpoonFolder folder = new VirtualFolder(); folder.addFolder(fileSystemFolder); folder.addFolder(fileSystemFolder2); assertEquals(4, folder.getAllFiles().size()); // the README is not a Java file assertEquals(3, folder.getAllJavaFiles().size()); } @Test public void testFilteringFolder() throws Exception { // contract: one can filter input files // the core of this test is the removeIfMatches at the end // all files SpoonModelBuilder mb = new Launcher().getModelBuilder(); FilteringFolder resources = new FilteringFolder(); resources.addFolder(new FileSystemFolder("src/test/java/spoon/test/visibility/")); mb.addInputSource(resources); mb.build(); int nbAll = mb.getFactory().getModel().getAllTypes().size(); assertEquals(12, nbAll); SpoonModelBuilder mb2 = new Launcher().getModelBuilder(); FilteringFolder resources2 = new FilteringFolder(); resources2.addFolder(new FileSystemFolder("src/test/java/spoon/test/visibility/packageprotected/")); mb2.addInputSource(resources2); mb2.build(); int nbPackageProtected = mb2.getFactory().getModel().getAllTypes().size(); assertEquals(2, nbPackageProtected); // now the core of this test SpoonModelBuilder mb3 = new Launcher().getModelBuilder(); FilteringFolder resources3 = new FilteringFolder(); resources3.addFolder(new FileSystemFolder("src/test/java/spoon/test/visibility/")); // we remove a number of input resources resources3.removeAllThatMatch(".*packageprotected.*"); mb3.addInputSource(resources3); mb3.build(); assertEquals(nbAll - nbPackageProtected, mb3.getFactory().getModel().getAllTypes().size()); } }