Index: mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtilTest.java |
diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtilTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtilTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b0c5a54c17c651a8e96e6f7977d6dc8ca6031c62 |
--- /dev/null |
+++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtilTest.java |
@@ -0,0 +1,151 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.mojo.bindings; |
+ |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+import org.chromium.mojo.MojoTestCase; |
+ |
+import java.nio.ByteBuffer; |
+import java.nio.ByteOrder; |
+ |
+/** |
+ * Testing {@link ValidationTestUtil}. |
+ */ |
+public class ValidationTestUtilTest extends MojoTestCase { |
+ |
+ /** |
+ * Check that the input parser is correct on a given input. |
+ */ |
+ public static void checkInputParser( |
+ String input, boolean isInputValid, ByteBuffer expectedData, int expectedHandlesCount) { |
+ ValidationTestUtil.Data data = ValidationTestUtil.parseData(input); |
+ if (isInputValid) { |
+ assertNull(data.getErrorMessage()); |
+ assertEquals(expectedData, data.getData()); |
+ assertEquals(expectedHandlesCount, data.getHandlesCount()); |
+ } else { |
+ assertNotNull(data.getErrorMessage()); |
+ assertNull(data.getData()); |
+ } |
+ } |
+ |
+ /** |
+ * Testing {@link ValidationTestUtil#parseData(String)}. |
+ */ |
+ @SmallTest |
+ public void testCorrectMessageParsing() { |
+ { |
+ // Test empty input. |
+ String input = ""; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(0); |
+ expected.order(ByteOrder.nativeOrder()); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ // Test input that only consists of comments and whitespaces. |
+ String input = " \t // hello world \n\r \t// the answer is 42 "; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(0); |
+ expected.order(ByteOrder.nativeOrder()); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "[u1]0x10// hello world !! \n\r \t [u2]65535 \n" + |
+ "[u4]65536 [u8]0xFFFFFFFFFFFFFFFF 0 0Xff"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(17); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.put((byte) 0x10); |
+ expected.putShort((short) 65535); |
+ expected.putInt(65536); |
+ expected.putLong(-1); |
+ expected.put((byte) 0); |
+ expected.put((byte) 0xff); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "[s8]-0x800 [s1]-128\t[s2]+0 [s4]-40"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(15); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.putLong(-0x800); |
+ expected.put((byte) -128); |
+ expected.putShort((short) 0); |
+ expected.putInt(-40); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "[b]00001011 [b]10000000 // hello world\r [b]00000000"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(3); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.put((byte) 11); |
+ expected.put((byte) 128); |
+ expected.put((byte) 0); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "[f]+.3e9 [d]-10.03"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(12); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.putFloat(+.3e9f); |
+ expected.putDouble(-10.03); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "[dist4]foo 0 [dist8]bar 0 [anchr]foo [anchr]bar"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(14); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.putInt(14); |
+ expected.put((byte) 0); |
+ expected.putLong(9); |
+ expected.put((byte) 0); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 0); |
+ } |
+ { |
+ String input = "// This message has handles! \n[handles]50 [u8]2"; |
+ ByteBuffer expected = ByteBuffer.allocateDirect(8); |
+ expected.order(ByteOrder.nativeOrder()); |
+ expected.putLong(2); |
+ expected.flip(); |
+ |
+ checkInputParser(input, true, expected, 50); |
+ } |
+ |
+ // Test some failure cases. |
+ { |
+ String error_inputs[] = { |
+ "/ hello world", |
+ "[u1]x", |
+ "[u2]-1000", |
+ "[u1]0x100", |
+ "[s2]-0x8001", |
+ "[b]1", |
+ "[b]1111111k", |
+ "[dist4]unmatched", |
+ "[anchr]hello [dist8]hello", |
+ "[dist4]a [dist4]a [anchr]a", |
+ "[dist4]a [anchr]a [dist4]a [anchr]a", |
+ "0 [handles]50" |
+ }; |
+ |
+ for (String input : error_inputs) { |
+ ByteBuffer expected = ByteBuffer.allocateDirect(0); |
+ expected.order(ByteOrder.nativeOrder()); |
+ checkInputParser(input, false, expected, 0); |
+ } |
+ } |
+ |
+ } |
+} |