You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/10/27 17:00:16 UTC

svn commit: r1189796 [2/2] - in /jackrabbit/sandbox/microkernel/src: main/java/org/apache/jackrabbit/mk/ main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/mk/json/ main/java/org/apache/jackrabbit/mk/mem/ main/java/org/apache/jac...

Added: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java?rev=1189796&view=auto
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java (added)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java Thu Oct 27 15:00:15 2011
@@ -0,0 +1,215 @@
+/*
+ * 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.jackrabbit.mk.json;
+
+import java.io.IOException;
+import junit.framework.TestCase;
+
+public class JsopStreamTest extends TestCase {
+
+    // run the micro-benchmark
+    public static void main(String... args) {
+        for (int k = 0; k < 5; k++) {
+            String s = "Hello \"World\" Hello \"World\" Hello \"World\" Hello \"World\" Hello \"World\" Hello \"World\" ";
+            long t = System.currentTimeMillis();
+            JsopWriter w = k % 2 == 1 ? new JsopBuilder() : new JsopStream();
+            for (int i = 0; i < 1000000; i++) {
+                w.value(s);
+                if (i % 100 == 0) {
+                    w.reset();
+                }
+            }
+            System.out.println(w.getClass() + ": " + (System.currentTimeMillis() - t));
+        }
+        // JsopStream: 20
+        // JsopBuilder: 1150
+    }
+
+    public void testNested() {
+        JsopStream s = new JsopStream().key("x");
+        JsopStream nested = new JsopStream().array().value(1).value(null).value(true).value(false).value("Hello").endArray();
+        s.append(nested);
+        assertEquals("\"x\":[1,null,true,false,\"Hello\"]", s.toString());
+    }
+
+    public void testJsopReader() {
+        JsopStream s = new JsopStream().tag('+').
+            key("x").object().
+                key("y").value(1).
+                key("n").value("").
+                key("z").encodedValue("n10").
+                endObject();
+        s.setLineLength(-1);
+        assertEquals("+\"x\":{\"y\":1,\"n\":\"\",\"z\":n10}", s.toString());
+        assertFalse(s.matches('-'));
+        assertTrue(s.matches('+'));
+        assertEquals("x", s.read(JsopTokenizer.STRING));
+        try {
+            s.read('}');
+            fail();
+        } catch (Exception e) {
+            // expected
+        }
+        s.read(':');
+        assertEquals("{", s.read('{'));
+        assertEquals("y", s.readString());
+        s.read(':');
+        assertEquals("1", s.readRawValue());
+        s.read(',');
+        assertEquals("n", s.readString());
+        s.read(':');
+        assertEquals("\"\"", s.readRawValue());
+        s.read(',');
+        assertEquals("z", s.readString());
+        s.read(':');
+        assertEquals("n10", s.readRawValue());
+        s.read('}');
+    }
+
+    public void testTokenizer() {
+        test("+ \"x\": {}",
+                new JsopStream().tag('+').
+                    key("x").object().endObject());
+        test("[\"-1\": -1, " +
+                "\"true\": true, " +
+                "\"false\": false, " +
+                "\"null\": null]",
+                new JsopStream().array().
+                    key("-1").value(-1).
+                    key("true").value(true).
+                    key("false").value(false).
+                    key("null").value(null).
+                    endArray());
+
+    }
+
+    static void test(String expected, JsopReader t) {
+        String j2 = prettyPrint(t);
+        assertEquals(expected, j2);
+        j2 = prettyPrint(new JsopTokenizer(j2));
+        assertEquals(expected, j2);
+    }
+
+    public static String prettyPrint(JsopReader t) {
+        StringBuilder buff = new StringBuilder();
+        while (true) {
+            prettyPrint(buff, t, "  ");
+            if (t.getTokenType() == JsopTokenizer.END) {
+                return buff.toString();
+            }
+        }
+    }
+
+    static String prettyPrint(StringBuilder buff, JsopReader t, String ident) {
+        String space = "";
+        boolean inArray = false;
+        while (true) {
+            int token = t.read();
+            switch (token) {
+                case JsopTokenizer.END:
+                    return buff.toString();
+                case JsopTokenizer.STRING:
+                    buff.append(JsopBuilder.encode(t.getToken()));
+                    break;
+                case JsopTokenizer.NUMBER:
+                case JsopTokenizer.TRUE:
+                case JsopTokenizer.FALSE:
+                case JsopTokenizer.NULL:
+                case JsopTokenizer.IDENTIFIER:
+                case JsopTokenizer.ERROR:
+                    buff.append(t.getToken());
+                    break;
+                case '{':
+                    if (t.matches('}')) {
+                        buff.append("{}");
+                    } else {
+                        buff.append("{\n").append(space += ident);
+                    }
+                    break;
+                case '}':
+                    space = space.substring(0, space.length() - ident.length());
+                    buff.append('\n').append(space).append("}");
+                    break;
+                case '[':
+                    inArray = true;
+                    buff.append("[");
+                    break;
+                case ']':
+                    inArray = false;
+                    buff.append("]");
+                    break;
+                case ',':
+                    if (!inArray) {
+                        buff.append(",\n").append(space);
+                    } else {
+                        buff.append(", ");
+                    }
+                    break;
+                default:
+                    buff.append((char) token).append(' ');
+                    break;
+            }
+        }
+    }
+
+    public void testBuilder() throws IOException {
+
+        JsopWriter buff = new JsopStream();
+        buff.tag('+').object().
+                key("foo").value("bar").
+                key("int").value(3).
+                key("decimal").encodedValue("3.0").
+                key("obj").object().
+                key("boolean").value(true).
+                key("null").value(null).
+                key("arr").array().
+                array().
+                value(1).
+                value("\u001f ~ \u007f \u0080").
+                value("42").
+                endArray().
+                array().
+                endArray().
+                endArray().
+                endObject().
+                key("some").value("more").
+                endObject();
+
+        String json = buff.toString();
+        assertEquals("+{\"foo\":\"bar\",\"int\":3,\"decimal\":3.0," +
+                "\"obj\":{\"boolean\":true,\"null\":null," +
+                "\"arr\":[[1,\"\\u001f ~ \\u007f \\u0080\",\"42\"],[]]},\"some\":\"more\"}", json);
+
+        buff.reset();
+        buff.array().
+                object().key("x").value("1").endObject().newline().
+                object().key("y").value("2").endObject().newline().
+                endArray();
+        json = buff.toString();
+        assertEquals("[{\"x\":\"1\"},{\"y\":\"2\"}]", json);
+
+        buff = new JsopStream();
+        buff.tag('+').key("x").value("1").newline();
+        buff.tag('+').key("y").value("2").newline();
+        buff.tag('+').key("z").value(false).newline();
+        json = buff.toString();
+        assertEquals("+\"x\":\"1\"+\"y\":\"2\"+\"z\":false", json);
+
+    }
+
+}
+

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java?rev=1189796&r1=1189795&r2=1189796&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java Thu Oct 27 15:00:15 2011
@@ -284,7 +284,7 @@ public class JsopTest extends TestCase {
     public void testBuilder() throws IOException {
 
         JsopBuilder buff = new JsopBuilder();
-        buff.appendTag("+ ").object().
+        buff.tag('+').object().
                 key("foo").value("bar").
                 key("int").value(3).
                 key("decimal").encodedValue("3.0").
@@ -305,7 +305,7 @@ public class JsopTest extends TestCase {
                 endObject();
 
         String json = buff.toString();
-        assertEquals("+ {\"foo\":\"bar\",\"int\":3,\"decimal\":3.0," +
+        assertEquals("+{\"foo\":\"bar\",\"int\":3,\"decimal\":3.0," +
                 "\"obj\":{\"boolean\":true,\"null\":null," +
                 "\"arr\":[[1,\"\\u001f ~ \\u007f \\u0080\",\"42\"],[]]},\"some\":\"more\"}", json);
 
@@ -318,10 +318,10 @@ public class JsopTest extends TestCase {
         assertEquals("[{\"x\":\"1\"}\n,{\"y\":\"2\"}\n]", json);
 
         buff = new JsopBuilder();
-        buff.appendTag("+ ").key("x").value("1").newline();
-        buff.appendTag("+ ").key("y").value("2").newline();
+        buff.tag('+').key("x").value("1").newline();
+        buff.tag('+').key("y").value("2").newline();
         json = buff.toString();
-        assertEquals("+ \"x\":\"1\"\n+ \"y\":\"2\"\n", json);
+        assertEquals("+\"x\":\"1\"\n+\"y\":\"2\"\n", json);
 
     }
 

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/wrapper/TestSecurityWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/wrapper/TestSecurityWrapper.java?rev=1189796&r1=1189795&r2=1189796&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/wrapper/TestSecurityWrapper.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/wrapper/TestSecurityWrapper.java Thu Oct 27 15:00:15 2011
@@ -108,16 +108,16 @@ public class TestSecurityWrapper extends
         toRevision = mkAdmin.commit("/", "^ \":rights\": \"read\"", fromRevision, "");
         String j3 = mkGuest.getJournal(fromRevision, toRevision);
         assertEquals(
-                "+ \"/test\":{\"data\":\"Hello\"}\n" +
-                "^ \"/test/data\":\"Hallo\"\n" +
-                "^ \"/test/data\":null\n",
+                "+\"/test\":{\"data\":\"Hello\"}\n" +
+                "^\"/test/data\":\"Hallo\"\n" +
+                "^\"/test/data\":null\n",
                 filterJournal(j3));
         String journal = mkAdmin.getJournal(fromRevision, toRevision);
         assertEquals(
-                "+ \"/test\":{\"data\":\"Hello\"}\n" +
-                "^ \"/test/data\":\"Hallo\"\n" +
-                "^ \"/test/data\":null\n" +
-                "+ \"/:rights\":\"read\"",
+                "+\"/test\":{\"data\":\"Hello\"}\n" +
+                "^\"/test/data\":\"Hallo\"\n" +
+                "^\"/test/data\":null\n" +
+                "+\"/:rights\":\"read\"",
                 filterJournal(journal));
     }