1284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy/*
2284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * Copyright (C) 2011 The Android Open Source Project
3284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy *
4284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * Licensed under the Apache License, Version 2.0 (the "License");
5284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * you may not use this file except in compliance with the License.
6284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * You may obtain a copy of the License at
7284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy *
8284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy *      http://www.apache.org/licenses/LICENSE-2.0
9284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy *
10284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * Unless required by applicable law or agreed to in writing, software
11284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * distributed under the License is distributed on an "AS IS" BASIS,
12284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * See the License for the specific language governing permissions and
14284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy * limitations under the License.
15284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy */
16284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
17284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedypackage com.android.email.mail.store.imap;
18284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
19284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedyimport com.android.email.mail.store.imap.ImapUtility;
20284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
21284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedyimport android.test.AndroidTestCase;
22284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedyimport android.test.MoreAsserts;
23284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
24284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedyimport libcore.util.EmptyArray;
25284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
26284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedypublic class ImapUtilityTests extends AndroidTestCase {
27284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
28284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
29284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Tests of the IMAP quoting rules function.
30284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
31284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testImapQuote() {
32284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Simple strings should come through with simple quotes
33284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"abcd\"", ImapUtility.imapQuoted("abcd"));
34284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Quoting internal double quotes with \
35284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"ab\\\"cd\"", ImapUtility.imapQuoted("ab\"cd"));
36284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Quoting internal \ with \\
37284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"ab\\\\cd\"", ImapUtility.imapQuoted("ab\\cd"));
38284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
39284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
40284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
41284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Test getting elements of an IMAP sequence set.
42284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
43284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testGetImapSequenceValues() {
44284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] expected;
45284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] actual;
46284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
47284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test valid sets
48284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1"};
49284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1");
50284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
51284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
52284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "3", "2"};
53284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,3,2");
54284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
55284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
56284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"4", "5", "6"};
57284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("4:6");
58284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
59284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
60284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"9", "8", "7"};
61284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("9:7");
62284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
63284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
64284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "2", "3", "4", "9", "8", "7"};
65284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,2:4,9:7");
66284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
67284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
68284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test partially invalid sets
69284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] { "1", "5" };
70284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,x,5");
71284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
72284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
73284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] { "1", "2", "3" };
74284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("a:d,1:3");
75284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
76284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
77284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test invalid sets
78284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
79284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("");
80284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
81284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
82284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
83284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues(null);
84284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
85284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
86284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
87284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("a");
88284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
89284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
90284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
91284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1:x");
92284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
93284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
94284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
95284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
96284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Test getting elements of an IMAP range.
97284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
98284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testGetImapRangeValues() {
99284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] expected;
100284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] actual;
101284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
102284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test valid ranges
103284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "2", "3"};
104284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:3");
105284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
106284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
107284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"16", "15", "14"};
108284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("16:14");
109284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
110284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
111284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test in-valid ranges
112284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
113284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("");
114284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
115284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
116284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
117284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues(null);
118284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
119284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
120284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
121284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("a");
122284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
123284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
124284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
125284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("6");
126284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
127284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
128284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
129284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:3,6");
130284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
131284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
132284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
133284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:x");
134284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
135284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
136284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = EmptyArray.STRING;
137284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:*");
138284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
139284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
140284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy}
141