ChipsTest.java revision dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825
17cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira/*
27cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * Copyright (C) 2011 The Android Open Source Project
37cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira *
47cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
57cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * you may not use this file except in compliance with the License.
67cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * You may obtain a copy of the License at
77cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira *
87cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
97cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira *
107cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * Unless required by applicable law or agreed to in writing, software
117cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
127cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * See the License for the specific language governing permissions and
147cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira * limitations under the License.
157cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira */
167cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira
177cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereirapackage com.android.ex.chips;
187cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira
1901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport android.content.Context;
207cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereiraimport android.test.AndroidTestCase;
2101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport android.text.Editable;
2201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport android.text.SpannableStringBuilder;
23d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereiraimport android.text.style.ImageSpan;
2401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport android.text.util.Rfc822Tokenizer;
25d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereiraimport android.widget.TextView;
2601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
2701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport com.android.ex.chips.RecipientEditTextView;
2801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereiraimport com.android.ex.chips.RecipientEntry;
2901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
307cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira
317cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereirapublic class ChipsTest extends AndroidTestCase {
328eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira    private RecipientChip[] mMockRecips;
3301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
348eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira    private RecipientEntry[] mMockEntries;
3501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
3601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    private Rfc822Tokenizer mTokenizer;
3701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
3801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    private Editable mEditable;
3901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
4001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    class MockRecipientEditTextView extends RecipientEditTextView {
4101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
4201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        public MockRecipientEditTextView(Context context) {
4301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            super(context, null);
4401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            mTokenizer = new Rfc822Tokenizer();
4501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            setTokenizer(mTokenizer);
4601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        }
4701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
4801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        @Override
4901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        public RecipientChip[] getSortedRecipients() {
5001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            return mMockRecips;
5101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        }
5201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
5301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        @Override
5401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        public Editable getText() {
5501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            return mEditable;
5601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        }
5701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
5801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        @Override
5901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        public Editable getSpannable() {
6001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira            return mEditable;
6101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        }
62d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
63d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        @Override
64d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        public int getLineHeight() {
65d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira            return 48;
66d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        }
6701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    }
6801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
6901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    private MockRecipientEditTextView createViewForTesting() {
7001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable = new SpannableStringBuilder();
7101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        MockRecipientEditTextView view = new MockRecipientEditTextView(getContext());
7201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        return view;
7301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    }
7401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
7501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    public void testCreateDisplayText() {
7601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        RecipientEditTextView view = createViewForTesting();
7701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        RecipientEntry entry = RecipientEntry.constructGeneratedEntry("User Name, Jr",
7801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                "user@username.com");
7901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        String test = view.createDisplayText(entry);
8001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals("Expected a properly formatted RFC email address",
8101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                "\"User Name, Jr\" <user@username.com>, ", test);
8201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
8301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        RecipientEntry alreadyFormatted = RecipientEntry.constructFakeEntry("user@username.com, ");
8401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        test = view.createDisplayText(alreadyFormatted);
8501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ",
8601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                test);
8701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
8801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        RecipientEntry alreadyFormattedNoSpace = RecipientEntry
8901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                .constructFakeEntry("user@username.com,");
9001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        test = view.createDisplayText(alreadyFormattedNoSpace);
9101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ",
9201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                test);
9301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira
9401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        RecipientEntry alreadyNamed = RecipientEntry.constructGeneratedEntry("User Name",
9501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                "\"User Name, Jr\" <user@username.com>");
9601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        test = view.createDisplayText(alreadyNamed);
9701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(
9801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                "Expected address that used the name not the excess address name",
9901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira                "User Name <user@username.com>, ", test);
10001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    }
1017cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira
10201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira    public void testSanitizeBetween() {
1038eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        populateMocks(2);
10401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        MockRecipientEditTextView view = createViewForTesting();
10501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        String first = (String) mTokenizer.terminateToken("FIRST");
10601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        String second = (String) mTokenizer.terminateToken("SECOND");
10701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        String extra = "EXTRA";
108d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable = new SpannableStringBuilder();
10901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable.append(first + extra + second);
11001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        int firstStart = mEditable.toString().indexOf(first);
111dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstEnd = firstStart + first.length();
11201162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        int secondStart = mEditable.toString().indexOf(second);
113dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondEnd = secondStart + second.length();
11401162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], firstStart, firstEnd, 0);
11501162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], secondStart, secondEnd, 0);
11601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        view.sanitizeBetween();
11701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        String editableString = mEditable.toString();
11801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(editableString.indexOf(extra), -1);
11901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(editableString.indexOf(first), firstStart);
12001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(editableString.indexOf(second), secondStart - extra.length());
12101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(editableString, (first + second));
122399bda87ad1a4d003609d6d27afc50c8359846b9Mindy Pereira
12301162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable = new SpannableStringBuilder();
1248eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        populateMocks(1);
1258eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        mEditable.append(extra);
12601162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable.append(first);
12701162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        firstStart = mEditable.toString().indexOf(first);
12801162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        firstEnd = firstStart + first.length();
12901162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], firstStart, firstEnd, 0);
13001162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        view.sanitizeBetween();
13101162ce6739af1c9d9870f8e7e489f805c7e6794Mindy Pereira        assertEquals(mEditable.toString(), first);
1328eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), firstStart
1338eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira                - extra.length());
1348eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira    }
1358eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira
136d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    public void testMoreChip() {
137d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        populateMocks(3);
138d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        MockRecipientEditTextView view = createViewForTesting();
139d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.setMoreItem(createTestMoreItem());
140d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String first = (String) mTokenizer.terminateToken("FIRST");
141d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String second = (String) mTokenizer.terminateToken("SECOND");
142d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String third = (String) mTokenizer.terminateToken("THIRD");
143d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable = new SpannableStringBuilder();
144d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.append(first+second+third);
145d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
146d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int firstStart = mEditable.toString().indexOf(first);
147dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstEnd = firstStart + first.length();
148d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int secondStart = mEditable.toString().indexOf(second);
149dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondEnd = secondStart + second.length();
150d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int thirdStart = mEditable.toString().indexOf(third);
151dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdEnd = thirdStart + third.length();
152d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0);
153d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0);
154d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0);
155d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
156d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.createMoreChip();
157d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
158d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
159d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
160d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        // Find the more chip.
161d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        ImageSpan moreChip = view.getMoreChip();
162d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
163d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd);
164d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
165d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.removeMoreChip();
166d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
167d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
168d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd);
169d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
170d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart);
171d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd);
172d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        moreChip = view.getMoreChip();
173d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), -1);
174d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
175d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        // Rinse and repeat, just in case!
176d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.createMoreChip();
177d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
178d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
179d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
180d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        // Find the more chip.
181d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        moreChip = view.getMoreChip();
182d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
183d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd);
184d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
185d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.removeMoreChip();
186d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
187d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
188d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd);
189d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
190d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart);
191d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd);
192d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        moreChip = view.getMoreChip();
193d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), -1);
194d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    }
195d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
196d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    public void testMoreChipLotsOfUsers() {
197d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        populateMocks(10);
198d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        MockRecipientEditTextView view = createViewForTesting();
199d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.setMoreItem(createTestMoreItem());
200d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String first = (String) mTokenizer.terminateToken("FIRST");
201d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String second = (String) mTokenizer.terminateToken("SECOND");
202d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String third = (String) mTokenizer.terminateToken("THIRD");
203d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String fourth = (String) mTokenizer.terminateToken("FOURTH");
204d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String fifth = (String) mTokenizer.terminateToken("FIFTH");
205d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String sixth = (String) mTokenizer.terminateToken("SIXTH");
206d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String seventh = (String) mTokenizer.terminateToken("SEVENTH");
207d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String eigth = (String) mTokenizer.terminateToken("EIGHTH");
208d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String ninth = (String) mTokenizer.terminateToken("NINTH");
209d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String tenth = (String) mTokenizer.terminateToken("TENTH");
210d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable = new SpannableStringBuilder();
211d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.append(first+second+third+fourth+fifth+sixth+seventh+eigth+ninth+tenth);
212d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
213d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int firstStart = mEditable.toString().indexOf(first);
214dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstEnd = firstStart + first.length();
215d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int secondStart = mEditable.toString().indexOf(second);
216dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondEnd = secondStart + second.length();
217d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int thirdStart = mEditable.toString().indexOf(third);
218dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdEnd = thirdStart + third.length();
219d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int fourthStart = mEditable.toString().indexOf(fourth);
220dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int fourthEnd = fourthStart + fourth.length();
221d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int fifthStart = mEditable.toString().indexOf(fifth);
222dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int fifthEnd = fifthStart + fifth.length();
223d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int sixthStart = mEditable.toString().indexOf(sixth);
224dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int sixthEnd = sixthStart + sixth.length();
225d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int seventhStart = mEditable.toString().indexOf(seventh);
226dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int seventhEnd = seventhStart + seventh.length();
227d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int eighthStart = mEditable.toString().indexOf(eigth);
228dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int eighthEnd = eighthStart + eigth.length();
229d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int ninthStart = mEditable.toString().indexOf(ninth);
230dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int ninthEnd = ninthStart + ninth.length();
231d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int tenthStart = mEditable.toString().indexOf(tenth);
232dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int tenthEnd = tenthStart + tenth.length();
233d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 10], firstStart, firstEnd, 0);
234d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 9], secondStart, secondEnd, 0);
235d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 8], thirdStart, thirdEnd, 0);
236d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 7], fourthStart, fourthEnd, 0);
237d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 6], fifthStart, fifthEnd, 0);
238d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 5], sixthStart, sixthEnd, 0);
239d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 4], seventhStart, seventhEnd, 0);
240d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 3], eighthStart, eighthEnd, 0);
241d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], ninthStart, ninthEnd, 0);
242d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], tenthStart, tenthEnd, 0);
243d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
244d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.createMoreChip();
245d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first + second + third + fourth + fifth + sixth
246d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira                + seventh + eigth + ninth + tenth);
247d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 10]), firstStart);
248d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 9]), secondStart);
249d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        // Find the more chip.
250d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        ImageSpan moreChip = view.getMoreChip();
251d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
252d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(moreChip), tenthEnd);
253d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
254d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.removeMoreChip();
255d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first + second + third + fourth + fifth + sixth
256d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira                + seventh + eigth + ninth + tenth);
257d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 10]), firstStart);
258d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 9]), secondStart);
259d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
260d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 8]), thirdStart);
261d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 7]), fourthStart);
262d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 6]), fifthStart);
263d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 5]), sixthStart);
264d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), seventhStart);
265d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), eighthStart);
266d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), ninthStart);
267d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), tenthStart);
268d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        moreChip = view.getMoreChip();
269d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), -1);
270d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
271d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    }
272d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
273d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    public void testMoreChipSpecialChars() {
274d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        populateMocks(3);
275d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        MockRecipientEditTextView view = createViewForTesting();
276d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.setMoreItem(createTestMoreItem());
277d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String first = (String) mTokenizer.terminateToken("FI,RST");
278d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String second = (String) mTokenizer.terminateToken("SE,COND");
279d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        String third = (String) mTokenizer.terminateToken("THI,RD");
280d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable = new SpannableStringBuilder();
281d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.append(first+second+third);
282d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
283d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int firstStart = mEditable.toString().indexOf(first);
284dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstEnd = firstStart + first.length();
285d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int secondStart = mEditable.toString().indexOf(second);
286dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondEnd = secondStart + second.length();
287d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        int thirdStart = mEditable.toString().indexOf(third);
288dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdEnd = thirdStart + third.length();
289d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0);
290d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0);
291d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0);
292d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
293d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.createMoreChip();
294d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
295d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
296d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
297d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        // Find the more chip.
298d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        ImageSpan moreChip = view.getMoreChip();
299d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
300d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd);
301d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
302d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.removeMoreChip();
303d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.toString(), first+second+third);
304d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
305d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd);
306d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
307d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart);
308d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd);
309d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        moreChip = view.getMoreChip();
310d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), -1);
311d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    }
312d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
313dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira    public void testMoreChipDupes() {
314dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        populateMocks(4);
315dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        MockRecipientEditTextView view = createViewForTesting();
316dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        view.setMoreItem(createTestMoreItem());
317dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        String first = (String) mTokenizer.terminateToken("FIRST");
318dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        String second = (String) mTokenizer.terminateToken("SECOND");
319dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        String third = (String) mTokenizer.terminateToken("THIRD");
320dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable = new SpannableStringBuilder();
321dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable.append(first+second+third+third);
322dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira
323dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstStart = mEditable.toString().indexOf(first);
324dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int firstEnd = firstStart + first.length();
325dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondStart = mEditable.toString().indexOf(second);
326dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int secondEnd = secondStart + second.length();
327dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdStart = mEditable.toString().indexOf(third);
328dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdEnd = thirdStart + third.length();
329dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdNextStart = mEditable.toString().indexOf(third, thirdEnd);
330dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        int thirdNextEnd = thirdNextStart + third.length();
331dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 4], firstStart, firstEnd, 0);
332dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 3], secondStart, secondEnd, 0);
333dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 2], thirdStart, thirdEnd, 0);
334dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdNextStart, thirdNextEnd, 0);
335dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira
336dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        view.createMoreChip();
337dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.toString(), first+second+third+third);
338dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), firstStart);
339dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), secondStart);
340dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        // Find the more chip.
341dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        ImageSpan moreChip = view.getMoreChip();
342dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
343dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanEnd(moreChip), thirdNextEnd);
344dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira
345dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        view.removeMoreChip();
346dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.toString(), first+second+third+third);
347dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), firstStart);
348dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 4]), firstEnd);
349dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), secondStart);
350dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), thirdStart);
351dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), thirdEnd);
352dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdNextStart);
353dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdNextEnd);
354dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        moreChip = view.getMoreChip();
355dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira        assertEquals(mEditable.getSpanStart(moreChip), -1);
356dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira    }
357dfeb97f6b18cdeff9872f8d32cd7a33baa1f8825Mindy Pereira
358d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    private TextView createTestMoreItem() {
359d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        TextView view = new TextView(getContext());
360d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        view.setText("<xliff:g id='count'>%1$s</xliff:g> more...");
361d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira        return view;
362d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira    }
363d71925073f008dccd8c4b65d5d66534e6451e64dMindy Pereira
3648eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira    private void populateMocks(int size) {
3658eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        mMockEntries = new RecipientEntry[size];
3668eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        for (int i = 0; i < size; i++) {
3678eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira            mMockEntries[i] = RecipientEntry.constructGeneratedEntry("user",
3688eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira                    "user@username.com");
3698eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        }
3708eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        mMockRecips = new RecipientChip[size];
3718eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        for (int i = 0; i < size; i++) {
3728eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira            mMockRecips[i] = new RecipientChip(null, mMockEntries[i], i);
3738eb031e6de46e477412d92ab0c5ef20b431f1804Mindy Pereira        }
3747cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira    }
3757cb970b6d9b60b9b9828d40fea8cff395a40ecd9Mindy Pereira}
376