package squill.mgen; import org.junit.After; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import squill.tests.TestUtil; import squill.db.Database; import java.io.*; import static java.util.Arrays.asList; import java.util.Collections; import java.util.List; /** * @author Michael Hunger * @since 28.08.2008 */ public class MappingsTaskTest { private static final String OUTPUT_PATH = "build/tmp"; private Database database; @Test public void generatePetclinicMapping() { database = TestUtil.getDefaultHsqlDatabase("petclinic.sql"); testCreateMapping("org.springframework.samples.petclinic.squill" ,"PetsData","OwnersData","SpecialtiesData","TypesData","VetSpecialtiesData","VisitsData","VetsData"); } @Test public void generateSimpleMapping() { database = TestUtil.getDefaultHsqlDatabase(); testCreateMapping("demo.model","CustomerData", "ComplaintData"); } private void testCreateMapping(final String pkg,String...expectedFiles) { final String path = OUTPUT_PATH + File.separator + pkg.replace('.', File.separatorChar); for (final File file : getFiles(path)) { file.delete(); } final SquillMappingsTask task = new SquillMappingsTask(); task.setDriver("org.hsqldb.jdbcDriver"); task.setUrl("jdbc:hsqldb:mem:squilldemodb"); task.setPackageName(pkg); task.setOutputPath(OUTPUT_PATH); task.setUser("SA"); task.setPassword(""); task.setSchema("PUBLIC"); task.execute(); final List<File> files = getFiles(path); final List<String> expectedNames = asList(expectedFiles); assertEquals(expectedNames.size(), files.size()); for (final File file : files) { String fileName = file.getName(); fileName = fileName.substring(0,fileName.lastIndexOf('.')); assertTrue("File exists " + fileName, expectedNames.contains(fileName)); final String contents = readFile(file); // todo assertions per file } } private String readFile(final File file) { try { final Reader reader = new BufferedReader(new FileReader(file)); final char[] buffer = new char[1024 * 10]; int count; final StringBuilder sb = new StringBuilder(); while ((count = reader.read(buffer)) >= 0) { sb.append(buffer, 0, count); } return sb.toString(); } catch (IOException ioe) { throw new RuntimeException("Error reading file", ioe); } } private List<File> getFiles(final String path) { final File filePath = new File(path); final File[] files = filePath.listFiles(new JavaFilter()); if (files == null) return Collections.emptyList(); return asList(files); } @Before public void setUp() throws Exception { } @After public void tearDown() { TestUtil.shutDownHsql(); } private static class JavaFilter implements FilenameFilter { public boolean accept(final File dir, final String name) { return name.endsWith(".java"); } } }