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 android.test.AndroidTestCase;
20284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedyimport android.test.MoreAsserts;
213555dc03bf2243dc275c9c832702abbee3b64387Jerry Xieimport android.test.suitebuilder.annotation.SmallTest;
22284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
233555dc03bf2243dc275c9c832702abbee3b64387Jerry Xie@SmallTest
24284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedypublic class ImapUtilityTests extends AndroidTestCase {
2517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie    public static final String[] EmptyArrayString = new String[0];
26284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
27284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
28284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Tests of the IMAP quoting rules function.
29284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
30284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testImapQuote() {
31284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Simple strings should come through with simple quotes
32284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"abcd\"", ImapUtility.imapQuoted("abcd"));
33284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Quoting internal double quotes with \
34284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"ab\\\"cd\"", ImapUtility.imapQuoted("ab\"cd"));
35284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Quoting internal \ with \\
36284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        assertEquals("\"ab\\\\cd\"", ImapUtility.imapQuoted("ab\\cd"));
37284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
38284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
39284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
40284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Test getting elements of an IMAP sequence set.
41284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
42284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testGetImapSequenceValues() {
43284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] expected;
44284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] actual;
45284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
46284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test valid sets
47284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1"};
48284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1");
49284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
50284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
51284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "3", "2"};
52284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,3,2");
53284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
54284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
55284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"4", "5", "6"};
56284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("4:6");
57284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
58284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
59284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"9", "8", "7"};
60284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("9:7");
61284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
62284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
63284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "2", "3", "4", "9", "8", "7"};
64284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,2:4,9:7");
65284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
66284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
67284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test partially invalid sets
68284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] { "1", "5" };
69284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1,x,5");
70284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
71284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
72284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] { "1", "2", "3" };
73284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("a:d,1:3");
74284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
75284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
76284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test invalid sets
7717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
78284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("");
79284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
80284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
8117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
82284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues(null);
83284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
84284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
8517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
86284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("a");
87284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
88284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
8917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
90284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapSequenceValues("1:x");
91284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
92284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
93284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
94284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    /**
95284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     * Test getting elements of an IMAP range.
96284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy     */
97284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    public void testGetImapRangeValues() {
98284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] expected;
99284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        String[] actual;
100284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
101284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test valid ranges
102284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"1", "2", "3"};
103284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:3");
104284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
105284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
106284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        expected = new String[] {"16", "15", "14"};
107284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("16:14");
108284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
109284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
110284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        // Test in-valid ranges
11117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
112284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("");
113284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
114284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
11517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
116284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues(null);
117284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
118284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
11917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
120284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("a");
121284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
122284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
12317d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
124284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("6");
125284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
126284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
12717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
128284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:3,6");
129284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
130284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
13117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
132284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:x");
133284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
134284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy
13517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        expected = EmptyArrayString;
136284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        actual = ImapUtility.getImapRangeValues("1:*");
137284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy        MoreAsserts.assertEquals(expected, actual);
138284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy    }
139284d8d7db5743d24b9aa246afe3d24139bdb0813Todd Kennedy}
140