FOP-2892; fix + test

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1872384 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fop-core/src/main/java/org/apache/fop/configuration/DefaultConfiguration.java b/fop-core/src/main/java/org/apache/fop/configuration/DefaultConfiguration.java
index 22f28a1..b50fd8b 100644
--- a/fop-core/src/main/java/org/apache/fop/configuration/DefaultConfiguration.java
+++ b/fop-core/src/main/java/org/apache/fop/configuration/DefaultConfiguration.java
@@ -108,7 +108,7 @@
 
     @Override
     public Configuration getChild(String key) {
-        NodeList nl = element.getElementsByTagName(key);
+        NodeList nl = element.getChildNodes();
         for (int i = 0; i < nl.getLength(); ++i) {
             Node n = nl.item(i);
             if (n.getNodeName().equals(key)) {
@@ -133,13 +133,15 @@
 
     @Override
     public Configuration[] getChildren(String key) {
-        NodeList nl = element.getElementsByTagName(key);
-        Configuration[] result = new Configuration[nl.getLength()];
+        ArrayList<Configuration> result = new ArrayList<>(1);
+        NodeList nl = element.getChildNodes();
         for (int i = 0; i < nl.getLength(); ++i) {
             Node n = nl.item(i);
-            result[i] = new DefaultConfiguration((Element) n);
+            if (n.getNodeName().equals(key)) {
+                result.add(new DefaultConfiguration((Element) n));
+            }
         }
-        return result;
+        return result.toArray(new Configuration[0]);
     }
 
     @Override
diff --git a/fop-core/src/test/java/org/apache/fop/configuration/DefaultConfigurationTest.java b/fop-core/src/test/java/org/apache/fop/configuration/DefaultConfigurationTest.java
new file mode 100644
index 0000000..f25df7e
--- /dev/null
+++ b/fop-core/src/test/java/org/apache/fop/configuration/DefaultConfigurationTest.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements.  See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You under the Apache License, Version 2.0

+ * (the "License"); you may not use this file except in compliance with

+ * the License.  You may obtain a copy of the License at

+ *

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+package org.apache.fop.configuration;

+

+import org.junit.Before;

+import org.junit.Test;

+

+import static org.junit.Assert.assertEquals;

+

+public class DefaultConfigurationTest {

+

+    DefaultConfiguration configuration;

+

+    @Before

+    public void setup() throws Exception {

+        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();

+        configuration = builder.build(getClass().getResourceAsStream("sample_config.xml"));

+    }

+

+    @Test

+    public void testGetChild() {

+        Configuration fontsConfig = configuration.getChild("fonts");

+        assertEquals("fonts element should be direct child", "fop/fonts",  fontsConfig.getLocation());

+    }

+

+    @Test

+    public void testGetChildren() {

+        Configuration[] fontsConfig = configuration.getChildren("fonts");

+        assertEquals("only direct children should match", 1, fontsConfig.length);

+        assertEquals("fonts element should be direct child", "fop/fonts", fontsConfig[0].getLocation());

+    }

+}

diff --git a/fop-core/src/test/resources/org/apache/fop/configuration/sample_config.xml b/fop-core/src/test/resources/org/apache/fop/configuration/sample_config.xml
new file mode 100644
index 0000000..d3bc3e3
--- /dev/null
+++ b/fop-core/src/test/resources/org/apache/fop/configuration/sample_config.xml
@@ -0,0 +1,20 @@
+<fop version="1.0">

+

+  <renderers>

+    <renderer mime="application/pdf">

+      <fonts> 

+        <auto-detect/>

+      </fonts>

+    </renderer>

+  </renderers>

+

+  <!-- A substitution can map a font family to another. -->

+  <fonts>

+    <substitutions>  

+        <substitution>

+            <from font-family='courierNew' font-style='normal' font-weight='400'/>   <to font-family='Courier New'/> 

+         </substitution> 

+     </substitutions>

+  </fonts>

+

+</fop>
\ No newline at end of file