ChipsTest.java revision 8eb031e6de46e477412d92ab0c5ef20b431f1804
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.ex.chips;
18
19import android.content.Context;
20import android.test.AndroidTestCase;
21import android.text.Editable;
22import android.text.SpannableStringBuilder;
23import android.text.util.Rfc822Tokenizer;
24
25import com.android.ex.chips.RecipientEditTextView;
26import com.android.ex.chips.RecipientEntry;
27
28
29public class ChipsTest extends AndroidTestCase {
30    private RecipientChip[] mMockRecips;
31
32    private RecipientEntry[] mMockEntries;
33
34    private Rfc822Tokenizer mTokenizer;
35
36    private Editable mEditable;
37
38    class MockRecipientEditTextView extends RecipientEditTextView {
39
40        public MockRecipientEditTextView(Context context) {
41            super(context, null);
42            mTokenizer = new Rfc822Tokenizer();
43            setTokenizer(mTokenizer);
44        }
45
46        @Override
47        public RecipientChip[] getSortedRecipients() {
48            return mMockRecips;
49        }
50
51        @Override
52        public Editable getText() {
53            return mEditable;
54        }
55
56        @Override
57        public Editable getSpannable() {
58            return mEditable;
59        }
60    }
61
62    private MockRecipientEditTextView createViewForTesting() {
63        mEditable = new SpannableStringBuilder();
64        MockRecipientEditTextView view = new MockRecipientEditTextView(getContext());
65        return view;
66    }
67
68    public void testCreateDisplayText() {
69        RecipientEditTextView view = createViewForTesting();
70        RecipientEntry entry = RecipientEntry.constructGeneratedEntry("User Name, Jr",
71                "user@username.com");
72        String test = view.createDisplayText(entry);
73        assertEquals("Expected a properly formatted RFC email address",
74                "\"User Name, Jr\" <user@username.com>, ", test);
75
76        RecipientEntry alreadyFormatted = RecipientEntry.constructFakeEntry("user@username.com, ");
77        test = view.createDisplayText(alreadyFormatted);
78        assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ",
79                test);
80
81        RecipientEntry alreadyFormattedNoSpace = RecipientEntry
82                .constructFakeEntry("user@username.com,");
83        test = view.createDisplayText(alreadyFormattedNoSpace);
84        assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ",
85                test);
86
87        RecipientEntry alreadyNamed = RecipientEntry.constructGeneratedEntry("User Name",
88                "\"User Name, Jr\" <user@username.com>");
89        test = view.createDisplayText(alreadyNamed);
90        assertEquals(
91                "Expected address that used the name not the excess address name",
92                "User Name <user@username.com>, ", test);
93    }
94
95    public void testSanitizeBetween() {
96        populateMocks(2);
97        MockRecipientEditTextView view = createViewForTesting();
98        String first = (String) mTokenizer.terminateToken("FIRST");
99        String second = (String) mTokenizer.terminateToken("SECOND");
100        String extra = "EXTRA";
101        mEditable.append(first + extra + second);
102        int firstStart = mEditable.toString().indexOf(first);
103        int firstEnd = firstStart + first.length();
104        int secondStart = mEditable.toString().indexOf(second);
105        int secondEnd = secondStart + second.length();
106        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], firstStart, firstEnd, 0);
107        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], secondStart, secondEnd, 0);
108        view.sanitizeBetween();
109        String editableString = mEditable.toString();
110        assertEquals(editableString.indexOf(extra), -1);
111        assertEquals(editableString.indexOf(first), firstStart);
112        assertEquals(editableString.indexOf(second), secondStart - extra.length());
113        assertEquals(editableString, (first + second));
114
115        mEditable = new SpannableStringBuilder();
116        populateMocks(1);
117        mEditable.append(extra);
118        mEditable.append(first);
119        firstStart = mEditable.toString().indexOf(first);
120        firstEnd = firstStart + first.length();
121        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], firstStart, firstEnd, 0);
122        view.sanitizeBetween();
123        assertEquals(mEditable.toString(), first);
124        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), firstStart
125                - extra.length());
126    }
127
128    private void populateMocks(int size) {
129        mMockEntries = new RecipientEntry[size];
130        for (int i = 0; i < size; i++) {
131            mMockEntries[i] = RecipientEntry.constructGeneratedEntry("user",
132                    "user@username.com");
133        }
134        mMockRecips = new RecipientChip[size];
135        for (int i = 0; i < size; i++) {
136            mMockRecips[i] = new RecipientChip(null, mMockEntries[i], i);
137        }
138    }
139}
140