14199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/* 24199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project 34199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * 44199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * you may not use this file except in compliance with the License. 64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * You may obtain a copy of the License at 74199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * 84199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 94199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * 104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * See the License for the specific language governing permissions and 144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * limitations under the License. 154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */ 164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapackage com.android.vcard.tests; 174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 182bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawaimport android.text.TextUtils; 192bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa 204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.VCardUtils; 214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport junit.framework.TestCase; 234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.List; 254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class VCardUtilsTests extends TestCase { 274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa public void testContainsOnlyPrintableAscii() { 284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii((String)null)); 294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii((String[])null)); 304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii((List<String>)null)); 314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii("")); 324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa StringBuilder builder = new StringBuilder(); 354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0x20; i < 0x7F; i++) { 364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa builder.append((char)i); 374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii(builder.toString())); 394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyPrintableAscii("\r\n")); 404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyPrintableAscii("\u0019")); 414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyPrintableAscii("\u007F")); 424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa public void testContainsOnlyNonCrLfPrintableAscii() { 454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String)null)); 464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String[])null)); 474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((List<String>)null)); 484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("")); 494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa StringBuilder builder = new StringBuilder(); 524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0x20; i < 0x7F; i++) { 534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa builder.append((char)i); 544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii(builder.toString())); 564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u0019")); 574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u007F")); 584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\r")); 594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\n")); 604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa 624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa public void testContainsOnlyAlphaDigitHyphen() { 634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String)null)); 644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String[])null)); 654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((List<String>)null)); 664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen("")); 674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("0123456789-")); 704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0; i < 0x30; i++) { 714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa if (i == 0x2D) { // - 724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa continue; 734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0x3A; i < 0x41; i++) { 774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0x5B; i < 0x61; i++) { 804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa for (int i = 0x7B; i < 0x100; i++) { 834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa } 862bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa 872bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa public void testToStringAvailableAsV30ParamValue() { 882bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // Smoke tests. 893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertEquals("HOME", VCardUtils.toStringAsV30ParamValue("HOME")); 903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertEquals("TEL", VCardUtils.toStringAsV30ParamValue("TEL")); 913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertEquals("PAGER", VCardUtils.toStringAsV30ParamValue("PAGER")); 922bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa 933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(""))); 943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(null))); 953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(" \t"))); 962bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa 972bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // non-Ascii must be allowed 982bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("\u4E8B\u52D9\u6240", 993d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("\u4E8B\u52D9\u6240")); 1002bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // Reported as bug report. 1013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa assertEquals("\u8D39", VCardUtils.toStringAsV30ParamValue("\u8D39")); 1022bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("\"comma,separated\"", 1033d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("comma,separated")); 1042bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("\"colon:aware\"", 1053d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("colon:aware")); 1062bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // CTL characters. 1072bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("CTLExample", 1083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("CTL\u0001Example")); 1092bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertTrue(TextUtils.isEmpty( 1103d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("\u0001\u0002\u0003"))); 1112bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // DQUOTE must be removed. 1122bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("quoted", 1133d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("\"quoted\"")); 1142bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // DQUOTE must be removed basically, but we should detect a space, which 1152bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // require us to use DQUOTE again. 1162bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa // Right-side has one more illegal dquote to test quote-handle code thoroughly. 1172bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa assertEquals("\"Already quoted\"", 1183d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa VCardUtils.toStringAsV30ParamValue("\"Already quoted\"\"")); 1192bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa } 120d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng 121d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng public void testAppearsLikeAndroidVCardQuotedPrintableByLength() { 122d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=")); 123d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=1")); 124d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12")); 125d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=")); 126d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=1")); 127d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12")); 128d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12=")); 129d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng } 130d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng 131d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng public void testAppearsLikeAndroidVCardQuotedPrintableByContent() { 132d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("===")); 133d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("====")); 134d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=======")); 135d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12=")); 136d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=34=")); 137d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng 138d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=123")); 139d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=123=")); 140d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("_12=")); 141d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12_")); 142d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=34_56=")); 143d98c0fe9ab6a89129c31c510ccd629a2dca148afChiao Cheng } 1444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa} 145