Home | History | Annotate | Download | only in imap
      1 /*
      2  * Copyright (C) 2010 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 
     17 package com.android.email.mail.store.imap;
     18 
     19 import static com.android.email.mail.store.imap.ImapTestUtils.createFixedLengthInputStream;
     20 
     21 import com.android.emailcommon.TempDirectory;
     22 import com.android.emailcommon.utility.Utility;
     23 
     24 import org.apache.commons.io.IOUtils;
     25 
     26 import android.test.AndroidTestCase;
     27 import android.test.suitebuilder.annotation.SmallTest;
     28 
     29 import java.io.IOException;
     30 import java.util.Date;
     31 import java.util.Locale;
     32 
     33 
     34 /**
     35  * Test for {@link ImapString} and its subclasses.
     36  */
     37 @SmallTest
     38 public class ImapStringTest extends AndroidTestCase {
     39 
     40     @Override
     41     protected void setUp() throws Exception {
     42         super.setUp();
     43         TempDirectory.setTempDirectory(getContext());
     44     }
     45 
     46     public void testEmpty() throws Exception {
     47         assertTrue(ImapString.EMPTY.isEmpty());
     48         assertEquals("", ImapString.EMPTY.getString());
     49         assertEquals("", Utility.fromAscii(IOUtils.toByteArray(ImapString.EMPTY.getAsStream())));
     50         assertFalse(ImapString.EMPTY.isNumber());
     51         assertFalse(ImapString.EMPTY.isDate());
     52 
     53         assertTrue(ImapString.EMPTY.is(""));
     54         assertTrue(ImapString.EMPTY.startsWith(""));
     55         assertFalse(ImapString.EMPTY.is("a"));
     56         assertFalse(ImapString.EMPTY.startsWith("a"));
     57 
     58         assertTrue(new ImapSimpleString(null).isEmpty());
     59     }
     60 
     61     public void testBasics() throws Exception {
     62         final ImapSimpleString s = new ImapSimpleString("AbcD");
     63         assertFalse(s.isEmpty());
     64         assertEquals("AbcD", s.getString());
     65         assertEquals("AbcD", Utility.fromAscii(IOUtils.toByteArray(s.getAsStream())));
     66 
     67         assertFalse(s.isNumber());
     68         assertFalse(s.isDate());
     69 
     70         assertFalse(s.is(null));
     71         assertFalse(s.is(""));
     72         assertTrue(s.is("abcd"));
     73         assertFalse(s.is("abc"));
     74 
     75         assertFalse(s.startsWith(null));
     76         assertTrue(s.startsWith(""));
     77         assertTrue(s.startsWith("a"));
     78         assertTrue(s.startsWith("abcd"));
     79         assertFalse(s.startsWith("Z"));
     80         assertFalse(s.startsWith("abcde"));
     81     }
     82 
     83     public void testGetNumberOrZero() {
     84         assertEquals(1234, new ImapSimpleString("1234").getNumberOrZero());
     85         assertEquals(-1, new ImapSimpleString("-1").getNumberOrZero());
     86         assertEquals(0, new ImapSimpleString("").getNumberOrZero());
     87         assertEquals(0, new ImapSimpleString("X").getNumberOrZero());
     88         assertEquals(0, new ImapSimpleString("1234E").getNumberOrZero());
     89 
     90         // Too large for 32 bit int
     91         assertEquals(0, new ImapSimpleString("99999999999999999999").getNumberOrZero());
     92     }
     93 
     94     public void testGetDateOrNull() {
     95         final ImapString date = new ImapSimpleString("01-Jan-2009 11:34:56 -0100");
     96 
     97         assertTrue(date.isDate());
     98         Date d = date.getDateOrNull();
     99         assertNotNull(d);
    100         assertEquals("1 Jan 2009 12:34:56 GMT", d.toGMTString());
    101 
    102         final ImapString nonDate = new ImapSimpleString("1234");
    103         assertFalse(nonDate.isDate());
    104         assertNull(nonDate.getDateOrNull());
    105     }
    106 
    107     /**
    108      * Confirms that getDateOrNull() works fine regardless of the current locale.
    109      */
    110     public void testGetDateOrNullOnDifferentLocales() throws Exception {
    111         Locale savedLocale = Locale.getDefault();
    112         try {
    113             Locale.setDefault(Locale.US);
    114             checkGetDateOrNullOnDifferentLocales();
    115             Locale.setDefault(Locale.JAPAN);
    116             checkGetDateOrNullOnDifferentLocales();
    117         } finally {
    118             Locale.setDefault(savedLocale);
    119         }
    120     }
    121 
    122     private static void checkGetDateOrNullOnDifferentLocales() throws Exception {
    123         ImapSimpleString s =  new ImapSimpleString("01-Jan-2009 11:34:56 -0100");
    124         assertEquals("1 Jan 2009 12:34:56 GMT", s.getDateOrNull().toGMTString());
    125     }
    126 
    127     /** Test for ImapMemoryLiteral */
    128     public void testImapMemoryLiteral() throws Exception {
    129         final String CONTENT = "abc";
    130         doLiteralTest(new ImapMemoryLiteral(createFixedLengthInputStream(CONTENT)), CONTENT);
    131     }
    132 
    133     /** Test for ImapTempFileLiteral */
    134     public void testImapTempFileLiteral() throws Exception {
    135         final String CONTENT = "def";
    136         ImapTempFileLiteral l = new ImapTempFileLiteral(createFixedLengthInputStream(CONTENT));
    137         doLiteralTest(l, CONTENT);
    138 
    139         // destroy() should remove the temp file.
    140         assertTrue(l.tempFileExistsForTest());
    141         l.destroy();
    142         assertFalse(l.tempFileExistsForTest());
    143     }
    144 
    145     private static void doLiteralTest(ImapString s, String content) throws IOException {
    146         assertEquals(content, s.getString());
    147         assertEquals(content, Utility.fromAscii(IOUtils.toByteArray(s.getAsStream())));
    148     }
    149 }
    150