Skip to content

Commit 57bbf0c

Browse files
kunaljani1100snicoll
authored andcommitted
Add test coverage for DomUtils
See gh-33768
1 parent 27912b1 commit 57bbf0c

File tree

5 files changed

+158
-0
lines changed

5 files changed

+158
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package org.springframework.util.xml;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import org.w3c.dom.Document;
6+
import org.w3c.dom.Element;
7+
import org.xml.sax.SAXException;
8+
9+
import javax.xml.parsers.DocumentBuilder;
10+
import javax.xml.parsers.DocumentBuilderFactory;
11+
import javax.xml.parsers.ParserConfigurationException;
12+
import java.io.File;
13+
import java.io.IOException;
14+
import java.util.List;
15+
16+
import static org.junit.jupiter.api.Assertions.*;
17+
18+
public class DomUtilsTest {
19+
20+
private Element elementWithText;
21+
22+
private Element elementWithComment;
23+
24+
private Element elementWithEntityReference;
25+
26+
private Element elementWithEmptyReference;
27+
28+
private static final String CLASS = "class";
29+
30+
private static final String PRINCIPAL = "principal";
31+
32+
private static final String HEAD_MASTER = "headMaster";
33+
34+
@BeforeEach
35+
void setup() throws ParserConfigurationException, IOException, SAXException {
36+
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
37+
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
38+
Document documentWithText = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-text.xml"));
39+
Document documentWithComment = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-comment.xml"));
40+
Document documentWithEntityReference = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-entity-reference.xml"));
41+
Document documentWithEmptyValue = documentBuilder.parse(new File("src/test/resources/scanned-resources/resource#element-with-empty-reference.xml"));
42+
elementWithText = documentWithText.getDocumentElement();
43+
elementWithComment = documentWithComment.getDocumentElement();
44+
elementWithEntityReference = documentWithEntityReference.getDocumentElement();
45+
elementWithEmptyReference = documentWithEmptyValue.getDocumentElement();
46+
}
47+
48+
@Test
49+
void getChildElementsByTagNameTestNodeInstanceOfElementAndDesiredElementsPresent() {
50+
List<Element> childElements = DomUtils.getChildElementsByTagName(elementWithText, CLASS, PRINCIPAL);
51+
assertAll(
52+
() -> assertEquals(3, childElements.size()),
53+
() -> assertEquals(CLASS, childElements.get(0).getNodeName()),
54+
() -> assertEquals(CLASS, childElements.get(1).getNodeName()),
55+
() -> assertEquals(PRINCIPAL, childElements.get(2).getNodeName())
56+
);
57+
}
58+
59+
@Test
60+
void getChildElementsByTagNameTestNodeInstanceOfElementAndDesiredElementsNotPresent() {
61+
List<Element> childElements = DomUtils.getChildElementsByTagName(elementWithText, HEAD_MASTER);
62+
assertEquals(0, childElements.size());
63+
}
64+
65+
@Test
66+
void getChildElementByTagNameTestElementPresentInChildNodeList() {
67+
Element childElement = DomUtils.getChildElementByTagName(elementWithText, PRINCIPAL);
68+
assertNotNull(childElement);
69+
}
70+
71+
@Test
72+
void getChildElementByTagNameTestElementPresentInChildNodeListAndChildElementsDoNotHaveSampleTag() {
73+
Element childElement = DomUtils.getChildElementByTagName(elementWithText, HEAD_MASTER);
74+
assertNull(childElement);
75+
}
76+
77+
@Test
78+
void getChildElementValueByTagNameTestElementPresentInChildNodeList() {
79+
assertEquals("Fox Test", DomUtils.getChildElementValueByTagName(elementWithText, "guard"));
80+
}
81+
82+
@Test
83+
void getChildElementValueByTagNameTestElementWithoutChild() {
84+
assertNull(DomUtils.getChildElementValueByTagName(elementWithText, "math tutor"));
85+
}
86+
87+
@Test
88+
void getChildElementsTestWithValidChildNodes() {
89+
List<Element> childElements = DomUtils.getChildElements(elementWithText);
90+
assertAll(
91+
() -> assertEquals(4, childElements.size())
92+
);
93+
}
94+
95+
@Test
96+
void getTextValueTestWithCharacterDataNode() {
97+
assertTrue(DomUtils.getTextValue(elementWithText).contains("TestSchool"));
98+
}
99+
100+
@Test
101+
void getTextValueWithCommentInXml() {
102+
assertTrue(DomUtils.getTextValue(elementWithComment).isBlank());
103+
}
104+
105+
@Test
106+
void getTextValueWithEntityReferenceInXml() {
107+
assertTrue(DomUtils.getTextValue(elementWithEntityReference).contains("&"));
108+
}
109+
110+
@Test
111+
void getTextValueWithEmptyReferenceInXml() {
112+
assertTrue(DomUtils.getTextValue(elementWithEmptyReference).isBlank());
113+
}
114+
115+
@Test
116+
void nodeNameTestTrueCondition() {
117+
assertTrue(DomUtils.nodeNameEquals(elementWithText, "school"));
118+
}
119+
120+
@Test
121+
void nodeNameTestFalseCondition() {
122+
assertFalse(DomUtils.nodeNameEquals(elementWithText, "college"));
123+
}
124+
125+
@Test
126+
void createContentHandlerTest() {
127+
assertNotNull(DomUtils.createContentHandler(elementWithText));
128+
}
129+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0"?>
2+
<state>
3+
<!-- This is a comment -->
4+
<person>Alice</person>
5+
</state>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<person></person>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0"?>
2+
<state>
3+
&amp;
4+
<person>Alice</person>
5+
</state>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0"?>
2+
<school>TestSchool
3+
<class teacher = "Happy Teacher">Test Teacher One
4+
<unknownStudent>Abe Sample</unknownStudent>
5+
<maleStudent>Jane Doe</maleStudent>
6+
<femaleStudent>John Doe</femaleStudent>
7+
</class>
8+
<class teacher = "Sad Teacher">Test Teacher Two
9+
<unknownStudent>Def Sample</unknownStudent>
10+
<maleStudent>Jane Dane</maleStudent>
11+
<femaleStudent>John Dane</femaleStudent>
12+
</class>
13+
<principal>Test Principal
14+
<firstName>Head</firstName>
15+
<lastName>Master</lastName>
16+
</principal>
17+
<guard>Fox Test</guard>
18+
</school>

0 commit comments

Comments
 (0)