/* * Copyright (C) 2004, 2005 Joe Walnes. * Copyright (C) 2006, 2007 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 07. March 2004 by Joe Walnes */ package com.thoughtworks.xstream.io.xml; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Map; public class DomReaderTest extends AbstractXMLReaderTest { // factory method protected HierarchicalStreamReader createReader(String xml) throws Exception { return new DomReader(buildDocument(xml)); } private Document buildDocument(String xml) throws Exception { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); ByteArrayInputStream inputStream = new ByteArrayInputStream(xml.getBytes()); Document document = documentBuilder.parse(inputStream); return document; } public void testCanReadFromElementOfLargerDocument() throws Exception { Document document = buildDocument("" + "<big>" + " <small>" + " <tiny/>" + " </small>" + " <small-two>" + " </small-two>" + "</big>"); Element small = (Element) document.getDocumentElement().getElementsByTagName("small").item(0); HierarchicalStreamReader xmlReader = new DomReader(small); assertEquals("small", xmlReader.getNodeName()); xmlReader.moveDown(); assertEquals("tiny", xmlReader.getNodeName()); } public void testExposesAttributesKeysAndValuesByIndex() throws Exception { // overrides test in superclass, because DOM does not retain order of actualAttributes. HierarchicalStreamReader xmlReader = createReader("<node hello='world' a='b' c='d'><empty/></node>"); assertEquals(3, xmlReader.getAttributeCount()); Map expectedAttributes = new HashMap(); expectedAttributes.put("hello", "world"); expectedAttributes.put("a", "b"); expectedAttributes.put("c", "d"); Map actualAttributes = new HashMap(); for (int i = 0; i < xmlReader.getAttributeCount(); i++) { String name = xmlReader.getAttributeName(i); String value = xmlReader.getAttribute(i); actualAttributes.put(name, value); } assertEquals(expectedAttributes, actualAttributes); xmlReader.moveDown(); assertEquals("empty", xmlReader.getNodeName()); assertEquals(0, xmlReader.getAttributeCount()); } }