13d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner/* 23d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * Copyright (C) 2014 The Android Open Source Project 33d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * 43d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * Licensed under the Apache License, Version 2.0 (the "License"); 53d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * you may not use this file except in compliance with the License. 63d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * You may obtain a copy of the License at 73d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * 83d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * http://www.apache.org/licenses/LICENSE-2.0 93d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * 103d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * Unless required by applicable law or agreed to in writing, software 113d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * distributed under the License is distributed on an "AS IS" BASIS, 123d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * See the License for the specific language governing permissions and 143d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner * limitations under the License. 153d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner */ 163d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 173d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerpackage com.android.exchange.adapter; 183d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 193d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport android.test.AndroidTestCase; 203d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport android.test.suitebuilder.annotation.SmallTest; 213d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport android.text.TextUtils; 223d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 233c193c425ff383dbc94514d055ae6778821d8471Martin Hibdonimport com.android.exchange.service.EasService; 243c193c425ff383dbc94514d055ae6778821d8471Martin Hibdon 253d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.io.ByteArrayInputStream; 263d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.io.InputStream; 273d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.io.IOException; 283d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.util.Deque; 293d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.util.ArrayDeque; 303d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerimport java.util.Arrays; 313d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 323d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner@SmallTest 333d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shraunerpublic class ParserTest extends AndroidTestCase { 343d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public class TestParser extends Parser { 353d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private Deque<Object> mExpectedData; 363d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 373d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public TestParser(InputStream in, Object[] expectedData) throws IOException{ 383d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner super(in); 393c193c425ff383dbc94514d055ae6778821d8471Martin Hibdon EasService.setProtocolLogging(true); 403d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner mExpectedData = expectedData == null ? null 413d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner : new ArrayDeque<Object>(Arrays.asList(expectedData)); 423d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 433d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 443d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @Override 453d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public boolean parse() throws IOException { 463d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner int tag; 473d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner while((tag = nextTag(START_DOCUMENT)) != END_DOCUMENT) { 483d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner if (tag == 0x0B) { 493d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String strVal = getValue(); 503d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner if (mExpectedData != null) { 513d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String expectedStrVal = (String) mExpectedData.removeFirst(); 523d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner assertEquals(expectedStrVal, strVal); 533d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 543d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } else if (tag == 0x0C) { 553d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final int intVal = getValueInt(); 563d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner if (mExpectedData != null) { 573d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final Integer expectedIntVal = (Integer) mExpectedData.removeFirst(); 583d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner assertEquals(expectedIntVal.intValue(), intVal); 593d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 603d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } else if (tag == 0x0D) { 613d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final byte[] bytes = getValueBytes(); 623d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner if (mExpectedData != null) { 633d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String expectedHexStr = stripString((String) mExpectedData.removeFirst()); 643d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String hexStr = byteArrayToHexString(bytes); 653d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner assertEquals(expectedHexStr, hexStr); 663d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 673d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 683d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 693d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner return true; 703d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 713d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 723d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 733d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); 743d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private static String byteArrayToHexString(byte[] bytes) { 753d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner char[] hexChars = new char[bytes.length * 2]; 763d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner for ( int j = 0; j < bytes.length; j++ ) { 773d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner int v = bytes[j] & 0xFF; 783d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner hexChars[j * 2] = hexArray[v >>> 4]; 793d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner hexChars[j * 2 + 1] = hexArray[v & 0x0F]; 803d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 813d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner return new String(hexChars); 823d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 833d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 843d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private static String stripString(String str) { 853d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner return TextUtils.join("", str.split(" ")); 863d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 873d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 883d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private static byte[] hexStringToByteArray(String hexStr) { 893d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String s = TextUtils.join("", hexStr.split(" ")); 903d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final int len = s.length(); 913d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final byte[] data = new byte[len / 2]; 923d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner for (int i = 0; i < len; i += 2) { 933d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) 943d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner + Character.digit(s.charAt(i+1), 16)); 953d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 963d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner return data; 973d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 983d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 993d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private static InputStream getTestInputStream(final String hexStr) { 1003d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final byte[] byteArray = hexStringToByteArray(hexStr); 1013d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner return new ByteArrayInputStream(byteArray); 1023d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1033d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1043d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private void testParserHelper(String wbxmlStr) throws Exception { 1053d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(wbxmlStr, null); 1063d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1073d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1083d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner private void testParserHelper(String wbxmlStr, Object[] expectedData) throws Exception { 1093d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final Parser parser = new TestParser(getTestInputStream(wbxmlStr), expectedData); 1103d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner parser.parse(); 1113d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1123d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1133d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1143d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testUnsupportedWbxmlTag() throws Exception { 1153d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Test parser with unsupported Wbxml tag (EXT_2 = 0xC2) 1163d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String unsupportedWbxmlTag = "03 01 6A 00 45 5F C2 05 11 22 33 44 00 01 01"; 1173d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 1183d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(unsupportedWbxmlTag); 1193d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for unsupported tag 0xC2"); 1203d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 1213d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 1223d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1233d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1243d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1253d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1263d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testUnknownCodePage() throws Exception { 1273d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Test parser with non existent code page 64 (0x40) 1283d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String unknownCodePage = "03 01 6A 00 45 00 40 4A 03 31 00 01 01"; 1293d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 1303d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(unknownCodePage); 1313d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for unknown code page 64"); 1323d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 1333d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 1343d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1353d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1363d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1373d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1383d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testUnknownTag() throws Exception { 1393d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Test parser with valid code page (0x00) but non existent tag (0x3F) 1403d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String unknownTag = "03 01 6A 00 45 7F 03 31 00 01 01"; 1413d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(unknownTag); 1423d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1433d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1443d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1453d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testTextParsing() throws Exception { 1463d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect text; has text data "DF" 1473d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String textTagWithTextData = "03 01 6A 00 45 4B 03 44 46 00 01 01"; 1483d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(textTagWithTextData, new Object[] {"DF"}); 1493d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1503d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect text; has tag with no content: <Tag/> 1513d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String textTagNoContent = "03 01 6A 00 45 0B 01"; 1523d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(textTagNoContent, new Object[] {""}); 1533d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1543d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect text; has tag and end tag with no value: <Tag></Tag> 1553d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String emptyTextTag = "03 01 6A 00 45 4B 01 01"; 1563d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(emptyTextTag, new Object[] {""}); 1573d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1583d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect text; has opaque data {0x11, 0x22, 0x33} 1593d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String textTagWithOpaqueData = "03 01 6A 00 45 4B C3 03 11 22 33 01 01"; 1603d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 1613d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(textTagWithOpaqueData); 1623d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for trying to read opaque data as text"); 1633d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 1643d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 1653d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1663d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1673d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1683d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1693d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testIntegerStringParsing() throws Exception { 1703d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect int; has text data "1" 1713d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String intTagWithIntData = "03 01 6A 00 45 4C 03 31 00 01 01"; 1723d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(intTagWithIntData, new Object[] {1}); 1733d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1743d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect int; has tag with no content: <Tag/> 1753d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String intTagNoContent = "03 01 6A 00 45 0C 01"; 1763d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(intTagNoContent, new Object[] {0}); 1773d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1783d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect int; has tag and end tag with no value: <Tag></Tag> 1793d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String emptyIntTag = "03 01 6A 00 45 4C 01 01"; 1803d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(emptyIntTag, new Object[] {0}); 1813d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1823d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect int; has text data "DF" 1833d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String intTagWithTextData = "03 01 6A 00 45 4C 03 44 46 00 01 01"; 1843d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 1853d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(intTagWithTextData); 1863d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for nonnumeric char 'D'"); 1873d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 1883d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 1893d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1903d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 1913d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1923d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 1933d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testOpaqueDataParsing() throws Exception { 1943d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect opaque; has opaque data {0x11, 0x22, 0x33} 1953d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String opaqueTagWithOpaqueData = "03 01 6A 00 45 4D C3 03 11 22 33 01 01"; 1963d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(opaqueTagWithOpaqueData, new Object[] {"11 22 33"}); 1973d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 1983d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect opaque; has tag with no content: <Tag/> 1993d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String opaqueTagNoContent = "03 01 6A 00 45 0D 01"; 2003d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(opaqueTagNoContent, new Object[] {""}); 2013d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 2023d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect opaque; has tag and end tag with no value: <Tag></Tag> 2033d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String emptyOpaqueTag = "03 01 6A 00 45 4D 01 01"; 2043d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(emptyOpaqueTag, new Object[] {""}); 2053d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 2063d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Expect opaque; has text data "DF" 2073d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String opaqueTagWithTextData = "03 01 6A 00 45 4D 03 44 46 00 01 01"; 2083d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(opaqueTagWithTextData, new Object[] {"44 46"}); 2093d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 2103d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 2113d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 2123d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testMalformedData() throws Exception { 2133d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String malformedData = "03 01 6A 00 45 4B 03 11 22 00 00 33 00 01 01"; 2143d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 2153d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(malformedData); 2163d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for improperly escaped text data"); 2173d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 2183d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 2193d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 2203d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 2213d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner 2223d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner @SmallTest 2233d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner public void testRunOnInteger() throws Exception { 2243d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner final String runOnIntegerEncoding = "03 01 6A 00 45 4D C3 81 82 83 84 85 06 11 22 33 01 01"; 2253d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner try { 2263d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner testParserHelper(runOnIntegerEncoding); 2273d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner fail("Expected EasParserException for improperly encoded integer"); 2283d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner } catch (Parser.EasParserException e) { 2293d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner // expected 2303d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner } 2313d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner } 2323d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner 2333d52ff729b82a20802bb6d5a8952040f4d961cefJay Shrauner @SmallTest 2343d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner public void testAttributeTag() throws Exception { 2353d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // Test parser with known tag with attributes 2363d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner final String tagWithAttributes = "03 01 6A 00 45 DF 06 01 03 31 00 01 01"; 2373d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner try { 2383d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner testParserHelper(tagWithAttributes); 2393d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner fail("Expected EasParserException for tag with attributes 0xDF"); 2403d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } catch (Parser.EasParserException e) { 2413d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner // expected 2423d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 2433d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner } 2443d3a9d01938c0b25f629985473fcef8f7d4455eeJay Shrauner} 245