You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/02/20 17:46:48 UTC

[1/2] incubator-juneau git commit: Add combo tests for CalendarSwap class.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master c6b0a7b44 -> 0d70804d8


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0d70804d/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java b/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
index 4fe0dfa..d98e811 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
@@ -15,7 +15,6 @@ package org.apache.juneau.transforms;
 import static org.junit.Assert.*;
 
 import java.net.*;
-import java.text.*;
 import java.util.*;
 
 import javax.xml.bind.*;
@@ -144,404 +143,6 @@ public class CalendarSwapTest {
 		assertEquals("Wed, 31 Jan 2001 12:34:56 GMT", f.swap(session, c));
 	}
 
-
-	//====================================================================================================
-	// testDefaultStringJson - DEFAULT_STRING, JSON
-	//====================================================================================================
-	@Test
-	public void testDefaultStringJson() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		doTest(s, p, true, "'Sun Mar 03 10:11:12 PST 1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultStringXml - DEFAULT_STRING, XML
-	//====================================================================================================
-	@Test
-	public void testDefaultStringXml() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>Sun Mar 03 10:11:12 PST 1901</string>");
-	}
-
-	//====================================================================================================
-	// testDefaultStringHtml - DEFAULT_STRING, HTML
-	//====================================================================================================
-	@Test
-	public void testDefaultStringHtml() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = new HtmlSerializer().addPojoSwaps(f);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>Sun Mar 03 10:11:12 PST 1901</string>");
-	}
-
-	//====================================================================================================
-	// testDefaultStringUrlParam - DEFAULT_STRING, UON
-	//====================================================================================================
-	@Test
-	public void testDefaultStringUon() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = new UonSerializer.Encoding().addPojoSwaps(f);
-		ReaderParser p = UonParser.DEFAULT_DECODING.clone().addPojoSwaps(f);
-		doTest(s, p, true, "'Sun+Mar+03+10:11:12+PST+1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultStringUrlParam - DEFAULT_STRING, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testDefaultStringUrlEncoding() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = new UrlEncodingSerializer().addPojoSwaps(f);
-		ReaderParser p = UrlEncodingParser.DEFAULT.clone().addPojoSwaps(f);
-		doTest(s, p, true, "_value='Sun+Mar+03+10:11:12+PST+1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultStringRdfXml - DEFAULT_STRING, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testDefaultStringRdfXml() throws Exception {
-		Class<?> f = CalendarSwap.ToString.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, true, "<rdf:Description><j:value>Sun Mar 03 10:11:12 PST 1901</j:value></rdf:Description>");
-	}
-
-	//====================================================================================================
-	// testISO8601DTJson - DEFAULT_ISO8601DT, JSON
-	//====================================================================================================
-	@Test
-	public void testISO8601DTJson() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		String x = "'1901-03-03T10:11:12-08:00'";
-		doTest(s, p, true, x);
-	}
-
-	//====================================================================================================
-	// testISO8601DTXml - DEFAULT_ISO8601DT, XML
-	//====================================================================================================
-	@Test
-	public void testISO8601DTXml() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>1901-03-03T10:11:12-08:00</string>");
-	}
-
-	//====================================================================================================
-	// testISO8601DTHtml - DEFAULT_ISO8601DT, HTML
-	//====================================================================================================
-	@Test
-	public void testISO8601DTHtml() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = new HtmlSerializer().addPojoSwaps(f);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>1901-03-03T10:11:12-08:00</string>");
-	}
-
-	//====================================================================================================
-	// testISO8601DTUrlParam - DEFAULT_ISO8601DT, UON
-	//====================================================================================================
-	@Test
-	public void testISO8601DTUon() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = new UonSerializer().addPojoSwaps(f);
-		ReaderParser p = new UonParser().addPojoSwaps(f);
-		doTest(s, p, true, "1901-03-03T10:11:12-08:00");
-	}
-
-	//====================================================================================================
-	// testISO8601DTUrlParam - DEFAULT_ISO8601DT, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testISO8601DTUrlEncoding() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = new UrlEncodingSerializer().addPojoSwaps(f);
-		ReaderParser p = new UrlEncodingParser().addPojoSwaps(f);
-		doTest(s, p, true, "_value=1901-03-03T10:11:12-08:00");
-	}
-
-	//====================================================================================================
-	// testISO8601DTRdfXml - DEFAULT_ISO8601DT, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testISO8601DTRdfXml() throws Exception {
-		Class<?> f = CalendarSwap.ISO8601DT.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, true, "<rdf:Description><j:value>1901-03-03T10:11:12-08:00</j:value></rdf:Description>");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTJson - DEFAULT_RFC2822DT, JSON
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTJson() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		doTest(s, p, true, "'Sun, 03 Mar 1901 18:11:12 GMT'");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTXml - DEFAULT_RFC2822DT, XML
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTXml() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>Sun, 03 Mar 1901 18:11:12 GMT</string>");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTHtml - DEFAULT_RFC2822DT, HTML
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTHtml() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = new HtmlSerializer().addPojoSwaps(f);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<string>Sun, 03 Mar 1901 18:11:12 GMT</string>");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTUrlParam - DEFAULT_RFC2822DT, UON
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTUon() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = new UonSerializer.Encoding().addPojoSwaps(f);
-		ReaderParser p = UonParser.DEFAULT_DECODING.clone().addPojoSwaps(f);
-		doTest(s, p, true, "'Sun,+03+Mar+1901+18:11:12+GMT'");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTUrlParam - DEFAULT_RFC2822DT, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTUrlEncoding() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = new UrlEncodingSerializer().addPojoSwaps(f);
-		ReaderParser p = UrlEncodingParser.DEFAULT.clone().addPojoSwaps(f);
-		doTest(s, p, true, "_value='Sun,+03+Mar+1901+18:11:12+GMT'");
-	}
-
-	//====================================================================================================
-	// testRFC2822DTRdfXml - DEFAULT_RFC2822DT, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testRFC2822DTRdfXml() throws Exception {
-		Class<?> f = CalendarSwap.RFC2822DTZ.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, true, "<rdf:Description><j:value>Sun, 03 Mar 1901 18:11:12 GMT</j:value></rdf:Description>");
-	}
-
-	//====================================================================================================
-	// testDefaultLongJson - DEFAULT_LONG, JSON
-	//====================================================================================================
-	@Test
-	public void testDefaultLongJson() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		doTest(s, p, true, "-2172116928000");
-	}
-
-	//====================================================================================================
-	// testDefaultLongXml - DEFAULT_LONG, XML
-	//====================================================================================================
-	@Test
-	public void testDefaultLongXml() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<number>-2172116928000</number>");
-	}
-
-	//====================================================================================================
-	// testDefaultLongHtml - DEFAULT_LONG, HTML
-	//====================================================================================================
-	@Test
-	public void testDefaultLongHtml() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = new HtmlSerializer().addPojoSwaps(f);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<number>-2172116928000</number>");
-	}
-
-	//====================================================================================================
-	// testDefaultLongUrlParam - DEFAULT_LONG, UON
-	//====================================================================================================
-	@Test
-	public void testDefaultLongUon() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = UonSerializer.DEFAULT.clone().addPojoSwaps(f);
-		ReaderParser p = new UonParser().addPojoSwaps(f);
-		doTest(s, p, true, "-2172116928000");
-	}
-
-	//====================================================================================================
-	// testDefaultLongUrlParam - DEFAULT_LONG, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testDefaultLongUrlEncoding() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = UrlEncodingSerializer.DEFAULT.clone().addPojoSwaps(f);
-		ReaderParser p = new UrlEncodingParser().addPojoSwaps(f);
-		doTest(s, p, true, "_value=-2172116928000");
-	}
-
-	//====================================================================================================
-	// testDefaultLongRdfXml - DEFAULT_LONG, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testDefaultLongRdfXml() throws Exception {
-		Class<?> f = CalendarLongSwap.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, true, "<rdf:Description><j:value>-2172116928000</j:value></rdf:Description>");
-	}
-
-	//====================================================================================================
-	// testDefaultMapJson - DEFAULT_MAP, JSON
-	//====================================================================================================
-	@Test
-	public void testDefaultMapJson() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		doTest(s, p, true, "{time:-2172116928000,timeZone:'PST'}");
-	}
-
-	//====================================================================================================
-	// testDefaultMapXml - DEFAULT_MAP, XML
-	//====================================================================================================
-	@Test
-	public void testDefaultMapXml() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<object><time _type='number'>-2172116928000</time><timeZone>PST</timeZone></object>");
-	}
-
-	//====================================================================================================
-	// testDefaultMapHtml - DEFAULT_MAP, HTML
-	//====================================================================================================
-	@Test
-	public void testDefaultMapHtml() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = new HtmlSerializer.Sq().addPojoSwaps(f).setAddKeyValueTableHeaders(true);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, true, "<table><tr><th>key</th><th>value</th></tr><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table>");
-	}
-
-	//====================================================================================================
-	// testDefaultMapUrlParam - DEFAULT_MAP, UON
-	//====================================================================================================
-	@Test
-	public void testDefaultMapUon() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = UonSerializer.DEFAULT.clone().addPojoSwaps(f);
-		ReaderParser p = new UonParser().addPojoSwaps(f);
-		doTest(s, p, true, "(time=-2172116928000,timeZone=PST)");
-	}
-
-	//====================================================================================================
-	// testDefaultMapUrlParam - DEFAULT_MAP, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testDefaultMapUrlEncoding() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = UrlEncodingSerializer.DEFAULT.clone().addPojoSwaps(f);
-		ReaderParser p = new UrlEncodingParser().addPojoSwaps(f);
-		doTest(s, p, true, "time=-2172116928000&timeZone=PST");
-	}
-
-	//====================================================================================================
-	// testDefaultMapRdfXml - DEFAULT_MAP, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testDefaultMapRdfXml() throws Exception {
-		Class<?> f = CalendarMapSwap.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, true, "<rdf:Description><jp:time>-2172116928000</jp:time><jp:timeZone>PST</jp:timeZone></rdf:Description>");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumJson - DEFAULT_MEDIUM, JSON
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumJson() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = new JsonSerializer.Simple().addPojoSwaps(f);
-		ReaderParser p = new JsonParser().addPojoSwaps(f);
-		doTest(s, p, false, "'Mar 3, 1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumXml - DEFAULT_MEDIUM, XML
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumXml() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
-		ReaderParser p = new XmlParser().addPojoSwaps(f);
-		doTest(s, p, false, "<string>Mar 3, 1901</string>");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumHtml - DEFAULT_MEDIUM, HTML
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumHtml() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = new HtmlSerializer().addPojoSwaps(f);
-		ReaderParser p = new HtmlParser().addPojoSwaps(f);
-		doTest(s, p, false, "<string>Mar 3, 1901</string>");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumUrlParam - DEFAULT_MEDIUM, UON
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumUon() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = new UonSerializer.Encoding().addPojoSwaps(f);
-		ReaderParser p = UonParser.DEFAULT_DECODING.clone().addPojoSwaps(f);
-		doTest(s, p, false, "'Mar+3,+1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumUrlParam - DEFAULT_MEDIUM, URL-ENCODING
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumUrlEncoding() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = new UrlEncodingSerializer().addPojoSwaps(f);
-		ReaderParser p = UrlEncodingParser.DEFAULT.clone().addPojoSwaps(f);
-		doTest(s, p, false, "_value='Mar+3,+1901'");
-	}
-
-	//====================================================================================================
-	// testDefaultMediumRdfXml - DEFAULT_MEDIUM, RDF/XML
-	//====================================================================================================
-	@Test
-	public void testDefaultMediumRdfXml() throws Exception {
-		Class<?> f = CalendarSwap.DateMedium.class;
-		WriterSerializer s = getRdfSerializer().addPojoSwaps(f);
-		ReaderParser p = new RdfParser.Xml().addPojoSwaps(f);
-		doTest(s, p, false, "<rdf:Description><j:value>Mar 3, 1901</j:value></rdf:Description>");
-	}
-
 	//====================================================================================================
 	// Test 7a - BeanProperty.filter, JSON
 	//====================================================================================================
@@ -683,25 +284,4 @@ public class CalendarSwapTest {
 			this.d3 = d3;
 		}
 	}
