17e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki/*
27e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * Copyright (C) 2010 The Android Open Source Project
37e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki *
47e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
57e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * you may not use this file except in compliance with the License.
67e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * You may obtain a copy of the License at
77e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki *
87e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
97e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki *
107e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * Unless required by applicable law or agreed to in writing, software
117e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
127e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * See the License for the specific language governing permissions and
147e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki * limitations under the License.
157e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki */
167e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
177e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukipackage com.android.email.mail.store.imap;
187e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
197e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport static com.android.email.mail.store.imap.ImapTestUtils.*;
207e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
217e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport com.android.email.mail.store.imap.ImapElement;
227e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport com.android.email.mail.store.imap.ImapList;
237e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport com.android.email.mail.store.imap.ImapSimpleString;
247e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport com.android.email.mail.store.imap.ImapString;
257e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
267e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport android.test.suitebuilder.annotation.SmallTest;
277e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
287e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukiimport junit.framework.TestCase;
297e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
307e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki@SmallTest
317e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onukipublic class ImapListTest extends TestCase {
327e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
337e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    /**
347e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki     * Test for small functions.  (isList, isString, isEmpty and size)
357e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki     */
367e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testBasics() {
377e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = new ImapList();
387e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
397e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(list.isList());
407e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.isString());
417e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
427e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(list.isEmpty());
437e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals(0, list.size());
447e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
457e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        list.add(STRING_1);
467e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.isEmpty());
477e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals(1, list.size());
487e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
497e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        list.add(STRING_2);
507e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals(2, list.size());
517e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
527e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        list.add(LIST_1);
537e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals(3, list.size());
547e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
557e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
567e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    /**
577e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki     * Test for {@link ImapList#EMPTY}.
587e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki     */
597e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testEmpty() {
607e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(ImapList.EMPTY.isEmpty());
617e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
627e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
637e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testIs() {
647e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString ABC = new ImapSimpleString("AbC");
657e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(ImapList.EMPTY, ABC, LIST_1, ImapString.EMPTY);
667e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
677e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(0, "abc"));
687e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(1, "ab"));
697e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue (list.is(1, "abc"));
707e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(2, "abc"));
717e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(3, "abc"));
727e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(4, "abc"));
737e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
747e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(0, "ab", false));
757e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(1, "ab", false));
767e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue (list.is(1, "abc", false));
777e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(2, "ab", false));
787e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(3, "ab", false));
797e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(4, "ab", false));
807e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
817e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(0, "ab", true));
827e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue (list.is(1, "ab", true));
837e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue (list.is(1, "abc", true));
847e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(2, "ab", true));
857e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(3, "ab", true));
867e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(4, "ab", true));
877e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
887e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure null is okay
897e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.is(0, null, false));
907e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
917e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
927e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(ImapList.EMPTY.is(0, "abc"));
937e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
947e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
957e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testGetElementOrNone() {
967e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(ImapList.EMPTY, STRING_1, LIST_1, ImapString.EMPTY);
977e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
987e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY,   list.getElementOrNone(0));
997e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getElementOrNone(1));
1007e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,           list.getElementOrNone(2));
1017e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getElementOrNone(3));
1027e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapElement.NONE, list.getElementOrNone(4)); // Out of index.
1037e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1047e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
1057e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapElement.NONE, ImapList.EMPTY.getElementOrNone(0));
1067e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1077e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1087e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testGetListOrEmpty() {
1097e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(ImapList.EMPTY, STRING_1, LIST_1, ImapString.EMPTY);
1107e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1117e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getListOrEmpty(0));
1127e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getListOrEmpty(1));
1137e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,         list.getListOrEmpty(2));
1147e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getListOrEmpty(3));
1157e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getListOrEmpty(4)); // Out of index.
1167e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1177e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
1187e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, ImapList.EMPTY.getListOrEmpty(0));
1197e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1207e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1217e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testGetStringOrEmpty() {
1227e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(ImapList.EMPTY, STRING_1, LIST_1, ImapString.EMPTY);
1237e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1247e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getStringOrEmpty(0));
1257e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getStringOrEmpty(1));
1267e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getStringOrEmpty(2));
1277e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getStringOrEmpty(3));
1287e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getStringOrEmpty(4)); // Out of index.
1297e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1307e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
1317e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, ImapList.EMPTY.getStringOrEmpty(0));
1327e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1337e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1347e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testGetKeyedElementOrNull() {
1357e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K1 = new ImapSimpleString("aBCd");
1367e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K2 = new ImapSimpleString("Def");
1377e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K3 = new ImapSimpleString("abC");
1387e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1397e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(
1407e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki                K1, STRING_1,
1417e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki                K2, K3,
1427e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki                K3, STRING_2);
1437e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1447e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(null,     list.getKeyedElementOrNull("ab", false));
1457e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1, list.getKeyedElementOrNull("abcd", false));
1467e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(K3,       list.getKeyedElementOrNull("def", false));
1477e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_2, list.getKeyedElementOrNull("abc", false));
1487e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1497e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1, list.getKeyedElementOrNull("ab", true));
1507e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1, list.getKeyedElementOrNull("abcd", true));
1517e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(K3,       list.getKeyedElementOrNull("def", true));
1527e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1, list.getKeyedElementOrNull("abc", true));
1537e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1547e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure null is okay
1557e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(null, list.getKeyedElementOrNull(null, false));
1567e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1577e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
1587e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertNull(ImapList.EMPTY.getKeyedElementOrNull("ab", false));
1597e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1607e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Shouldn't crash with a list with an odd number of elements.
1617e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(null, buildList(K1).getKeyedElementOrNull("abcd", false));
1627e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1637e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1647e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void getKeyedListOrEmpty() {
1657e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K1 = new ImapSimpleString("Key");
1667e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(K1, LIST_1);
1677e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1687e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,         list.getKeyedListOrEmpty("key", false));
1697e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,         list.getKeyedListOrEmpty("key", true));
1707e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getKeyedListOrEmpty("ke", false));
1717e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,         list.getKeyedListOrEmpty("ke", true));
1727e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1737e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapList.EMPTY, list.getKeyedListOrEmpty("ke"));
1747e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(LIST_1,         list.getKeyedListOrEmpty("key"));
1757e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1767e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1777e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void getKeyedStringOrEmpty() {
1787e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K1 = new ImapSimpleString("Key");
1797e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(K1, STRING_1);
1807e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1817e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getKeyedListOrEmpty("key", false));
1827e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getKeyedListOrEmpty("key", true));
1837e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getKeyedListOrEmpty("ke", false));
1847e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getKeyedListOrEmpty("ke", true));
1857e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1867e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(ImapString.EMPTY, list.getKeyedListOrEmpty("ke"));
1877e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertElement(STRING_1,         list.getKeyedListOrEmpty("key"));
1887e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
1897e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1907e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testContains() {
1917e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K1 = new ImapSimpleString("aBCd");
1927e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K2 = new ImapSimpleString("Def");
1937e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        final ImapString K3 = new ImapSimpleString("abC");
1947e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1957e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        ImapList list = buildList(K1, K2, K3);
1967e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
1977e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(list.contains("abc"));
1987e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(list.contains("abcd"));
1997e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertTrue(list.contains("def"));
2007e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.contains(""));
2017e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.contains("a"));
2027e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.contains(null));
2037e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
2047e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure null is okay
2057e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(list.contains(null));
2067e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
2077e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        // Make sure won't crash with empty list
2087e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertFalse(ImapList.EMPTY.contains(null));
2097e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
2107e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki
2117e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    public void testFlatten() {
2127e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals("[]", ImapList.EMPTY.flatten());
2137e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals("[aBc]", buildList(STRING_1).flatten());
2147e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals("[[]]", buildList(ImapList.EMPTY).flatten());
2157e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki        assertEquals("[aBc,[,X y z],aBc]",
2167e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki                buildList(STRING_1, buildList(ImapString.EMPTY, STRING_2), STRING_1).flatten());
2177e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki    }
2187e5ba0e1eaee76ab6e6c7ea9362348f660796596Makoto Onuki}
219