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