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