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