Cgen tests validating actual generation results
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
new file mode 100644
index 0000000..14e9b20
--- /dev/null
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
@@ -0,0 +1,158 @@
+package org.apache.cayenne.gen;
+
+import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.map.SQLTemplateDescriptor;
+import org.apache.cayenne.map.SelectQueryDescriptor;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static org.junit.Assert.assertEquals;
+
+public class BaseTemplatesGenerationTest {
+
+    @Rule
+    public TemporaryFolder folder= new TemporaryFolder();
+
+    protected CgenConfiguration cgenConfiguration;
+    protected ClassGenerationAction action;
+    protected DataMap dataMap;
+    protected ObjEntity objEntity;
+
+    @Before
+    public void setUp() {
+        cgenConfiguration = new CgenConfiguration(false);
+        action = new ClassGenerationAction(cgenConfiguration);
+        dataMap = new DataMap();
+        dataMap.setDefaultPackage("test");
+        objEntity = new ObjEntity();
+    }
+
+    @Test
+    public void testSelectQuery() throws Exception {
+        dataMap.setName("SelectQuery");
+
+        String param = "param";
+        String qualifierString = "name = $" + param;
+
+        DbEntity dbEntity = new DbEntity();
+        ObjAttribute attribute = new ObjAttribute("name");
+        attribute.setDbAttributePath("testKey");
+        attribute.setType("java.lang.String");
+        objEntity.addAttribute(attribute);
+        objEntity.setDbEntity(dbEntity);
+        objEntity.setClassName("Test");
+
+        SelectQueryDescriptor selectQueryDescriptor = new SelectQueryDescriptor();
+        Expression exp = ExpressionFactory.exp(qualifierString);
+        selectQueryDescriptor.setQualifier(exp);
+        selectQueryDescriptor.setName("select");
+        selectQueryDescriptor.setRoot(objEntity);
+
+        Collection<QueryDescriptor> descriptors = new ArrayList<>();
+        descriptors.add(selectQueryDescriptor);
+
+        DataMapArtifact dataMapArtifact = new DataMapArtifact(dataMap, descriptors);
+
+        execute(dataMapArtifact);
+    }
+
+    @Test
+    public void testSQLTemplate() throws Exception {
+        dataMap.setName("SQLTemplate");
+
+        DbEntity dbEntity = new DbEntity();
+        objEntity.setDbEntity(dbEntity);
+        objEntity.setClassName("Test");
+
+        SQLTemplateDescriptor sqlTemplateDescriptor = new SQLTemplateDescriptor();
+        sqlTemplateDescriptor.setSql("SELECT * FROM table");
+        sqlTemplateDescriptor.setRoot(objEntity);
+        sqlTemplateDescriptor.setName("select");
+        sqlTemplateDescriptor.setRoot(objEntity);
+
+        Collection<QueryDescriptor> descriptors = new ArrayList<>();
+        descriptors.add(sqlTemplateDescriptor);
+
+        DataMapArtifact dataMapArtifact = new DataMapArtifact(dataMap, descriptors);
+
+        execute(dataMapArtifact);
+    }
+
+    @Test
+    public void testGenClass() throws Exception {
+        dataMap.setName("ObjEntity");
+
+        DbEntity dbEntity = new DbEntity();
+        dbEntity.setName("EntityTest");
+        objEntity.setDbEntity(dbEntity);
+        objEntity.setClassName("test.ObjEntity");
+        objEntity.setDataMap(dataMap);
+
+        EntityArtifact entityArtifact = new EntityArtifact(objEntity);
+
+        execute(entityArtifact);
+    }
+
+    public void execute(Artifact artifact) throws Exception{
+        cgenConfiguration.addArtifact(artifact);
+
+        cgenConfiguration.setRootPath(folder.getRoot().toPath());
+        cgenConfiguration.setRelPath(Paths.get("."));
+        cgenConfiguration.loadEntity(objEntity);
+        cgenConfiguration.setDataMap(dataMap);
+
+        action.setUtilsFactory(new DefaultToolsUtilsFactory());
+        action.execute();
+
+        String targetName = dataMap.getName();
+
+        fileComparison(targetName);
+        fileComparison("auto/_" + targetName);
+    }
+
+    private void fileComparison(String fileName) throws IOException {
+        String expected = readResource(fileName);
+
+        StringBuilder generated = new StringBuilder();
+        Files.readAllLines(new File(folder.getRoot() + "/test/" + fileName + ".java").toPath())
+                .forEach(generated::append);
+
+        assertEquals(expected, generated.toString());
+    }
+
+    private String readResource(String name) throws IOException {
+        String resourceName = "templateTest/" + name + ".java";
+        InputStream stream = getClass().getClassLoader().getResourceAsStream(resourceName);
+        if(stream == null) {
+            throw new FileNotFoundException("Resource not found: " + resourceName);
+        }
+        StringBuilder expected = new StringBuilder();
+        try(BufferedReader resource = new BufferedReader(new InputStreamReader(stream))) {
+            String line;
+            while ((line = resource.readLine()) != null) {
+                expected.append(line);
+            }
+        }
+
+        return expected.toString();
+    }
+}
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenTest.java
deleted file mode 100644
index eb4bf65..0000000
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.apache.cayenne.gen;
-
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.map.*;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import static org.junit.Assert.assertEquals;
-
-public class CgenTest {
-
-    protected ClassGenerationAction action;
-    protected CgenConfiguration cgenConfiguration;
-
-    protected DataMap dataMap;
-    protected ObjEntity objEntity;
-
-    @Before
-    public void setUp() throws Exception {
-        cgenConfiguration = new CgenConfiguration(false);
-        action = new ClassGenerationAction(cgenConfiguration);
-
-        dataMap = new DataMap();
-        objEntity = new ObjEntity();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        dataMap = null;
-        objEntity = null;
-    }
-
-    @Test
-    public void testSelectQuery() throws Exception {
-
-        String param = "param";
-        String qualifierString = "name = $" + param;
-
-        DbEntity dbEntity = new DbEntity();
-        ObjAttribute attribute = new ObjAttribute("name");
-        attribute.setDbAttributePath("testKey");
-        attribute.setType("java.lang.String");
-        objEntity.addAttribute(attribute);
-        objEntity.setDbEntity(dbEntity);
-        objEntity.setClassName("Test");
-
-        SelectQueryDescriptor selectQueryDescriptor = new SelectQueryDescriptor();
-        Expression exp = ExpressionFactory.exp(qualifierString);
-        selectQueryDescriptor.setQualifier(exp);
-        selectQueryDescriptor.setName("select");
-        selectQueryDescriptor.setRoot(objEntity);
-
-        dataMap.setName("DataMapTest");
-        dataMap.setDefaultPackage("test");
-
-        Collection<QueryDescriptor> descriptors = new ArrayList<>();
-        descriptors.add(selectQueryDescriptor);
-
-        DataMapArtifact dataMapArtifact = new DataMapArtifact(dataMap, descriptors);
-
-        execute(dataMapArtifact);    }
-
-    @Test
-    public void testSQLTemplate() throws Exception {
-
-        DbEntity dbEntity = new DbEntity();
-        objEntity.setDbEntity(dbEntity);
-        objEntity.setClassName("Test");
-
-        SQLTemplateDescriptor sqlTemplateDescriptor = new SQLTemplateDescriptor();
-        sqlTemplateDescriptor.setSql("SELECT * FROM table");
-        sqlTemplateDescriptor.setRoot(objEntity);
-        sqlTemplateDescriptor.setName("select");
-        sqlTemplateDescriptor.setRoot(objEntity);
-
-        dataMap.setName("SQLTemplate");
-        dataMap.setDefaultPackage("test");
-
-        Collection<QueryDescriptor> descriptors = new ArrayList<>();
-        descriptors.add(sqlTemplateDescriptor);
-
-        DataMapArtifact dataMapArtifact = new DataMapArtifact(dataMap, descriptors);
-
-        execute(dataMapArtifact);
-    }
-
-    @Test
-    public void testGenClass() throws Exception {
-
-        dataMap.setName("EntityTest");
-
-        DbEntity dbEntity = new DbEntity();
-        dbEntity.setName("EntityTest");
-        objEntity.setDbEntity(dbEntity);
-        objEntity.setClassName("test.EntityTest");
-        objEntity.setDataMap(dataMap);
-
-        EntityArtifact entityArtifact = new EntityArtifact(objEntity);
-
-        execute(entityArtifact);
-    }
-
-    public void execute(Artifact artifact) throws Exception{
-        cgenConfiguration.addArtifact(artifact);
-
-        cgenConfiguration.setRelPath("src/test/resources");
-        cgenConfiguration.loadEntity(objEntity);
-        cgenConfiguration.setDataMap(dataMap);
-
-        action.setUtilsFactory(new DefaultToolsUtilsFactory());
-        action.execute();
-
-        fileComparison(dataMap.getName());
-
-        fileComparison("auto/_" + dataMap.getName());
-
-        rmdir(new File(cgenConfiguration.getRelPath() + "/test"));
-    }
-
-    public void fileComparison(String fileName) {
-
-        try {
-            FileReader fileReader1 = new FileReader(new File("src/test/resources/templateTest/" + fileName + ".java"));
-            BufferedReader reader1 = new BufferedReader(fileReader1);
-            String lineFile1;
-            String string1 = "";
-
-            FileReader fileReader2 = new FileReader(new File("src/test/resources/test/" + fileName + ".java"));
-            BufferedReader reader2 = new BufferedReader(fileReader2);
-            String lineFile2;
-            String string2 = "";
-
-            while ((lineFile1 = reader1.readLine()) != null
-                    && (lineFile2 = reader2.readLine()) != null) {
-                string1 += lineFile1;
-                string2 += lineFile2;
-            }
-
-            assertEquals(string1, string2);
-
-            reader1.close();
-            reader2.close();
-            fileReader1.close();
-            fileReader2.close();
-
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void rmdir(File file) {
-        if (!file.exists())
-            return;
-
-        if (file.isDirectory()) {
-            for (File f : file.listFiles()) {
-                rmdir(f);
-            }
-        }
-        file.delete();
-    }
-}
diff --git a/cayenne-cgen/src/test/resources/templateTest/DataMapTest.java b/cayenne-cgen/src/test/resources/templateTest/DataMapTest.java
deleted file mode 100644
index b3bb67d..0000000
--- a/cayenne-cgen/src/test/resources/templateTest/DataMapTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package test;
-
-import test.auto._DataMapTest;
-
-public class DataMapTest extends _DataMapTest {
-
-    private static DataMapTest instance;
-
-    private DataMapTest() {}
-
-    public static DataMapTest getInstance() {
-        if(instance == null) {
-            instance = new DataMapTest();
-        }
-
-        return instance;
-    }
-}
diff --git a/cayenne-cgen/src/test/resources/templateTest/EntityTest.java b/cayenne-cgen/src/test/resources/templateTest/EntityTest.java
deleted file mode 100644
index 6cbda4e..0000000
--- a/cayenne-cgen/src/test/resources/templateTest/EntityTest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package test;
-
-import test.auto._EntityTest;
-
-public class EntityTest extends _EntityTest {
-
-    private static final long serialVersionUID = 1L;
-
-}
-
diff --git a/cayenne-cgen/src/test/resources/templateTest/ObjEntity.java b/cayenne-cgen/src/test/resources/templateTest/ObjEntity.java
new file mode 100644
index 0000000..1a036c0
--- /dev/null
+++ b/cayenne-cgen/src/test/resources/templateTest/ObjEntity.java
@@ -0,0 +1,10 @@
+package test;
+
+import test.auto._ObjEntity;
+
+public class ObjEntity extends _ObjEntity {
+
+    private static final long serialVersionUID = 1L;
+
+}
+
diff --git a/cayenne-cgen/src/test/resources/templateTest/SelectQuery.java b/cayenne-cgen/src/test/resources/templateTest/SelectQuery.java
new file mode 100644
index 0000000..49144de
--- /dev/null
+++ b/cayenne-cgen/src/test/resources/templateTest/SelectQuery.java
@@ -0,0 +1,18 @@
+package test;
+
+import test.auto._SelectQuery;
+
+public class SelectQuery extends _SelectQuery {
+
+    private static SelectQuery instance;
+
+    private SelectQuery() {}
+
+    public static SelectQuery getInstance() {
+        if(instance == null) {
+            instance = new SelectQuery();
+        }
+
+        return instance;
+    }
+}
diff --git a/cayenne-cgen/src/test/resources/templateTest/auto/_EntityTest.java b/cayenne-cgen/src/test/resources/templateTest/auto/_ObjEntity.java
similarity index 93%
rename from cayenne-cgen/src/test/resources/templateTest/auto/_EntityTest.java
rename to cayenne-cgen/src/test/resources/templateTest/auto/_ObjEntity.java
index da83fb7..83d68ff 100644
--- a/cayenne-cgen/src/test/resources/templateTest/auto/_EntityTest.java
+++ b/cayenne-cgen/src/test/resources/templateTest/auto/_ObjEntity.java
@@ -7,12 +7,12 @@
 import org.apache.cayenne.BaseDataObject;
 
 /**
- * Class _EntityTest was generated by Cayenne.
+ * Class _ObjEntity was generated by Cayenne.
  * It is probably a good idea to avoid changing this class manually,
  * since it may be overwritten next time code is regenerated.
  * If you need to make any customizations, please use subclass.
  */
-public abstract class _EntityTest extends BaseDataObject {
+public abstract class _ObjEntity extends BaseDataObject {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/cayenne-cgen/src/test/resources/templateTest/auto/_DataMapTest.java b/cayenne-cgen/src/test/resources/templateTest/auto/_SelectQuery.java
similarity index 95%
rename from cayenne-cgen/src/test/resources/templateTest/auto/_DataMapTest.java
rename to cayenne-cgen/src/test/resources/templateTest/auto/_SelectQuery.java
index f4d05c0..7b99f0e 100644
--- a/cayenne-cgen/src/test/resources/templateTest/auto/_DataMapTest.java
+++ b/cayenne-cgen/src/test/resources/templateTest/auto/_SelectQuery.java
@@ -11,7 +11,7 @@
  * since it may be overwritten next time code is regenerated.
  * If you need to make any customizations, please use subclass.
  */
-public class _DataMapTest {
+public class _SelectQuery {
 
     public static final String SELECT_QUERYNAME = "select";