/*
* Copyright (C) 2003, 2004, 2005 Joe Walnes.
* Copyright (C) 2006, 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 01. October 2003 by Joe Walnes
*/
package com.thoughtworks.acceptance;
import com.thoughtworks.xstream.core.JVM;
import com.thoughtworks.xstream.testutil.TimeZoneChanger;
//import org.jdom.Element;
//import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Locale;
public class ExtendedTypesTest extends AbstractAcceptanceTest {
protected void setUp() throws Exception {
super.setUp();
// Ensure that this test always run as if it were in the EST timezone.
// This prevents failures when running the tests in different zones.
// Note: 'EST' has no relevance - it was just a randomly chosen zone.
TimeZoneChanger.change("EST");
}
protected void tearDown() throws Exception {
TimeZoneChanger.reset();
super.tearDown();
}
public void testAwtColor() {
boolean isHeadless = Boolean.valueOf(System.getProperty("java.awt.headless", "false")).booleanValue();
if (!isHeadless || JVM.is15()) {
// Color color = new Color(0, 10, 20, 30);
String expected = "" +
"<awt-color>\n" +
" <red>0</red>\n" +
" <green>10</green>\n" +
" <blue>20</blue>\n" +
" <alpha>30</alpha>\n" +
"</awt-color>";
// assertBothWays(color, expected);
}
}
public void testSqlTimestamp() {
assertBothWays(new Timestamp(1234),
"<sql-timestamp>1969-12-31 19:00:01.234</sql-timestamp>");
}
public void testSqlTime() {
assertBothWays(new Time(14, 7, 33),
"<sql-time>14:07:33</sql-time>");
}
public void testSqlDate() {
assertBothWays(new Date(78, 7, 25),
"<sql-date>1978-08-25</sql-date>");
}
public void testFile() throws IOException {
// using temp file to avoid os specific or directory layout issues
File absFile = File.createTempFile("bleh", ".tmp");
absFile.deleteOnExit();
assertTrue(absFile.isAbsolute());
String expectedXml = "<file>" + absFile.getPath() + "</file>";
assertFilesBothWay(absFile, expectedXml);
// test a relative file now
File relFile = new File("bloh.tmp");
relFile.deleteOnExit();
assertFalse(relFile.isAbsolute());
expectedXml = "<file>" + relFile.getPath() + "</file>";
assertFilesBothWay(relFile, expectedXml);
}
private void assertFilesBothWay(File f, String expectedXml) {
String resultXml = xstream.toXML(f);
assertEquals(expectedXml, resultXml);
Object resultObj = xstream.fromXML(resultXml);
assertEquals(File.class, resultObj.getClass());
assertEquals(f, resultObj);
// now comes the part that fails without a specific converter
// in the case of a relative file, this will work, because we run the comparison test from the same working directory
assertEquals(f.getAbsolutePath(), ((File)resultObj).getAbsolutePath());
assertEquals(f.isAbsolute(), ((File)resultObj).isAbsolute()); // needed because File's equals method only compares the path getAttribute, at least in the win32 implementation
}
public void testLocale() {
assertBothWays(new Locale("zh", "", ""), "<locale>zh</locale>");
assertBothWays(new Locale("zh", "CN", ""), "<locale>zh_CN</locale>");
}
public void testCanHandleJDomElement() {
// Element element = new Element("JUnit");
String expected = "" +
"<org.jdom.Element serialization=\"custom\">\n" +
" <org.jdom.Element>\n" +
" <default>\n" +
" <attributes>\n" +
" <size>0</size>\n" +
" <parent reference=\"../../../..\"/>\n" +
" </attributes>\n" +
" <content>\n" +
" <size>0</size>\n" +
" <parent class=\"org.jdom.Element\" reference=\"../../../..\"/>\n" +
" </content>\n" +
" <name>JUnit</name>\n" +
" </default>\n" +
" <string></string>\n" +
" <string></string>\n" +
" <byte>0</byte>\n" +
" </org.jdom.Element>\n" +
"</org.jdom.Element>";
// assertBothWays(element, expected);
}
}