6 changed files with 146 additions and 158 deletions
@ -1,129 +0,0 @@
@@ -1,129 +0,0 @@
|
||||
package org.springframework.util.xml; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.w3c.dom.Document; |
||||
import org.w3c.dom.Element; |
||||
import org.xml.sax.SAXException; |
||||
|
||||
import javax.xml.parsers.DocumentBuilder; |
||||
import javax.xml.parsers.DocumentBuilderFactory; |
||||
import javax.xml.parsers.ParserConfigurationException; |
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
import java.util.List; |
||||
|
||||
import static org.junit.jupiter.api.Assertions.*; |
||||
|
||||
public class DomUtilsTest { |
||||
|
||||
private Element elementWithText; |
||||
|
||||
private Element elementWithComment; |
||||
|
||||
private Element elementWithEntityReference; |
||||
|
||||
private Element elementWithEmptyReference; |
||||
|
||||
private static final String CLASS = "class"; |
||||
|
||||
private static final String PRINCIPAL = "principal"; |
||||
|
||||
private static final String HEAD_MASTER = "headMaster"; |
||||
|
||||
@BeforeEach |
||||
void setup() throws ParserConfigurationException, IOException, SAXException { |
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); |
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); |
||||
Document documentWithText = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-text.xml")); |
||||
Document documentWithComment = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-comment.xml")); |
||||
Document documentWithEntityReference = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-entity-reference.xml")); |
||||
Document documentWithEmptyValue = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-empty-reference.xml")); |
||||
elementWithText = documentWithText.getDocumentElement(); |
||||
elementWithComment = documentWithComment.getDocumentElement(); |
||||
elementWithEntityReference = documentWithEntityReference.getDocumentElement(); |
||||
elementWithEmptyReference = documentWithEmptyValue.getDocumentElement(); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementsByTagNameTestNodeInstanceOfElementAndDesiredElementsPresent() { |
||||
List<Element> childElements = DomUtils.getChildElementsByTagName(elementWithText, CLASS, PRINCIPAL); |
||||
assertAll( |
||||
() -> assertEquals(3, childElements.size()), |
||||
() -> assertEquals(CLASS, childElements.get(0).getNodeName()), |
||||
() -> assertEquals(CLASS, childElements.get(1).getNodeName()), |
||||
() -> assertEquals(PRINCIPAL, childElements.get(2).getNodeName()) |
||||
); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementsByTagNameTestNodeInstanceOfElementAndDesiredElementsNotPresent() { |
||||
List<Element> childElements = DomUtils.getChildElementsByTagName(elementWithText, HEAD_MASTER); |
||||
assertEquals(0, childElements.size()); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementByTagNameTestElementPresentInChildNodeList() { |
||||
Element childElement = DomUtils.getChildElementByTagName(elementWithText, PRINCIPAL); |
||||
assertNotNull(childElement); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementByTagNameTestElementPresentInChildNodeListAndChildElementsDoNotHaveSampleTag() { |
||||
Element childElement = DomUtils.getChildElementByTagName(elementWithText, HEAD_MASTER); |
||||
assertNull(childElement); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementValueByTagNameTestElementPresentInChildNodeList() { |
||||
assertEquals("Fox Test", DomUtils.getChildElementValueByTagName(elementWithText, "guard")); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementValueByTagNameTestElementWithoutChild() { |
||||
assertNull(DomUtils.getChildElementValueByTagName(elementWithText, "math tutor")); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementsTestWithValidChildNodes() { |
||||
List<Element> childElements = DomUtils.getChildElements(elementWithText); |
||||
assertAll( |
||||
() -> assertEquals(4, childElements.size()) |
||||
); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueTestWithCharacterDataNode() { |
||||
assertTrue(DomUtils.getTextValue(elementWithText).contains("TestSchool")); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithCommentInXml() { |
||||
assertTrue(DomUtils.getTextValue(elementWithComment).isBlank()); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithEntityReferenceInXml() { |
||||
assertTrue(DomUtils.getTextValue(elementWithEntityReference).contains("&")); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithEmptyReferenceInXml() { |
||||
assertTrue(DomUtils.getTextValue(elementWithEmptyReference).isBlank()); |
||||
} |
||||
|
||||
@Test |
||||
void nodeNameTestTrueCondition() { |
||||
assertTrue(DomUtils.nodeNameEquals(elementWithText, "school")); |
||||
} |
||||
|
||||
@Test |
||||
void nodeNameTestFalseCondition() { |
||||
assertFalse(DomUtils.nodeNameEquals(elementWithText, "college")); |
||||
} |
||||
|
||||
@Test |
||||
void createContentHandlerTest() { |
||||
assertNotNull(DomUtils.createContentHandler(elementWithText)); |
||||
} |
||||
} |
||||
@ -0,0 +1,146 @@
@@ -0,0 +1,146 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed 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 |
||||
* |
||||
* https://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.springframework.util.xml; |
||||
|
||||
import java.io.ByteArrayInputStream; |
||||
import java.util.List; |
||||
|
||||
import javax.xml.parsers.DocumentBuilder; |
||||
import javax.xml.parsers.DocumentBuilderFactory; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.w3c.dom.Document; |
||||
import org.w3c.dom.Element; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link DomUtils}. |
||||
* |
||||
* @author Stephane Nicoll |
||||
* @author Kunal Jani |
||||
*/ |
||||
class DomUtilsTests { |
||||
|
||||
private static final Element SCHOOL_ELEMENT = getDocumentElement(""" |
||||
<?xml version="1.0"?> |
||||
<school>TestSchool |
||||
<class teacher="Happy Teacher">Test Teacher One</class> |
||||
<class teacher="Sad Teacher">Test Teacher Two</class> |
||||
<principal>Test Principal</principal> |
||||
<guard>Fox Test</guard> |
||||
</school>"""); |
||||
|
||||
|
||||
@Test |
||||
void getChildElementsByTagNameWithSeveralMatchingTags() { |
||||
List<Element> childElements = DomUtils.getChildElementsByTagName(SCHOOL_ELEMENT, "class", "principal"); |
||||
assertThat(childElements).map(Element::getNodeName).containsExactly("class", "class", "principal"); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementsByTagNameWhenTagDoesNotExist() { |
||||
assertThat(DomUtils.getChildElementsByTagName(SCHOOL_ELEMENT, "teacher")).isEmpty(); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementByTagNameWithMatchingTag() { |
||||
Element principalElement = DomUtils.getChildElementByTagName(SCHOOL_ELEMENT, "principal"); |
||||
assertThat(principalElement).isNotNull(); |
||||
assertThat(principalElement.getTextContent()).isEqualTo("Test Principal"); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementByTagNameWithNonMatchingTag() { |
||||
assertThat(DomUtils.getChildElementByTagName(SCHOOL_ELEMENT, "teacher")).isNull(); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementValueByTagName() { |
||||
assertThat(DomUtils.getChildElementValueByTagName(SCHOOL_ELEMENT, "guard")).isEqualTo("Fox Test"); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElementValueByTagNameWithNonMatchingTag() { |
||||
assertThat(DomUtils.getChildElementValueByTagName(SCHOOL_ELEMENT, "math tutor")).isNull(); |
||||
} |
||||
|
||||
@Test |
||||
void getChildElements() { |
||||
List<Element> childElements = DomUtils.getChildElements(SCHOOL_ELEMENT); |
||||
assertThat(childElements).map(Element::getNodeName).containsExactly("class", "class", "principal", "guard"); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithCharacterDataNode() { |
||||
assertThat(DomUtils.getTextValue(SCHOOL_ELEMENT)).isEqualToIgnoringWhitespace("TestSchool"); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithCommentInXml() { |
||||
Element elementWithComment = getDocumentElement(""" |
||||
<?xml version="1.0"?> |
||||
<state> |
||||
<!-- This is a comment --> |
||||
<person>Alice</person> |
||||
</state>"""); |
||||
assertThat(DomUtils.getTextValue(elementWithComment)).isBlank(); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithEntityReference() { |
||||
Element elementWithEntityReference = getDocumentElement(""" |
||||
<?xml version="1.0"?> |
||||
<state> |
||||
& |
||||
<person>Alice</person> |
||||
</state>"""); |
||||
assertThat(DomUtils.getTextValue(elementWithEntityReference)).contains("&"); |
||||
} |
||||
|
||||
@Test |
||||
void getTextValueWithEmptyElement() { |
||||
Element emptyElement = getDocumentElement(""" |
||||
<?xml version="1.0"?> |
||||
<person></person>"""); |
||||
assertThat(DomUtils.getTextValue(emptyElement)).isBlank(); |
||||
} |
||||
|
||||
@Test |
||||
void nodeNameEqualsWhenTrue() { |
||||
assertThat(DomUtils.nodeNameEquals(SCHOOL_ELEMENT, "school")).isTrue(); |
||||
} |
||||
|
||||
@Test |
||||
void nodeNameEqualsWhenFalse() { |
||||
assertThat(DomUtils.nodeNameEquals(SCHOOL_ELEMENT, "college")).isFalse(); |
||||
} |
||||
|
||||
|
||||
private static Element getDocumentElement(String xmlContent) { |
||||
try { |
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); |
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); |
||||
Document document = documentBuilder.parse(new ByteArrayInputStream(xmlContent.getBytes())); |
||||
return document.getDocumentElement(); |
||||
} |
||||
catch (Exception ex) { |
||||
throw new IllegalStateException("Failed to parse xml content:%n%s".formatted(xmlContent), ex); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0"?> |
||||
<state> |
||||
<!-- This is a comment --> |
||||
<person>Alice</person> |
||||
</state> |
||||
@ -1 +0,0 @@
@@ -1 +0,0 @@
|
||||
<person></person> |
||||
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0"?> |
||||
<state> |
||||
& |
||||
<person>Alice</person> |
||||
</state> |
||||
@ -1,18 +0,0 @@
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0"?> |
||||
<school>TestSchool |
||||
<class teacher = "Happy Teacher">Test Teacher One |
||||
<unknownStudent>Abe Sample</unknownStudent> |
||||
<maleStudent>Jane Doe</maleStudent> |
||||
<femaleStudent>John Doe</femaleStudent> |
||||
</class> |
||||
<class teacher = "Sad Teacher">Test Teacher Two |
||||
<unknownStudent>Def Sample</unknownStudent> |
||||
<maleStudent>Jane Dane</maleStudent> |
||||
<femaleStudent>John Dane</femaleStudent> |
||||
</class> |
||||
<principal>Test Principal |
||||
<firstName>Head</firstName> |
||||
<lastName>Master</lastName> |
||||
</principal> |
||||
<guard>Fox Test</guard> |
||||
</school> |
||||
Loading…
Reference in new issue