diff --git a/src/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParser.java b/src/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParser.java index 6102d92c..ad85c82e 100644 --- a/src/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParser.java +++ b/src/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParser.java @@ -138,6 +138,7 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { URL schemaURL = validate?getClass().getResource("ivy.xsd"):null; XMLHelper.parse(xmlURL, schemaURL, this); checkConfigurations(); + replaceConfigurationWildcards(); if (!_artifactsDeclared) { String[] confs = _md.getConfigurationsNames(); for (int i = 0; i < confs.length; i++) { @@ -474,11 +475,9 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { private void checkConfigurations() { if (_md.getConfigurations().length == 0) { _md.addConfiguration(new Configuration("default")); - } else { - replaceConfigurationWildcards(); } } - + private void replaceConfigurationWildcards() { Configuration[] configs = _md.getConfigurations(); for (int i = 0; i < configs.length; i++) { diff --git a/test/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParserTest.java b/test/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParserTest.java index 8dfe2eed..beb4d962 100644 --- a/test/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParserTest.java +++ b/test/java/fr/jayasoft/ivy/xml/XmlModuleDescriptorParserTest.java @@ -533,4 +533,32 @@ public class XmlModuleDescriptorParserTest extends AbstractModuleDescriptorParse assertEquals(Arrays.asList(new String[] {"*"}), Arrays.asList(dd.getDependencyConfigurations("conf1"))); } + public void testExtendOtherConfigs() throws Exception { + // import configurations and default mapping + ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(_ivy, getClass().getResource("test-configextendsothers1.xml"), true); + assertNotNull(md); + + // has an 'all-public' configuration + Configuration allPublic = md.getConfiguration("all-public"); + assertNotNull(allPublic); + + // 'all-public' extends all other public configurations + String[] allPublicExt = allPublic.getExtends(); + assertEquals(Arrays.asList(new String[] {"default", "test"}), Arrays.asList(allPublicExt)); + } + + public void testImportConfigurationsWithExtendOtherConfigs() throws Exception { + // import configurations and default mapping + ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(_ivy, getClass().getResource("test-configextendsothers2.xml"), true); + assertNotNull(md); + + // has an 'all-public' configuration + Configuration allPublic = md.getConfiguration("all-public"); + assertNotNull(allPublic); + + // 'all-public' extends all other public configurations + String[] allPublicExt = allPublic.getExtends(); + assertEquals(Arrays.asList(new String[] {"default", "test", "extra"}), Arrays.asList(allPublicExt)); + } + } diff --git a/test/java/fr/jayasoft/ivy/xml/imported-configurations-with-wildcard.xml b/test/java/fr/jayasoft/ivy/xml/imported-configurations-with-wildcard.xml new file mode 100644 index 00000000..cc53f151 --- /dev/null +++ b/test/java/fr/jayasoft/ivy/xml/imported-configurations-with-wildcard.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/java/fr/jayasoft/ivy/xml/test-configextendsothers1.xml b/test/java/fr/jayasoft/ivy/xml/test-configextendsothers1.xml new file mode 100644 index 00000000..8aabaf57 --- /dev/null +++ b/test/java/fr/jayasoft/ivy/xml/test-configextendsothers1.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/test/java/fr/jayasoft/ivy/xml/test-configextendsothers2.xml b/test/java/fr/jayasoft/ivy/xml/test-configextendsothers2.xml new file mode 100644 index 00000000..69d1bc2c --- /dev/null +++ b/test/java/fr/jayasoft/ivy/xml/test-configextendsothers2.xml @@ -0,0 +1,14 @@ + + + + + + + + + +