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 */ 16package com.android.vcard.tests; 17 18import android.text.TextUtils; 19 20import com.android.vcard.VCardUtils; 21 22import junit.framework.TestCase; 23 24import java.util.List; 25 26public class VCardUtilsTests extends TestCase { 27 public void testContainsOnlyPrintableAscii() { 28 assertTrue(VCardUtils.containsOnlyPrintableAscii((String)null)); 29 assertTrue(VCardUtils.containsOnlyPrintableAscii((String[])null)); 30 assertTrue(VCardUtils.containsOnlyPrintableAscii((List<String>)null)); 31 assertTrue(VCardUtils.containsOnlyPrintableAscii("")); 32 assertTrue(VCardUtils.containsOnlyPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 33 assertTrue(VCardUtils.containsOnlyPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 34 StringBuilder builder = new StringBuilder(); 35 for (int i = 0x20; i < 0x7F; i++) { 36 builder.append((char)i); 37 } 38 assertTrue(VCardUtils.containsOnlyPrintableAscii(builder.toString())); 39 assertTrue(VCardUtils.containsOnlyPrintableAscii("\r\n")); 40 assertFalse(VCardUtils.containsOnlyPrintableAscii("\u0019")); 41 assertFalse(VCardUtils.containsOnlyPrintableAscii("\u007F")); 42 } 43 44 public void testContainsOnlyNonCrLfPrintableAscii() { 45 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String)null)); 46 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((String[])null)); 47 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii((List<String>)null)); 48 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("")); 49 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 50 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 51 StringBuilder builder = new StringBuilder(); 52 for (int i = 0x20; i < 0x7F; i++) { 53 builder.append((char)i); 54 } 55 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii(builder.toString())); 56 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u0019")); 57 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\u007F")); 58 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\r")); 59 assertFalse(VCardUtils.containsOnlyNonCrLfPrintableAscii("\n")); 60 } 61 62 public void testContainsOnlyAlphaDigitHyphen() { 63 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String)null)); 64 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((String[])null)); 65 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen((List<String>)null)); 66 assertTrue(VCardUtils.containsOnlyAlphaDigitHyphen("")); 67 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("abcdefghijklmnopqrstuvwxyz")); 68 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 69 assertTrue(VCardUtils.containsOnlyNonCrLfPrintableAscii("0123456789-")); 70 for (int i = 0; i < 0x30; i++) { 71 if (i == 0x2D) { // - 72 continue; 73 } 74 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 75 } 76 for (int i = 0x3A; i < 0x41; i++) { 77 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 78 } 79 for (int i = 0x5B; i < 0x61; i++) { 80 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 81 } 82 for (int i = 0x7B; i < 0x100; i++) { 83 assertFalse(VCardUtils.containsOnlyAlphaDigitHyphen(String.valueOf((char)i))); 84 } 85 } 86 87 public void testToStringAvailableAsV30ParamValue() { 88 // Smoke tests. 89 assertEquals("HOME", VCardUtils.toStringAsV30ParamValue("HOME")); 90 assertEquals("TEL", VCardUtils.toStringAsV30ParamValue("TEL")); 91 assertEquals("PAGER", VCardUtils.toStringAsV30ParamValue("PAGER")); 92 93 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(""))); 94 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(null))); 95 assertTrue(TextUtils.isEmpty(VCardUtils.toStringAsV30ParamValue(" \t"))); 96 97 // non-Ascii must be allowed 98 assertEquals("\u4E8B\u52D9\u6240", 99 VCardUtils.toStringAsV30ParamValue("\u4E8B\u52D9\u6240")); 100 // Reported as bug report. 101 assertEquals("\u8D39", VCardUtils.toStringAsV30ParamValue("\u8D39")); 102 assertEquals("\"comma,separated\"", 103 VCardUtils.toStringAsV30ParamValue("comma,separated")); 104 assertEquals("\"colon:aware\"", 105 VCardUtils.toStringAsV30ParamValue("colon:aware")); 106 // CTL characters. 107 assertEquals("CTLExample", 108 VCardUtils.toStringAsV30ParamValue("CTL\u0001Example")); 109 assertTrue(TextUtils.isEmpty( 110 VCardUtils.toStringAsV30ParamValue("\u0001\u0002\u0003"))); 111 // DQUOTE must be removed. 112 assertEquals("quoted", 113 VCardUtils.toStringAsV30ParamValue("\"quoted\"")); 114 // DQUOTE must be removed basically, but we should detect a space, which 115 // require us to use DQUOTE again. 116 // Right-side has one more illegal dquote to test quote-handle code thoroughly. 117 assertEquals("\"Already quoted\"", 118 VCardUtils.toStringAsV30ParamValue("\"Already quoted\"\"")); 119 } 120 121 public void testAppearsLikeAndroidVCardQuotedPrintableByLength() { 122 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=")); 123 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=1")); 124 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12")); 125 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=")); 126 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=1")); 127 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12")); 128 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12=")); 129 } 130 131 public void testAppearsLikeAndroidVCardQuotedPrintableByContent() { 132 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("===")); 133 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("====")); 134 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=======")); 135 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=12=")); 136 assertTrue(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=34=")); 137 138 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=123")); 139 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=123=")); 140 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("_12=")); 141 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12_")); 142 assertFalse(VCardUtils.appearsLikeAndroidVCardQuotedPrintable("=12=34_56=")); 143 } 144} 145