/* * Copyright (C) 2007, 2008 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 13. September 2007 by Joerg Schaible */ package com.thoughtworks.xstream.core.util; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.io.PushbackInputStream; import junit.framework.TestCase; /** * @author Jörg Schaible */ public class XmlHeaderAwareReaderTest extends TestCase { public void testKeepsAllBytesInStream() throws IOException { ByteArrayInputStream in = new ByteArrayInputStream("\n<!-- no header --><html/>".getBytes("us-ascii")); LineNumberReader reader = new LineNumberReader(new XmlHeaderAwareReader(in)); assertEquals("", reader.readLine()); assertEquals("<!-- no header --><html/>", reader.readLine()); } public void testDefaultValues() throws IOException { ByteArrayInputStream in = new ByteArrayInputStream("\n<?xml ?>".getBytes("us-ascii")); XmlHeaderAwareReader reader = new XmlHeaderAwareReader(in); assertEquals(1.0, reader.getVersion(), 0.001); assertEquals(new InputStreamReader(in, "utf-8").getEncoding(), reader.getEncoding()); } public void testEvaluatesVersion() throws IOException { ByteArrayInputStream in = new ByteArrayInputStream("\n<?xml foo=\"bar\" version='1.1' ?>".getBytes("us-ascii")); XmlHeaderAwareReader reader = new XmlHeaderAwareReader(in); assertEquals(1.1, reader.getVersion(), 0.001); } public void testEvaluatesEncoding() throws IOException { ByteArrayInputStream in = new ByteArrayInputStream("<?xml encoding=\"iso-8859-15\" ?>".getBytes("us-ascii")); XmlHeaderAwareReader reader = new XmlHeaderAwareReader(in); assertEquals(new InputStreamReader(in, "iso-8859-15").getEncoding(), reader.getEncoding()); } public void testValueEscaping() throws IOException { ByteArrayInputStream in = new ByteArrayInputStream("<?xml version='1.\\1' ?>".getBytes("us-ascii")); XmlHeaderAwareReader reader = new XmlHeaderAwareReader(in); assertEquals(1.1, reader.getVersion(), 0.001); } public void testCanHandleImproperSizedPushbackInputStream() throws IOException { InputStream in = new ByteArrayInputStream("<?xml version='1.\\1' ?>".getBytes("us-ascii")); XmlHeaderAwareReader reader = new XmlHeaderAwareReader(new PushbackInputStream(in, 1)); assertEquals(1.1, reader.getVersion(), 0.001); } }