83 lines
2.9 KiB
Java
83 lines
2.9 KiB
Java
package ru.di9.xml;
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class XmlElementTest {
|
|
// language=XML
|
|
final String xml = """
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<root>
|
|
<!-- Комментарий -->
|
|
<node_str attr="VA-123">some value</node_str>
|
|
<node_int attr="24">99</node_int>
|
|
<node_bool attr="false">true</node_bool>
|
|
<empty/>
|
|
<node_str_commented>
|
|
<!-- comment -->
|
|
content
|
|
</node_str_commented>
|
|
</root>
|
|
""";
|
|
|
|
XmlElement rootElement;
|
|
|
|
@BeforeEach
|
|
void setup() {
|
|
rootElement = new XmlParser().parse(xml);
|
|
assertNotNull(rootElement);
|
|
assertEquals("root", rootElement.getTagName());
|
|
}
|
|
|
|
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
|
@Test
|
|
void testIterator() {
|
|
Iterator<XmlElement> iteratorElement = rootElement.iterator();
|
|
Iterator<String> iteratorTagName = Arrays.asList("node_str", "node_int", "node_bool", "empty").iterator();
|
|
Iterator<Object> iteratorAttribute = Arrays.asList(new Object[]{"VA-123", 24, false, null}).iterator();
|
|
|
|
while (iteratorElement.hasNext() && iteratorTagName.hasNext() && iteratorAttribute.hasNext()) {
|
|
var element = iteratorElement.next();
|
|
var tagName = iteratorTagName.next();
|
|
var attr = iteratorAttribute.next();
|
|
|
|
assertEquals(tagName, element.getTagName());
|
|
switch (element.getTagName()) {
|
|
case "node_str" -> {
|
|
assertTrue(element.getAttribute("attr").isPresent());
|
|
assertEquals(attr, element.getAttribute("attr").get());
|
|
}
|
|
case "node_int" -> {
|
|
assertTrue(element.getAttribute("attr").isPresent());
|
|
assertEquals(attr, element.getAttributeAsInt("attr").getAsInt());
|
|
}
|
|
case "node_bool" -> {
|
|
assertTrue(element.getAttribute("attr").isPresent());
|
|
assertEquals(attr, element.getAttributeAsBool("attr").get());
|
|
}
|
|
case "empty" -> {
|
|
assertTrue(StringUtils.isEmpty(element.getValue()));
|
|
assertFalse(element.hasAttribute("attr"));
|
|
assertTrue(element.getAttribute("attr").isEmpty());
|
|
}
|
|
default -> fail("Unknown tag '%s'".formatted(element.getTagName()));
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void testCommentedContent() {
|
|
var optElement = rootElement.getFirstElementByTagName("node_str_commented");
|
|
assertNotNull(optElement);
|
|
assertTrue(optElement.isPresent());
|
|
|
|
var element = optElement.get();
|
|
assertEquals("content", element.getValue().trim());
|
|
}
|
|
}
|