/*
* 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 12. January 2006 by Joerg Schaible
*/
package com.thoughtworks.acceptance;
import com.thoughtworks.xstream.testutil.TimeZoneChanger;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
import java.nio.charset.Charset;
import java.security.Principal;
import java.util.Calendar;
import java.util.Currency;
import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Pattern;
public class Extended14TypesTest 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 testLocaleWithVariant() {
assertBothWays(new Locale("zh", "CN", "cc"), "<locale>zh_CN_cc</locale>");
assertBothWays(new Locale("zh", "", "cc"), "<locale>zh__cc</locale>");
}
public void testCurrency() {
assertBothWays(Currency.getInstance("USD"), "<currency>USD</currency>");
}
public void testGregorianCalendar() {
Calendar in = Calendar.getInstance();
in.setTimeZone(TimeZone.getTimeZone("AST"));
in.setTimeInMillis(44444);
String expected = "" +
"<gregorian-calendar>\n" +
" <time>44444</time>\n" +
" <timezone>AST</timezone>\n" +
"</gregorian-calendar>";
Calendar out = (Calendar) assertBothWays(in, expected);
assertEquals(in.getTime(), out.getTime());
assertEquals(TimeZone.getTimeZone("AST"), out.getTimeZone());
}
public void testGregorianCalendarCompat() { // compatibility to 1.1.2 and below
Calendar in = Calendar.getInstance();
in.setTimeInMillis(44444);
String oldXML = "" +
"<gregorian-calendar>\n" +
" <time>44444</time>\n" +
"</gregorian-calendar>";
Calendar out = (Calendar) xstream.fromXML(oldXML);
assertEquals(in.getTime(), out.getTime());
assertEquals(TimeZone.getTimeZone("EST"), out.getTimeZone());
}
public void testRegexPattern() {
// setup
Pattern pattern = Pattern.compile("^[ae]*$", Pattern.MULTILINE | Pattern.UNIX_LINES);
String expectedXml = "" +
"<java.util.regex.Pattern>\n" +
" <pattern>^[ae]*$</pattern>\n" +
" <flags>9</flags>\n" +
"</java.util.regex.Pattern>";
// execute
String actualXml = xstream.toXML(pattern);
Pattern result = (Pattern) xstream.fromXML(actualXml);
// verify
assertEquals(expectedXml, actualXml);
assertEquals(pattern.pattern(), result.pattern());
assertEquals(pattern.flags(), result.flags());
assertFalse("regex should not hava matched", result.matcher("oooo").matches());
assertTrue("regex should have matched", result.matcher("aeae").matches());
}
public void testSubject() {
Subject subject = new Subject();
Principal principal = new X500Principal("c=uk, o=Thoughtworks, ou=XStream");
subject.getPrincipals().add(principal);
String expectedXml = "" +
"<auth-subject>\n" +
" <principals>\n" +
" <javax.security.auth.x500.X500Principal serialization=\"custom\">\n" +
" <javax.security.auth.x500.X500Principal>\n" +
" <byte-array>MDYxEDAOBgNVBAsTB1hTdHJlYW0xFTATBgNVBAoTDFRob3VnaHR3b3JrczELMAkGA1UEBhMCdWs=\n</byte-array>\n" +
" </javax.security.auth.x500.X500Principal>\n" +
" </javax.security.auth.x500.X500Principal>\n" +
" </principals>\n" +
" <readOnly>false</readOnly>\n" +
"</auth-subject>";
assertBothWays(subject, expectedXml);
}
public void testCharset() {
Charset charset = Charset.forName("utf-8");
String expectedXml = "<charset>UTF-8</charset>";
assertBothWays(charset, expectedXml);
}
}