package com.querydsl.sql.codegen; import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.Set; import javax.tools.JavaCompiler; import org.junit.*; import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.mysema.codegen.SimpleCompiler; import com.querydsl.codegen.BeanSerializer; import com.querydsl.core.testutil.Parallelized; import com.querydsl.core.testutil.SlowTest; @RunWith(value = Parallelized.class) @Category(SlowTest.class) public class MetaDataExporterAllTest { @Rule public TemporaryFolder folder = new TemporaryFolder(); private static Connection connection; private static DatabaseMetaData metadata; private static JavaCompiler compiler = new SimpleCompiler(); private String namePrefix, nameSuffix, beanPrefix, beanSuffix; private String beanPackageName; private BeanSerializer beanSerializer = new BeanSerializer(); private NamingStrategy namingStrategy; private boolean withBeans, withInnerClasses, withOrdinalPositioning; private boolean exportColumns, schemaToPackage; @BeforeClass public static void setUpClass() throws ClassNotFoundException, SQLException { Class.forName("org.h2.Driver"); String url = "jdbc:h2:mem:testdb" + System.currentTimeMillis(); connection = DriverManager.getConnection(url, "sa", ""); metadata = connection.getMetaData(); MetaDataExporterTest.createTables(connection); } @AfterClass public static void tearDownClass() throws SQLException { connection.close(); } @Parameterized.Parameters public static List<Object[]> parameters() { List<Object[]> params = Lists.newArrayList(); List<NamingStrategy> ns = Arrays.<NamingStrategy>asList( new DefaultNamingStrategy(), new OriginalNamingStrategy()); List<String> prefixOrSuffix = Arrays.asList("", "Q"); List<String> beanPackage = Arrays.asList(null, "test2"); List<Boolean> booleans = Arrays.asList(true, false); for (String namePrefix : prefixOrSuffix) { for (String nameSuffix : prefixOrSuffix) { for (String beanPrefix : prefixOrSuffix) { for (String beanSuffix : prefixOrSuffix) { for (String beanPackageName : beanPackage) { for (NamingStrategy namingStrategy : ns) { for (boolean withBeans : booleans) { for (boolean withInnerClasses : booleans) { for (boolean withOrdinalPositioning : booleans) { for (boolean exportColumns : booleans) { for (boolean schemaToPackage : booleans) { if (withBeans && beanPackageName == null) { if (Objects.equal(namePrefix, beanPrefix) && Objects.equal(nameSuffix, beanSuffix)) { continue; } } if (withInnerClasses && withOrdinalPositioning) { continue; } params.add(new Object[]{namePrefix, nameSuffix, beanPrefix, beanSuffix, beanPackageName, namingStrategy, withBeans, withInnerClasses, withOrdinalPositioning, exportColumns, schemaToPackage}); } } } } } } } } } } } return params; } public MetaDataExporterAllTest(String namePrefix, String nameSuffix, String beanPrefix, String beanSuffix, String beanPackageName, NamingStrategy namingStrategy, boolean withBeans, boolean withInnerClasses, boolean withOrdinalPositioning, boolean exportColumns, boolean schemaToPackage) { this.namePrefix = namePrefix; this.nameSuffix = nameSuffix; this.beanPrefix = beanPrefix; this.beanSuffix = beanSuffix; this.beanPackageName = beanPackageName; this.schemaToPackage = schemaToPackage; this.namingStrategy = namingStrategy; this.withBeans = withBeans; this.withInnerClasses = withInnerClasses; this.withOrdinalPositioning = withOrdinalPositioning; this.exportColumns = exportColumns; } @Test public void export() throws SQLException, IOException { MetaDataExporter exporter = new MetaDataExporter(); exporter.setColumnAnnotations(exportColumns); exporter.setSchemaPattern("PUBLIC"); exporter.setNamePrefix(namePrefix); exporter.setNameSuffix(nameSuffix); exporter.setBeanPrefix(beanPrefix); exporter.setBeanSuffix(beanSuffix); exporter.setInnerClassesForKeys(withInnerClasses); exporter.setPackageName("test"); exporter.setBeanPackageName(beanPackageName); exporter.setTargetFolder(folder.getRoot()); exporter.setNamingStrategy(namingStrategy); exporter.setSchemaToPackage(schemaToPackage); if (withBeans) { exporter.setBeanSerializer(beanSerializer); } if (withOrdinalPositioning) { exporter.setColumnComparatorClass(OrdinalPositionComparator.class); } exporter.export(metadata); Set<String> classes = exporter.getClasses(); int compilationResult = compiler.run(null, System.out, System.err, classes.toArray(new String[classes.size()])); if (compilationResult != 0) { Assert.fail("Compilation Failed for " + folder.getRoot().getPath()); } } }