diff --git a/processor/src/test/java/org/mapstruct/ap/test/ConversionTest.java b/processor/src/test/java/org/mapstruct/ap/test/conversion/ConversionTest.java similarity index 78% rename from processor/src/test/java/org/mapstruct/ap/test/ConversionTest.java rename to processor/src/test/java/org/mapstruct/ap/test/conversion/ConversionTest.java index 5b3477d2a..51b17e20b 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/ConversionTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/conversion/ConversionTest.java @@ -13,41 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test; +package org.mapstruct.ap.test.conversion; -import java.io.File; -import javax.tools.DiagnosticCollector; -import javax.tools.JavaFileObject; +import java.util.Arrays; +import java.util.List; -import org.mapstruct.ap.test.conversion.Source; -import org.mapstruct.ap.test.conversion.SourceTargetMapper; -import org.mapstruct.ap.test.conversion.Target; -import org.testng.annotations.BeforeMethod; +import org.mapstruct.ap.testutil.MapperTestBase; import org.testng.annotations.Test; import static org.fest.assertions.Assertions.assertThat; public class ConversionTest extends MapperTestBase { - private DiagnosticCollector diagnostics; - - public ConversionTest() { - super( "mapstruct.jar" ); - } - - @BeforeMethod - public void generateMapperImplementation() { - diagnostics = new DiagnosticCollector(); - File[] sourceFiles = getSourceFiles( + @Override + protected List> getTestClasses() { + return Arrays.>asList( Source.class, Target.class, SourceTargetMapper.class ); - - boolean compilationSuccessful = compile( diagnostics, sourceFiles ); - - assertThat( compilationSuccessful ).describedAs( "Compilation failed: " + diagnostics.getDiagnostics() ) - .isTrue(); } @Test diff --git a/processor/src/test/java/org/mapstruct/ap/test/CarMapperTest.java b/processor/src/test/java/org/mapstruct/ap/test/model/CarMapperTest.java similarity index 90% rename from processor/src/test/java/org/mapstruct/ap/test/CarMapperTest.java rename to processor/src/test/java/org/mapstruct/ap/test/model/CarMapperTest.java index 38b04e4bd..8f8afd9a5 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/CarMapperTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/model/CarMapperTest.java @@ -13,40 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test; +package org.mapstruct.ap.test.model; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.GregorianCalendar; import java.util.List; -import javax.tools.DiagnosticCollector; -import javax.tools.JavaFileObject; -import org.mapstruct.ap.test.model.Car; -import org.mapstruct.ap.test.model.CarDto; -import org.mapstruct.ap.test.model.CarMapper; -import org.mapstruct.ap.test.model.Category; -import org.mapstruct.ap.test.model.DateMapper; -import org.mapstruct.ap.test.model.Person; -import org.mapstruct.ap.test.model.PersonDto; -import org.testng.annotations.BeforeMethod; +import org.mapstruct.ap.testutil.MapperTestBase; import org.testng.annotations.Test; import static org.fest.assertions.Assertions.assertThat; public class CarMapperTest extends MapperTestBase { - private DiagnosticCollector diagnostics; - - public CarMapperTest() { - super( "mapstruct.jar" ); - } - - @BeforeMethod - public void generateMapperImplementation() { - diagnostics = new DiagnosticCollector(); - File[] sourceFiles = getSourceFiles( + @Override + protected List> getTestClasses() { + return Arrays.>asList( Car.class, CarDto.class, Person.class, @@ -55,11 +38,6 @@ public class CarMapperTest extends MapperTestBase { Category.class, DateMapper.class ); - - boolean compilationSuccessful = compile( diagnostics, sourceFiles ); - - assertThat( compilationSuccessful ).describedAs( "Compilation failed: " + diagnostics.getDiagnostics() ) - .isTrue(); } @Test diff --git a/processor/src/test/java/org/mapstruct/ap/test/MapperTestBase.java b/processor/src/test/java/org/mapstruct/ap/testutil/MapperTestBase.java similarity index 71% rename from processor/src/test/java/org/mapstruct/ap/test/MapperTestBase.java rename to processor/src/test/java/org/mapstruct/ap/testutil/MapperTestBase.java index b6ea09999..71fdd8875 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/MapperTestBase.java +++ b/processor/src/test/java/org/mapstruct/ap/testutil/MapperTestBase.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test; +package org.mapstruct.ap.testutil; import java.io.File; import java.io.IOException; @@ -33,7 +33,17 @@ import javax.tools.ToolProvider; import org.mapstruct.ap.MappingProcessor; import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import static org.fest.assertions.Assertions.assertThat; + +/** + * Base class for all mapper tests. Sub-classes must implement + * {@link #getTestClasses()} to return the classes to be compiled for a given + * test. + * + * @author Gunnar Morling + */ public abstract class MapperTestBase { private JavaCompiler compiler; @@ -42,14 +52,14 @@ public abstract class MapperTestBase { private String sourceOutputDir; private List classPath; private List libraries; + private DiagnosticCollector diagnostics; - public MapperTestBase(String... libraries) { - this.libraries = Arrays.asList( libraries ); + public MapperTestBase() { + this.libraries = Arrays.asList( "mapstruct.jar" ); } @BeforeClass public void setup() throws Exception { - compiler = ToolProvider.getSystemJavaCompiler(); String basePath = getBasePath(); @@ -75,29 +85,45 @@ public abstract class MapperTestBase { ); } - protected File[] getSourceFiles(Class... clazz) { + @BeforeMethod + public void generateMapperImplementation() { + diagnostics = new DiagnosticCollector(); + List sourceFiles = getSourceFiles( getTestClasses() ); - File[] sourceFiles = new File[clazz.length]; + boolean compilationSuccessful = compile( diagnostics, sourceFiles ); - for ( int i = 0; i < clazz.length; i++ ) { + assertThat( compilationSuccessful ).describedAs( "Compilation failed: " + diagnostics.getDiagnostics() ) + .isTrue(); + } - sourceFiles[i] = new File( - sourceDir + - File.separator + - clazz[i].getName().replace( ".", File.separator ) + - ".java" + /** + * Returns the classes to be compiled for this test. + * + * @return A list containing the classes to be compiled for this test + */ + protected abstract List> getTestClasses(); + + private List getSourceFiles(List> classes) { + List sourceFiles = new ArrayList( classes.size() ); + + for ( Class clazz : classes ) { + sourceFiles.add( + new File( + sourceDir + + File.separator + + clazz.getName().replace( ".", File.separator ) + + ".java" + ) ); } - return sourceFiles; } - protected boolean compile(DiagnosticCollector diagnostics, File... sourceFiles) { - + private boolean compile(DiagnosticCollector diagnostics, Iterable sourceFiles) { StandardJavaFileManager fileManager = compiler.getStandardFileManager( null, null, null ); - Iterable compilationUnits = fileManager.getJavaFileObjects( sourceFiles ); + Iterable compilationUnits = fileManager.getJavaFileObjectsFromFiles( sourceFiles ); try { fileManager.setLocation( StandardLocation.CLASS_PATH, classPath ); @@ -122,7 +148,6 @@ public abstract class MapperTestBase { } private String getBasePath() { - try { return new File( "." ).getCanonicalPath(); } @@ -132,7 +157,6 @@ public abstract class MapperTestBase { } private void createOutputDirs() { - File directory = new File( classOutputDir ); deleteDirectory( directory ); directory.mkdirs(); @@ -156,5 +180,4 @@ public abstract class MapperTestBase { } path.delete(); } - -} \ No newline at end of file +}