From 3178f1a5a875d0c43b3bd78866bbacbcd400c40d Mon Sep 17 00:00:00 2001 From: "Luigi R. Viggiano" Date: Wed, 26 Jun 2013 00:57:16 +0200 Subject: [PATCH] fixed bug: imported properties should have higher priority than @Sources --- .../org/aeonbits/owner/PropertiesLoader.java | 2 +- .../org/aeonbits/owner/ImportConfigTest.java | 23 +++++++++++++++++++ ...tedPropertiesHaveHigherPriority.properties | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/org/aeonbits/owner/ImportConfigTest$ImportedPropertiesHaveHigherPriority.properties diff --git a/src/main/java/org/aeonbits/owner/PropertiesLoader.java b/src/main/java/org/aeonbits/owner/PropertiesLoader.java index 310c29b4..75ebbb77 100644 --- a/src/main/java/org/aeonbits/owner/PropertiesLoader.java +++ b/src/main/java/org/aeonbits/owner/PropertiesLoader.java @@ -40,10 +40,10 @@ abstract class PropertiesLoader { static Properties load(Class clazz, Map... imports) { try { Properties props = defaults(clazz); - merge(props, reverse(imports)); ConfigURLStreamHandler handler = new ConfigURLStreamHandler(clazz.getClassLoader(), expander); Properties loadedFromFile = doLoad(clazz, handler); merge(props, loadedFromFile); + merge(props, reverse(imports)); return props; } catch (IOException e) { throw new RuntimeException(e); diff --git a/src/test/java/org/aeonbits/owner/ImportConfigTest.java b/src/test/java/org/aeonbits/owner/ImportConfigTest.java index e4de94ce..1f5ad9a4 100644 --- a/src/test/java/org/aeonbits/owner/ImportConfigTest.java +++ b/src/test/java/org/aeonbits/owner/ImportConfigTest.java @@ -46,4 +46,27 @@ public void testImportOrder() { assertEquals("lime", cfg.bar()); // p1 prevails, so this is lime and not grapefruit assertEquals("blackberry", cfg.baz()); } + + interface ImportedPropertiesHaveHigherPriority extends Config { + Integer minAge(); + } + + @Test + public void testImportedPropertiesShouldOverrideSources() { + ImportedPropertiesHaveHigherPriority cfg = ConfigFactory.create(ImportedPropertiesHaveHigherPriority.class); + assertEquals(Integer.valueOf(18), cfg.minAge()); + + ImportedPropertiesHaveHigherPriority cfg2 = ConfigFactory.create(ImportedPropertiesHaveHigherPriority.class, + new Properties() {{ + setProperty("minAge", "21"); + }}, + + new Properties() {{ + setProperty("minAge", "22"); + }} + + ); + + assertEquals(Integer.valueOf(21), cfg2.minAge()); + } } diff --git a/src/test/resources/org/aeonbits/owner/ImportConfigTest$ImportedPropertiesHaveHigherPriority.properties b/src/test/resources/org/aeonbits/owner/ImportConfigTest$ImportedPropertiesHaveHigherPriority.properties new file mode 100644 index 00000000..41df04a0 --- /dev/null +++ b/src/test/resources/org/aeonbits/owner/ImportConfigTest$ImportedPropertiesHaveHigherPriority.properties @@ -0,0 +1 @@ +minAge=18 \ No newline at end of file