1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2014 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpackage org.chromium.mojo.bindings; 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport android.test.suitebuilder.annotation.SmallTest; 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.MojoTestCase; 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.nio.ByteBuffer; 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.nio.ByteOrder; 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez/** 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * Testing {@link ValidationTestUtil}. 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpublic class ValidationTestUtilTest extends MojoTestCase { 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * Check that the input parser is correct on a given input. 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public static void checkInputParser( 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input, boolean isInputValid, ByteBuffer expectedData, int expectedHandlesCount) { 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ValidationTestUtil.Data data = ValidationTestUtil.parseData(input); 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez if (isInputValid) { 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertNull(data.getErrorMessage()); 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(expectedData, data.getData()); 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(expectedHandlesCount, data.getHandlesCount()); 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } else { 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertNotNull(data.getErrorMessage()); 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertNull(data.getData()); 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * Testing {@link ValidationTestUtil#parseData(String)}. 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @SmallTest 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void testCorrectMessageParsing() { 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Test empty input. 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = ""; 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(0); 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.LITTLE_ENDIAN); 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Test input that only consists of comments and whitespaces. 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = " \t // hello world \n\r \t// the answer is 42 "; 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(0); 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "[u1]0x10// hello world !! \n\r \t [u2]65535 \n" 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez + "[u4]65536 [u8]0xFFFFFFFFFFFFFFFF 0 0Xff"; 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(17); 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0x10); 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putShort((short) 65535); 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putInt(65536); 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putLong(-1); 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0); 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0xff); 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "[s8]-0x800 [s1]-128\t[s2]+0 [s4]-40"; 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(15); 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putLong(-0x800); 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) -128); 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putShort((short) 0); 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putInt(-40); 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "[b]00001011 [b]10000000 // hello world\r [b]00000000"; 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(3); 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 11); 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 128); 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0); 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "[f]+.3e9 [d]-10.03"; 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(12); 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putFloat(+.3e9f); 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putDouble(-10.03); 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "[dist4]foo 0 [dist8]bar 0 [anchr]foo [anchr]bar"; 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(14); 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putInt(14); 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0); 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putLong(9); 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.put((byte) 0); 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 0); 115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String input = "// This message has handles! \n[handles]50 [u8]2"; 118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(8); 119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.putLong(2); 121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.flip(); 122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, true, expected, 50); 124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Test some failure cases. 127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez { 128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez String error_inputs[] = { 129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "/ hello world", 130645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[u1]x", 131645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[u2]-1000", 132645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[u1]0x100", 133645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[s2]-0x8001", 134645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[b]1", 135645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[b]1111111k", 136645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[dist4]unmatched", 137645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[anchr]hello [dist8]hello", 138645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[dist4]a [dist4]a [anchr]a", 139645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "[dist4]a [anchr]a [dist4]a [anchr]a", 140645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez "0 [handles]50" 141645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }; 142645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 143645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez for (String input : error_inputs) { 144645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ByteBuffer expected = ByteBuffer.allocateDirect(0); 145645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez expected.order(ByteOrder.nativeOrder()); 146645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez checkInputParser(input, false, expected, 0); 147645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 148645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 149645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 150645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 151645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 152