13081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen/* 23081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * Copyright (C) 2016 The Android Open Source Project 33081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * 43081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * Licensed under the Apache License, Version 2.0 (the "License"); 53081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * you may not use this file except in compliance with the License. 63081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * You may obtain a copy of the License at 73081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * 83081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * http://www.apache.org/licenses/LICENSE-2.0 93081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * 103081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * Unless required by applicable law or agreed to in writing, software 113081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * distributed under the License is distributed on an "AS IS" BASIS, 123081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * See the License for the specific language governing permissions and 143081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen * limitations under the License 153081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen */ 163081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yenpackage com.android.internal.telephony; 173081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 183081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yenimport android.test.suitebuilder.annotation.SmallTest; 193081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yenimport com.android.internal.telephony.VisualVoicemailSmsParser.WrappedMessageData; 203081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yenimport junit.framework.TestCase; 213081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 223081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yenpublic class VisualVoicemailSmsParserTest extends TestCase { 233081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 243081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 253081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsing() { 263081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 273081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUS:st=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1"); 283081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 293081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("STATUS", result.prefix); 303081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("R", result.fields.getString("st")); 313081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("rc")); 323081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("srv")); 333081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("dn")); 343081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("ipt")); 353081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("spt")); 363081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("eg@example.com", result.fields.getString("u")); 373081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("pw")); 383081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 393081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 403081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 413081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsing_TrailingSemiColon() { 423081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 433081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUS:st=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1;"); 443081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 453081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("STATUS", result.prefix); 463081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("R", result.fields.getString("st")); 473081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("rc")); 483081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("srv")); 493081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("dn")); 503081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("ipt")); 513081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("spt")); 523081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("eg@example.com", result.fields.getString("u")); 533081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("pw")); 543081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 553081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 563081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 573081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsing_EmptyPrefix() { 583081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 593081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM::st=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1"); 603081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 613081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("", result.prefix); 623081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("R", result.fields.getString("st")); 633081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("rc")); 643081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("srv")); 653081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("dn")); 663081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("ipt")); 673081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("0", result.fields.getString("spt")); 683081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("eg@example.com", result.fields.getString("u")); 693081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertEquals("1", result.fields.getString("pw")); 703081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 713081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 723081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 733081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsing_EmptyField() { 743081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 753081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUS:"); 763081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertTrue(result.fields.isEmpty()); 773081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 783081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 793081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 803081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_NotVvm() { 813081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 823081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "helloworld"); 833081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 843081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 853081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 863081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 873081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 883081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_PrefixMismatch() { 893081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 903081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//ANDROIDVVM:STATUS:st=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1"); 913081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 923081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 933081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 943081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 953081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 963081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_MissingFirstColon() { 973081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 983081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVMSTATUS:st=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1"); 993081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1003081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 1013081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 1023081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1033081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 1043081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_MissingSecondColon() { 1053081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1063081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUSst=R;rc=0;srv=1;dn=1;ipt=1;spt=0;u=eg@example.com;pw=1"); 1073081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1083081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 1093081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 1103081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1113081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 1123081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_MessageEndAfterClientPrefix() { 1133081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1143081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:"); 1153081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1163081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 1173081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 1183081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1193081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 1203081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_MessageEndAfterPrefix() { 1213081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1223081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUS"); 1233081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1243081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 1253081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 1263081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen 1273081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen @SmallTest 1283081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen public void testParsingFail_InvalidKeyValuePair() { 1293081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1303081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen "//VVM:STATUS:key"); 1313081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen assertNull(result); 1323081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen } 1337d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen 1347d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen @SmallTest 1357d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen public void testParsingFail_InvalidMissingKey() { 1367d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1377d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen "//VVM:STATUS:=value"); 1387d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen assertNull(result); 1397d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen } 1407d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen 1417d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen @SmallTest 1427d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen public void testParsingFail_MissingValue() { 1437d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parse("//VVM", 1447d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen "//VVM:STATUS:key="); 1457d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen assertEquals("STATUS", result.prefix); 1467d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen assertEquals("", result.fields.getString("key")); 1477d61cd7d933a2611932bfdce49deb5e4371fd4c1Ta-wei Yen } 1489452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1499452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen @SmallTest 1509452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen public void testAlternativeParsing_Mboxupdate() { 1519452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parseAlternativeFormat( 1529452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen "MBOXUPDATE?m=1;server=example.com;port=143;name=foo@example.com;pw=bar"); 1539452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1549452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("MBOXUPDATE", result.prefix); 1559452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("1", result.fields.getString("m")); 1569452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("example.com", result.fields.getString("server")); 1579452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("143", result.fields.getString("port")); 1589452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("foo@example.com", result.fields.getString("name")); 1599452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("bar", result.fields.getString("pw")); 1609452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen } 1619452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1629452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen @SmallTest 1639452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen public void testAlternativeParsing_Unrecognized() { 1649452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parseAlternativeFormat( 1659452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen "UNRECOGNIZED?cmd=STATUS"); 1669452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1679452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("UNRECOGNIZED", result.prefix); 1689452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertEquals("STATUS", result.fields.getString("cmd")); 1699452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen } 1709452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1719452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen @SmallTest 1729452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen public void testAlternativeParsingFail_MissingSeparator() { 1739452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parseAlternativeFormat( 1749452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen "I send SMS in weird formats"); 1759452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1769452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertNull(result); 1779452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen } 1789452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1799452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen @SmallTest 1809452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen public void testAlternativeParsingFail_NotWhitelistedEvent() { 1819452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen WrappedMessageData result = VisualVoicemailSmsParser.parseAlternativeFormat( 1829452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen "AreYouStillThere?"); 1839452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen 1849452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen assertNull(result); 1859452da00610c4d8c4378ee112de88214d4ec4383Ta-wei Yen } 1863081824ff4942b9bd19db7a0d9918e188c7f69d1Ta-wei Yen} 187