From b4995f7e4f707da33434ecdafa6889a252ef7930 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sun, 13 Apr 2014 15:06:47 +0200 Subject: [PATCH] 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 --- .../init/ResourceDatabasePopulator.java | 3 ++- .../init/ResourceDatabasePopulatorTests.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java index 8bd50ebc8e3..e86327f9526 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java @@ -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(Arrays.asList(scripts)); } /** diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulatorTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulatorTests.java index 3e4d5a7efa7..20cf6ddb20d 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulatorTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulatorTests.java @@ -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); }