Add script after setting scripts in RsrcDbPopultr

Prior to this commit it was impossible to add additional scripts to a
ResourceDatabasePopulator after setScripts() had been invoked.

This commit fixes this by ensuring that the internal scripts list
continues to be modifiable when setScripts() is invoked.

Issue: SPR-11691
This commit is contained in:
Sam Brannen 2014-04-13 15:06:47 +02:00
parent 84f678a06b
commit b4995f7e4f
2 changed files with 24 additions and 1 deletions

View File

@ -133,7 +133,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
*/
public void setScripts(Resource... scripts) {
assertContentsOfScriptArray(scripts);
this.scripts = Arrays.asList(scripts);
// Ensure that the list is modifiable
this.scripts = new ArrayList<Resource>(Arrays.asList(scripts));
}
/**

View File

@ -33,6 +33,7 @@ public class ResourceDatabasePopulatorTests {
private static final Resource script1 = resource("script1");
private static final Resource script2 = resource("script2");
private static final Resource script3 = resource("script3");
@Test(expected = IllegalArgumentException.class)
@ -57,6 +58,15 @@ public class ResourceDatabasePopulatorTests {
assertEquals(2, databasePopulator.getScripts().size());
}
@Test
public void constructWithMulipleResourcesAndThenAddScript() {
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(script1, script2);
assertEquals(2, databasePopulator.getScripts().size());
databasePopulator.addScript(script3);
assertEquals(3, databasePopulator.getScripts().size());
}
@Test(expected = IllegalArgumentException.class)
public void addScriptsWithNullResource() {
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
@ -81,6 +91,18 @@ public class ResourceDatabasePopulatorTests {
databasePopulator.setScripts((Resource[]) null);
}
@Test
public void setScriptsAndThenAddScript() {
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
assertEquals(0, databasePopulator.getScripts().size());
databasePopulator.setScripts(script1, script2);
assertEquals(2, databasePopulator.getScripts().size());
databasePopulator.addScript(script3);
assertEquals(3, databasePopulator.getScripts().size());
}
private static Resource resource(String path) {
return new ClassPathResource(path);
}