1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package android.pim.vcard; 17 18 import android.text.TextUtils; 19 20 import junit.framework.TestCase; 21 22 import java.util.List; 23 24 public class VCardUtilsTests extends TestCase { 25 public void testContainsOnlyPrintableAscii() { 26 assertTrue(VCardUtils.containsOnlyPrintableAscii((String)null)); 27 assertTrue(VCardUtils.containsOnlyPrintableAscii((String[])null)); 28 assertTrue(VCardUtils.containsOnlyPrintableAscii((List<String>)null)); 29 assertTrue(VCardUtils.containsOnlyPrintableAscii("")); 30 assertTrue(VCardUtils.containsOnlyPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 31 assertTrue(VCardUtils.containsOnlyPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 32 StringBuilder builder = new StringBuilder(); 33 for (int i = 0x20; i < 0x7F; i++) { 34 builder.append((char)i); 35 } 36 assertTrue(VCardUtils.containsOnlyPrintableAscii(builder.toString())); 37 assertTrue(VCardUtils.containsOnlyPrintableAscii("\r\n")); 38 assertFalse(VCardUtils.containsOnlyPrintableAscii("\u0019")); 39 assertFalse(VCardUtils.containsOnlyPrintableAscii("\u007F")); 40 } 41 42 public void testContainsOnlyNonCrLfPrintableAscii() { 43 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String)null)); 44 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String[])null)); 45 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((List<String>)null)); 46 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("")); 47 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 48 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 49 StringBuilder builder = new StringBuilder(); 50 for (int i = 0x20; i < 0x7F; i++) { 51 builder.append((char)i); 52 } 53 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii(builder.toString())); 54 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u0019")); 55 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u007F")); 56 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\r")); 57 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\n")); 58 } 59 60 public void testContainsOnlyAlphaDigitHyphen() { 61 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String)null)); 62 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String[])null)); 63 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((List<String>)null)); 64 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen("")); 65 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 66 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 67 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("0123456789-")); 68 for (int i = 0; i < 0x30; i++) { 69 if (i == 0x2D) { // - 70 continue; 71 } 72 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 73 } 74 for (int i = 0x3A; i < 0x41; i++) { 75 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 76 } 77 for (int i = 0x5B; i < 0x61; i++) { 78 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 79 } 80 for (int i = 0x7B; i < 0x100; i++) { 81 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 82 } 83 } 84 85 public void testToStringAvailableAsV30ParamValue() { 86 // Smoke tests. 87 assertEquals("HOME", VCardUtils.toStringAsV30ParamValue("HOME")); 88 assertEquals("TEL", VCardUtils.toStringAsV30ParamValue("TEL")); 89 assertEquals("PAGER", VCardUtils.toStringAsV30ParamValue("PAGER")); 90 91 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(""))); 92 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(null))); 93 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(" \t"))); 94 95 // non-Ascii must be allowed 96 assertEquals("\u4E8B\u52D9\u6240", 97 VCardUtils.toStringAsV30ParamValue("\u4E8B\u52D9\u6240")); 98 // Reported as bug report. 99 assertEquals("\u8D39", VCardUtils.toStringAsV30ParamValue("\u8D39")); 100 assertEquals("\"comma,separated\"", 101 VCardUtils.toStringAsV30ParamValue("comma,separated")); 102 assertEquals("\"colon:aware\"", 103 VCardUtils.toStringAsV30ParamValue("colon:aware")); 104 // CTL characters. 105 assertEquals("CTLExample", 106 VCardUtils.toStringAsV30ParamValue("CTL\u0001Example")); 107 assertTrue(TextUtils.isEmpty( 108 VCardUtils.toStringAsV30ParamValue("\u0001\u0002\u0003"))); 109 // DQUOTE must be removed. 110 assertEquals("quoted", 111 VCardUtils.toStringAsV30ParamValue("\"quoted\"")); 112 // DQUOTE must be removed basically, but we should detect a space, which 113 // require us to use DQUOTE again. 114 // Right-side has one more illegal dquote to test quote-handle code thoroughly. 115 assertEquals("\"Already quoted\"", 116 VCardUtils.toStringAsV30ParamValue("\"Already quoted\"\"")); 117 } 118 } 119