1d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira/*******************************************************************************
2d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      Copyright (C) 2012 Google Inc.
3d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      Licensed to The Android Open Source Project.
4d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *
5d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      Licensed under the Apache License, Version 2.0 (the "License");
6d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      you may not use this file except in compliance with the License.
7d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      You may obtain a copy of the License at
8d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *
9d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *           http://www.apache.org/licenses/LICENSE-2.0
10d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *
11d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      Unless required by applicable law or agreed to in writing, software
12d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      distributed under the License is distributed on an "AS IS" BASIS,
13d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      See the License for the specific language governing permissions and
15d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *      limitations under the License.
16d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira *******************************************************************************/
17d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
18d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereirapackage com.android.mail.browse;
19d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
20d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereiraimport android.test.AndroidTestCase;
21a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huangimport android.test.suitebuilder.annotation.SmallTest;
22d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereiraimport android.text.SpannableString;
23d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
24d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereiraimport com.android.mail.providers.ConversationInfo;
253b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieuximport com.android.mail.providers.ParticipantInfo;
263b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieuximport com.google.common.collect.Lists;
27d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
2888acafa03a87f5c84b959697d13b81df8f11a96emindypimport java.util.ArrayList;
2988acafa03a87f5c84b959697d13b81df8f11a96emindyp
30a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang@SmallTest
31d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereirapublic class SendersFormattingTests extends AndroidTestCase {
32d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
333b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    private static ConversationInfo createConversationInfo() {
343b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        return new ConversationInfo(0, 5, "snippet", "snippet", "snippet");
35d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira    }
36d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
373b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testMeFromNullName() {
383b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo conv = createConversationInfo();
393b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo(null, "something@somewhere.com", 0, false));
403b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ArrayList<SpannableString> strings = Lists.newArrayList();
413b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(0, strings.size());
42d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira
4310ea28ab588d8e922c0f78f0f47fe479739ec2cfJames Lemieux        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
443b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(1, strings.size());
453b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals("me", strings.get(0).toString());
46d8e5ff44a8a7405bb8891fb46570782138babbd1Mindy Pereira    }
47a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
483b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testMeFromEmptyName() {
493b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo conv = createConversationInfo();
503b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo("", "something@somewhere.com", 0, false));
513b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ArrayList<SpannableString> strings = Lists.newArrayList();
523b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(0, strings.size());
53a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
5410ea28ab588d8e922c0f78f0f47fe479739ec2cfJames Lemieux        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
553b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(1, strings.size());
563b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals("me", strings.get(0).toString());
573b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    }
58a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
593b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testMeFromDuplicateEmptyNames() {
603b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo conv = createConversationInfo();
613b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo("", "something@somewhere.com", 0, false));
623b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo("", "something@somewhere.com", 0, false));
633b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ArrayList<SpannableString> strings = Lists.newArrayList();
643b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(0, strings.size());
653b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux
6610ea28ab588d8e922c0f78f0f47fe479739ec2cfJames Lemieux        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
673b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(2, strings.size());
683b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertNull(strings.get(0));
693b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals("me", strings.get(1).toString());
70a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang    }
71a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
723b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testDuplicates() {
733b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo conv = createConversationInfo();
743b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo("Something", "something@somewhere.com", 0, false));
753b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        conv.addParticipant(new ParticipantInfo("Something", "something@somewhere.com", 0, false));
76a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
773b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ArrayList<SpannableString> strings = Lists.newArrayList();
783b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(0, strings.size());
79a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
8010ea28ab588d8e922c0f78f0f47fe479739ec2cfJames Lemieux        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
813b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(2, strings.size());
823b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertNull(strings.get(0));
833b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals("Something", strings.get(1).toString());
843b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    }
85a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
863b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testSenderNameBadInput() {
873b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo before = createConversationInfo();
883b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        before.addParticipant(new ParticipantInfo("****^****", null, 0, false));
89a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
903b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final byte[] serialized = before.toBlob();
91a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
923b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo after = ConversationInfo.fromBlob(serialized);
933b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(1, after.participantInfos.size());
943b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(before.participantInfos.get(0).name, after.participantInfos.get(0).name);
95a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang    }
96a88fbbaa07312640b9a337a3e06b7b5e0f60a521Andy Huang
973b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    public void testConversationSnippetsBadInput() {
983b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final String first = "*^*";
993b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final String firstUnread = "*^*^*";
1003b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final String last = "*^*^*^*";
1013b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux
1023b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo before = new ConversationInfo(42, 49, first, firstUnread, last);
1033b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        before.addParticipant(new ParticipantInfo("Foo Bar", "foo@bar.com", 0, false));
1043b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(first, before.firstSnippet);
1053b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(firstUnread, before.firstUnreadSnippet);
1063b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(last, before.lastSnippet);
1073b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux
1083b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final byte[] serialized = before.toBlob();
1093b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux
1103b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        final ConversationInfo after = ConversationInfo.fromBlob(serialized);
1113b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(before.firstSnippet, after.firstSnippet);
1123b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(before.firstUnreadSnippet, after.firstUnreadSnippet);
1133b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux        assertEquals(before.lastSnippet, after.lastSnippet);
1143b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux    }
1153b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux}