11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage org.chromium.mojo.bindings; 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport android.test.suitebuilder.annotation.SmallTest; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.mojo.MojoTestCase; 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.nio.ByteBuffer; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.nio.ByteOrder; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Testing {@link ValidationTestUtil}. 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class ValidationTestUtilTest extends MojoTestCase { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Check that the input parser is correct on a given input. 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static void checkInputParser( 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input, boolean isInputValid, ByteBuffer expectedData, int expectedHandlesCount) { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ValidationTestUtil.Data data = ValidationTestUtil.parseData(input); 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (isInputValid) { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertNull(data.getErrorMessage()); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(expectedData, data.getData()); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(expectedHandlesCount, data.getHandlesCount()); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertNotNull(data.getErrorMessage()); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertNull(data.getData()); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Testing {@link ValidationTestUtil#parseData(String)}. 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @SmallTest 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testCorrectMessageParsing() { 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Test empty input. 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = ""; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(0); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Test input that only consists of comments and whitespaces. 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = " \t // hello world \n\r \t// the answer is 42 "; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(0); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "[u1]0x10// hello world !! \n\r \t [u2]65535 \n" + 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[u4]65536 [u8]0xFFFFFFFFFFFFFFFF 0 0Xff"; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(17); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0x10); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putShort((short) 65535); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putInt(65536); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putLong(-1); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0xff); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "[s8]-0x800 [s1]-128\t[s2]+0 [s4]-40"; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(15); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putLong(-0x800); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) -128); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putShort((short) 0); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putInt(-40); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "[b]00001011 [b]10000000 // hello world\r [b]00000000"; 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(3); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 11); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 128); 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "[f]+.3e9 [d]-10.03"; 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(12); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putFloat(+.3e9f); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putDouble(-10.03); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "[dist4]foo 0 [dist8]bar 0 [anchr]foo [anchr]bar"; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(14); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putInt(14); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0); 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putLong(9); 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.put((byte) 0); 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 0); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String input = "// This message has handles! \n[handles]50 [u8]2"; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(8); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.putLong(2); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.flip(); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, true, expected, 50); 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Test some failure cases. 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String error_inputs[] = { 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "/ hello world", 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[u1]x", 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[u2]-1000", 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[u1]0x100", 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[s2]-0x8001", 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[b]1", 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[b]1111111k", 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[dist4]unmatched", 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[anchr]hello [dist8]hello", 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[dist4]a [dist4]a [anchr]a", 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[dist4]a [anchr]a [dist4]a [anchr]a", 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "0 [handles]50" 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (String input : error_inputs) { 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ByteBuffer expected = ByteBuffer.allocateDirect(0); 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected.order(ByteOrder.nativeOrder()); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci checkInputParser(input, false, expected, 0); 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 152