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 = """ some value 99 true content """; XmlElement rootElement; @BeforeEach void setup() { rootElement = new XmlParser().parse(xml); assertNotNull(rootElement); assertEquals("root", rootElement.getTagName()); } @SuppressWarnings("OptionalGetWithoutIsPresent") @Test void testIterator() { Iterator iteratorElement = rootElement.iterator(); Iterator iteratorTagName = Arrays.asList("node_str", "node_int", "node_bool", "empty").iterator(); Iterator 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()); } }