-
-	private void doTest(WriterSerializer s, ReaderParser p, boolean doTestTimeToo, String expected) throws Exception {
-		Calendar d;
-		String actual;
-
-		SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
-		sdf.setTimeZone(TimeZone.getTimeZone("PST"));
-		actual = s.serialize(testDate);
-		String a = (s instanceof RdfSerializer ? stripRdf(actual) : actual);
-		assertEquals(expected, a);
-		d = p.parse(actual, GregorianCalendar.class);
-		d.setTimeZone(TimeZone.getTimeZone("PST"));
-		assertEquals(1901, d.get(Calendar.YEAR));
-		assertEquals(2, d.get(Calendar.MONTH));
-//		assertEquals(3, d.get(Calendar.DATE));
-		if (doTestTimeToo) {
-			assertEquals(10, d.get(Calendar.HOUR));
-			assertEquals(11, d.get(Calendar.MINUTE));
-			assertEquals(12, d.get(Calendar.SECOND));
-		}
-	}
 }
\ No newline at end of file


[2/2] incubator-juneau git commit: Add combo tests for CalendarSwap class.

Posted by ja...@apache.org.
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 <ja...@apache.org>
Authored: Mon Feb 20 12:46:45 2017 -0500
Committer: JamesBognar <ja...@apache.org>
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);
+	}
+}