X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Funit%2FIndependentDbTestCase.java;h=15e7f679e77f364e0b3908306b3e08175d7d1961;hb=ff5078359b2bfda024f7d39a471918c75dcf27f0;hp=8a0b07e90cf607e012daa938890d73801a975e17;hpb=faf680e212bf3e18837c4f798587856e061273b3;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java index 8a0b07e90..15e7f679e 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java @@ -10,11 +10,14 @@ import org.dbunit.DatabaseUnitException; import org.dbunit.IDatabaseTester; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.ReplacementDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.operation.DatabaseOperation; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.apache.commons.io.IOUtils; + import org.hibernate.tool.hbm2ddl.SchemaExport; import org.argeo.slc.core.SlcException; @@ -23,7 +26,7 @@ import org.argeo.slc.core.SlcException; * Helper to make db vendor independent tests using DbUnit data sets. Based on * {@link DbModel}. */ -public abstract class IndependentDbTestCase extends SpringBasedTestCase { +public abstract class IndependentDbTestCase extends AbstractSpringTestCase { private IDatabaseTester databaseTester; /** Creates the DDL of the data model and loads the data. */ @@ -80,16 +83,57 @@ public abstract class IndependentDbTestCase extends SpringBasedTestCase { * {@link #getDataSetResource()} */ protected IDataSet createDataSet() { + InputStream in = null; try { - InputStream in = getDataSetResource().getInputStream(); - IDataSet dataSet = new FlatXmlDataSet(in); - in.close(); + in = getDataSetResource().getInputStream(); + String[] replaceStrings = getReplacementStrings(); + IDataSet dataSet; + if (replaceStrings.length == 0) { + dataSet = new FlatXmlDataSet(in); + } else { + dataSet = new ReplacementDataSet(new FlatXmlDataSet(in)); + for (String str : replaceStrings) { + replace((ReplacementDataSet) dataSet, str); + } + } return dataSet; } catch (Exception e) { throw new SlcException("Cannot create data set", e); + } finally { + IOUtils.closeQuietly(in); } } + /** + * To be overridden. Return an empty array by default. + * + * @return the array of strings to replace in the dataset + */ + protected String[] getReplacementStrings() { + return new String[0]; + } + + /** + * Set the object replacing the given string. To be overridden. Does nothing + * by default. + */ + protected void replace(ReplacementDataSet dataSet, String str) + throws Exception { + + } + + /** + * Replace the given string by the content of the resource with the same + * name in the same package, as a byte array. + */ + protected void replaceByRessource(ReplacementDataSet dataSet, String str) + throws Exception { + Resource zipResource = new ClassPathResource(inPackage(str)); + + dataSet.addReplacementObject(str, IOUtils.toByteArray(zipResource + .getInputStream())); + } + /** * The resource of the data set to load. The default implementation loads a * ClassPathResource located at