/*
* 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 08. May 2004 by Joe Walnes
*/
package com.thoughtworks.acceptance;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.core.JVM;
import com.thoughtworks.xstream.io.StreamException;
public class ErrorTest extends AbstractAcceptanceTest {
public static class Thing {
String one;
int two;
}
protected void setUp() throws Exception {
super.setUp();
xstream.alias("thing", Thing.class);
}
public void testUnmarshallerThrowsExceptionWithDebuggingInfo() {
try {
xstream.fromXML("<thing>\n" +
" <one>string 1</one>\n" +
" <two>another string</two>\n" +
"</thing>");
fail("Error expected");
} catch (ConversionException e) {
assertEquals("java.lang.NumberFormatException",
e.get("cause-exception"));
if (JVM.is14()) {
assertEquals("For input string: \"another string\"",
e.get("cause-message"));
} else {
assertEquals("another string",
e.get("cause-message"));
}
assertEquals(Thing.class.getName(),
e.get("class"));
assertEquals("/thing/two",
e.get("path"));
assertEquals("3",
e.get("line number"));
assertEquals("java.lang.Integer",
e.get("required-type"));
}
}
public void testInvalidXml() {
try {
xstream.fromXML("<thing>\n" +
" <one>string 1</one>\n" +
" <two><<\n" +
"</thing>");
fail("Error expected");
} catch (ConversionException e) {
assertEquals(StreamException.class.getName(),
e.get("cause-exception"));
assertContains("unexpected character in markup",
e.get("cause-message"));
assertEquals("/thing/two",
e.get("path"));
assertEquals("3",
e.get("line number"));
}
}
private void assertContains(String expected, String actual) {
assertTrue("Substring not found. Expected <" + expected + "> but got <" + actual + ">",
actual.indexOf(expected) > -1);
}
}