Add combo tests for CalendarSwap class.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/0d70804d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/0d70804d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/0d70804d

Branch: refs/heads/master
Commit: 0d70804d8d1fe5921cc0df1ada433f014fa373cf
Parents: c6b0a7b
Author: JamesBognar <[email protected]>
Authored: Mon Feb 20 12:46:45 2017 -0500
Committer: JamesBognar <[email protected]>
Committed: Mon Feb 20 12:46:45 2017 -0500

----------------------------------------------------------------------
 .../test/java/org/apache/juneau/ComboTest.java  | 626 +++++++++++++++++++
 .../test/java/org/apache/juneau/TestUtils.java  |   9 +-
 .../java/org/apache/juneau/dto/ComboTest.java   | 557 -----------------
 .../apache/juneau/dto/html5/Html5ComboTest.java |   2 +-
 .../dto/html5/Html5TemplateComboTest.java       |   2 +-
 .../transforms/CalendarSwapComboTest.java       | 577 +++++++++++++++++
 .../juneau/transforms/CalendarSwapTest.java     | 420 -------------
 7 files changed, 1211 insertions(+), 982 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
new file mode 100644
index 0000000..cb4b935
--- /dev/null
+++ b/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
@@ -0,0 +1,626 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.juneau.html.HtmlParser;
+import org.apache.juneau.html.HtmlSerializer;
+import org.apache.juneau.jena.RdfParser;
+import org.apache.juneau.jena.RdfSerializer;
+import org.apache.juneau.json.JsonParser;
+import org.apache.juneau.json.JsonSerializer;
+import org.apache.juneau.msgpack.MsgPackParser;
+import org.apache.juneau.msgpack.MsgPackSerializer;
+import org.apache.juneau.parser.InputStreamParser;
+import org.apache.juneau.parser.Parser;
+import org.apache.juneau.parser.ReaderParser;
+import org.apache.juneau.serializer.OutputStreamSerializer;
+import org.apache.juneau.serializer.Serializer;
+import org.apache.juneau.serializer.WriterSerializer;
+import org.apache.juneau.urlencoding.UonParser;
+import org.apache.juneau.urlencoding.UonSerializer;
+import org.apache.juneau.urlencoding.UrlEncodingParser;
+import org.apache.juneau.urlencoding.UrlEncodingSerializer;
+import org.apache.juneau.xml.XmlParser;
+import org.apache.juneau.xml.XmlSerializer;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+/**
+ * Superclass for tests that verify results against all supported content 
types. 
+ */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public abstract class ComboTest {
+
+       /* Parameter template */
+//     {
+//             "MyLabel",
+//             myInput,
+//             /* Json */              "xxx",
+//             /* JsonT */             "xxx",
+//             /* JsonR */             "xxx",
+//             /* Xml */               "xxx",
+//             /* XmlT */              "xxx",
+//             /* XmlR */              "xxx",
+//             /* XmlNs */             "xxx",
+//             /* Html */              "xxx",
+//             /* HtmlT */             "xxx",
+//             /* HtmlR */             "xxx",
+//             /* Uon */               "xxx",
+//             /* UonT */              "xxx",
+//             /* UonR */              "xxx",
+//             /* UrlEnc */    "xxx",
+//             /* UrlEncT */   "xxx",
+//             /* UrlEncR */   "xxx",
+//             /* MsgPack */   "xxx",
+//             /* MsgPackT */  "xxx",
+//             /* RdfXml */    "xxx",
+//             /* RdfXmlT */   "xxx",
+//             /* RdfXmlR */   "xxx",
+//     },
+       
+       private final String 
+               label, 
+               oJson, oJsonT, oJsonR,
+               oXml, oXmlT, oXmlR, oXmlNs,
+               oHtml, oHtmlT, oHtmlR,
+               oUon, oUonT, oUonR,
+               oUrlEncoding, oUrlEncodingT, oUrlEncodingR,
+               oMsgPack, oMsgPackT,
+               oRdfXml, oRdfXmlT, oRdfXmlR;
+       private final Object in;
+       
+       // These are the names of all the tests.
+       // You can comment out the names here to skip them.
+       private static final String[] runTests = {
+               "serializeJson",
+               "parseJson",
+               "serializeJsonT",
+               "parseJsonT",
+               "serializeJsonR",
+               "parseJsonR",
+               "serializeXml",
+               "parseXml",
+               "serializeXmlT",
+               "parseXmlT",
+               "serializeXmlR",
+               "parseXmlR",
+               "serializeXmlNs",
+               "parseXmlNs",
+               "serializeHtml",
+               "parseHtml",
+               "serializeHtmlT",
+               "parseHtmlT",
+               "serializeHtmlR",
+               "parseHtmlR",
+               "serializeUon",
+               "parseUon",
+               "serializeUonT",
+               "parseUonT",
+               "serializeUonR",
+               "parseUonR",
+               "serializeUrlEncoding",
+               "parseUrlEncoding",
+               "serializeUrlEncodingT",
+               "parseUrlEncodingT",
+               "serializeUrlEncodingR",
+               "parseUrlEncodingR",
+               "serializeMsgPack",
+               "parseMsgPack",
+               "parseMsgPackJsonEquivalency",
+               "serializeMsgPackT",
+               "parseMsgPackT",
+               "parseMsgPackTJsonEquivalency",
+               "serializeRdfXml",
+               "parseRdfXml",
+               "serializeRdfXmlT",
+               "parseRdfXmlT",
+               "serializeRdfXmlR",
+               "parseRdfXmlR",
+       };
+
+       private static final Set<String> runTestsSet = new 
HashSet<String>(Arrays.asList(runTests));
+       
+       private final boolean SKIP_RDF_TESTS = 
Boolean.getBoolean("skipRdfTests");
+
+       private Map<Serializer,Serializer> serializerMap = new 
IdentityHashMap<Serializer,Serializer>();
+       private Map<Parser,Parser> parserMap = new 
IdentityHashMap<Parser,Parser>();
+       
+       public ComboTest(
+               String label, 
+               Object in, 
+               String oJson, String oJsonT, String oJsonR,
+               String oXml, String oXmlT, String oXmlR, String oXmlNs,
+               String oHtml, String oHtmlT, String oHtmlR,
+               String oUon, String oUonT, String oUonR,
+               String oUrlEncoding, String oUrlEncodingT, String oUrlEncodingR,
+               String oMsgPack, String oMsgPackT,
+               String oRdfXml, String oRdfXmlT, String oRdfXmlR
+       ) {
+               this.label = label;
+               this.in = in;
+               this.oJson = oJson; this.oJsonT = oJsonT; this.oJsonR = oJsonR;
+               this.oXml = oXml; this.oXmlT = oXmlT; this.oXmlR = oXmlR; 
this.oXmlNs = oXmlNs;
+               this.oHtml = oHtml; this.oHtmlT = oHtmlT; this.oHtmlR = oHtmlR;
+               this.oUon = oUon; this.oUonT = oUonT; this.oUonR = oUonR;
+               this.oUrlEncoding = oUrlEncoding; this.oUrlEncodingT = 
oUrlEncodingT; this.oUrlEncodingR = oUrlEncodingR;
+               this.oMsgPack = oMsgPack; this.oMsgPackT = oMsgPackT; 
+               this.oRdfXml = oRdfXml; this.oRdfXmlT = oRdfXmlT; this.oRdfXmlR 
= oRdfXmlR;
+       }
+       
+       private Serializer getSerializer(Serializer s) throws Exception {
+               Serializer s2 = serializerMap.get(s);
+               if (s2 == null) {
+                       s2 = applySettings(s);
+                       serializerMap.put(s, s2);
+               }
+               return s2;
+       }
+       
+       private Parser getParser(Parser p) throws Exception {
+               Parser p2 = parserMap.get(p);
+               if (p2 == null) {
+                       p2 = applySettings(p);
+                       parserMap.put(p, p2);
+               }
+               return p2;
+       }
+
+       private void testSerialize(String testName, Serializer s, String 
expected) throws Exception {
+               try {
+                       s = getSerializer(s);
+                       
+                       boolean isRdf = s instanceof RdfSerializer;
+
+                       if ((isRdf && SKIP_RDF_TESTS) || expected.isEmpty() || 
! runTestsSet.contains(testName) ) {
+                               System.err.println(label + "/" + testName + " 
for "+s.getClass().getSimpleName()+" skipped.");
+                               return;
+                       }
+                       
+                       String r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(in) : 
((OutputStreamSerializer)s).serializeToHex(in);
+                       
+                       // Can't control RdfSerializer output well, so manually 
remove namespace declarations
+                       // double-quotes with single-quotes, and spaces with 
tabs.
+                       // Also because RDF sucks really bad and can't be 
expected to produce consistent testable results,
+                       // we must also do an expensive sort-then-compare 
operation to verify the results.
+                       if (isRdf) 
+                               r = r.replaceAll("<rdf:RDF[^>]*>", 
"<rdf:RDF>").replace('"', '\'');
+               
+                       // Specifying "xxx" in the expected results will spit 
out what we should populate the field with.
+                       if (expected.equals("xxx")) {
+                               System.out.println(label + "/" + testName + 
"=\n" + r.replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")); // NOT DEBUG
+                               System.out.println(r);
+                       }
+                       
+                       if (isRdf)
+                               TestUtils.assertEqualsAfterSort(expected, r, 
"{0}/{1} parse-normal failed", label, testName);
+                       else
+                               TestUtils.assertEquals(expected, r, "{0}/{1} 
parse-normal failed", label, testName);
+                       
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Exception e) {
+                       throw new AssertionError(label + "/" + testName + " 
failed.  exception=" + e.getLocalizedMessage());
+               }
+       }
+       
+       private void testParse(String testName, Serializer s, Parser p, String 
expected) throws Exception {
+               try {
+                       s = getSerializer(s);
+                       p = getParser(p);
+                       
+                       boolean isRdf = s instanceof RdfSerializer;
+
+                       if ((isRdf && SKIP_RDF_TESTS) || expected.isEmpty() || 
! runTestsSet.contains(testName) ) {
+                               System.err.println(label + "/" + testName + " 
for "+s.getClass().getSimpleName()+" skipped.");
+                               return;
+                       }
+                       
+                       String r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(in) : 
((OutputStreamSerializer)s).serializeToHex(in);
+                       Object o = p.parse(r, in == null ? Object.class : 
in.getClass());
+                       r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(o) : 
((OutputStreamSerializer)s).serializeToHex(o);
+                       
+                       if (isRdf) 
+                               r = r.replaceAll("<rdf:RDF[^>]*>", 
"<rdf:RDF>").replace('"', '\'');
+                       
+                       if (isRdf)
+                               TestUtils.assertEqualsAfterSort(expected, r, 
"{0}/{1} parse-normal failed", label, testName);
+                       else
+                               TestUtils.assertEquals(expected, r, "{0}/{1} 
parse-normal failed", label, testName);
+
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Exception e) {
+                       throw new Exception(label + "/" + testName + " 
failed.", e);
+               }
+       }
+       
+       private void testParseJsonEquivalency(String testName, 
OutputStreamSerializer s, InputStreamParser p, String expected) throws 
Exception {
+               try {
+                       s = (OutputStreamSerializer)getSerializer(s);
+                       p = (InputStreamParser)getParser(p);
+                       WriterSerializer sJson = 
(WriterSerializer)getSerializer(this.sJson);
+
+                       String r = s.serializeToHex(in);
+                       Object o = p.parse(r, in == null ? Object.class : 
in.getClass());
+                       r = sJson.serialize(o);
+                       assertEquals(label + "/" + testName + " parse-normal 
failed on JSON equivalency", expected, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Exception e) {
+                       throw new Exception(label + "/" + testName + " 
failed.", e);
+               }
+       }
+       
+       protected Serializer applySettings(Serializer s) throws Exception {
+               return s;
+       }
+       
+       protected Parser applySettings(Parser p) throws Exception {
+               return p;
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // JSON
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sJson = JsonSerializer.DEFAULT_LAX;
+       ReaderParser pJson = JsonParser.DEFAULT;
+       
+       @Test
+       public void serializeJson() throws Exception {
+               testSerialize("serializeJson", sJson, oJson);
+       }
+       
+       @Test
+       public void parseJson() throws Exception {
+               testParse("parseJson", sJson, pJson, oJson);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // JSON - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sJsonT = 
JsonSerializer.DEFAULT_LAX.clone().setBeanTypePropertyName("t");
+       ReaderParser pJsonT = 
JsonParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeJsonT() throws Exception {
+               testSerialize("serializeJsonT", sJsonT, oJsonT);
+       }
+       
+       @Test
+       public void parseJsonT() throws Exception {
+               testParse("parseJsonT", sJsonT, pJsonT, oJsonT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // JSON - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sJsonR = JsonSerializer.DEFAULT_LAX_READABLE;
+       ReaderParser pJsonR = JsonParser.DEFAULT;
+       
+       @Test
+       public void serializeJsonR() throws Exception {
+               testSerialize("serializeJsonR", sJsonR, oJsonR);
+       }
+       
+       @Test
+       public void parseJsonR() throws Exception {
+               testParse("parseJsonR", sJsonR, pJsonR, oJsonR);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // XML
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sXml = XmlSerializer.DEFAULT_SQ;
+       ReaderParser pXml = XmlParser.DEFAULT;
+       
+       @Test
+       public void serializeXml() throws Exception {
+               testSerialize("serializeXml", sXml, oXml);
+       }
+       
+       @Test
+       public void parseXml() throws Exception {
+               testParse("parseXml", sXml, pXml, oXml);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // XML - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sXmlT = 
XmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
+       ReaderParser pXmlT = 
XmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeXmlT() throws Exception {
+               testSerialize("serializeXmlT", sXmlT, oXmlT);
+       }
+       
+       @Test
+       public void parseXmlT() throws Exception {
+               testParse("parseXmlT", sXmlT, pXmlT, oXmlT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // XML - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sXmlR = XmlSerializer.DEFAULT_SQ_READABLE;
+       ReaderParser pXmlR = XmlParser.DEFAULT;
+       
+       @Test
+       public void serializeXmlR() throws Exception {
+               testSerialize("serializeXmlR", sXmlR, oXmlR);
+       }
+       
+       @Test
+       public void parseXmlR() throws Exception {
+               testParse("parseXmlR", sXmlR, pXmlR, oXmlR);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // XML - Namespaces
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sXmlNs = XmlSerializer.DEFAULT_NS_SQ;
+       ReaderParser pXmlNs = XmlParser.DEFAULT;
+
+       @Test
+       public void serializeXmlNs() throws Exception {
+               testSerialize("serializeXmlNs", sXmlNs, oXmlNs);
+       }
+       
+       @Test
+       public void parseXmlNs() throws Exception {
+               testParse("parseXmlNs", sXmlNs, pXmlNs, oXmlNs);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // HTML
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sHtml = HtmlSerializer.DEFAULT_SQ;
+       ReaderParser pHtml = HtmlParser.DEFAULT;
+       
+       @Test
+       public void serializeHtml() throws Exception {
+               testSerialize("serializeHtml", sHtml, oHtml);
+       }
+       
+       @Test
+       public void parseHtml() throws Exception {
+               testParse("parseHtml", sHtml, pHtml, oHtml);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // HTML - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sHtmlT = 
HtmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
+       ReaderParser pHtmlT = 
HtmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeHtmlT() throws Exception {
+               testSerialize("serializeHtmlT", sHtmlT, oHtmlT);
+       }
+       
+       @Test
+       public void parseHtmlT() throws Exception {
+               testParse("parseHtmlT", sHtmlT, pHtmlT, oHtmlT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // HTML - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sHtmlR = HtmlSerializer.DEFAULT_SQ_READABLE;
+       ReaderParser pHtmlR = HtmlParser.DEFAULT;
+       
+       @Test
+       public void serializeHtmlR() throws Exception {
+               testSerialize("serializeHtmlR", sHtmlR, oHtmlR);
+       }
+       
+       @Test
+       public void parseHtmlR() throws Exception {
+               testParse("parseHtmlR", sHtmlR, pHtmlR, oHtmlR);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UON
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUon = UonSerializer.DEFAULT;
+       ReaderParser pUon = UonParser.DEFAULT;
+       
+       @Test
+       public void serializeUon() throws Exception {
+               testSerialize("serializeUon", sUon, oUon);
+       }
+       
+       @Test
+       public void parseUon() throws Exception {
+               testParse("parseUon", sUon, pUon, oUon);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UON - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUonT = 
UonSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
+       ReaderParser pUonT = 
UonParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeUonT() throws Exception {
+               testSerialize("serializeUonT", sUonT, oUonT);
+       }
+       
+       @Test
+       public void parseUonT() throws Exception {
+               testParse("parseUonT", sUonT, pUonT, oUonT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UON - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUonR = UonSerializer.DEFAULT_READABLE;
+       ReaderParser pUonR = UonParser.DEFAULT;
+       
+       @Test
+       public void serializeUonR() throws Exception {
+               testSerialize("serializeUonR", sUonR, oUonR);
+       }
+       
+       @Test
+       public void parseUonR() throws Exception {
+               testParse("parseUonR", sUonR, pUonR, oUonR);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UrlEncoding
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUrlEncoding = UrlEncodingSerializer.DEFAULT;
+       ReaderParser pUrlEncoding = UrlEncodingParser.DEFAULT;
+       
+       @Test
+       public void serializeUrlEncoding() throws Exception {
+               testSerialize("serializeUrlEncoding", sUrlEncoding, 
oUrlEncoding);
+       }
+       
+       @Test
+       public void parseUrlEncoding() throws Exception {
+               testParse("parseUrlEncoding", sUrlEncoding, pUrlEncoding, 
oUrlEncoding);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UrlEncoding - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUrlEncodingT = 
UrlEncodingSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
+       ReaderParser pUrlEncodingT = 
UrlEncodingParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeUrlEncodingT() throws Exception {
+               testSerialize("serializeUrlEncodingT", sUrlEncodingT, 
oUrlEncodingT);
+       }
+       
+       @Test
+       public void parseUrlEncodingT() throws Exception {
+               testParse("parseUrlEncodingT", sUrlEncodingT, pUrlEncodingT, 
oUrlEncodingT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // UrlEncoding - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sUrlEncodingR = UrlEncodingSerializer.DEFAULT_READABLE;
+       ReaderParser pUrlEncodingR = UrlEncodingParser.DEFAULT;
+       
+       @Test
+       public void serializeUrlEncodingR() throws Exception {
+               testSerialize("serializeUrlEncodingR", sUrlEncodingR, 
oUrlEncodingR);
+       }
+       
+       @Test
+       public void parseUrlEncodingR() throws Exception {
+               testParse("parseUrlEncodingR", sUrlEncodingR, pUrlEncodingR, 
oUrlEncodingR);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // MsgPack
+       
//--------------------------------------------------------------------------------
+       OutputStreamSerializer sMsgPack = MsgPackSerializer.DEFAULT;
+       InputStreamParser pMsgPack = MsgPackParser.DEFAULT;
+       
+       @Test
+       public void serializeMsgPack() throws Exception {
+               testSerialize("serializeMsgPack", sMsgPack, oMsgPack);
+       }
+       
+       @Test
+       public void parseMsgPack() throws Exception {
+               testParse("parseMsgPack", sMsgPack, pMsgPack, oMsgPack);
+       }
+       
+       @Test
+       public void parseMsgPackJsonEquivalency() throws Exception {
+               testParseJsonEquivalency("parseMsgPackJsonEquivalency", 
sMsgPack, pMsgPack, oJson);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // MsgPack - 't' property
+       
//--------------------------------------------------------------------------------
+       OutputStreamSerializer sMsgPackT = 
MsgPackSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
+       InputStreamParser pMsgPackT = 
MsgPackParser.DEFAULT.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeMsgPackT() throws Exception {
+               testSerialize("serializeMsgPackT", sMsgPackT, oMsgPackT);
+       }
+       
+       @Test
+       public void parseMsgPackT() throws Exception {
+               testParse("parseMsgPackT", sMsgPackT, pMsgPackT, oMsgPackT);
+       }
+       
+       @Test
+       public void parseMsgPackTJsonEquivalency() throws Exception {
+               testParseJsonEquivalency("parseMsgPackTJsonEquivalency", 
sMsgPackT, pMsgPackT, oJson);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // RdfXml
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sRdfXml = RdfSerializer.DEFAULT_XMLABBREV;
+       ReaderParser pRdfXml = RdfParser.DEFAULT_XML;
+       
+       @Test
+       public void serializeRdfXml() throws Exception {
+               testSerialize("serializeRdfXml", sRdfXml, oRdfXml);
+       }
+       
+       @Test
+       public void parseRdfXml() throws Exception {
+               testParse("parseRdfXml", sRdfXml, pRdfXml, oRdfXml);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // RdfXml - 't' property
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sRdfXmlT = 
RdfSerializer.DEFAULT_XMLABBREV.clone().setBeanTypePropertyName("t");
+       ReaderParser pRdfXmlT = 
RdfParser.DEFAULT_XML.clone().setBeanTypePropertyName("t");
+       
+       @Test
+       public void serializeRdfXmlT() throws Exception {
+               testSerialize("serializeRdfXmlT", sRdfXmlT, oRdfXmlT);
+       }
+       
+       @Test
+       public void parseRdfXmlT() throws Exception {
+               testParse("parseRdfXmlT", sRdfXmlT, pRdfXmlT, oRdfXmlT);
+       }
+       
+       
//--------------------------------------------------------------------------------
+       // RdfXml - Readable
+       
//--------------------------------------------------------------------------------
+       WriterSerializer sRdfXmlR = 
RdfSerializer.DEFAULT_XMLABBREV.clone().setUseWhitespace(true);
+       ReaderParser pRdfXmlR = RdfParser.DEFAULT_XML;
+       
+       @Test
+       public void serializeRdfXmlR() throws Exception {
+               testSerialize("serializeRdfXmlR", sRdfXmlR, oRdfXmlR);
+       }
+       
+       @Test
+       public void parseRdfXmlR() throws Exception {
+               testParse("parseRdfXmlR", sRdfXmlR, pRdfXmlR, oRdfXmlR);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java 
b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
index 6ee3a41..a94fcca 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
@@ -472,18 +472,21 @@ public class TestUtils {
                String[] e = expected.trim().split("\n"), a = 
actual.trim().split("\n");
                
                if (e.length != a.length) 
-                       throw new AssertionError(MessageFormat.format(msg + 
"---expected---\n"+expected+"\n---actual---\n"+actual+"\n", args));
+                       throw new ComparisonFailure(MessageFormat.format(msg, 
args), expected, actual);
                
                Arrays.sort(e);
                Arrays.sort(a);
                
                for (int i = 0; i < e.length; i++) 
                        if (! e[i].equals(a[i]))
-                               throw new 
AssertionError(MessageFormat.format(msg + 
"---expected---\n"+expected+"\n---actual---\n"+actual+"\n", args));
+                               throw new 
ComparisonFailure(MessageFormat.format(msg, args), expected, actual);
        }
 
+       /**
+        * Same as {@link Assert#assertEquals(String,String,String) except 
takes in a MessageFormat-style message.
+        */
        public static void assertEquals(String expected, String actual, String 
msg, Object...args) {
                if (! StringUtils.isEquals(expected, actual))
-                       throw new AssertionError(MessageFormat.format(msg + 
"---expected---\n"+expected+"\n---actual---\n"+actual+"\n", args));             
    
+                       throw new ComparisonFailure(MessageFormat.format(msg, 
args), expected, actual);                 
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/dto/ComboTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/dto/ComboTest.java 
b/juneau-core-test/src/test/java/org/apache/juneau/dto/ComboTest.java
deleted file mode 100644
index 57061d5..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/ComboTest.java
+++ /dev/null
@@ -1,557 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.dto;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.juneau.TestUtils;
-import org.apache.juneau.html.HtmlParser;
-import org.apache.juneau.html.HtmlSerializer;
-import org.apache.juneau.jena.RdfParser;
-import org.apache.juneau.jena.RdfSerializer;
-import org.apache.juneau.json.JsonParser;
-import org.apache.juneau.json.JsonSerializer;
-import org.apache.juneau.msgpack.MsgPackParser;
-import org.apache.juneau.msgpack.MsgPackSerializer;
-import org.apache.juneau.parser.InputStreamParser;
-import org.apache.juneau.parser.Parser;
-import org.apache.juneau.parser.ReaderParser;
-import org.apache.juneau.serializer.OutputStreamSerializer;
-import org.apache.juneau.serializer.Serializer;
-import org.apache.juneau.serializer.WriterSerializer;
-import org.apache.juneau.urlencoding.UonParser;
-import org.apache.juneau.urlencoding.UonSerializer;
-import org.apache.juneau.urlencoding.UrlEncodingParser;
-import org.apache.juneau.urlencoding.UrlEncodingSerializer;
-import org.apache.juneau.xml.XmlParser;
-import org.apache.juneau.xml.XmlSerializer;
-import org.junit.Test;
-
-/**
- * Superclass for tests that verify results against all supported content 
types. 
- */
-public abstract class ComboTest {
-
-       private final String 
-               label, 
-               oJson, oJsonT, oJsonR,
-               oXml, oXmlT, oXmlR, oXmlNs,
-               oHtml, oHtmlT, oHtmlR,
-               oUon, oUonT, oUonR,
-               oUrlEncoding, oUrlEncodingT, oUrlEncodingR,
-               oMsgPack, oMsgPackT,
-               oRdfXml, oRdfXmlT, oRdfXmlR;
-       private final Object in;
-       
-       // These are the names of all the tests.
-       // You can comment out the names here to skip them.
-       private static final String[] runTests = {
-               "serializeJson",
-               "parseJson",
-               "serializeJsonT",
-               "parseJsonT",
-               "serializeJsonR",
-               "parseJsonR",
-               "serializeXml",
-               "parseXml",
-               "serializeXmlT",
-               "parseXmlT",
-               "serializeXmlR",
-               "parseXmlR",
-               "serializeXmlNs",
-               "parseXmlNs",
-               "serializeHtml",
-               "parseHtml",
-               "serializeHtmlT",
-               "parseHtmlT",
-               "serializeHtmlR",
-               "parseHtmlR",
-               "serializeUon",
-               "parseUon",
-               "serializeUonT",
-               "parseUonT",
-               "serializeUonR",
-               "parseUonR",
-               "serializeUrlEncoding",
-               "parseUrlEncoding",
-               "serializeUrlEncodingT",
-               "parseUrlEncodingT",
-               "serializeUrlEncodingR",
-               "parseUrlEncodingR",
-               "serializeMsgPack",
-               "parseMsgPack",
-               "parseMsgPackJsonEquivalency",
-               "serializeMsgPackT",
-               "parseMsgPackT",
-               "parseMsgPackTJsonEquivalency",
-               "serializeRdfXml",
-               "parseRdfXml",
-               "serializeRdfXmlT",
-               "parseRdfXmlT",
-               "serializeRdfXmlR",
-               "parseRdfXmlR",
-       };
-
-       private static final Set<String> runTestsSet = new 
HashSet<String>(Arrays.asList(runTests));
-       
-       private final boolean SKIP_RDF_TESTS = 
Boolean.getBoolean("skipRdfTests");
-                       
-       public ComboTest(
-               String label, 
-               Object in, 
-               String oJson, String oJsonT, String oJsonR,
-               String oXml, String oXmlT, String oXmlR, String oXmlNs,
-               String oHtml, String oHtmlT, String oHtmlR,
-               String oUon, String oUonT, String oUonR,
-               String oUrlEncoding, String oUrlEncodingT, String oUrlEncodingR,
-               String oMsgPack, String oMsgPackT,
-               String oRdfXml, String oRdfXmlT, String oRdfXmlR
-       ) {
-               this.label = label;
-               this.in = in;
-               this.oJson = oJson; this.oJsonT = oJsonT; this.oJsonR = oJsonR;
-               this.oXml = oXml; this.oXmlT = oXmlT; this.oXmlR = oXmlR; 
this.oXmlNs = oXmlNs;
-               this.oHtml = oHtml; this.oHtmlT = oHtmlT; this.oHtmlR = oHtmlR;
-               this.oUon = oUon; this.oUonT = oUonT; this.oUonR = oUonR;
-               this.oUrlEncoding = oUrlEncoding; this.oUrlEncodingT = 
oUrlEncodingT; this.oUrlEncodingR = oUrlEncodingR;
-               this.oMsgPack = oMsgPack; this.oMsgPackT = oMsgPackT; 
-               this.oRdfXml = oRdfXml; this.oRdfXmlT = oRdfXmlT; this.oRdfXmlR 
= oRdfXmlR;
-       }
-       
-       private void testSerialize(String testName, Serializer s, String 
expected) throws Exception {
-               try {
-                       boolean isRdf = s instanceof RdfSerializer;
-
-                       if ((isRdf && SKIP_RDF_TESTS) || expected.isEmpty() || 
! runTestsSet.contains(testName) ) {
-                               System.err.println(label + "/" + testName + " 
for "+s.getClass().getSimpleName()+" skipped.");
-                               return;
-                       }
-                       
-                       String r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(in) : 
((OutputStreamSerializer)s).serializeToHex(in);
-                       
-                       // Can't control RdfSerializer output well, so manually 
remove namespace declarations
-                       // double-quotes with single-quotes, and spaces with 
tabs.
-                       // Also because RDF sucks really bad and can't be 
expected to produce consistent testable results,
-                       // we must also do an expensive sort-then-compare 
operation to verify the results.
-                       if (isRdf) 
-                               r = r.replaceAll("<rdf:RDF[^>]*>", 
"<rdf:RDF>").replace('"', '\'');
-               
-                       // Specifying "xxx" in the expected results will spit 
out what we should populate the field with.
-                       if (expected.equals("xxx")) {
-                               System.out.println(label + "/" + testName + 
"=\n" + r.replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")); // NOT DEBUG
-                               System.out.println(r);
-                       }
-                       
-                       if (isRdf)
-                               TestUtils.assertEqualsAfterSort(expected, r, 
"{0}/{1} parse-normal failed", label, testName);
-                       else
-                               TestUtils.assertEquals(expected, r, "{0}/{1} 
parse-normal failed", label, testName);
-                       
-               } catch (AssertionError e) {
-                       throw e;
-               } catch (Exception e) {
-                       throw new AssertionError(label + "/" + testName + " 
failed.  exception=" + e.getLocalizedMessage());
-               }
-       }
-       
-       private void testParse(String testName, Serializer s, Parser p, String 
expected) throws Exception {
-               try {
-                       boolean isRdf = s instanceof RdfSerializer;
-
-                       if ((isRdf && SKIP_RDF_TESTS) || expected.isEmpty() || 
! runTestsSet.contains(testName) ) {
-                               System.err.println(label + "/" + testName + " 
for "+s.getClass().getSimpleName()+" skipped.");
-                               return;
-                       }
-                       
-                       String r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(in) : 
((OutputStreamSerializer)s).serializeToHex(in);
-                       Object o = p.parse(r, in == null ? Object.class : 
in.getClass());
-                       r = s.isWriterSerializer() ? 
((WriterSerializer)s).serialize(o) : 
((OutputStreamSerializer)s).serializeToHex(o);
-                       
-                       if (isRdf) 
-                               r = r.replaceAll("<rdf:RDF[^>]*>", 
"<rdf:RDF>").replace('"', '\'');
-                       
-                       if (isRdf)
-                               TestUtils.assertEqualsAfterSort(expected, r, 
"{0}/{1} parse-normal failed", label, testName);
-                       else
-                               TestUtils.assertEquals(expected, r, "{0}/{1} 
parse-normal failed", label, testName);
-
-               } catch (AssertionError e) {
-                       throw e;
-               } catch (Exception e) {
-                       throw new Exception(label + "/" + testName + " 
failed.", e);
-               }
-       }
-       
-       private void testParseJsonEquivalency(String testName, 
OutputStreamSerializer s, InputStreamParser p, String expected) throws 
Exception {
-               try {
-                       String r = s.serializeToHex(in);
-                       Object o = p.parse(r, in == null ? Object.class : 
in.getClass());
-                       r = sJson.serialize(o);
-                       assertEquals(label + "/" + testName + " parse-normal 
failed on JSON equivalency", expected, r);
-               } catch (AssertionError e) {
-                       throw e;
-               } catch (Exception e) {
-                       throw new Exception(label + "/" + testName + " 
failed.", e);
-               }
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // JSON
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sJson = JsonSerializer.DEFAULT_LAX;
-       ReaderParser pJson = JsonParser.DEFAULT;
-       
-       @Test
-       public void serializeJson() throws Exception {
-               testSerialize("serializeJson", sJson, oJson);
-       }
-       
-       @Test
-       public void parseJson() throws Exception {
-               testParse("parseJson", sJson, pJson, oJson);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // JSON - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sJsonT = 
JsonSerializer.DEFAULT_LAX.clone().setBeanTypePropertyName("t");
-       ReaderParser pJsonT = 
JsonParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeJsonT() throws Exception {
-               testSerialize("serializeJsonT", sJsonT, oJsonT);
-       }
-       
-       @Test
-       public void parseJsonT() throws Exception {
-               testParse("parseJsonT", sJsonT, pJsonT, oJsonT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // JSON - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sJsonR = JsonSerializer.DEFAULT_LAX_READABLE;
-       ReaderParser pJsonR = JsonParser.DEFAULT;
-       
-       @Test
-       public void serializeJsonR() throws Exception {
-               testSerialize("serializeJsonR", sJsonR, oJsonR);
-       }
-       
-       @Test
-       public void parseJsonR() throws Exception {
-               testParse("parseJsonR", sJsonR, pJsonR, oJsonR);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // XML
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sXml = XmlSerializer.DEFAULT_SQ;
-       ReaderParser pXml = XmlParser.DEFAULT;
-       
-       @Test
-       public void serializeXml() throws Exception {
-               testSerialize("serializeXml", sXml, oXml);
-       }
-       
-       @Test
-       public void parseXml() throws Exception {
-               testParse("parseXml", sXml, pXml, oXml);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // XML - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sXmlT = 
XmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
-       ReaderParser pXmlT = 
XmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeXmlT() throws Exception {
-               testSerialize("serializeXmlT", sXmlT, oXmlT);
-       }
-       
-       @Test
-       public void parseXmlT() throws Exception {
-               testParse("parseXmlT", sXmlT, pXmlT, oXmlT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // XML - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sXmlR = XmlSerializer.DEFAULT_SQ_READABLE;
-       ReaderParser pXmlR = XmlParser.DEFAULT;
-       
-       @Test
-       public void serializeXmlR() throws Exception {
-               testSerialize("serializeXmlR", sXmlR, oXmlR);
-       }
-       
-       @Test
-       public void parseXmlR() throws Exception {
-               testParse("parseXmlR", sXmlR, pXmlR, oXmlR);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // XML - Namespaces
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sXmlNs = XmlSerializer.DEFAULT_NS_SQ;
-       ReaderParser pXmlNs = XmlParser.DEFAULT;
-
-       @Test
-       public void serializeXmlNs() throws Exception {
-               testSerialize("serializeXmlNs", sXmlNs, oXmlNs);
-       }
-       
-       @Test
-       public void parseXmlNs() throws Exception {
-               testParse("parseXmlNs", sXmlNs, pXmlNs, oXmlNs);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // HTML
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sHtml = HtmlSerializer.DEFAULT_SQ;
-       ReaderParser pHtml = HtmlParser.DEFAULT;
-       
-       @Test
-       public void serializeHtml() throws Exception {
-               testSerialize("serializeHtml", sHtml, oHtml);
-       }
-       
-       @Test
-       public void parseHtml() throws Exception {
-               testParse("parseHtml", sHtml, pHtml, oHtml);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // HTML - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sHtmlT = 
HtmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
-       ReaderParser pHtmlT = 
HtmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeHtmlT() throws Exception {
-               testSerialize("serializeHtmlT", sHtmlT, oHtmlT);
-       }
-       
-       @Test
-       public void parseHtmlT() throws Exception {
-               testParse("parseHtmlT", sHtmlT, pHtmlT, oHtmlT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // HTML - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sHtmlR = HtmlSerializer.DEFAULT_SQ_READABLE;
-       ReaderParser pHtmlR = HtmlParser.DEFAULT;
-       
-       @Test
-       public void serializeHtmlR() throws Exception {
-               testSerialize("serializeHtmlR", sHtmlR, oHtmlR);
-       }
-       
-       @Test
-       public void parseHtmlR() throws Exception {
-               testParse("parseHtmlR", sHtmlR, pHtmlR, oHtmlR);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UON
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUon = UonSerializer.DEFAULT;
-       ReaderParser pUon = UonParser.DEFAULT;
-       
-       @Test
-       public void serializeUon() throws Exception {
-               testSerialize("serializeUon", sUon, oUon);
-       }
-       
-       @Test
-       public void parseUon() throws Exception {
-               testParse("parseUon", sUon, pUon, oUon);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UON - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUonT = 
UonSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-       ReaderParser pUonT = 
UonParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeUonT() throws Exception {
-               testSerialize("serializeUonT", sUonT, oUonT);
-       }
-       
-       @Test
-       public void parseUonT() throws Exception {
-               testParse("parseUonT", sUonT, pUonT, oUonT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UON - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUonR = UonSerializer.DEFAULT_READABLE;
-       ReaderParser pUonR = UonParser.DEFAULT;
-       
-       @Test
-       public void serializeUonR() throws Exception {
-               testSerialize("serializeUonR", sUonR, oUonR);
-       }
-       
-       @Test
-       public void parseUonR() throws Exception {
-               testParse("parseUonR", sUonR, pUonR, oUonR);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UrlEncoding
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUrlEncoding = UrlEncodingSerializer.DEFAULT;
-       ReaderParser pUrlEncoding = UrlEncodingParser.DEFAULT;
-       
-       @Test
-       public void serializeUrlEncoding() throws Exception {
-               testSerialize("serializeUrlEncoding", sUrlEncoding, 
oUrlEncoding);
-       }
-       
-       @Test
-       public void parseUrlEncoding() throws Exception {
-               testParse("parseUrlEncoding", sUrlEncoding, pUrlEncoding, 
oUrlEncoding);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UrlEncoding - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUrlEncodingT = 
UrlEncodingSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-       ReaderParser pUrlEncodingT = 
UrlEncodingParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeUrlEncodingT() throws Exception {
-               testSerialize("serializeUrlEncodingT", sUrlEncodingT, 
oUrlEncodingT);
-       }
-       
-       @Test
-       public void parseUrlEncodingT() throws Exception {
-               testParse("parseUrlEncodingT", sUrlEncodingT, pUrlEncodingT, 
oUrlEncodingT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // UrlEncoding - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sUrlEncodingR = UrlEncodingSerializer.DEFAULT_READABLE;
-       ReaderParser pUrlEncodingR = UrlEncodingParser.DEFAULT;
-       
-       @Test
-       public void serializeUrlEncodingR() throws Exception {
-               testSerialize("serializeUrlEncodingR", sUrlEncodingR, 
oUrlEncodingR);
-       }
-       
-       @Test
-       public void parseUrlEncodingR() throws Exception {
-               testParse("parseUrlEncodingR", sUrlEncodingR, pUrlEncodingR, 
oUrlEncodingR);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // MsgPack
-       
//--------------------------------------------------------------------------------
-       OutputStreamSerializer sMsgPack = MsgPackSerializer.DEFAULT;
-       InputStreamParser pMsgPack = MsgPackParser.DEFAULT;
-       
-       @Test
-       public void serializeMsgPack() throws Exception {
-               testSerialize("serializeMsgPack", sMsgPack, oMsgPack);
-       }
-       
-       @Test
-       public void parseMsgPack() throws Exception {
-               testParse("parseMsgPack", sMsgPack, pMsgPack, oMsgPack);
-       }
-       
-       @Test
-       public void parseMsgPackJsonEquivalency() throws Exception {
-               testParseJsonEquivalency("parseMsgPackJsonEquivalency", 
sMsgPack, pMsgPack, oJson);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // MsgPack - 't' property
-       
//--------------------------------------------------------------------------------
-       OutputStreamSerializer sMsgPackT = 
MsgPackSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-       InputStreamParser pMsgPackT = 
MsgPackParser.DEFAULT.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeMsgPackT() throws Exception {
-               testSerialize("serializeMsgPackT", sMsgPackT, oMsgPackT);
-       }
-       
-       @Test
-       public void parseMsgPackT() throws Exception {
-               testParse("parseMsgPackT", sMsgPackT, pMsgPackT, oMsgPackT);
-       }
-       
-       @Test
-       public void parseMsgPackTJsonEquivalency() throws Exception {
-               testParseJsonEquivalency("parseMsgPackTJsonEquivalency", 
sMsgPackT, pMsgPackT, oJson);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // RdfXml
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sRdfXml = RdfSerializer.DEFAULT_XMLABBREV;
-       ReaderParser pRdfXml = RdfParser.DEFAULT_XML;
-       
-       @Test
-       public void serializeRdfXml() throws Exception {
-               testSerialize("serializeRdfXml", sRdfXml, oRdfXml);
-       }
-       
-       @Test
-       public void parseRdfXml() throws Exception {
-               testParse("parseRdfXml", sRdfXml, pRdfXml, oRdfXml);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // RdfXml - 't' property
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sRdfXmlT = 
RdfSerializer.DEFAULT_XMLABBREV.clone().setBeanTypePropertyName("t");
-       ReaderParser pRdfXmlT = 
RdfParser.DEFAULT_XML.clone().setBeanTypePropertyName("t");
-       
-       @Test
-       public void serializeRdfXmlT() throws Exception {
-               testSerialize("serializeRdfXmlT", sRdfXmlT, oRdfXmlT);
-       }
-       
-       @Test
-       public void parseRdfXmlT() throws Exception {
-               testParse("parseRdfXmlT", sRdfXmlT, pRdfXmlT, oRdfXmlT);
-       }
-       
-       
//--------------------------------------------------------------------------------
-       // RdfXml - Readable
-       
//--------------------------------------------------------------------------------
-       WriterSerializer sRdfXmlR = 
RdfSerializer.DEFAULT_XMLABBREV.clone().setUseWhitespace(true);
-       ReaderParser pRdfXmlR = RdfParser.DEFAULT_XML;
-       
-       @Test
-       public void serializeRdfXmlR() throws Exception {
-               testSerialize("serializeRdfXmlR", sRdfXmlR, oRdfXmlR);
-       }
-       
-       @Test
-       public void parseRdfXmlR() throws Exception {
-               testParse("parseRdfXmlR", sRdfXmlR, pRdfXmlR, oRdfXmlR);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
 
b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
index cc5e6dc..3614fad 100755
--- 
a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
+++ 
b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5ComboTest.java
@@ -16,7 +16,7 @@ import static org.apache.juneau.dto.html5.HtmlBuilder.*;
 
 import java.util.*;
 
-import org.apache.juneau.dto.ComboTest;
+import org.apache.juneau.ComboTest;
 import org.junit.runner.*;
 import org.junit.runners.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
 
b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
index ad04afb..cf9ad84 100644
--- 
a/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
+++ 
b/juneau-core-test/src/test/java/org/apache/juneau/dto/html5/Html5TemplateComboTest.java
@@ -17,8 +17,8 @@ import static org.apache.juneau.dto.html5.HtmlBuilder.*;
 import java.util.*;
 
 import org.apache.juneau.BeanSession;
+import org.apache.juneau.ComboTest;
 import org.apache.juneau.annotation.Bean;
-import org.apache.juneau.dto.ComboTest;
 import org.junit.runner.*;
 import org.junit.runners.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
 
b/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
new file mode 100644
index 0000000..0da8c2a
--- /dev/null
+++ 
b/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapComboTest.java
@@ -0,0 +1,577 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.transforms;
+
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.juneau.ComboTest;
+import org.apache.juneau.ObjectMap;
+import org.apache.juneau.TestUtils;
+import org.apache.juneau.parser.Parser;
+import org.apache.juneau.serializer.Serializer;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/**
+ * Exhaustive serialization tests for the CalendarSwap class.
+ */
+@RunWith(Parameterized.class)
+@SuppressWarnings({"javadoc"})
+public class CalendarSwapComboTest extends ComboTest {
+
+       private static Calendar singleDate = new 
GregorianCalendar(TimeZone.getTimeZone("PST"));
+       static {
+               singleDate.setTimeInMillis(0);
+               singleDate.set(1901, 2, 3, 10, 11, 12);
+       }
+       
+       private static Calendar[] dateArray = new Calendar[]{singleDate};
+       
+       private static ObjectMap dateMap = new ObjectMap().append("foo", 
singleDate);
+       
+
+       @Parameterized.Parameters
+       public static Collection<Object[]> getParameters() {
+               return Arrays.asList(new Object[][] {
+                       {
+                               "CalendarSwap.ToString/singleDate",
+                               singleDate,
+                               CalendarSwap.ToString.class,
+                               /* Json */              "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* JsonT */             "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* JsonR */             "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* Xml */               "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* XmlT */              "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* XmlR */              "<string>Sun Mar 03 
10:11:12 PST 1901</string>\n",
+                               /* XmlNs */             "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* Html */              "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* HtmlT */             "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* HtmlR */             "<string>Sun Mar 03 
10:11:12 PST 1901</string>",
+                               /* Uon */               "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* UonT */              "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* UonR */              "'Sun Mar 03 10:11:12 
PST 1901'",
+                               /* UrlEnc */    
"_value='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* UrlEncT */   
"_value='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* UrlEncR */   
"_value='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* MsgPack */   
"BC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* MsgPackT */  
"BC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<j:value>Sun Mar 03 10:11:12 PST 
1901</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<j:value>Sun Mar 03 10:11:12 PST 
1901</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <j:value>Sun Mar 03 10:11:12 PST 1901</j:value>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.ToString/dateArray",
+                               dateArray,
+                               CalendarSwap.ToString.class,
+                               /* Json */              "['Sun Mar 03 10:11:12 
PST 1901']",
+                               /* JsonT */             "['Sun Mar 03 10:11:12 
PST 1901']",
+                               /* JsonR */             "[\n\t'Sun Mar 03 
10:11:12 PST 1901'\n]",
+                               /* Xml */               "<array><string>Sun Mar 
03 10:11:12 PST 1901</string></array>",
+                               /* XmlT */              "<array><string>Sun Mar 
03 10:11:12 PST 1901</string></array>",
+                               /* XmlR */              "<array>\n\t<string>Sun 
Mar 03 10:11:12 PST 1901</string>\n</array>\n",
+                               /* XmlNs */             "<array><string>Sun Mar 
03 10:11:12 PST 1901</string></array>",
+                               /* Html */              "<ul><li>Sun Mar 03 
10:11:12 PST 1901</li></ul>",
+                               /* HtmlT */             "<ul><li>Sun Mar 03 
10:11:12 PST 1901</li></ul>",
+                               /* HtmlR */             "<ul>\n\t<li>Sun Mar 03 
10:11:12 PST 1901</li>\n</ul>\n",
+                               /* Uon */               "@('Sun Mar 03 10:11:12 
PST 1901')",
+                               /* UonT */              "@('Sun Mar 03 10:11:12 
PST 1901')",
+                               /* UonR */              "@(\n\t'Sun Mar 03 
10:11:12 PST 1901'\n)",
+                               /* UrlEnc */    
"_value=@('Sun+Mar+03+10:11:12+PST+1901')",
+                               /* UrlEncT */   
"_value=@('Sun+Mar+03+10:11:12+PST+1901')",
+                               /* UrlEncR */   
"_value=@(\n\t'Sun+Mar+03+10:11:12+PST+1901'\n)",
+                               /* MsgPack */   
"91BC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* MsgPackT */  
"91BC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Sun Mar 03 10:11:12 PST 
1901</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Sun Mar 03 10:11:12 PST 
1901</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li>Sun Mar 03 10:11:12 PST 1901</rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.ToString",
+                               dateMap,
+                               CalendarSwap.ToString.class,
+                               /* Json */              "{foo:'Sun Mar 03 
10:11:12 PST 1901'}",
+                               /* JsonT */             "{foo:'Sun Mar 03 
10:11:12 PST 1901'}",
+                               /* JsonR */             "{\n\tfoo: 'Sun Mar 03 
10:11:12 PST 1901'\n}",
+                               /* Xml */               "<object><foo>Sun Mar 
03 10:11:12 PST 1901</foo></object>",
+                               /* XmlT */              "<object><foo>Sun Mar 
03 10:11:12 PST 1901</foo></object>",
+                               /* XmlR */              "<object>\n\t<foo>Sun 
Mar 03 10:11:12 PST 1901</foo>\n</object>\n",
+                               /* XmlNs */             "<object><foo>Sun Mar 
03 10:11:12 PST 1901</foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td>Sun Mar 03 10:11:12 PST 1901</td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td>Sun Mar 03 10:11:12 PST 1901</td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td>Sun Mar 03 10:11:12 PST 
1901</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               "(foo='Sun Mar 03 
10:11:12 PST 1901')",
+                               /* UonT */              "(foo='Sun Mar 03 
10:11:12 PST 1901')",
+                               /* UonR */              "(\n\tfoo='Sun Mar 03 
10:11:12 PST 1901'\n)",
+                               /* UrlEnc */    
"foo='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* UrlEncT */   
"foo='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* UrlEncR */   
"foo='Sun+Mar+03+10:11:12+PST+1901'",
+                               /* MsgPack */   
"81A3666F6FBC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* MsgPackT */  
"81A3666F6FBC53756E204D61722030332031303A31313A3132205053542031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Sun Mar 03 10:11:12 PST 
1901</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Sun Mar 03 10:11:12 PST 
1901</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo>Sun Mar 03 10:11:12 PST 1901</jp:foo>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.ISO8601DT/singleDate",
+                               singleDate,
+                               CalendarSwap.ISO8601DT.class,
+                               /* Json */              
"'1901-03-03T10:11:12-08:00'",
+                               /* JsonT */             
"'1901-03-03T10:11:12-08:00'",
+                               /* JsonR */             
"'1901-03-03T10:11:12-08:00'",
+                               /* Xml */               
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* XmlT */              
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* XmlR */              
"<string>1901-03-03T10:11:12-08:00</string>\n",
+                               /* XmlNs */             
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* Html */              
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* HtmlT */             
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* HtmlR */             
"<string>1901-03-03T10:11:12-08:00</string>",
+                               /* Uon */               
"1901-03-03T10:11:12-08:00",
+                               /* UonT */              
"1901-03-03T10:11:12-08:00",
+                               /* UonR */              
"1901-03-03T10:11:12-08:00",
+                               /* UrlEnc */    
"_value=1901-03-03T10:11:12-08:00",
+                               /* UrlEncT */   
"_value=1901-03-03T10:11:12-08:00",
+                               /* UrlEncR */   
"_value=1901-03-03T10:11:12-08:00",
+                               /* MsgPack */   
"B9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* MsgPackT */  
"B9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<j:value>1901-03-03T10:11:12-08:00</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<j:value>1901-03-03T10:11:12-08:00</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <j:value>1901-03-03T10:11:12-08:00</j:value>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.ISO8601DT/dateArray",
+                               dateArray,
+                               CalendarSwap.ISO8601DT.class,
+                               /* Json */              
"['1901-03-03T10:11:12-08:00']",
+                               /* JsonT */             
"['1901-03-03T10:11:12-08:00']",
+                               /* JsonR */             
"[\n\t'1901-03-03T10:11:12-08:00'\n]",
+                               /* Xml */               
"<array><string>1901-03-03T10:11:12-08:00</string></array>",
+                               /* XmlT */              
"<array><string>1901-03-03T10:11:12-08:00</string></array>",
+                               /* XmlR */              
"<array>\n\t<string>1901-03-03T10:11:12-08:00</string>\n</array>\n",
+                               /* XmlNs */             
"<array><string>1901-03-03T10:11:12-08:00</string></array>",
+                               /* Html */              
"<ul><li>1901-03-03T10:11:12-08:00</li></ul>",
+                               /* HtmlT */             
"<ul><li>1901-03-03T10:11:12-08:00</li></ul>",
+                               /* HtmlR */             
"<ul>\n\t<li>1901-03-03T10:11:12-08:00</li>\n</ul>\n",
+                               /* Uon */               
"@(1901-03-03T10:11:12-08:00)",
+                               /* UonT */              
"@(1901-03-03T10:11:12-08:00)",
+                               /* UonR */              
"@(\n\t1901-03-03T10:11:12-08:00\n)",
+                               /* UrlEnc */    
"_value=@(1901-03-03T10:11:12-08:00)",
+                               /* UrlEncT */   
"_value=@(1901-03-03T10:11:12-08:00)",
+                               /* UrlEncR */   
"_value=@(\n\t1901-03-03T10:11:12-08:00\n)",
+                               /* MsgPack */   
"91B9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* MsgPackT */  
"91B9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>1901-03-03T10:11:12-08:00</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>1901-03-03T10:11:12-08:00</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li>1901-03-03T10:11:12-08:00</rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.ISO8601DT/dateMap",
+                               dateMap,
+                               CalendarSwap.ISO8601DT.class,
+                               /* Json */              
"{foo:'1901-03-03T10:11:12-08:00'}",
+                               /* JsonT */             
"{foo:'1901-03-03T10:11:12-08:00'}",
+                               /* JsonR */             "{\n\tfoo: 
'1901-03-03T10:11:12-08:00'\n}",
+                               /* Xml */               
"<object><foo>1901-03-03T10:11:12-08:00</foo></object>",
+                               /* XmlT */              
"<object><foo>1901-03-03T10:11:12-08:00</foo></object>",
+                               /* XmlR */              
"<object>\n\t<foo>1901-03-03T10:11:12-08:00</foo>\n</object>\n",
+                               /* XmlNs */             
"<object><foo>1901-03-03T10:11:12-08:00</foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td>1901-03-03T10:11:12-08:00</td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td>1901-03-03T10:11:12-08:00</td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td>1901-03-03T10:11:12-08:00</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               
"(foo=1901-03-03T10:11:12-08:00)",
+                               /* UonT */              
"(foo=1901-03-03T10:11:12-08:00)",
+                               /* UonR */              
"(\n\tfoo=1901-03-03T10:11:12-08:00\n)",
+                               /* UrlEnc */    "foo=1901-03-03T10:11:12-08:00",
+                               /* UrlEncT */   "foo=1901-03-03T10:11:12-08:00",
+                               /* UrlEncR */   "foo=1901-03-03T10:11:12-08:00",
+                               /* MsgPack */   
"81A3666F6FB9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* MsgPackT */  
"81A3666F6FB9313930312D30332D30335431303A31313A31322D30383A3030",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>1901-03-03T10:11:12-08:00</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>1901-03-03T10:11:12-08:00</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo>1901-03-03T10:11:12-08:00</jp:foo>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.RFC2822DTZ/singleDate",
+                               singleDate,
+                               CalendarSwap.RFC2822DTZ.class,
+                               /* Json */              "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* JsonT */             "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* JsonR */             "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* Xml */               "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* XmlT */              "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* XmlR */              "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>\n",
+                               /* XmlNs */             "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* Html */              "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* HtmlT */             "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* HtmlR */             "<string>Sun, 03 Mar 
1901 18:11:12 GMT</string>",
+                               /* Uon */               "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* UonT */              "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* UonR */              "'Sun, 03 Mar 1901 
18:11:12 GMT'",
+                               /* UrlEnc */    
"_value='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* UrlEncT */   
"_value='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* UrlEncR */   
"_value='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* MsgPack */   
"BD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* MsgPackT */  
"BD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<j:value>Sun, 03 Mar 1901 18:11:12 
GMT</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<j:value>Sun, 03 Mar 1901 18:11:12 
GMT</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <j:value>Sun, 03 Mar 1901 18:11:12 GMT</j:value>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.RFC2822DTZ/dateArray",
+                               dateArray,
+                               CalendarSwap.RFC2822DTZ.class,
+                               /* Json */              "['Sun, 03 Mar 1901 
18:11:12 GMT']",
+                               /* JsonT */             "['Sun, 03 Mar 1901 
18:11:12 GMT']",
+                               /* JsonR */             "[\n\t'Sun, 03 Mar 1901 
18:11:12 GMT'\n]",
+                               /* Xml */               "<array><string>Sun, 03 
Mar 1901 18:11:12 GMT</string></array>",
+                               /* XmlT */              "<array><string>Sun, 03 
Mar 1901 18:11:12 GMT</string></array>",
+                               /* XmlR */              
"<array>\n\t<string>Sun, 03 Mar 1901 18:11:12 GMT</string>\n</array>\n",
+                               /* XmlNs */             "<array><string>Sun, 03 
Mar 1901 18:11:12 GMT</string></array>",
+                               /* Html */              "<ul><li>Sun, 03 Mar 
1901 18:11:12 GMT</li></ul>",
+                               /* HtmlT */             "<ul><li>Sun, 03 Mar 
1901 18:11:12 GMT</li></ul>",
+                               /* HtmlR */             "<ul>\n\t<li>Sun, 03 
Mar 1901 18:11:12 GMT</li>\n</ul>\n",
+                               /* Uon */               "@('Sun, 03 Mar 1901 
18:11:12 GMT')",
+                               /* UonT */              "@('Sun, 03 Mar 1901 
18:11:12 GMT')",
+                               /* UonR */              "@(\n\t'Sun, 03 Mar 
1901 18:11:12 GMT'\n)",
+                               /* UrlEnc */    
"_value=@('Sun,+03+Mar+1901+18:11:12+GMT')",
+                               /* UrlEncT */   
"_value=@('Sun,+03+Mar+1901+18:11:12+GMT')",
+                               /* UrlEncR */   
"_value=@(\n\t'Sun,+03+Mar+1901+18:11:12+GMT'\n)",
+                               /* MsgPack */   
"91BD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* MsgPackT */  
"91BD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Sun, 03 Mar 1901 18:11:12 
GMT</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Sun, 03 Mar 1901 18:11:12 
GMT</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li>Sun, 03 Mar 1901 18:11:12 GMT</rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.RFC2822DTZ/dateMap",
+                               dateMap,
+                               CalendarSwap.RFC2822DTZ.class,
+                               /* Json */              "{foo:'Sun, 03 Mar 1901 
18:11:12 GMT'}",
+                               /* JsonT */             "{foo:'Sun, 03 Mar 1901 
18:11:12 GMT'}",
+                               /* JsonR */             "{\n\tfoo: 'Sun, 03 Mar 
1901 18:11:12 GMT'\n}",
+                               /* Xml */               "<object><foo>Sun, 03 
Mar 1901 18:11:12 GMT</foo></object>",
+                               /* XmlT */              "<object><foo>Sun, 03 
Mar 1901 18:11:12 GMT</foo></object>",
+                               /* XmlR */              "<object>\n\t<foo>Sun, 
03 Mar 1901 18:11:12 GMT</foo>\n</object>\n",
+                               /* XmlNs */             "<object><foo>Sun, 03 
Mar 1901 18:11:12 GMT</foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td>Sun, 03 Mar 1901 18:11:12 GMT</td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td>Sun, 03 Mar 1901 18:11:12 GMT</td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td>Sun, 03 Mar 1901 18:11:12 
GMT</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               "(foo='Sun, 03 Mar 1901 
18:11:12 GMT')",
+                               /* UonT */              "(foo='Sun, 03 Mar 1901 
18:11:12 GMT')",
+                               /* UonR */              "(\n\tfoo='Sun, 03 Mar 
1901 18:11:12 GMT'\n)",
+                               /* UrlEnc */    
"foo='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* UrlEncT */   
"foo='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* UrlEncR */   
"foo='Sun,+03+Mar+1901+18:11:12+GMT'",
+                               /* MsgPack */   
"81A3666F6FBD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* MsgPackT */  
"81A3666F6FBD53756E2C203033204D617220313930312031383A31313A313220474D54",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Sun, 03 Mar 1901 18:11:12 
GMT</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Sun, 03 Mar 1901 18:11:12 
GMT</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo>Sun, 03 Mar 1901 18:11:12 GMT</jp:foo>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarLongSwap",
+                               singleDate,
+                               CalendarLongSwap.class,
+                               /* Json */              "-2172116928000",
+                               /* JsonT */             "-2172116928000",
+                               /* JsonR */             "-2172116928000",
+                               /* Xml */               
"<number>-2172116928000</number>",
+                               /* XmlT */              
"<number>-2172116928000</number>",
+                               /* XmlR */              
"<number>-2172116928000</number>\n",
+                               /* XmlNs */             
"<number>-2172116928000</number>",
+                               /* Html */              
"<number>-2172116928000</number>",
+                               /* HtmlT */             
"<number>-2172116928000</number>",
+                               /* HtmlR */             
"<number>-2172116928000</number>",
+                               /* Uon */               "-2172116928000",
+                               /* UonT */              "-2172116928000",
+                               /* UonR */              "-2172116928000",
+                               /* UrlEnc */    "_value=-2172116928000",
+                               /* UrlEncT */   "_value=-2172116928000",
+                               /* UrlEncR */   "_value=-2172116928000",
+                               /* MsgPack */   "D3FFFFFE0643BDFA00",
+                               /* MsgPackT */  "D3FFFFFE0643BDFA00",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<j:value>-2172116928000</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<j:value>-2172116928000</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <j:value>-2172116928000</j:value>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarLongSwap/dateArray",
+                               dateArray,
+                               CalendarLongSwap.class,
+                               /* Json */              "[-2172116928000]",
+                               /* JsonT */             "[-2172116928000]",
+                               /* JsonR */             
"[\n\t-2172116928000\n]",
+                               /* Xml */               
"<array><number>-2172116928000</number></array>",
+                               /* XmlT */              
"<array><number>-2172116928000</number></array>",
+                               /* XmlR */              
"<array>\n\t<number>-2172116928000</number>\n</array>\n",
+                               /* XmlNs */             
"<array><number>-2172116928000</number></array>",
+                               /* Html */              
"<ul><li><number>-2172116928000</number></li></ul>",
+                               /* HtmlT */             
"<ul><li><number>-2172116928000</number></li></ul>",
+                               /* HtmlR */             
"<ul>\n\t<li><number>-2172116928000</number></li>\n</ul>\n",
+                               /* Uon */               "@(-2172116928000)",
+                               /* UonT */              "@(-2172116928000)",
+                               /* UonR */              
"@(\n\t-2172116928000\n)",
+                               /* UrlEnc */    "_value=@(-2172116928000)",
+                               /* UrlEncT */   "_value=@(-2172116928000)",
+                               /* UrlEncR */   
"_value=@(\n\t-2172116928000\n)",
+                               /* MsgPack */   "91D3FFFFFE0643BDFA00",
+                               /* MsgPackT */  "91D3FFFFFE0643BDFA00",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>-2172116928000</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>-2172116928000</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li>-2172116928000</rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarLongSwap/dateMap",
+                               dateMap,
+                               CalendarLongSwap.class,
+                               /* Json */              "{foo:-2172116928000}",
+                               /* JsonT */             "{foo:-2172116928000}",
+                               /* JsonR */             "{\n\tfoo: 
-2172116928000\n}",
+                               /* Xml */               "<object><foo 
_type='number'>-2172116928000</foo></object>",
+                               /* XmlT */              "<object><foo 
t='number'>-2172116928000</foo></object>",
+                               /* XmlR */              "<object>\n\t<foo 
_type='number'>-2172116928000</foo>\n</object>\n",
+                               /* XmlNs */             "<object><foo 
_type='number'>-2172116928000</foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td><number>-2172116928000</number></td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td><number>-2172116928000</number></td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td><number>-2172116928000</number></td>\n\t</tr>\n</table>\n",
+                               /* Uon */               "(foo=-2172116928000)",
+                               /* UonT */              "(foo=-2172116928000)",
+                               /* UonR */              
"(\n\tfoo=-2172116928000\n)",
+                               /* UrlEnc */    "foo=-2172116928000",
+                               /* UrlEncT */   "foo=-2172116928000",
+                               /* UrlEncR */   "foo=-2172116928000",
+                               /* MsgPack */   "81A3666F6FD3FFFFFE0643BDFA00",
+                               /* MsgPackT */  "81A3666F6FD3FFFFFE0643BDFA00",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>-2172116928000</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>-2172116928000</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo>-2172116928000</jp:foo>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarMapSwap/singleDate",
+                               singleDate,
+                               CalendarMapSwap.class,
+                               /* Json */              
"{time:-2172116928000,timeZone:'PST'}",
+                               /* JsonT */             
"{time:-2172116928000,timeZone:'PST'}",
+                               /* JsonR */             "{\n\ttime: 
-2172116928000,\n\ttimeZone: 'PST'\n}",
+                               /* Xml */               "<object><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></object>",
+                               /* XmlT */              "<object><time 
t='number'>-2172116928000</time><timeZone>PST</timeZone></object>",
+                               /* XmlR */              "<object>\n\t<time 
_type='number'>-2172116928000</time>\n\t<timeZone>PST</timeZone>\n</object>\n",
+                               /* XmlNs */             "<object><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></object>",
+                               /* Html */              
"<table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>time</td>\n\t\t<td><number>-2172116928000</number></td>\n\t</tr>\n\t<tr>\n\t\t<td>timeZone</td>\n\t\t<td>PST</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               
"(time=-2172116928000,timeZone=PST)",
+                               /* UonT */              
"(time=-2172116928000,timeZone=PST)",
+                               /* UonR */              
"(\n\ttime=-2172116928000,\n\ttimeZone=PST\n)",
+                               /* UrlEnc */    
"time=-2172116928000&timeZone=PST",
+                               /* UrlEncT */   
"time=-2172116928000&timeZone=PST",
+                               /* UrlEncR */   
"time=-2172116928000\n&timeZone=PST",
+                               /* MsgPack */   
"82A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* MsgPackT */  
"82A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:time>-2172116928000</jp:time>\n    
<jp:timeZone>PST</jp:timeZone>\n  </rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarMapSwap/dateArray",
+                               dateArray,
+                               CalendarMapSwap.class,
+                               /* Json */              
"[{time:-2172116928000,timeZone:'PST'}]",
+                               /* JsonT */             
"[{time:-2172116928000,timeZone:'PST'}]",
+                               /* JsonR */             "[\n\t{\n\t\ttime: 
-2172116928000,\n\t\ttimeZone: 'PST'\n\t}\n]",
+                               /* Xml */               "<array><object><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></object></array>",
+                               /* XmlT */              "<array><object><time 
t='number'>-2172116928000</time><timeZone>PST</timeZone></object></array>",
+                               /* XmlR */              
"<array>\n\t<object>\n\t\t<time 
_type='number'>-2172116928000</time>\n\t\t<timeZone>PST</timeZone>\n\t</object>\n</array>\n",
+                               /* XmlNs */             "<array><object><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></object></array>",
+                               /* Html */              
"<ul><li><table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table></li></ul>",
+                               /* HtmlT */             
"<ul><li><table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table></li></ul>",
+                               /* HtmlR */             
"<ul>\n\t<li>\n\t\t<table>\n\t\t\t<tr>\n\t\t\t\t<td>time</td>\n\t\t\t\t<td><number>-2172116928000</number></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>timeZone</td>\n\t\t\t\t<td>PST</td>\n\t\t\t</tr>\n\t\t</table>\n\t</li>\n</ul>\n",
+                               /* Uon */               
"@((time=-2172116928000,timeZone=PST))",
+                               /* UonT */              
"@((time=-2172116928000,timeZone=PST))",
+                               /* UonR */              
"@(\n\t(\n\t\ttime=-2172116928000,\n\t\ttimeZone=PST\n\t)\n)",
+                               /* UrlEnc */    
"_value=@((time=-2172116928000,timeZone=PST))",
+                               /* UrlEncT */   
"_value=@((time=-2172116928000,timeZone=PST))",
+                               /* UrlEncR */   
"_value=@(\n\t(\n\t\ttime=-2172116928000,\n\t\ttimeZone=PST\n\t)\n)",
+                               /* MsgPack */   
"9182A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* MsgPackT */  
"9182A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* RdfXml */    "<rdf:RDF>\n<rdf:Seq>\n<rdf:li 
rdf:parseType='Resource'>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   "<rdf:RDF>\n<rdf:Seq>\n<rdf:li 
rdf:parseType='Resource'>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li rdf:parseType='Resource'>\n      <jp:time>-2172116928000</jp:time>\n    
  <jp:timeZone>PST</jp:timeZone>\n    </rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarMapSwap/dateMap",
+                               dateMap,
+                               CalendarMapSwap.class,
+                               /* Json */              
"{foo:{time:-2172116928000,timeZone:'PST'}}",
+                               /* JsonT */             
"{foo:{time:-2172116928000,timeZone:'PST'}}",
+                               /* JsonR */             "{\n\tfoo: {\n\t\ttime: 
-2172116928000,\n\t\ttimeZone: 'PST'\n\t}\n}",
+                               /* Xml */               "<object><foo 
_type='object'><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></foo></object>",
+                               /* XmlT */              "<object><foo 
t='object'><time 
t='number'>-2172116928000</time><timeZone>PST</timeZone></foo></object>",
+                               /* XmlR */              "<object>\n\t<foo 
_type='object'>\n\t\t<time 
_type='number'>-2172116928000</time>\n\t\t<timeZone>PST</timeZone>\n\t</foo>\n</object>\n",
+                               /* XmlNs */             "<object><foo 
_type='object'><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td><table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table></td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td><table><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table></td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td>\n\t\t\t<table>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>time</td>\n\t\t\t\t\t<td><number>-2172116928000</number></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>timeZone</td>\n\t\t\t\t\t<td>PST</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               
"(foo=(time=-2172116928000,timeZone=PST))",
+                               /* UonT */              
"(foo=(time=-2172116928000,timeZone=PST))",
+                               /* UonR */              
"(\n\tfoo=(\n\t\ttime=-2172116928000,\n\t\ttimeZone=PST\n\t)\n)",
+                               /* UrlEnc */    
"foo=(time=-2172116928000,timeZone=PST)",
+                               /* UrlEncT */   
"foo=(time=-2172116928000,timeZone=PST)",
+                               /* UrlEncR */   
"foo=(\n\ttime=-2172116928000,\n\ttimeZone=PST\n)",
+                               /* MsgPack */   
"81A3666F6F82A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* MsgPackT */  
"81A3666F6F82A474696D65D3FFFFFE0643BDFA00A874696D655A6F6E65A3505354",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo 
rdf:parseType='Resource'>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo 
rdf:parseType='Resource'>\n<jp:time>-2172116928000</jp:time>\n<jp:timeZone>PST</jp:timeZone>\n</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo rdf:parseType='Resource'>\n      
<jp:time>-2172116928000</jp:time>\n      <jp:timeZone>PST</jp:timeZone>\n    
</jp:foo>\n  </rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.DateMedium/singleDate",
+                               singleDate,
+                               CalendarSwap.DateMedium.class,
+                               /* Json */              "'Mar 3, 1901'",
+                               /* JsonT */             "'Mar 3, 1901'",
+                               /* JsonR */             "'Mar 3, 1901'",
+                               /* Xml */               "<string>Mar 3, 
1901</string>",
+                               /* XmlT */              "<string>Mar 3, 
1901</string>",
+                               /* XmlR */              "<string>Mar 3, 
1901</string>\n",
+                               /* XmlNs */             "<string>Mar 3, 
1901</string>",
+                               /* Html */              "<string>Mar 3, 
1901</string>",
+                               /* HtmlT */             "<string>Mar 3, 
1901</string>",
+                               /* HtmlR */             "<string>Mar 3, 
1901</string>",
+                               /* Uon */               "'Mar 3, 1901'",
+                               /* UonT */              "'Mar 3, 1901'",
+                               /* UonR */              "'Mar 3, 1901'",
+                               /* UrlEnc */    "_value='Mar+3,+1901'",
+                               /* UrlEncT */   "_value='Mar+3,+1901'",
+                               /* UrlEncR */   "_value='Mar+3,+1901'",
+                               /* MsgPack */   "AB4D617220332C2031393031",
+                               /* MsgPackT */  "AB4D617220332C2031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<j:value>Mar 3, 
1901</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<j:value>Mar 3, 
1901</j:value>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <j:value>Mar 3, 1901</j:value>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.DateMedium/dateArray",
+                               dateArray,
+                               CalendarSwap.DateMedium.class,
+                               /* Json */              "['Mar 3, 1901']",
+                               /* JsonT */             "['Mar 3, 1901']",
+                               /* JsonR */             "[\n\t'Mar 3, 1901'\n]",
+                               /* Xml */               "<array><string>Mar 3, 
1901</string></array>",
+                               /* XmlT */              "<array><string>Mar 3, 
1901</string></array>",
+                               /* XmlR */              "<array>\n\t<string>Mar 
3, 1901</string>\n</array>\n",
+                               /* XmlNs */             "<array><string>Mar 3, 
1901</string></array>",
+                               /* Html */              "<ul><li>Mar 3, 
1901</li></ul>",
+                               /* HtmlT */             "<ul><li>Mar 3, 
1901</li></ul>",
+                               /* HtmlR */             "<ul>\n\t<li>Mar 3, 
1901</li>\n</ul>\n",
+                               /* Uon */               "@('Mar 3, 1901')",
+                               /* UonT */              "@('Mar 3, 1901')",
+                               /* UonR */              "@(\n\t'Mar 3, 
1901'\n)",
+                               /* UrlEnc */    "_value=@('Mar+3,+1901')",
+                               /* UrlEncT */   "_value=@('Mar+3,+1901')",
+                               /* UrlEncR */   "_value=@(\n\t'Mar+3,+1901'\n)",
+                               /* MsgPack */   "91AB4D617220332C2031393031",
+                               /* MsgPackT */  "91AB4D617220332C2031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Mar 3, 1901</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Seq>\n<rdf:li>Mar 3, 1901</rdf:li>\n</rdf:Seq>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  <rdf:Seq>\n    
<rdf:li>Mar 3, 1901</rdf:li>\n  </rdf:Seq>\n</rdf:RDF>\n",
+                       },
+                       {
+                               "CalendarSwap.DateMedium/dateMap",
+                               dateMap,
+                               CalendarSwap.DateMedium.class,
+                               /* Json */              "{foo:'Mar 3, 1901'}",
+                               /* JsonT */             "{foo:'Mar 3, 1901'}",
+                               /* JsonR */             "{\n\tfoo: 'Mar 3, 
1901'\n}",
+                               /* Xml */               "<object><foo>Mar 3, 
1901</foo></object>",
+                               /* XmlT */              "<object><foo>Mar 3, 
1901</foo></object>",
+                               /* XmlR */              "<object>\n\t<foo>Mar 
3, 1901</foo>\n</object>\n",
+                               /* XmlNs */             "<object><foo>Mar 3, 
1901</foo></object>",
+                               /* Html */              
"<table><tr><td>foo</td><td>Mar 3, 1901</td></tr></table>",
+                               /* HtmlT */             
"<table><tr><td>foo</td><td>Mar 3, 1901</td></tr></table>",
+                               /* HtmlR */             
"<table>\n\t<tr>\n\t\t<td>foo</td>\n\t\t<td>Mar 3, 
1901</td>\n\t</tr>\n</table>\n",
+                               /* Uon */               "(foo='Mar 3, 1901')",
+                               /* UonT */              "(foo='Mar 3, 1901')",
+                               /* UonR */              "(\n\tfoo='Mar 3, 
1901'\n)",
+                               /* UrlEnc */    "foo='Mar+3,+1901'",
+                               /* UrlEncT */   "foo='Mar+3,+1901'",
+                               /* UrlEncR */   "foo='Mar+3,+1901'",
+                               /* MsgPack */   
"81A3666F6FAB4D617220332C2031393031",
+                               /* MsgPackT */  
"81A3666F6FAB4D617220332C2031393031",
+                               /* RdfXml */    
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Mar 3, 
1901</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlT */   
"<rdf:RDF>\n<rdf:Description>\n<jp:foo>Mar 3, 
1901</jp:foo>\n</rdf:Description>\n</rdf:RDF>\n",
+                               /* RdfXmlR */   "<rdf:RDF>\n  
<rdf:Description>\n    <jp:foo>Mar 3, 1901</jp:foo>\n  
</rdf:Description>\n</rdf:RDF>\n",
+                       },
+               });
+       }
+       
+       private Class<?> swapClass;
+       
+       public CalendarSwapComboTest(
+                       String label, 
+                       Object in,
+                       Class<?> swapClass, 
+                       String oJson, String oJsonT, String oJsonR,
+                       String oXml, String oXmlT, String oXmlR, String oXmlNs,
+                       String oHtml, String oHtmlT, String oHtmlR,
+                       String oUon, String oUonT, String oUonR,
+                       String oUrlEncoding, String oUrlEncodingT, String 
oUrlEncodingR,
+                       String oMsgPack, String oMsgPackT,
+                       String oRdfXml, String oRdfXmlT, String oRdfXmlR
+               ) {
+               super(
+                       label,
+                       in, 
+                       oJson, oJsonT, oJsonR,
+                       oXml, oXmlT, oXmlR, oXmlNs,
+                       oHtml, oHtmlT, oHtmlR,
+                       oUon, oUonT, oUonR,
+                       oUrlEncoding, oUrlEncodingT, oUrlEncodingR,
+                       oMsgPack, oMsgPackT,
+                       oRdfXml, oRdfXmlT, oRdfXmlR
+               );
+               this.swapClass = swapClass;
+       }
+       
+       @BeforeClass
+       public static void beforeClass() {
+               TestUtils.setTimeZone("PST");
+               TestUtils.setLocale(Locale.US);
+       }
+       
+       @AfterClass
+       public static void afterClass() {
+               TestUtils.unsetTimeZone();
+               TestUtils.unsetLocale();
+       }
+       
+       @Override
+       protected Serializer applySettings(Serializer s) throws Exception {
+               if (s.isLocked())
+                        s = s.clone();
+               return s.addPojoSwaps(swapClass);
+       }
+       
+       @Override
+       protected Parser applySettings(Parser p) throws Exception {
+               if (p.isLocked())
+                       p = p.clone();
+               return p.addPojoSwaps(swapClass);
+       }
+}

Reply via email to