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/09/02 14:11:40 UTC

[24/51] [partial] incubator-juneau git commit: Add project hierarchies, part 2.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ab15d45b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/DTOs.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/DTOs.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/DTOs.java
deleted file mode 100755
index 52cd76b..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/DTOs.java
+++ /dev/null
@@ -1,140 +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.urlencoding;
-
-import java.util.*;
-
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.urlencoding.annotation.*;
-import org.apache.juneau.utils.*;
-
-@SuppressWarnings("javadoc")
-public class DTOs {
-
-	@Bean(sort=true)
-	public static class A {
-		public String a;
-		public int b;
-		public boolean c;
-
-		public static A create() {
-			A t = new A();
-			t.a = "a";
-			t.b = 1;
-			t.c = true;
-			return t;
-		}
-
-	}
-
-	@Bean(sort=true)
-	public static class B {
-		public String[] f01;
-		public List<String> f02;
-		public int[] f03;
-		public List<Integer> f04;
-		public String[][] f05;
-		public List<String[]> f06;
-		public A[] f07;
-		public List<A> f08;
-		public A[][] f09;
-		public List<List<A>> f10;
-
-		private String[] f11;
-		private List<String> f12;
-		private int[] f13;
-		private List<Integer> f14;
-		private String[][] f15;
-		private List<String[]> f16;
-		private A[] f17;
-		private List<A> f18;
-		private A[][] f19;
-		private List<List<A>> f20;
-
-		public String[] getF11() { return f11; }
-		public List<String> getF12() { return f12; }
-		public int[] getF13() { return f13; }
-		public List<Integer> getF14() { return f14; }
-		public String[][] getF15() { return f15; }
-		public List<String[]> getF16() { return f16; }
-		public A[] getF17() { return f17; }
-		public List<A> getF18() { return f18; }
-		public A[][] getF19() { return f19; }
-		public List<List<A>> getF20() { return f20; }
-
-		public void setF11(String[] f11) { this.f11 = f11; }
-		public void setF12(List<String> f12) { this.f12 = f12; }
-		public void setF13(int[] f13) { this.f13 = f13; }
-		public void setF14(List<Integer> f14) { this.f14 = f14; }
-		public void setF15(String[][] f15) { this.f15 = f15; }
-		public void setF16(List<String[]> f16) { this.f16 = f16; }
-		public void setF17(A[] f17) { this.f17 = f17; }
-		public void setF18(List<A> f18) { this.f18 = f18; }
-		public void setF19(A[][] f19) { this.f19 = f19; }
-		public void setF20(List<List<A>> f20) { this.f20 = f20; }
-
-		static B create() {
-			B t = new B();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-
-	@UrlEncoding(expandedParams=true)
-	@Bean(sort=true)
-	public static class C extends B {
-		static C create() {
-			C t = new C();
-			t.f01 = new String[]{"a","b"};
-			t.f02 = new AList<String>().append("c").append("d");
-			t.f03 = new int[]{1,2};
-			t.f04 = new AList<Integer>().append(3).append(4);
-			t.f05 = new String[][]{{"e","f"},{"g","h"}};
-			t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
-			t.f07 = new A[]{A.create(),A.create()};
-			t.f08 = new AList<A>().append(A.create()).append(A.create());
-			t.f09 = new A[][]{{A.create()},{A.create()}};
-			t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
-			t.setF11(new String[]{"a","b"});
-			t.setF12(new AList<String>().append("c").append("d"));
-			t.setF13(new int[]{1,2});
-			t.setF14(new AList<Integer>().append(3).append(4));
-			t.setF15(new String[][]{{"e","f"},{"g","h"}});
-			t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
-			t.setF17(new A[]{A.create(),A.create()});
-			t.setF18(new AList<A>().append(A.create()).append(A.create()));
-			t.setF19(new A[][]{{A.create()},{A.create()}});
-			t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
-			return t;
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ab15d45b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserReaderTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserReaderTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserReaderTest.java
deleted file mode 100755
index 5e05128..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserReaderTest.java
+++ /dev/null
@@ -1,220 +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.urlencoding;
-
-import static org.junit.Assert.*;
-
-import java.io.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.uon.*;
-import org.junit.*;
-
-@SuppressWarnings({"javadoc","resource"})
-public class UonParserReaderTest {
-
-	//====================================================================================================
-	// Basic tests
-	//====================================================================================================
-	@Test
-	public void testBasic() throws Exception {
-
-		UonReader r;
-		String s, in;
-		r = r("f", true);
-		assertEquals('f', r.read());
-		assertEquals(-1, r.read());
-
-		r = r("%66", true);
-		assertEquals('f', r.read());
-		assertEquals(-1, r.read());
-
-		r = r("%7D", true);
-		assertEquals('}', r.read());
-		assertEquals(-1, r.read());
-
-		r = r("%7D%7D", true);
-		assertEquals('}', r.read());
-		assertEquals('}', r.read());
-		assertEquals(-1, r.read());
-
-		r = r("%00%00", true);
-		r.mark();
-		assertEquals(0, r.read());
-		assertEquals(0, r.read());
-		assertEquals("\u0000\u0000", r.getMarked());
-		assertEquals(-1, r.read());
-
-		in = escape("\u0080");
-		r = r(in, true);
-		assertEquals('\u0080', r.read());
-		assertEquals(-1, r.read());
-
-		in = escape("\u0800");
-		r = r(in, true);
-		assertEquals('\u0800', r.read());
-		assertEquals(-1, r.read());
-
-		in = escape("\uffff");
-		r = r(in, true);
-		assertEquals('\uffff', r.read());
-		assertEquals(-1, r.read());
-
-		// 2-byte codepoint
-		s = "¢";
-		r = r(escape(s), true);
-		assertEquals(s.codePointAt(0), r.read());
-		assertEquals(-1, r.read());
-
-		// 3-byte codepoint
-		s = "€";
-		r = r(escape(s), true);
-		assertEquals(s.codePointAt(0), r.readCodePoint());
-		assertEquals(-1, r.read());
-
-		// 4-byte codepoint
-		s = "𤭢";
-		r = r(escape(s), true);
-		assertEquals(s.codePointAt(0), r.readCodePoint());
-		assertEquals(-1, r.read());
-
-		s = "𤭢𤭢";
-		r = r(escape(s), true);
-		assertEquals(s.codePointAt(0), r.readCodePoint());
-		assertEquals(s.codePointAt(2), r.readCodePoint());
-		assertEquals(-1, r.read());
-
-		// Multiple codepoints
-		s = "¢€𤭢¢€𤭢";
-		in = escape(s);
-		r = r(in, true);
-		assertEquals(s.codePointAt(0), r.readCodePoint());
-		assertEquals(s.codePointAt(1), r.readCodePoint());
-		assertEquals(s.codePointAt(2), r.readCodePoint());
-		assertEquals(s.codePointAt(4), r.readCodePoint());
-		assertEquals(s.codePointAt(5), r.readCodePoint());
-		assertEquals(s.codePointAt(6), r.readCodePoint());
-		assertEquals(-1, r.read());
-
-		// Multiple codepoints read in small chunks.
-		s = "¢€𤭢¢€𤭢";
-		String s2;
-		int i;
-		in = escape(s);
-		r = r(in, true);
-		char[] buff = new char[2];
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("€", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("€", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		assertEquals(-1, i);
-
-		// Multiple codepoints read in slightly larger chunks.
-		s = "¢€𤭢¢€𤭢";
-		in = escape(s);
-		r = r(in, true);
-		buff = new char[3];
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢€", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢€", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		assertEquals(-1, i);
-
-		s = "¢€𤭢¢€𤭢";
-		in = escape(s);
-		r = r(in, true);
-		buff = new char[4];
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢€𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		s2 = new String(buff, 0, i);
-		assertEquals("¢€𤭢", s2);
-		i = r.read(buff, 0, buff.length);
-		assertEquals(-1, i);
-
-		// Reader that only returns 1 character at a time;
-		s = "x¢€𤭢x¢€𤭢";
-		in = "x" + escape("¢€𤭢") + "x" + escape("¢€𤭢");
-		r = new UonReader(new ParserPipe(new SlowStringReader(in)), true);
-		assertEquals(s.codePointAt(0), r.readCodePoint());
-		assertEquals(s.codePointAt(1), r.readCodePoint());
-		assertEquals(s.codePointAt(2), r.readCodePoint());
-		assertEquals(s.codePointAt(3), r.readCodePoint());
-		assertEquals(s.codePointAt(5), r.readCodePoint());
-		assertEquals(s.codePointAt(6), r.readCodePoint());
-		assertEquals(s.codePointAt(7), r.readCodePoint());
-		assertEquals(s.codePointAt(8), r.readCodePoint());
-		assertEquals(-1, r.readCodePoint());
-	}
-
-	private String escape(String s) throws UnsupportedEncodingException {
-		StringBuilder sb = new StringBuilder();
-		byte[] b = s.getBytes("UTF-8");
-		for (int i = 0; i < b.length; i++)
-			sb.append('%').append(TestUtils.toHex(b[i]));
-		return sb.toString();
-	}
-
-	private UonReader r(String in, boolean decodeChars) throws Exception {
-		return new UonReader(new ParserPipe(in), decodeChars);
-	}
-
-	private static class SlowStringReader extends Reader {
-
-		String s;
-		int i = 0;
-
-		SlowStringReader(String s) {
-			this.s = s;
-		}
-
-		@Override /* Reader */
-		public int read(char[] cbuf, int off, int len) throws IOException {
-			if (i >= s.length())
-				return -1;
-			cbuf[off] = s.charAt(i++);
-			return 1;
-		}
-
-		@Override /* Reader */
-		public void close() throws IOException {
-		}
-
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ab15d45b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
deleted file mode 100755
index 8d91ede..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
+++ /dev/null
@@ -1,514 +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.urlencoding;
-
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.apache.juneau.parser.*;
-import org.apache.juneau.uon.*;
-import org.junit.*;
-
-@SuppressWarnings({"rawtypes","javadoc"})
-public class UonParserTest {
-
-	static UonParser p = UonParser.DEFAULT;
-	static UonParser pe = UonParser.DEFAULT_DECODING;
-
-	//====================================================================================================
-	// Basic test
-	//====================================================================================================
-	@Test
-	public void testBasic() throws Exception {
-
-		String t;
-		Map m;
-
-		// Simple string
-		// Top level
-		t = "a";
-		assertEquals("a", p.parse(t, String.class));
-		assertEquals("a", p.parse(t, Object.class));
-		assertEquals("a", pe.parse(t, String.class));
-		t = "'a'";
-		assertEquals("a", p.parse(t, String.class));
-		assertEquals("a", p.parse(t, Object.class));
-		t = " 'a' ";
-		assertEquals("a", p.parse(t, String.class));
-
-		// 2nd level
-		t = "(a=a)";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
-		assertEquals("a", pe.parse(t, Map.class).get("a"));
-
-		t = "('a'='a')";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
-		assertEquals("a", pe.parse(t, Map.class).get("a"));
-
-		// Simple map
-		// Top level
-		t = "(a=b,c=123,d=false,e=true,f=null)";
-		m = p.parse(t, Map.class);
-		assertEquals("b", m.get("a"));
-		assertTrue(m.get("c") instanceof Number);
-		assertEquals(123, m.get("c"));
-		assertTrue(m.get("d") instanceof Boolean);
-		assertEquals(Boolean.FALSE, m.get("d"));
-		assertTrue(m.get("e") instanceof Boolean);
-		assertEquals(Boolean.TRUE, m.get("e"));
-		m = pe.parse(t, Map.class);
-		assertNull(m.get("f"));
-
-		t = "(a=true)";
-		m = p.parse(t, HashMap.class, String.class, Boolean.class);
-		assertTrue(m.get("a") instanceof Boolean);
-		assertEquals("true", m.get("a").toString());
-
-		// null
-		// Top level
-		t = "null";
-		assertNull(p.parse(t, Object.class));
-		assertNull(pe.parse(t, Object.class));
-
-		// 2nd level
-		t = "(null=null)";
-		m = p.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-		m = pe.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-
-		t = " ( null = null ) ";
-		m = p.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-		m = pe.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-
-		// 3rd level
-		t = "(null=(null=null))";
-		m = p.parse(t, Map.class);
-		assertTrue(((Map)m.get(null)).containsKey(null));
-		assertNull(((Map)m.get(null)).get(null));
-		m = pe.parse(t, Map.class);
-		assertTrue(((Map)m.get(null)).containsKey(null));
-		assertNull(((Map)m.get(null)).get(null));
-
-		// Empty array
-		// Top level
-		t = "@()";
-		List l = (List)p.parse(t, Object.class);
-		assertTrue(l.isEmpty());
-		t = " @( ) ";
-		l = p.parse(t, List.class);
-		assertTrue(l.isEmpty());
-
-		// 2nd level in map
-		t = "(x=@())";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-		m = (Map)p.parse(t, Object.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-		t = " ( x = @( ) )";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-
-		// Empty 2 dimensional array
-		t = "@(@())";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-		t = " @( @( ) ) ";
-		l = p.parse(t, LinkedList.class, List.class);
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-
-		// Array containing empty string
-		// Top level
-		t = "@('')";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-		t = " @( '' ) ";
-		l = p.parse(t, List.class, String.class);
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-
-		// 2nd level
-		t = "(''=@(''))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", ((List)m.get("")).get(0));
-		t = " ( '' = @( '' ) ) ";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertEquals("", ((List)m.get("")).get(0));
-
-		// Array containing 3 empty strings
-		t = "@('','','')";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-		t = " @( '' , '' , '' ) ";
-		l = p.parse(t, List.class, Object.class);
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-
-		// String containing \u0000
-		// Top level
-		t = "'\u0000'";
-		assertEquals("\u0000", p.parse(t, Object.class));
-		t = " '\u0000' ";
-		assertEquals("\u0000", p.parse(t, String.class));
-		assertEquals("\u0000", p.parse(t, Object.class));
-
-		// 2nd level
-		t = "('\u0000'='\u0000')";
-		m = (Map)p.parse(t, Object.class);
-		assertTrue(m.size() == 1);
-		assertEquals("\u0000", m.get("\u0000"));
-		t = " ( '\u0000' = '\u0000' ) ";
-		m = p.parse(t, HashMap.class, String.class, String.class);
-		assertTrue(m.size() == 1);
-		assertEquals("\u0000", m.get("\u0000"));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertTrue(m.size() == 1);
-		assertEquals("\u0000", m.get("\u0000"));
-
-		// Boolean
-		// Top level
-		t = "false";
-		Boolean b = (Boolean)p.parse(t, Object.class);
-		assertEquals(Boolean.FALSE, b);
-		b = p.parse(t, Boolean.class);
-		assertEquals(Boolean.FALSE, b);
-		t = " false ";
-		b = p.parse(t, Boolean.class);
-		assertEquals(Boolean.FALSE, b);
-
-		// 2nd level
-		t = "(x=false)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals(Boolean.FALSE, m.get("x"));
-		t = " ( x = false ) ";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals(Boolean.FALSE, m.get("x"));
-
-		// Number
-		// Top level
-		t = "123";
-		Integer i = (Integer)p.parse(t, Object.class);
-		assertEquals(123, i.intValue());
-		i = p.parse(t, Integer.class);
-		assertEquals(123, i.intValue());
-		Double d = p.parse(t, Double.class);
-		assertEquals(123, d.intValue());
-		Float f = p.parse(t, Float.class);
-		assertEquals(123, f.intValue());
-		t = " 123 ";
-		i = p.parse(t, Integer.class);
-		assertEquals(123, i.intValue());
-
-		// 2nd level
-		t = "(x=123)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals(123, ((Integer)m.get("x")).intValue());
-		t = " ( x = 123 ) ";
-		m = p.parse(t, HashMap.class, String.class, Number.class);
-		assertEquals(123, ((Integer)m.get("x")).intValue());
-		m = p.parse(t, HashMap.class, String.class, Double.class);
-		assertEquals(123, ((Double)m.get("x")).intValue());
-
-		// Unencoded chars
-		// Top level
-		t = "x;/?:@-_.!*~'";
-		assertEquals("x;/?:@-_.!*'", p.parse(t, Object.class));
-		assertEquals("x;/?:@-_.!*'", pe.parse(t, Object.class));
-
-		// 2nd level
-		t = "(x;/?:@-_.!*~'=x;/?:@-_.!*~')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parse(t, HashMap.class, String.class, String.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-
-		// Encoded chars
-		// Top level
-		t = "x{}|\\^[]`<>#%\"&+";
-		assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(t, Object.class));
-		assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(t, String.class));
-		try {
-			assertEquals("x{}|\\^[]`<>#%\"&+", pe.parse(t, Object.class));
-			fail("Expected parse exception from invalid hex sequence.");
-		} catch (ParseException e) {
-			// Good.
-		}
-		t = "x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B";
-		assertEquals("x{}|\\^[]`<>#%\"&+", pe.parse(t, Object.class));
-		assertEquals("x{}|\\^[]`<>#%\"&+", pe.parse(t, String.class));
-
-		// 2nd level
-		t = "(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x{}|\\^[]`<>#%\"&+", m.get("x{}|\\^[]`<>#%\"&+"));
-		try {
-			m = (Map)pe.parse(t, Object.class);
-			fail("Expected parse exception from invalid hex sequence.");
-		} catch (ParseException e) {
-			// Good.
-		}
-		t = "(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("x{}|\\^[]`<>#%\"&+", m.get("x{}|\\^[]`<>#%\"&+"));
-
-		// Special chars
-		// Top level
-		t = "'x$,()~''";
-		assertEquals("x$,()'", p.parse(t, Object.class));
-		t = " 'x$,()~'' ";
-		assertEquals("x$,()'", p.parse(t, Object.class));
-
-		// 2nd level
-		t = "('x$,()~''='x$,()~'')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()'", m.get("x$,()'"));
-		t = " ( 'x$,()~'' = 'x$,()~'' ) ";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()'", m.get("x$,()'"));
-
-		// Equals sign
-		// Gets encoded at top level, and encoded+escaped at 2nd level.
-		// Top level
-		t = "x=";
-		assertEquals("x=", p.parse(t, Object.class));
-		t = "x%3D";
-		assertEquals("x=", pe.parse(t, Object.class));
-
-		// 2nd level
-		t = "('x='='x=')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "('x='='x=')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = " ( 'x=' = 'x=' ) ";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "('x='='x=')";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = " ( 'x=' = 'x=' ) ";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "('x%3D'='x%3D')";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = " ( 'x%3D' = 'x%3D' ) ";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-
-		// String starting with parenthesis
-		// Top level
-		t = "'()'";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-
-		t = " '()' ";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-
-		// 2nd level
-		t = "('()'='()')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("()", m.get("()"));
-		t = " ( '()' = '()' ) ";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("()", m.get("()"));
-
-		// String starting with $
-		// Top level
-		t = "$a";
-		assertEquals("$a", p.parse(t, Object.class));
-		t = "'$a'";
-		assertEquals("$a", p.parse(t, Object.class));
-
-		// 2nd level
-		t = "($a=$a)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("$a", m.get("$a"));
-		t = " ( $a = $a ) ";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("$a", m.get("$a"));
-		t = "('$a'='$a')";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("$a", m.get("$a"));
-		t = " ( '$a' = '$a' ) ";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("$a", m.get("$a"));
-
-		// Blank string
-		// Top level
-		t = "";
-		assertEquals("", p.parse(t, Object.class));
-		assertEquals("", pe.parse(t, Object.class));
-
-		// 2nd level
-		t = "(=)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", m.get(""));
-		t = "(''='')";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("", m.get(""));
-
-		// 3rd level
-		t = "(=(=))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", ((Map)m.get("")).get(""));
-		t = " ( = ( = ) ) ";
-		m = p.parse(t, HashMap.class, String.class, HashMap.class);
-		assertEquals("", ((Map)m.get("")).get(""));
-
-		// Newline character
-		// Top level
-		t = "'%0A'";
-		assertEquals("\n", pe.parse(t, Object.class));
-		assertEquals("%0A", p.parse(t, Object.class));
-
-		// 2nd level
-		t = "('%0A'='%0A')";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("\n", m.get("\n"));
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("%0A", m.get("%0A"));
-
-		// 3rd level
-		t = "('%0A'=('%0A'='%0A'))";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("\n", ((Map)m.get("\n")).get("\n"));
-	}
-
-	//====================================================================================================
-	// Unicode character test
-	//====================================================================================================
-	@Test
-	public void testUnicodeChars() throws Exception {
-		String t;
-		Map m;
-
-		// 2-byte UTF-8 character
-		// Top level
-		t = "¢";
-		assertEquals("¢", p.parse(t, Object.class));
-		assertEquals("¢", p.parse(t, String.class));
-		t = "%C2%A2";
-		assertEquals("¢", pe.parse(t, Object.class));
-		assertEquals("¢", pe.parse(t, String.class));
-
-		// 2nd level
-		t = "(¢=¢)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("¢", m.get("¢"));
-		t = "(%C2%A2=%C2%A2)";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("¢", m.get("¢"));
-
-		// 3rd level
-		t = "(¢=(¢=¢))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
-		t = "(%C2%A2=(%C2%A2=%C2%A2))";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
-
-		// 3-byte UTF-8 character
-		// Top level
-		t = "€";
-		assertEquals("€", p.parse(t, Object.class));
-		assertEquals("€", p.parse(t, String.class));
-		t = "%E2%82%AC";
-		assertEquals("€", pe.parse(t, Object.class));
-		assertEquals("€", pe.parse(t, String.class));
-
-		// 2nd level
-		t = "(€=€)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("€", m.get("€"));
-		t = "(%E2%82%AC=%E2%82%AC)";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("€", m.get("€"));
-
-		// 3rd level
-		t = "(€=(€=€))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("€", ((Map)m.get("€")).get("€"));
-		t = "(%E2%82%AC=(%E2%82%AC=%E2%82%AC))";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("€", ((Map)m.get("€")).get("€"));
-
-		// 4-byte UTF-8 character
-		// Top level
-		t = "𤭢";
-		assertEquals("𤭢", p.parse(t, Object.class));
-		assertEquals("𤭢", p.parse(t, String.class));
-		t = "%F0%A4%AD%A2";
-		assertEquals("𤭢", pe.parse(t, Object.class));
-		assertEquals("𤭢", pe.parse(t, String.class));
-
-		// 2nd level
-		t = "(𤭢=𤭢)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("𤭢", m.get("𤭢"));
-		t = "(%F0%A4%AD%A2=%F0%A4%AD%A2)";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("𤭢", m.get("𤭢"));
-
-		// 3rd level
-		t = "(𤭢=(𤭢=𤭢))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
-		t = "(%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2))";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
-	}
-
-	//====================================================================================================
-	// Test simple bean
-	//====================================================================================================
-	@Test
-	public void testSimpleBean() throws Exception {
-		UonParser p = UonParser.DEFAULT;
-		A t;
-
-		String s = "(f1=foo,f2=123)";
-		t = p.parse(s, A.class);
-		assertEquals("foo", t.f1);
-		assertEquals(123, t.f2);
-	}
-
-	public static class A {
-		public String f1;
-		public int f2;
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ab15d45b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
deleted file mode 100755
index bf3bc75..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
+++ /dev/null
@@ -1,362 +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.urlencoding;
-
-import static org.junit.Assert.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.uon.*;
-import org.junit.*;
-
-@SuppressWarnings("javadoc")
-public class UonSerializerTest {
-
-	static UonSerializer s = UonSerializer.DEFAULT_ENCODING;
-	static UonSerializer su = UonSerializer.DEFAULT;
-	static UonSerializer sr = UonSerializer.DEFAULT_READABLE;
-
-
-	//====================================================================================================
-	// Basic test
-	//====================================================================================================
-	@Test
-	public void testBasic() throws Exception {
-
-		Object t;
-
-		// Simple string
-		// Top level
-		t = "a";
-		assertEquals("a", s.serialize(t));
-		assertEquals("a", su.serialize(t));
-		assertEquals("a", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{a:'a'}");
-		assertEquals("(a=a)", s.serialize(t));
-		assertEquals("(a=a)", su.serialize(t));
-		assertEquals("(\n\ta=a\n)", sr.serialize(t));
-
-		// Simple map
-		// Top level
-		t = new ObjectMap("{a:'b',c:123,d:false,e:true,f:null}");
-		assertEquals("(a=b,c=123,d=false,e=true,f=null)", s.serialize(t));
-		assertEquals("(a=b,c=123,d=false,e=true,f=null)", su.serialize(t));
-		assertEquals("(\n\ta=b,\n\tc=123,\n\td=false,\n\te=true,\n\tf=null\n)", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{a:{a:'b',c:123,d:false,e:true,f:null}}");
-		assertEquals("(a=(a=b,c=123,d=false,e=true,f=null))", s.serialize(t));
-		assertEquals("(a=(a=b,c=123,d=false,e=true,f=null))", su.serialize(t));
-		assertEquals("(\n\ta=(\n\t\ta=b,\n\t\tc=123,\n\t\td=false,\n\t\te=true,\n\t\tf=null\n\t)\n)", sr.serialize(t));
-
-		// Simple map with primitives as literals
-		t = new ObjectMap("{a:'b',c:'123',d:'false',e:'true',f:'null'}");
-		assertEquals("(a=b,c='123',d='false',e='true',f='null')", s.serialize(t));
-		assertEquals("(a=b,c='123',d='false',e='true',f='null')", su.serialize(t));
-		assertEquals("(\n\ta=b,\n\tc='123',\n\td='false',\n\te='true',\n\tf='null'\n)", sr.serialize(t));
-
-		// null
-		// Note that serializeParams is always encoded.
-		// Top level
-		t = null;
-		assertEquals("null", s.serialize(t));
-		assertEquals("null", su.serialize(t));
-		assertEquals("null", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{null:null}");
-		assertEquals("(null=null)", s.serialize(t));
-		assertEquals("(null=null)", su.serialize(t));
-		assertEquals("(\n\tnull=null\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{null:{null:null}}");
-		assertEquals("(null=(null=null))", s.serialize(t));
-		assertEquals("(null=(null=null))", su.serialize(t));
-		assertEquals("(\n\tnull=(\n\t\tnull=null\n\t)\n)", sr.serialize(t));
-
-		// Empty array
-		// Top level
-		t = new String[0];
-		assertEquals("@()", s.serialize(t));
-		assertEquals("@()", su.serialize(t));
-		assertEquals("@()", sr.serialize(t));
-
-		// 2nd level in map
-		t = new ObjectMap("{x:[]}");
-		assertEquals("(x=@())", s.serialize(t));
-		assertEquals("(x=@())", su.serialize(t));
-		assertEquals("(\n\tx=@()\n)", sr.serialize(t));
-
-		// Empty 2 dimensional array
-		t = new String[1][0];
-		assertEquals("@(@())", s.serialize(t));
-		assertEquals("@(@())", su.serialize(t));
-		assertEquals("@(\n\t@()\n)", sr.serialize(t));
-
-		// Array containing empty string
-		// Top level
-		t = new String[]{""};
-		assertEquals("@('')", s.serialize(t));
-		assertEquals("@('')", su.serialize(t));
-		assertEquals("@(\n\t''\n)", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{x:['']}");
-		assertEquals("(x=@(''))", s.serialize(t));
-		assertEquals("(x=@(''))", su.serialize(t));
-		assertEquals("(\n\tx=@(\n\t\t''\n\t)\n)", sr.serialize(t));
-
-		// Array containing 3 empty strings
-		t = new String[]{"","",""};
-		assertEquals("@('','','')", s.serialize(t));
-		assertEquals("@('','','')", su.serialize(t));
-		assertEquals("@(\n\t'',\n\t'',\n\t''\n)", sr.serialize(t));
-
-		// String containing \u0000
-		// Top level
-		t = "\u0000";
-		assertEquals("%00", s.serialize(t));
-		assertEquals("\u0000", su.serialize(t));
-		assertEquals("\u0000", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'\u0000':'\u0000'}");
-		assertEquals("(%00=%00)", s.serialize(t));
-		assertEquals("(\u0000=\u0000)", su.serialize(t));
-		assertEquals("(\n\t\u0000=\u0000\n)", sr.serialize(t));
-
-		// Boolean
-		// Top level
-		t = false;
-		assertEquals("false", s.serialize(t));
-		assertEquals("false", su.serialize(t));
-		assertEquals("false", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{x:false}");
-		assertEquals("(x=false)", s.serialize(t));
-		assertEquals("(x=false)", su.serialize(t));
-		assertEquals("(\n\tx=false\n)", sr.serialize(t));
-
-		// Number
-		// Top level
-		t = 123;
-		assertEquals("123", s.serialize(t));
-		assertEquals("123", su.serialize(t));
-		assertEquals("123", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{x:123}");
-		assertEquals("(x=123)", s.serialize(t));
-		assertEquals("(x=123)", su.serialize(t));
-		assertEquals("(\n\tx=123\n)", sr.serialize(t));
-
-		// Unencoded chars
-		// Top level
-		t = "x;/?:@-_.!*'";
-		assertEquals("x;/?:@-_.!*~'", s.serialize(t));
-		assertEquals("x;/?:@-_.!*~'", su.serialize(t));
-		assertEquals("x;/?:@-_.!*~'", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{x:'x;/?:@-_.!*\\''}");
-		assertEquals("(x=x;/?:@-_.!*~')", s.serialize(t));
-		assertEquals("(x=x;/?:@-_.!*~')", su.serialize(t));
-		assertEquals("(\n\tx=x;/?:@-_.!*~'\n)", sr.serialize(t));
-
-		// Encoded chars
-		// Top level
-		t = "x{}|\\^[]`<>#%\"&+";
-		assertEquals("x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B", s.serialize(t));
-		assertEquals("x{}|\\^[]`<>#%\"&+", su.serialize(t));
-		assertEquals("x{}|\\^[]`<>#%\"&+", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'x{}|\\\\^[]`<>#%\"&+':'x{}|\\\\^[]`<>#%\"&+'}");
-		assertEquals("(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)", s.serialize(t));
-		assertEquals("(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)", su.serialize(t));
-		assertEquals("(\n\tx{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+\n)", sr.serialize(t));
-
-		// Escaped chars
-		// Top level
-		t = "x$,()~";
-		assertEquals("'x$,()~~'", s.serialize(t));
-		assertEquals("'x$,()~~'", su.serialize(t));
-		assertEquals("'x$,()~~'", sr.serialize(t));
-
-		// 2nd level
-		// Note behavior on serializeParams() is different since 2nd-level is top level.
-		t = new ObjectMap("{'x$,()~':'x$,()~'}");
-		assertEquals("('x$,()~~'='x$,()~~')", s.serialize(t));
-		assertEquals("('x$,()~~'='x$,()~~')", su.serialize(t));
-		assertEquals("(\n\t'x$,()~~'='x$,()~~'\n)", sr.serialize(t));
-
-		// 3rd level
-		// Note behavior on serializeParams().
-		t = new ObjectMap("{'x$,()~':{'x$,()~':'x$,()~'}}");
-		assertEquals("('x$,()~~'=('x$,()~~'='x$,()~~'))", s.serialize(t));
-		assertEquals("('x$,()~~'=('x$,()~~'='x$,()~~'))", su.serialize(t));
-		assertEquals("(\n\t'x$,()~~'=(\n\t\t'x$,()~~'='x$,()~~'\n\t)\n)", sr.serialize(t));
-
-		// Equals sign
-		// Gets encoded at top level, and encoded+escaped at 2nd level.
-		// Top level
-		t = "x=";
-		assertEquals("'x='", s.serialize(t));
-		assertEquals("'x='", su.serialize(t));
-		assertEquals("'x='", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'x=':'x='}");
-		assertEquals("('x='='x=')", s.serialize(t));
-		assertEquals("('x='='x=')", su.serialize(t));
-		assertEquals("(\n\t'x='='x='\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'x=':{'x=':'x='}}");
-		assertEquals("('x='=('x='='x='))", s.serialize(t));
-		assertEquals("('x='=('x='='x='))", su.serialize(t));
-		assertEquals("(\n\t'x='=(\n\t\t'x='='x='\n\t)\n)", sr.serialize(t));
-
-		// String starting with parenthesis
-		// Top level
-		t = "()";
-		assertEquals("'()'", s.serialize(t));
-		assertEquals("'()'", su.serialize(t));
-		assertEquals("'()'", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'()':'()'}");
-		assertEquals("('()'='()')", s.serialize(t));
-		assertEquals("('()'='()')", su.serialize(t));
-		assertEquals("(\n\t'()'='()'\n)", sr.serialize(t));
-
-		// String starting with $
-		// Top level
-		t = "$a";
-		assertEquals("$a", s.serialize(t));
-		assertEquals("$a", su.serialize(t));
-		assertEquals("$a", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{$a:'$a'}");
-		assertEquals("($a=$a)", s.serialize(t));
-		assertEquals("($a=$a)", su.serialize(t));
-		assertEquals("(\n\t$a=$a\n)", sr.serialize(t));
-
-		// Blank string
-		// Top level
-		t = "";
-		assertEquals("''", s.serialize(t));
-		assertEquals("''", su.serialize(t));
-		assertEquals("''", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'':''}");
-		assertEquals("(''='')", s.serialize(t));
-		assertEquals("(''='')", su.serialize(t));
-		assertEquals("(\n\t''=''\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'':{'':''}}");
-		assertEquals("(''=(''=''))", s.serialize(t));
-		assertEquals("(''=(''=''))", su.serialize(t));
-		assertEquals("(\n\t''=(\n\t\t''=''\n\t)\n)", sr.serialize(t));
-
-		// Newline character
-		// Top level
-		t = "\n";
-		assertEquals("'%0A'", s.serialize(t));
-		assertEquals("'\n'", su.serialize(t));
-		assertEquals("'\n'", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'\n':'\n'}");
-		assertEquals("('%0A'='%0A')", s.serialize(t));
-		assertEquals("('\n'='\n')", su.serialize(t));
-		assertEquals("(\n\t'\n'='\n'\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'\n':{'\n':'\n'}}");
-		assertEquals("('%0A'=('%0A'='%0A'))", s.serialize(t));
-		assertEquals("('\n'=('\n'='\n'))", su.serialize(t));
-		assertEquals("(\n\t'\n'=(\n\t\t'\n'='\n'\n\t)\n)", sr.serialize(t));
-	}
-
-	//====================================================================================================
-	// Unicode characters test
-	//====================================================================================================
-	@Test
-	public void testUnicodeChars() throws Exception {
-		Object t;
-
-		// 2-byte UTF-8 character
-		// Top level
-		t = "¢";
-		assertEquals("%C2%A2", s.serialize(t));
-		assertEquals("¢", su.serialize(t));
-		assertEquals("¢", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'¢':'¢'}");
-		assertEquals("(%C2%A2=%C2%A2)", s.serialize(t));
-		assertEquals("(¢=¢)", su.serialize(t));
-		assertEquals("(\n\t¢=¢\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'¢':{'¢':'¢'}}");
-		assertEquals("(%C2%A2=(%C2%A2=%C2%A2))", s.serialize(t));
-		assertEquals("(¢=(¢=¢))", su.serialize(t));
-		assertEquals("(\n\t¢=(\n\t\t¢=¢\n\t)\n)", sr.serialize(t));
-
-		// 3-byte UTF-8 character
-		// Top level
-		t = "€";
-		assertEquals("%E2%82%AC", s.serialize(t));
-		assertEquals("€", su.serialize(t));
-		assertEquals("€", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'€':'€'}");
-		assertEquals("(%E2%82%AC=%E2%82%AC)", s.serialize(t));
-		assertEquals("(€=€)", su.serialize(t));
-		assertEquals("(\n\t€=€\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'€':{'€':'€'}}");
-		assertEquals("(%E2%82%AC=(%E2%82%AC=%E2%82%AC))", s.serialize(t));
-		assertEquals("(€=(€=€))", su.serialize(t));
-		assertEquals("(\n\t€=(\n\t\t€=€\n\t)\n)", sr.serialize(t));
-
-		// 4-byte UTF-8 character
-		// Top level
-		t = "𤭢";
-		assertEquals("%F0%A4%AD%A2", s.serialize(t));
-		assertEquals("𤭢", su.serialize(t));
-		assertEquals("𤭢", sr.serialize(t));
-
-		// 2nd level
-		t = new ObjectMap("{'𤭢':'𤭢'}");
-		assertEquals("(%F0%A4%AD%A2=%F0%A4%AD%A2)", s.serialize(t));
-		assertEquals("(𤭢=𤭢)", su.serialize(t));
-		assertEquals("(\n\t𤭢=𤭢\n)", sr.serialize(t));
-
-		// 3rd level
-		t = new ObjectMap("{'𤭢':{'𤭢':'𤭢'}}");
-		assertEquals("(%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2))", s.serialize(t));
-		assertEquals("(𤭢=(𤭢=𤭢))", su.serialize(t));
-		assertEquals("(\n\t𤭢=(\n\t\t𤭢=𤭢\n\t)\n)", sr.serialize(t));
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/ab15d45b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
deleted file mode 100755
index 141ea07..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ /dev/null
@@ -1,952 +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.urlencoding;
-
-import static org.apache.juneau.TestUtils.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
-import org.junit.*;
-
-@SuppressWarnings({"rawtypes","javadoc"})
-public class UrlEncodingParserTest {
-
-	static UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-	static BeanSession bs = p.getBeanContext().createSession();
-
-	//====================================================================================================
-	// Basic test
-	//====================================================================================================
-	@Test
-	public void testBasic() throws Exception {
-
-		String t;
-		Map m;
-		List l;
-
-		// Simple string
-		// Top level
-		t = "_value=a";
-		assertEquals("a", p.parse(t, Object.class));
-		assertEquals("a", p.parse(t, String.class));
-		t = "_value='a'";
-		assertEquals("a", p.parse(t, String.class));
-		assertEquals("a", p.parse(t, Object.class));
-		t = "_value= 'a' ";
-		assertEquals("a", p.parse(t, String.class));
-
-		t = "a";
-		assertEquals("a", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("a", p.parse(PartType.HEADER, t, bs.string()));
-		t = "'a'";
-		assertEquals("a", p.parse(PartType.HEADER, t, bs.string()));
-		assertEquals("a", p.parse(PartType.HEADER, t, bs.object()));
-		t = " 'a' ";
-		assertEquals("a", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?a=a";
-		assertEquals("a", p.parse(t, Map.class).get("a"));
-
-		// Simple map
-		// Top level
-		t = "?a=b&c=123&d=false&e=true&f=null";
-		m = p.parse(t, Map.class);
-		assertEquals("b", m.get("a"));
-		assertTrue(m.get("c") instanceof Number);
-		assertEquals(123, m.get("c"));
-		assertTrue(m.get("d") instanceof Boolean);
-		assertEquals(Boolean.FALSE, m.get("d"));
-		assertTrue(m.get("e") instanceof Boolean);
-		assertEquals(Boolean.TRUE, m.get("e"));
-		assertNull(m.get("f"));
-
-		t = "(a=b,c=123,d=false,e=true,f=%00)";
-		m = p.parse(PartType.HEADER, t, bs.getClassMeta(Map.class));
-		assertEquals("b", m.get("a"));
-		assertTrue(m.get("c") instanceof Number);
-		assertEquals(123, m.get("c"));
-		assertTrue(m.get("d") instanceof Boolean);
-		assertEquals(Boolean.FALSE, m.get("d"));
-		assertTrue(m.get("e") instanceof Boolean);
-		assertEquals(Boolean.TRUE, m.get("e"));
-		assertEquals("%00", m.get("f"));
-
-		t = "(a=b,c=123,d=false,e=true,f=null)";
-		m = p.parse(PartType.HEADER, t, bs.getClassMeta(Map.class));
-		assertTrue(m.containsKey("f"));
-		assertNull(m.get("f"));
-
-		t = "?a=true";
-		m = p.parse(t, HashMap.class, String.class, Boolean.class);
-		assertTrue(m.get("a") instanceof Boolean);
-		assertEquals("true", m.get("a").toString());
-
-		// null
-		// Top level
-		t = "_value=null";
-		assertNull(p.parse(t, Object.class));
-		t = "null";
-		assertNull(p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?null=null";
-		m = p.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-
-		t = "?null=null";
-		m = p.parse(t, Map.class);
-		assertTrue(m.containsKey(null));
-		assertNull(m.get(null));
-
-		// 3rd level
-		t = "?null=(null=null)";
-		m = p.parse(t, Map.class);
-		assertTrue(((Map)m.get(null)).containsKey(null));
-		assertNull(((Map)m.get(null)).get(null));
-
-		// Empty array
-		// Top level
-		t = "@()";
-		l = (List)p.parse(PartType.HEADER, t, bs.object());
-		assertTrue(l.isEmpty());
-		t = " @( ) ";
-		l = p.parse(PartType.HEADER, t, bs.getClassMeta(List.class));
-		assertTrue(l.isEmpty());
-
-		// 2nd level in map
-		t = "?x=@()";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-		m = (Map)p.parse(t, Object.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-		t = "?x=@()";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertTrue(m.containsKey("x"));
-		assertTrue(((List)m.get("x")).isEmpty());
-
-		// Empty 2 dimensional array
-		t = "_value=@(@())";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-		t = "0=@()";
-		l = p.parse(t, LinkedList.class, List.class);
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-		t = "@(@())";
-		l = (List)p.parse(PartType.HEADER, t, bs.object());
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-		t = "@(@())";
-		l = (List)p.parse(PartType.HEADER, t, bs.getClassMeta(LinkedList.class, List.class));
-		assertTrue(l.size() == 1);
-		l = (List)l.get(0);
-		assertTrue(l.isEmpty());
-
-		// Array containing empty string
-		// Top level
-		t = "_value=@('')";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-		t = "0=''";
-		l = p.parse(t, List.class, String.class);
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-		t = "@('')";
-		l = (List)p.parse(PartType.HEADER, t, bs.object());
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-		t = "@('')";
-		l = (List)p.parse(PartType.HEADER, t, bs.getClassMeta(List.class, String.class));
-		assertTrue(l.size() == 1);
-		assertEquals("", l.get(0));
-
-		// 2nd level
-		t = "?''=@('')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", ((List)m.get("")).get(0));
-		t = "?''=@('')";
-		m = p.parse(t, HashMap.class, String.class, List.class);
-		assertEquals("", ((List)m.get("")).get(0));
-
-		// Array containing 3 empty strings
-		t = "_value=@('','','')";
-		l = (List)p.parse(t, Object.class);
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-		t = "0=''&1=''&2=''";
-		l = p.parse(t, List.class, Object.class);
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-		t = "@('','','')";
-		l = (List)p.parse(PartType.HEADER, t, bs.object());
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-		t = "@('','','')";
-		l = (List)p.parse(PartType.HEADER, t, bs.getClassMeta(List.class, Object.class));
-		assertTrue(l.size() == 3);
-		assertEquals("", l.get(0));
-		assertEquals("", l.get(1));
-		assertEquals("", l.get(2));
-
-		// String containing \u0000
-		// Top level
-		t = "_value='\u0000'";
-		assertEquals("\u0000", p.parse(t, Object.class));
-		t = "_value='\u0000'";
-		assertEquals("\u0000", p.parse(t, String.class));
-		assertEquals("\u0000", p.parse(t, Object.class));
-		t = "'\u0000'";
-		assertEquals("\u0000", p.parse(PartType.HEADER, t, bs.object()));
-		t = "'\u0000'";
-		assertEquals("\u0000", p.parse(PartType.HEADER, t, bs.string()));
-		assertEquals("\u0000", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?'\u0000'='\u0000'";
-		m = (Map)p.parse(t, Object.class);
-		assertTrue(m.size() == 1);
-		assertEquals("\u0000", m.get("\u0000"));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertTrue(m.size() == 1);
-		assertEquals("\u0000", m.get("\u0000"));
-
-		// Boolean
-		// Top level
-		t = "_value=false";
-		Boolean b = (Boolean)p.parse(t, Object.class);
-		assertEquals(Boolean.FALSE, b);
-		b = p.parse(t, Boolean.class);
-		assertEquals(Boolean.FALSE, b);
-		t = "_value=false";
-		b = p.parse(t, Boolean.class);
-		assertEquals(Boolean.FALSE, b);
-		t = "false";
-		b = (Boolean)p.parse(PartType.HEADER, t, bs.object());
-		assertEquals(Boolean.FALSE, b);
-		b = p.parse(PartType.HEADER, t, bs.getClassMeta(Boolean.class));
-		assertEquals(Boolean.FALSE, b);
-		t = "false";
-		b = p.parse(PartType.HEADER, t, bs.getClassMeta(Boolean.class));
-		assertEquals(Boolean.FALSE, b);
-
-		// 2nd level
-		t = "?x=false";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals(Boolean.FALSE, m.get("x"));
-		t = "?x=false";
-		m = p.parse(t, HashMap.class, String.class, Boolean.class);
-		assertEquals(Boolean.FALSE, m.get("x"));
-
-		// Number
-		// Top level
-		t = "_value=123";
-		Integer i = (Integer)p.parse(t, Object.class);
-		assertEquals(123, i.intValue());
-		i = p.parse(t, Integer.class);
-		assertEquals(123, i.intValue());
-		Double d = p.parse(t, Double.class);
-		assertEquals(123, d.intValue());
-		Float f = p.parse(t, Float.class);
-		assertEquals(123, f.intValue());
-		t = "_value=123";
-		i = p.parse(t, Integer.class);
-		assertEquals(123, i.intValue());
-		t = "123";
-		i = (Integer)p.parse(PartType.HEADER, t, bs.object());
-		assertEquals(123, i.intValue());
-		i = p.parse(PartType.HEADER, t, bs.getClassMeta(Integer.class));
-		assertEquals(123, i.intValue());
-		d = p.parse(PartType.HEADER, t, bs.getClassMeta(Double.class));
-		assertEquals(123, d.intValue());
-		f = p.parse(PartType.HEADER, t, bs.getClassMeta(Float.class));
-		assertEquals(123, f.intValue());
-		t = "123";
-		i = p.parse(PartType.HEADER, t, bs.getClassMeta(Integer.class));
-		assertEquals(123, i.intValue());
-
-		// 2nd level
-		t = "?x=123";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals(123, ((Integer)m.get("x")).intValue());
-		m = p.parse(t, HashMap.class, String.class, Double.class);
-		assertEquals(123, ((Double)m.get("x")).intValue());
-
-		// Unencoded chars
-		// Top level
-		t = "_value=x;/?:@-_.!*'";
-		assertEquals("x;/?:@-_.!*'", p.parse(t, Object.class));
-		t = "x;/?:@-_.!*'";
-		assertEquals("x;/?:@-_.!*'", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?x;/?:@-_.!*'=x;/?:@-_.!*'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-		m = p.parse(t, HashMap.class, String.class, String.class);
-		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
-
-		// Encoded chars
-		// Top level
-		t = "_value=x{}|\\^[]`<>#%\"&+";
-		try {
-			assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(t, Object.class));
-			fail("Expected parse exception from invalid hex sequence.");
-		} catch (ParseException e) {
-			// Good.
-		}
-		t = "_value=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B";
-		assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(t, Object.class));
-		assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(t, String.class));
-		t = "x{}|\\^[]`<>#%\"&+";
-		assertEquals("x{}|\\^[]`<>#%\"&+", p.parse(PartType.HEADER, t, bs.object()));
-		t = "x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B";
-		assertEquals("x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+";
-		try {
-			m = (Map)p.parse(t, Object.class);
-			fail("Expected parse exception from invalid hex sequence.");
-		} catch (ParseException e) {
-			// Good.
-		}
-		t = "?x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x{}|\\^[]`<>#%\"&+", m.get("x{}|\\^[]`<>#%\"&+"));
-
-		// Special chars
-		// These characters are escaped and not encoded.
-		// Top level
-		t = "_value='x$,()'";
-		assertEquals("x$,()", p.parse(t, Object.class));
-		t = "'x$,()'";
-		assertEquals("x$,()", p.parse(PartType.HEADER, t, bs.object()));
-		t = "_value='x~~$~~,~~(~~)'";
-		assertEquals("x~$~,~(~)", p.parse(t, Object.class));
-		t = "'x~~$~~,~~(~~)'";
-		assertEquals("x~$~,~(~)", p.parse(PartType.HEADER, t, bs.object()));
-
-		// At secondary levels, these characters are escaped and not encoded.
-		// 2nd level
-		t = "?'x$,()'='x$,()'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()", m.get("x$,()"));
-		t = "?'x~~$~~,~~(~~)'='x~~$~~,~~(~~)'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x~$~,~(~)", m.get("x~$~,~(~)"));
-
-		// Equals sign
-		// Gets encoded at top level, and encoded+escaped at 2nd level.
-		// Top level
-		t = "_value='x='";
-		assertEquals("x=", p.parse(t, Object.class));
-		t = "_value='x%3D'";
-		assertEquals("x=", p.parse(t, Object.class));
-		t = "'x='";
-		assertEquals("x=", p.parse(PartType.HEADER, t, bs.object()));
-		t = "'x%3D'";
-		assertEquals("x%3D", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?'x%3D'='x%3D'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "?'x~~%3D'='x~~%3D'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x~=", m.get("x~="));
-
-		// String starting with parenthesis
-		// Top level
-		t = "_value='()'";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-		t = "_value='()'";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-		t = "'()'";
-		assertEquals("()", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("()", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?'()'='()'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("()", m.get("()"));
-		t = "?'()'='()'";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("()", m.get("()"));
-
-		// String starting with $
-		// Top level
-		t = "_value=$a";
-		assertEquals("$a", p.parse(t, Object.class));
-		t = "_value=$a";
-		assertEquals("$a", p.parse(t, Object.class));
-		t = "$a";
-		assertEquals("$a", p.parse(PartType.HEADER, t, bs.object()));
-		t = "$a";
-		assertEquals("$a", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?$a=$a";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("$a", m.get("$a"));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("$a", m.get("$a"));
-
-		// Blank string
-		// Top level
-		t = "_value=";
-		assertEquals("", p.parse(t, Object.class));
-		t = "";
-		assertEquals("", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?=";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", m.get(""));
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("", m.get(""));
-
-		// 3rd level
-		t = "?=(=)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("", ((Map)m.get("")).get(""));
-		t = "?=(=)";
-		m = p.parse(t, HashMap.class, String.class, HashMap.class);
-		assertEquals("", ((Map)m.get("")).get(""));
-
-		// Newline character
-		// Top level
-		t = "_value='%0A'";
-		assertEquals("\n", p.parse(t, Object.class));
-		t = "'%0A'";
-		assertEquals("%0A", p.parse(PartType.HEADER, t, bs.object()));
-		t = "'\n'";
-		assertEquals("\n", p.parse(PartType.HEADER, t, bs.object()));
-
-		// 2nd level
-		t = "?'%0A'='%0A'";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("\n", m.get("\n"));
-
-		// 3rd level
-		t = "?'%0A'=('%0A'='%0A')";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("\n", ((Map)m.get("\n")).get("\n"));
-	}
-
-	//====================================================================================================
-	// Unicode character test
-	//====================================================================================================
-	@Test
-	public void testUnicodeChars() throws Exception {
-		String t;
-		Map m;
-
-		// 2-byte UTF-8 character
-		// Top level
-		t = "_value=¢";
-		assertEquals("¢", p.parse(t, Object.class));
-		assertEquals("¢", p.parse(t, String.class));
-		t = "_value=%C2%A2";
-		assertEquals("¢", p.parse(t, Object.class));
-		assertEquals("¢", p.parse(t, String.class));
-		t = "¢";
-		assertEquals("¢", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("¢", p.parse(PartType.HEADER, t, bs.string()));
-		t = "%C2%A2";
-		assertEquals("%C2%A2", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("%C2%A2", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?%C2%A2=%C2%A2";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("¢", m.get("¢"));
-
-		// 3rd level
-		t = "?%C2%A2=(%C2%A2=%C2%A2)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
-
-		// 3-byte UTF-8 character
-		// Top level
-		t = "_value=€";
-		assertEquals("€", p.parse(t, Object.class));
-		assertEquals("€", p.parse(t, String.class));
-		t = "_value=%E2%82%AC";
-		assertEquals("€", p.parse(t, Object.class));
-		assertEquals("€", p.parse(t, String.class));
-		t = "€";
-		assertEquals("€", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("€", p.parse(PartType.HEADER, t, bs.string()));
-		t = "%E2%82%AC";
-		assertEquals("%E2%82%AC", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("%E2%82%AC", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?%E2%82%AC=%E2%82%AC";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("€", m.get("€"));
-
-		// 3rd level
-		t = "?%E2%82%AC=(%E2%82%AC=%E2%82%AC)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("€", ((Map)m.get("€")).get("€"));
-
-		// 4-byte UTF-8 character
-		// Top level
-		t = "_value=𤭢";
-		assertEquals("𤭢", p.parse(t, Object.class));
-		assertEquals("𤭢", p.parse(t, String.class));
-		t = "_value=%F0%A4%AD%A2";
-		assertEquals("𤭢", p.parse(t, Object.class));
-		assertEquals("𤭢", p.parse(t, String.class));
-		t = "𤭢";
-		assertEquals("𤭢", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("𤭢", p.parse(PartType.HEADER, t, bs.string()));
-		t = "%F0%A4%AD%A2";
-		assertEquals("%F0%A4%AD%A2", p.parse(PartType.HEADER, t, bs.object()));
-		assertEquals("%F0%A4%AD%A2", p.parse(PartType.HEADER, t, bs.string()));
-
-		// 2nd level
-		t = "?%F0%A4%AD%A2=%F0%A4%AD%A2";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("𤭢", m.get("𤭢"));
-
-		// 3rd level
-		t = "?%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2)";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
-	}
-
-	//====================================================================================================
-	// Test simple bean
-	//====================================================================================================
-	@Test
-	public void testSimpleBean() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		A t;
-
-		String s = "?f1=foo&f2=123";
-		t = p.parse(s, A.class);
-		assertEquals("foo", t.f1);
-		assertEquals(123, t.f2);
-
-		s = "(f1=foo,f2=123)";
-		t = p.parse(PartType.HEADER, s, bs.getClassMeta(A.class));
-		assertEquals("foo", t.f1);
-		assertEquals(123, t.f2);
-
-		s = "('f1'='foo','f2'=123)";
-		t = p.parse(PartType.HEADER, s, bs.getClassMeta(A.class));
-		assertEquals("foo", t.f1);
-		assertEquals(123, t.f2);
-	}
-
-	public static class A {
-		public String f1;
-		public int f2;
-	}
-
-	//====================================================================================================
-	// Test URL-encoded strings with no-value parameters.
-	//====================================================================================================
-	@Test
-	public void testNoValues() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		ObjectMap m;
-
-		String s = "?f1";
-		m = p.parse(s, ObjectMap.class);
-		assertTrue(m.containsKey("f1"));
-		assertNull(m.get("f1"));
-		s = "?f1=f2&f3";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("f2", m.get("f1"));
-		assertTrue(m.containsKey("f3"));
-		assertNull(m.get("f3"));
-	}
-
-	//====================================================================================================
-	// Test URL-encoded strings parsed into plain-text values using UrlEncodingParser.parseIntoSimpleMap().
-	//====================================================================================================
-	@Test
-	public void testParseIntoSimpleMap() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		Map<String,String[]> m;
-
-		String s = "?f1=,()=&f2a=$b(true)&f2b=true&f3a=$n(123)&f3b=123&f4=$s(foo)";
-		m = p.parseIntoSimpleMap(s, null);
-		assertEquals(",()=", m.get("f1")[0]);
-		assertEquals("$b(true)", m.get("f2a")[0]);
-		assertEquals("true", m.get("f2b")[0]);
-		assertEquals("$n(123)", m.get("f3a")[0]);
-		assertEquals("123", m.get("f3b")[0]);
-		assertEquals("$s(foo)", m.get("f4")[0]);
-
-		s = "f1=v1&=";
-		m = p.parseIntoSimpleMap(s, null);
-		assertEquals("v1", m.get("f1")[0]);
-		assertEquals("", m.get("")[0]);
-
-		s = "f1=v1&f2&f3";
-		m = p.parseIntoSimpleMap(s, null);
-		assertEquals("v1", m.get("f1")[0]);
-		assertTrue(m.containsKey("f2"));
-		assertTrue(m.containsKey("f3"));
-		assertNull(m.get("f2"));
-		assertNull(m.get("f3"));
-	}
-
-	//====================================================================================================
-	// Test parsing URL-encoded strings with multiple values.
-	//====================================================================================================
-	@Test
-	public void testParseIntoSimpleMapMultiValues() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		Map<String,String[]> m;
-
-		String s = "?f1&f1&f2&f2=abc&f2=def&f2";
-		m = p.parseIntoSimpleMap(s, null);
-		assertObjectEquals("{f1:null,f2:['abc','def']}", m);
-	}
-
-	@Test
-	public void testEmptyString() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-
-		String s = "";
-		B b = p.parse(s, B.class);
-		assertEquals("f1", b.f1);
-	}
-
-	public static class B {
-		public String f1 = "f1";
-	}
-
-	//====================================================================================================
-	// Test comma-delimited list parameters.
-	//====================================================================================================
-	@Test
-	public void testCommaDelimitedLists() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-
-		String s = "?f1=1,2,3&f2=a,b,c&f3=true,false&f4=&f5";
-		C c = p.parse(s, C.class);
-		assertObjectEquals("{f1:[1,2,3],f2:['a','b','c'],f3:[true,false],f4:[]}", c);
-	}
-
-	public static class C {
-		public int[] f1;
-		public String[] f2;
-		public boolean[] f3;
-		public String[] f4;
-		public String[] f5;
-	}
-
-	//====================================================================================================
-	// Test comma-delimited list parameters with special characters.
-	//====================================================================================================
-	@Test
-	public void testCommaDelimitedListsWithSpecialChars() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		String s;
-		C1 c;
-
-		// In the string below, the ~ character should not be interpreted as an escape.
-		s = "?f1=a~b,a~b";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['a~b','a~b']}", c);
-
-		s = "?f1=@(a~b,a~b)";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['a~b','a~b']}", c);
-
-		s = "?f1=@('a~b','a~b')";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['a~b','a~b']}", c);
-
-		s = "?f1=@('a~b','a~b')";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['a~b','a~b']}", c);
-
-		s = "?f1=@('a~b','a~b')";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['a~b','a~b']}", c);
-
-		s = "?f1=~~,~~";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['~','~']}", c);
-
-		s = "?f1=@(~~,~~)";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['~','~']}", c);
-
-		s = "?f1=@(~~~~~~,~~~~~~)";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['~~~','~~~']}", c);
-
-		s = "?f1=@('~~~~~~','~~~~~~')";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['~~~','~~~']}", c);
-
-		// The ~ should be treated as an escape if followed by any of the following characters:  '~
-		s = "?f1=~'~~,~'~~";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
-
-		s = "?f1=@(~'~~,~'~~)";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
-
-		s = "?f1=@('~'~~','~'~~')";
-		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
-
-		s = "?a~b=a~b";
-		ObjectMap m = p.parse(s, ObjectMap.class);
-		assertEquals("{'a~b':'a~b'}", m.toString());
-
-		s = "?'a~b'='a~b'";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'a~b':'a~b'}", m.toString());
-
-		s = "?~~=~~";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'~':'~'}", m.toString());
-
-		s = "?'~~'='~~'";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'~':'~'}", m.toString());
-
-		s = "?~~~~~~=~~~~~~";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'~~~':'~~~'}", m.toString());
-
-		s = "?'~~~~~~'='~~~~~~'";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'~~~':'~~~'}", m.toString());
-	}
-
-	public static class C1 {
-		public String[] f1;
-	}
-
-	//====================================================================================================
-	// Test comma-delimited list parameters.
-	//====================================================================================================
-	@Test
-	public void testWhitespace() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
-		String s;
-		ObjectMap m;
-
-		s = "?f1=foo\n\t&f2=bar\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{f1:'foo',f2:'bar'}", m.toString());
-
-		s = "?f1='\n\t'&f2='\n\t'";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("\n\t", m.getString("f1"));
-		assertEquals("\n\t", m.getString("f2"));
-
-		s = "?f1='\n\t'\n\t&f2='\n\t'\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("\n\t", m.getString("f1"));
-		assertEquals("\n\t", m.getString("f2"));
-		assertEquals("{f1:'\\n\\t',f2:'\\n\\t'}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
-
-		s = "?f1='\n\t'\n\t&f2='\n\t'\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("\n\t", m.getString("f1"));
-		assertEquals("\n\t", m.getString("f2"));
-		assertEquals("{f1:'\\n\\t',f2:'\\n\\t'}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
-
-		s = "?f1=(\n\tf1a=a,\n\tf1b=b\n\t)\n\t&f2=(\n\tf2a=a,\n\tf2b=b\n\t)\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{f1:{f1a:'a',f1b:'b'},f2:{f2a:'a',f2b:'b'}}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
-		D d = p.parse(s, D.class);
-		assertObjectEquals("{f1:{f1a:'a',f1b:'b'},f2:{f2a:'a',f2b:'b'}}", d);  // Note that JsonSerializer escapes newlines and tabs.
-
-		s = "?f1=(\n\tf1a='\n\t',\n\tf1b='\n\t'\n\t)\n\t&f2=(\n\tf2a='\n\t',\n\tf2b='\n\t'\n\t)\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{f1:{f1a:'\\n\\t',f1b:'\\n\\t'},f2:{f2a:'\\n\\t',f2b:'\\n\\t'}}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
-		d = p.parse(s, D.class);
-		assertObjectEquals("{f1:{f1a:'\\n\\t',f1b:'\\n\\t'},f2:{f2a:'\\n\\t',f2b:'\\n\\t'}}", d);  // Note that JsonSerializer escapes newlines and tabs.
-
-		s = "?f1=@(\n\tfoo,\n\tbar\n\t)\n\t&f2=@(\n\tfoo,\n\tbar\n\t)\n\t";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{f1:['foo','bar'],f2:['foo','bar']}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
-
-		s = "f1=a,\n\tb,\n\tc\n\t&f2=1,\n\t2,\n\t3\n\t&f3=true,\n\tfalse\n\t";
-		E e = p.parse(s, E.class);
-		assertObjectEquals("{f1:['a','b','c'],f2:[1,2,3],f3:[true,false]}", e);
-
-		s = "f1=a%2C%0D%0Ab%2C%0D%0Ac%0D%0A&f2=1%2C%0D%0A2%2C%0D%0A3%0D%0A&f3=true%2C%0D%0Afalse%0D%0A";
-		e = p.parse(s, E.class);
-		assertObjectEquals("{f1:['a','b','c'],f2:[1,2,3],f3:[true,false]}", e);
-	}
-
-	public static class D {
-		public D1 f1;
-		public D2 f2;
-	}
-
-	public static class D1 {
-		public String f1a, f1b;
-	}
-
-	public static class D2 {
-		public String f2a, f2b;
-	}
-
-	public static class E {
-		public String[] f1;
-		public int[] f2;
-		public boolean[] f3;
-	}
-
-	//====================================================================================================
-	// Multi-part parameters on beans via URLENC_expandedParams
-	//====================================================================================================
-	@Test
-	public void testMultiPartParametersOnBeansViaProperty() throws Exception {
-		UrlEncodingParser p;
-		String in;
-
-		p = new UrlEncodingParserBuilder().expandedParams(true).build();
-		in = ""
-			+ "f01=a&f01=b"
-			+ "&f02=c&f02=d"
-			+ "&f03=1&f03=2"
-			+ "&f04=3&f04=4"
-			+ "&f05=@(e,f)&f05=@(g,h)"
-			+ "&f06=@(i,j)&f06=@(k,l)"
-			+ "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
-			+ "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
-			+ "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
-			+ "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
-			+ "&f11=a&f11=b"
-			+ "&f12=c&f12=d"
-			+ "&f13=1&f13=2"
-			+ "&f14=3&f14=4"
-			+ "&f15=@(e,f)&f15=@(g,h)"
-			+ "&f16=@(i,j)&f16=@(k,l)"
-			+ "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
-			+ "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
-			+ "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
-			+ "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
-
-		DTOs.B t = p.parse(in, DTOs.B.class);
-		String e = "{"
-			+ "f01:['a','b'],"
-			+ "f02:['c','d'],"
-			+ "f03:[1,2],"
-			+ "f04:[3,4],"
-			+ "f05:[['e','f'],['g','h']],"
-			+ "f06:[['i','j'],['k','l']],"
-			+ "f07:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f08:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f09:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f10:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f11:['a','b'],"
-			+ "f12:['c','d'],"
-			+ "f13:[1,2],"
-			+ "f14:[3,4],"
-			+ "f15:[['e','f'],['g','h']],"
-			+ "f16:[['i','j'],['k','l']],"
-			+ "f17:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f18:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f19:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f20:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]]"
-		+"}";
-		assertSortedObjectEquals(e, t);
-	}
-
-	//====================================================================================================
-	// Multi-part parameters on beans via @UrlEncoding.expandedParams on class
-	//====================================================================================================
-	@Test
-	public void testMultiPartParametersOnBeansViaAnnotationOnClass() throws Exception {
-		UrlEncodingParser p;
-		String in;
-		p = UrlEncodingParser.DEFAULT;
-		in = ""
-			+ "f01=a&f01=b"
-			+ "&f02=c&f02=d"
-			+ "&f03=1&f03=2"
-			+ "&f04=3&f04=4"
-			+ "&f05=@(e,f)&f05=@(g,h)"
-			+ "&f06=@(i,j)&f06=@(k,l)"
-			+ "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
-			+ "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
-			+ "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
-			+ "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
-			+ "&f11=a&f11=b"
-			+ "&f12=c&f12=d"
-			+ "&f13=1&f13=2"
-			+ "&f14=3&f14=4"
-			+ "&f15=@(e,f)&f15=@(g,h)"
-			+ "&f16=@(i,j)&f16=@(k,l)"
-			+ "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
-			+ "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
-			+ "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
-			+ "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
-
-		DTOs.C t = p.parse(in, DTOs.C.class);
-		String e = "{"
-			+ "f01:['a','b'],"
-			+ "f02:['c','d'],"
-			+ "f03:[1,2],"
-			+ "f04:[3,4],"
-			+ "f05:[['e','f'],['g','h']],"
-			+ "f06:[['i','j'],['k','l']],"
-			+ "f07:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f08:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f09:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f10:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f11:['a','b'],"
-			+ "f12:['c','d'],"
-			+ "f13:[1,2],"
-			+ "f14:[3,4],"
-			+ "f15:[['e','f'],['g','h']],"
-			+ "f16:[['i','j'],['k','l']],"
-			+ "f17:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f18:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
-			+ "f19:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
-			+ "f20:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]]"
-		+"}";
-		assertSortedObjectEquals(e, t);
-	}
-}
\ No newline at end of file