import org.dbunit.IDatabaseTester;\r
import org.dbunit.database.IDatabaseConnection;\r
import org.dbunit.dataset.IDataSet;\r
+import org.dbunit.dataset.ReplacementDataSet;\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.apache.commons.io.IOUtils;\r
+\r
import org.hibernate.tool.hbm2ddl.SchemaExport;\r
\r
import org.argeo.slc.core.SlcException;\r
* Helper to make db vendor independent tests using DbUnit data sets. Based on\r
* {@link DbModel}.\r
*/\r
-public abstract class IndependentDbTestCase extends SpringBasedTestCase {\r
+public abstract class IndependentDbTestCase extends AbstractSpringTestCase {\r
private IDatabaseTester databaseTester;\r
\r
/** Creates the DDL of the data model and loads the data. */\r
* {@link #getDataSetResource()}\r
*/\r
protected IDataSet createDataSet() {\r
+ InputStream in = null;\r
try {\r
- InputStream in = getDataSetResource().getInputStream();\r
- IDataSet dataSet = new FlatXmlDataSet(in);\r
- in.close();\r
+ in = getDataSetResource().getInputStream();\r
+ String[] replaceStrings = getReplacementStrings();\r
+ IDataSet dataSet;\r
+ if (replaceStrings.length == 0) {\r
+ dataSet = new FlatXmlDataSet(in);\r
+ } else {\r
+ dataSet = new ReplacementDataSet(new FlatXmlDataSet(in));\r
+ for (String str : replaceStrings) {\r
+ replace((ReplacementDataSet) dataSet, str);\r
+ }\r
+ }\r
return dataSet;\r
} catch (Exception e) {\r
throw new SlcException("Cannot create data set", e);\r
+ } finally {\r
+ IOUtils.closeQuietly(in);\r
}\r
}\r
\r
+ /**\r
+ * To be overridden. Return an empty array by default.\r
+ * \r
+ * @return the array of strings to replace in the dataset\r
+ */\r
+ protected String[] getReplacementStrings() {\r
+ return new String[0];\r
+ }\r
+\r
+ /**\r
+ * Set the object replacing the given string. To be overridden. Does nothing\r
+ * by default.\r
+ */\r
+ protected void replace(ReplacementDataSet dataSet, String str)\r
+ throws Exception {\r
+\r
+ }\r
+\r
+ /**\r
+ * Replace the given string by the content of the resource with the same\r
+ * name in the same package, as a byte array.\r
+ */\r
+ protected void replaceByRessource(ReplacementDataSet dataSet, String str)\r
+ throws Exception {\r
+ Resource zipResource = new ClassPathResource(inPackage(str));\r
+\r
+ dataSet.addReplacementObject(str, IOUtils.toByteArray(zipResource\r
+ .getInputStream()));\r
+ }\r
+\r
/**\r
* The resource of the data set to load. The default implementation loads a\r
* <code>ClassPathResource</code> located at\r