Home | History | Annotate | Download | only in vcard
      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