1/*
2 * Copyright (C) 2011 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
17package com.android.email.mail.store.imap;
18
19import com.android.email.mail.store.imap.ImapUtility;
20
21import android.test.AndroidTestCase;
22import android.test.MoreAsserts;
23
24import libcore.util.EmptyArray;
25
26public class ImapUtilityTests extends AndroidTestCase {
27
28    /**
29     * Tests of the IMAP quoting rules function.
30     */
31    public void testImapQuote() {
32        // Simple strings should come through with simple quotes
33        assertEquals("\"abcd\"", ImapUtility.imapQuoted("abcd"));
34        // Quoting internal double quotes with \
35        assertEquals("\"ab\\\"cd\"", ImapUtility.imapQuoted("ab\"cd"));
36        // Quoting internal \ with \\
37        assertEquals("\"ab\\\\cd\"", ImapUtility.imapQuoted("ab\\cd"));
38    }
39
40    /**
41     * Test getting elements of an IMAP sequence set.
42     */
43    public void testGetImapSequenceValues() {
44        String[] expected;
45        String[] actual;
46
47        // Test valid sets
48        expected = new String[] {"1"};
49        actual = ImapUtility.getImapSequenceValues("1");
50        MoreAsserts.assertEquals(expected, actual);
51
52        expected = new String[] {"1", "3", "2"};
53        actual = ImapUtility.getImapSequenceValues("1,3,2");
54        MoreAsserts.assertEquals(expected, actual);
55
56        expected = new String[] {"4", "5", "6"};
57        actual = ImapUtility.getImapSequenceValues("4:6");
58        MoreAsserts.assertEquals(expected, actual);
59
60        expected = new String[] {"9", "8", "7"};
61        actual = ImapUtility.getImapSequenceValues("9:7");
62        MoreAsserts.assertEquals(expected, actual);
63
64        expected = new String[] {"1", "2", "3", "4", "9", "8", "7"};
65        actual = ImapUtility.getImapSequenceValues("1,2:4,9:7");
66        MoreAsserts.assertEquals(expected, actual);
67
68        // Test partially invalid sets
69        expected = new String[] { "1", "5" };
70        actual = ImapUtility.getImapSequenceValues("1,x,5");
71        MoreAsserts.assertEquals(expected, actual);
72
73        expected = new String[] { "1", "2", "3" };
74        actual = ImapUtility.getImapSequenceValues("a:d,1:3");
75        MoreAsserts.assertEquals(expected, actual);
76
77        // Test invalid sets
78        expected = EmptyArray.STRING;
79        actual = ImapUtility.getImapSequenceValues("");
80        MoreAsserts.assertEquals(expected, actual);
81
82        expected = EmptyArray.STRING;
83        actual = ImapUtility.getImapSequenceValues(null);
84        MoreAsserts.assertEquals(expected, actual);
85
86        expected = EmptyArray.STRING;
87        actual = ImapUtility.getImapSequenceValues("a");
88        MoreAsserts.assertEquals(expected, actual);
89
90        expected = EmptyArray.STRING;
91        actual = ImapUtility.getImapSequenceValues("1:x");
92        MoreAsserts.assertEquals(expected, actual);
93    }
94
95    /**
96     * Test getting elements of an IMAP range.
97     */
98    public void testGetImapRangeValues() {
99        String[] expected;
100        String[] actual;
101
102        // Test valid ranges
103        expected = new String[] {"1", "2", "3"};
104        actual = ImapUtility.getImapRangeValues("1:3");
105        MoreAsserts.assertEquals(expected, actual);
106
107        expected = new String[] {"16", "15", "14"};
108        actual = ImapUtility.getImapRangeValues("16:14");
109        MoreAsserts.assertEquals(expected, actual);
110
111        // Test in-valid ranges
112        expected = EmptyArray.STRING;
113        actual = ImapUtility.getImapRangeValues("");
114        MoreAsserts.assertEquals(expected, actual);
115
116        expected = EmptyArray.STRING;
117        actual = ImapUtility.getImapRangeValues(null);
118        MoreAsserts.assertEquals(expected, actual);
119
120        expected = EmptyArray.STRING;
121        actual = ImapUtility.getImapRangeValues("a");
122        MoreAsserts.assertEquals(expected, actual);
123
124        expected = EmptyArray.STRING;
125        actual = ImapUtility.getImapRangeValues("6");
126        MoreAsserts.assertEquals(expected, actual);
127
128        expected = EmptyArray.STRING;
129        actual = ImapUtility.getImapRangeValues("1:3,6");
130        MoreAsserts.assertEquals(expected, actual);
131
132        expected = EmptyArray.STRING;
133        actual = ImapUtility.getImapRangeValues("1:x");
134        MoreAsserts.assertEquals(expected, actual);
135
136        expected = EmptyArray.STRING;
137        actual = ImapUtility.getImapRangeValues("1:*");
138        MoreAsserts.assertEquals(expected, actual);
139    }
140}
141