--- /dev/null
+package org.argeo.slc.unit;\r
+\r
+import java.sql.Connection;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.hibernate.cfg.Configuration;\r
+import org.hibernate.cfg.Environment;\r
+import org.hibernate.tool.hbm2ddl.SchemaExport;\r
+\r
+public class DbModel {\r
+ private String dialect;\r
+ private List<String> mappings;\r
+\r
+ public void setDialect(String dialect) {\r
+ this.dialect = dialect;\r
+ }\r
+\r
+ public void setMappings(List<String> mappings) {\r
+ this.mappings = mappings;\r
+ }\r
+\r
+ public SchemaExport createSchemaExport(Connection connection) {\r
+ Configuration configuration = new Configuration();\r
+ Properties properties = new Properties();\r
+ properties.setProperty(Environment.DIALECT, dialect);\r
+ properties.setProperty(Environment.HBM2DDL_AUTO, "create");\r
+ configuration.setProperties(properties);\r
+\r
+ for (String mapping : mappings) {\r
+ configuration.addResource(mapping.trim());\r
+ }\r
+\r
+ return new SchemaExport(configuration, connection);\r
+ }\r
+}\r
--- /dev/null
+package org.argeo.slc.unit;\r
+\r
+import java.io.InputStream;\r
+import java.sql.SQLException;\r
+\r
+import javax.sql.DataSource;\r
+\r
+import org.dbunit.DataSourceDatabaseTester;\r
+import org.dbunit.DatabaseUnitException;\r
+import org.dbunit.IDatabaseTester;\r
+import org.dbunit.database.IDatabaseConnection;\r
+import org.dbunit.dataset.IDataSet;\r
+import org.dbunit.dataset.xml.FlatXmlDataSet;\r
+import org.dbunit.operation.DatabaseOperation;\r
+import org.springframework.core.io.ClassPathResource;\r
+import org.springframework.core.io.Resource;\r
+\r
+import org.hibernate.tool.hbm2ddl.SchemaExport;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+\r
+public class IndependentDbTestCase extends SpringBasedTestCase {\r
+ private IDatabaseTester databaseTester;\r
+\r
+ @Override\r
+ protected void setUp() throws Exception {\r
+ super.setUp();\r
+\r
+ databaseTester = new DataSourceDatabaseTester(getDataSource());\r
+ databaseTester.setSetUpOperation(new DatabaseOperation() {\r
+\r
+ @Override\r
+ public void execute(IDatabaseConnection connection, IDataSet dataSet)\r
+ throws DatabaseUnitException, SQLException {\r
+ DbModel dbModel = getDbModel();\r
+ SchemaExport schemaExport = dbModel\r
+ .createSchemaExport(connection.getConnection());\r
+ schemaExport.create(true, true);\r
+\r
+ DatabaseOperation.INSERT.execute(connection, dataSet);\r
+ }\r
+\r
+ });\r
+ databaseTester.setDataSet(createDataSet());\r
+ databaseTester.onSetup();\r
+ }\r
+\r
+ @Override\r
+ protected void tearDown() throws Exception {\r
+ if (databaseTester != null) {\r
+ databaseTester.onTearDown();\r
+ }\r
+ super.tearDown();\r
+ }\r
+\r
+ protected DataSource getDataSource() {\r
+ return (DataSource) getApplicationContext().getBean(\r
+ getDataSourceBeanName());\r
+ }\r
+\r
+ protected String getDataSourceBeanName() {\r
+ return "dataSource";\r
+ }\r
+\r
+ protected IDataSet createDataSet() {\r
+ try {\r
+ InputStream in = getDataSetResource().getInputStream();\r
+ IDataSet dataSet = new FlatXmlDataSet(in);\r
+ in.close();\r
+ return dataSet;\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot create data set", e);\r
+ }\r
+ }\r
+\r
+ protected Resource getDataSetResource() {\r
+ return new ClassPathResource(getDataSetResourceLocation());\r
+ }\r
+\r
+ protected String getDataSetResourceLocation() {\r
+ return inPackage("dataSet.xml");\r
+ }\r
+\r
+ protected DbModel getDbModel() {\r
+ return (DbModel) getApplicationContext().getBean(getDbModelBeanName());\r
+ }\r
+\r
+ protected String getDbModelBeanName() {\r
+ return "dbModel";\r
+ }\r
+}\r
--- /dev/null
+package org.argeo.slc.unit;\r
+\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.support.ClassPathXmlApplicationContext;\r
+\r
+import junit.framework.TestCase;\r
+\r
+public class SpringBasedTestCase extends TestCase {\r
+ private ApplicationContext context;\r
+\r
+ /**\r
+ * Gets (and create if necessary) the application context to use. Default\r
+ * implementation uses a class path xml application context and calls\r
+ * {@link #getApplicationContextLocation()}.\r
+ */\r
+ protected ApplicationContext getApplicationContext() {\r
+ if (context == null) {\r
+ context = new ClassPathXmlApplicationContext(\r
+ getApplicationContextLocation());\r
+ }\r
+ return context;\r
+ }\r
+\r
+ /**\r
+ * Get the application context location used by the default implementation\r
+ * of {@link #getApplicationContext()}.\r
+ */\r
+ protected String getApplicationContextLocation() {\r
+ return inPackage("applicationContext.xml");\r
+ }\r
+ \r
+ protected String inPackage(String suffix){\r
+ String prefix = getClass().getPackage().getName().replace('.', '/');\r
+ return prefix+'/'+suffix;\r
+ }\r
+}\r