159827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira/* 259827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * Copyright (C) 2011 The Android Open Source Project 359827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * 459827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 559827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * you may not use this file except in compliance with the License. 659827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * You may obtain a copy of the License at 759827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * 859827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 959827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * 1059827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * Unless required by applicable law or agreed to in writing, software 1159827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 1259827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1359827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * See the License for the specific language governing permissions and 1459827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira * limitations under the License. 1559827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira */ 1659827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira 1759827bad5b89a47bcb7074448b37547efca5abcbMindy Pereirapackage com.android.ex.chips; 1859827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira 194031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport android.content.Context; 20ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereiraimport android.graphics.Bitmap; 21ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereiraimport android.graphics.drawable.BitmapDrawable; 22ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereiraimport android.graphics.drawable.Drawable; 2359827bad5b89a47bcb7074448b37547efca5abcbMindy Pereiraimport android.test.AndroidTestCase; 24878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereiraimport android.test.suitebuilder.annotation.SmallTest; 254031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport android.text.Editable; 264031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport android.text.SpannableStringBuilder; 27a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereiraimport android.text.style.ImageSpan; 284031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport android.text.util.Rfc822Tokenizer; 29a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereiraimport android.widget.TextView; 304031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 314031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport com.android.ex.chips.RecipientEditTextView; 324031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereiraimport com.android.ex.chips.RecipientEntry; 334031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 34878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira@SmallTest 3559827bad5b89a47bcb7074448b37547efca5abcbMindy Pereirapublic class ChipsTest extends AndroidTestCase { 36a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira private RecipientChip[] mMockRecips; 374031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 38a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira private RecipientEntry[] mMockEntries; 394031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 404031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira private Rfc822Tokenizer mTokenizer; 414031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 424031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira private Editable mEditable; 434031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 448faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira class BaseMockRecipientEditTextView extends RecipientEditTextView { 454031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 468faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public BaseMockRecipientEditTextView(Context context) { 474031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira super(context, null); 484031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mTokenizer = new Rfc822Tokenizer(); 494031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira setTokenizer(mTokenizer); 504031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 514031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 524031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira @Override 534031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira public RecipientChip[] getSortedRecipients() { 544031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira return mMockRecips; 554031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 564031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 574031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira @Override 588faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public int getLineHeight() { 598faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira return 48; 608faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 618faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 628faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira @Override 638faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira Drawable getChipBackground(RecipientEntry contact) { 648faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira return createChipBackground(); 658faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 668faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 678faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira @Override 688faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public int getViewWidth() { 698faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira return 100; 708faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 718faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 728faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 738faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira class MockRecipientEditTextView extends BaseMockRecipientEditTextView { 748faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 758faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public MockRecipientEditTextView(Context context) { 768faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira super(context); 778faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira mTokenizer = new Rfc822Tokenizer(); 788faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira setTokenizer(mTokenizer); 798faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 808faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 818faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira @Override 828faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public RecipientChip[] getSortedRecipients() { 838faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira return mMockRecips; 848faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 858faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 868faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira @Override 874031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira public Editable getText() { 884031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira return mEditable; 894031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 904031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 914031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira @Override 924031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira public Editable getSpannable() { 934031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira return mEditable; 944031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 95a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 96a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira @Override 97a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira public int getLineHeight() { 98a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira return 48; 99a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira } 100ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 10149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira @Override 10200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira Drawable getChipBackground(RecipientEntry contact) { 103ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira return createChipBackground(); 104ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira } 10549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 10649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira @Override 10749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira public int length() { 10849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira return mEditable != null ? mEditable.length() : 0; 10949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira } 11049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 11149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira @Override 11249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira public String toString() { 11349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira return mEditable != null ? mEditable.toString() : ""; 11449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira } 1158faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 1168faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira @Override 1178faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public int getViewWidth() { 1188faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira return 100; 1198faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 1204031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 1214031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 122391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira private class TestBaseRecipientAdapter extends BaseRecipientAdapter { 123391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira public TestBaseRecipientAdapter(Context context) { 124391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira super(context); 125391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira } 126391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira } 127391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira 1284031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira private MockRecipientEditTextView createViewForTesting() { 1294031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable = new SpannableStringBuilder(); 1304031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira MockRecipientEditTextView view = new MockRecipientEditTextView(getContext()); 131391de8f776bcd194a4c155987960c5150a0059fcMindy Pereira view.setAdapter(new TestBaseRecipientAdapter(getContext())); 1324031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira return view; 1334031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 1344031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 1354031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira public void testCreateDisplayText() { 1364031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira RecipientEditTextView view = createViewForTesting(); 1374031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira RecipientEntry entry = RecipientEntry.constructGeneratedEntry("User Name, Jr", 1384031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira "user@username.com"); 13900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String testAddress = view.createAddressText(entry); 14000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String testDisplay = view.createChipDisplayText(entry); 1414031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals("Expected a properly formatted RFC email address", 14200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira "\"User Name, Jr\" <user@username.com>, ", testAddress); 14300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals("Expected a displayable name", "User Name, Jr", testDisplay); 14400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira 1454031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 1464031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira RecipientEntry alreadyFormatted = RecipientEntry.constructFakeEntry("user@username.com, "); 14700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testAddress = view.createAddressText(alreadyFormatted); 14800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testDisplay = view.createChipDisplayText(alreadyFormatted); 1494031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ", 15000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testAddress); 15100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals("Expected a displayable name", "user@username.com", testDisplay); 1524031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 1534031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira RecipientEntry alreadyFormattedNoSpace = RecipientEntry 1544031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira .constructFakeEntry("user@username.com,"); 15500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testAddress = view.createAddressText(alreadyFormattedNoSpace); 1564031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals("Expected a properly formatted RFC email address", "<user@username.com>, ", 15700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testAddress); 1584031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira 1594031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira RecipientEntry alreadyNamed = RecipientEntry.constructGeneratedEntry("User Name", 1604031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira "\"User Name, Jr\" <user@username.com>"); 16100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testAddress = view.createAddressText(alreadyNamed); 16200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira testDisplay = view.createChipDisplayText(alreadyNamed); 1634031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals( 1644031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira "Expected address that used the name not the excess address name", 16500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira "User Name <user@username.com>, ", testAddress); 16600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals("Expected a displayable name", "User Name", testDisplay); 1674031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira } 16859827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira 1694031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira public void testSanitizeBetween() { 170878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // First, add 2 chips and then make sure we remove 171878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // the extra content between them correctly. 172a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira populateMocks(2); 1734031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 1744031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 1754031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 1764031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira String extra = "EXTRA"; 177a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable = new SpannableStringBuilder(); 1784031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable.append(first + extra + second); 1794031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 180b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 1814031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 182b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 1834031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], firstStart, firstEnd, 0); 1844031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], secondStart, secondEnd, 0); 1854031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira view.sanitizeBetween(); 1864031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira String editableString = mEditable.toString(); 1874031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals(editableString.indexOf(extra), -1); 1884031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals(editableString.indexOf(first), firstStart); 1894031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals(editableString.indexOf(second), secondStart - extra.length()); 1904031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals(editableString, (first + second)); 191c7afc9841ee6dd3bc5e19ee7269fecd466a8c6e9Mindy Pereira 192878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Add 1 chip and make sure that we remove the extra stuff before it correctly. 1934031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable = new SpannableStringBuilder(); 194a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira populateMocks(1); 195a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira mEditable.append(extra); 1964031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable.append(first); 1974031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira firstStart = mEditable.toString().indexOf(first); 1984031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira firstEnd = firstStart + first.length(); 1994031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], firstStart, firstEnd, 0); 2004031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira view.sanitizeBetween(); 2014031c89f46edea42c64e183e46d49484f1f203c0Mindy Pereira assertEquals(mEditable.toString(), first); 202a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), firstStart 203a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira - extra.length()); 204a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira } 205a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira 20600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira public void testSanitizeEnd() { 20700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira // First, add 2 chips and then make sure we remove 20800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira // the extra content between them correctly. 20900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira populateMocks(2); 21000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 21100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 21200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 21300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String extra = "EXTRA"; 21400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable = new SpannableStringBuilder(); 21500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.append(first + second); 21600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 21700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int firstEnd = firstStart + first.trim().length(); 21800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 21900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int secondEnd = secondStart + second.trim().length(); 22000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], firstStart, firstEnd, 0); 22100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], secondStart, secondEnd, 0); 22200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira view.sanitizeEnd(); 22300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String editableString = mEditable.toString(); 22400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(editableString.indexOf(extra), -1); 22500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(editableString.indexOf(first), firstStart); 22600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(editableString.indexOf(second), secondStart); 22700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(editableString, (first + second)); 22800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.append(extra); 22900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira editableString = mEditable.toString(); 23000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(mEditable.toString(), (first + second + extra)); 23100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira view.sanitizeEnd(); 23200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(mEditable.toString(), (first + second)); 23300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira } 23400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira 2358faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public void testMoreChipPlainText() { 2368faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 2378faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.setMoreItem(createTestMoreItem()); 2388faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 2398faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 2408faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 2418faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira mEditable = new SpannableStringBuilder(); 2428faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira mEditable.append(first+second+third); 2438faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 2448faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira int thirdEnd = thirdStart + third.trim().length(); 2458faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.createMoreChipPlainText(); 2468faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 2478faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 2488faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1); 2498faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 2508faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 2518faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public void testCountTokens() { 2528faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 2538faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.setMoreItem(createTestMoreItem()); 2548faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 2558faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 2568faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 2578faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String fourth = (String) ("FOURTH,"); 2588faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira String fifth = (String) ("FIFTH,"); 2598faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira mEditable = new SpannableStringBuilder(); 2608faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira mEditable.append(first+second+third+fourth+fifth); 2618faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(view.countTokens(mEditable), 5); 2628faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 2638faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 2648faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira public void testTooManyRecips() { 2658faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira BaseMockRecipientEditTextView view = new BaseMockRecipientEditTextView(getContext()); 2668faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.setMoreItem(createTestMoreItem()); 2678faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira for (int i = 0; i < 100; i++) { 2688faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.append(mTokenizer.terminateToken(i + "")); 2698faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 2708faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(view.countTokens(view.getText()), 100); 2718faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.handlePendingChips(); 2728faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira view.createMoreChip(); 2738faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 2748faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira // We show 2 chips then place a more chip. 2758faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira int secondStart = view.getText().toString().indexOf( 2768faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira (String) mTokenizer.terminateToken(RecipientEditTextView.CHIP_LIMIT + "")); 2778faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(view.getText().getSpanStart(moreChip), secondStart); 2788faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(view.getText().getSpanEnd(moreChip), view.length()); 2798faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(view.getSortedRecipients(), null); 2808faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira } 2818faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira 282a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira public void testMoreChip() { 283878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Add 3 chips: this is the trigger point at which the more chip will be created. 284878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test that adding the chips and then creating and removing the more chip, as if 285878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // the user were focusing/ removing focus from the chips field. 286a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira populateMocks(3); 287a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 288a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.setMoreItem(createTestMoreItem()); 289a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 290a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 291a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 292a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable = new SpannableStringBuilder(); 293a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.append(first+second+third); 294a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 295a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 296b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 297a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 298b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 299a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 300b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdEnd = thirdStart + third.trim().length(); 301a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 302a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 303a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 304a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 305a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.createMoreChip(); 306a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 307a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 308a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 309a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira // Find the more chip. 310a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 311a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 3128faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1); 313a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 314a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.removeMoreChip(); 315a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 316a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 317a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 318a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 319a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart); 320a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd); 321a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira moreChip = view.getMoreChip(); 322a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), -1); 323a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 324a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira // Rinse and repeat, just in case! 325a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.createMoreChip(); 326a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 327a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 328a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 329a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira // Find the more chip. 330a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira moreChip = view.getMoreChip(); 331a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 3328faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1); 333a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 334a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.removeMoreChip(); 335a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 336a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 337a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 338a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 339a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart); 340a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd); 341a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira moreChip = view.getMoreChip(); 342a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), -1); 343a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira } 344a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 345a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira public void testMoreChipLotsOfUsers() { 346878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test adding and removing the more chip in the case where we have a lot of users. 347a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira populateMocks(10); 348a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 349a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.setMoreItem(createTestMoreItem()); 350a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 351a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 352a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 353a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String fourth = (String) mTokenizer.terminateToken("FOURTH"); 354a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String fifth = (String) mTokenizer.terminateToken("FIFTH"); 355a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String sixth = (String) mTokenizer.terminateToken("SIXTH"); 356a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String seventh = (String) mTokenizer.terminateToken("SEVENTH"); 357a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String eigth = (String) mTokenizer.terminateToken("EIGHTH"); 358a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String ninth = (String) mTokenizer.terminateToken("NINTH"); 359a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String tenth = (String) mTokenizer.terminateToken("TENTH"); 360a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable = new SpannableStringBuilder(); 361a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.append(first+second+third+fourth+fifth+sixth+seventh+eigth+ninth+tenth); 362a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 363a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 364b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 365a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 366b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 367a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 368b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdEnd = thirdStart + third.trim().length(); 369a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int fourthStart = mEditable.toString().indexOf(fourth); 370b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int fourthEnd = fourthStart + fourth.trim().length(); 371a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int fifthStart = mEditable.toString().indexOf(fifth); 372b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int fifthEnd = fifthStart + fifth.trim().length(); 373a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int sixthStart = mEditable.toString().indexOf(sixth); 374b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int sixthEnd = sixthStart + sixth.trim().length(); 375a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int seventhStart = mEditable.toString().indexOf(seventh); 376b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int seventhEnd = seventhStart + seventh.trim().length(); 377a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int eighthStart = mEditable.toString().indexOf(eigth); 378b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int eighthEnd = eighthStart + eigth.trim().length(); 379a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int ninthStart = mEditable.toString().indexOf(ninth); 380b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int ninthEnd = ninthStart + ninth.trim().length(); 381a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int tenthStart = mEditable.toString().indexOf(tenth); 382b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int tenthEnd = tenthStart + tenth.trim().length(); 383a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 10], firstStart, firstEnd, 0); 384a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 9], secondStart, secondEnd, 0); 385a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 8], thirdStart, thirdEnd, 0); 386a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 7], fourthStart, fourthEnd, 0); 387a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 6], fifthStart, fifthEnd, 0); 388a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 5], sixthStart, sixthEnd, 0); 389a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 4], seventhStart, seventhEnd, 0); 390a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], eighthStart, eighthEnd, 0); 391a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], ninthStart, ninthEnd, 0); 392a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], tenthStart, tenthEnd, 0); 393a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 394a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.createMoreChip(); 395a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first + second + third + fourth + fifth + sixth 396a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira + seventh + eigth + ninth + tenth); 397a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 10]), firstStart); 398a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 9]), secondStart); 399a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira // Find the more chip. 400a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 401a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 4028faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), tenthEnd + 1); 403a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 404a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.removeMoreChip(); 405a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first + second + third + fourth + fifth + sixth 406a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira + seventh + eigth + ninth + tenth); 407a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 10]), firstStart); 408a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 9]), secondStart); 409a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 410a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 8]), thirdStart); 411a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 7]), fourthStart); 412a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 6]), fifthStart); 413a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 5]), sixthStart); 414a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), seventhStart); 415a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), eighthStart); 416a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), ninthStart); 417a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), tenthStart); 418a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira moreChip = view.getMoreChip(); 419a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), -1); 420a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 421a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira } 422a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 423a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira public void testMoreChipSpecialChars() { 424878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Make sure the more chip correctly handles extra tokenizer characters in the middle 425878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // of chip text. 426a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira populateMocks(3); 427a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 428a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.setMoreItem(createTestMoreItem()); 429a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String first = (String) mTokenizer.terminateToken("FI,RST"); 430a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String second = (String) mTokenizer.terminateToken("SE,COND"); 431a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira String third = (String) mTokenizer.terminateToken("THI,RD"); 432a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable = new SpannableStringBuilder(); 433a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.append(first+second+third); 434a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 435a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 436b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 437a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 438b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 439a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 440b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdEnd = thirdStart + third.trim().length(); 441a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 442a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 443a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 444a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 445a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.createMoreChip(); 446a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 447a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 448a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 449a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira // Find the more chip. 450a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 451a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 4528faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1); 453a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 454a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.removeMoreChip(); 455a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.toString(), first+second+third); 456a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 457a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 458a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 459a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdStart); 460a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdEnd); 461a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira moreChip = view.getMoreChip(); 462a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), -1); 463a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira } 464a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 465a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira public void testMoreChipDupes() { 466878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Make sure the more chip is correctly added and removed when we have duplicate chips. 467a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira populateMocks(4); 468a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 469a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira view.setMoreItem(createTestMoreItem()); 470a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 471a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 472a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 473a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable = new SpannableStringBuilder(); 474a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable.append(first+second+third+third); 475a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira 476a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 477b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 478a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 479b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 480a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 481b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdEnd = thirdStart + third.trim().length(); 482a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira int thirdNextStart = mEditable.toString().indexOf(third, thirdEnd); 483b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdNextEnd = thirdNextStart + third.trim().length(); 484a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 4], firstStart, firstEnd, 0); 485a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], secondStart, secondEnd, 0); 486a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], thirdStart, thirdEnd, 0); 487a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdNextStart, thirdNextEnd, 0); 488a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira 489a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira view.createMoreChip(); 490a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.toString(), first+second+third+third); 491a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), firstStart); 492a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), secondStart); 493a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira // Find the more chip. 494a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira ImageSpan moreChip = view.getMoreChip(); 495a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), thirdStart); 4968faa56ff909edb20154219f8d2ba6feecf1b5238Mindy Pereira assertEquals(mEditable.getSpanEnd(moreChip), thirdNextEnd + 1); 497a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira 498a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira view.removeMoreChip(); 499a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.toString(), first+second+third+third); 500a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), firstStart); 501a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 4]), firstEnd); 502a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), secondStart); 503a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), thirdStart); 504a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), thirdEnd); 505a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), thirdNextStart); 506a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), thirdNextEnd); 507a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira moreChip = view.getMoreChip(); 508a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira assertEquals(mEditable.getSpanStart(moreChip), -1); 509a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira } 510a1d52e9203ea3cdfc0d1c69a8a4f99445fdd5ca1Mindy Pereira 511ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira public void testRemoveChip() { 512878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Create 3 chips to start and test removing chips in various postions. 513ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira populateMocks(3); 514ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 515ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setMoreItem(createTestMoreItem()); 516ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 517ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 518ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 519ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable = new SpannableStringBuilder(); 520ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.append(first + second + third); 521ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 522ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 523ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int firstEnd = firstStart + first.length(); 524ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 525ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int secondEnd = secondStart + second.length(); 526ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 527ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int thirdEnd = thirdStart + third.length(); 528ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 529ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 530ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 531ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 532878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test removing the middle chip. 533ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.removeChip(mMockRecips[mMockRecips.length - 2]); 534ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + third); 535ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 536ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 537ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), -1); 538ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), -1); 539ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int newThirdStart = mEditable.toString().indexOf(third); 540ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), newThirdStart); 541ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), newThirdStart 542ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira + third.length()); 543ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 544878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test removing the first chip. 545ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira populateMocks(3); 546ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view = createViewForTesting(); 547ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setMoreItem(createTestMoreItem()); 548ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable = new SpannableStringBuilder(); 549ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.append(first + second + third); 550ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 551ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira firstStart = mEditable.toString().indexOf(first); 552ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira firstEnd = firstStart + first.length(); 553ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira secondStart = mEditable.toString().indexOf(second); 554ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira secondEnd = secondStart + second.length(); 555ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira thirdStart = mEditable.toString().indexOf(third); 556ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira thirdEnd = thirdStart + third.length(); 557ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 558ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 559ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 560ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 561ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.removeChip(mMockRecips[mMockRecips.length - 3]); 562ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), second + third); 563ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), -1); 564ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), -1); 565ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), 0); 566ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), second.length()); 567ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira newThirdStart = mEditable.toString().indexOf(third); 568ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), newThirdStart); 569ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), newThirdStart 570ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira + third.length()); 571ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 572878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test removing the last chip. 573ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira populateMocks(3); 574ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view = createViewForTesting(); 575ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setMoreItem(createTestMoreItem()); 576ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable = new SpannableStringBuilder(); 577ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.append(first + second + third); 578ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 579ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira firstStart = mEditable.toString().indexOf(first); 580ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira firstEnd = firstStart + first.length(); 581ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira secondStart = mEditable.toString().indexOf(second); 582ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira secondEnd = secondStart + second.length(); 583ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira thirdStart = mEditable.toString().indexOf(third); 584ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira thirdEnd = thirdStart + third.length(); 585ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 586ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 587ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 588ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 589ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.removeChip(mMockRecips[mMockRecips.length - 1]); 590ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + second); 591ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 592ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 593ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 594ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), secondEnd); 595ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), -1); 596ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), -1); 597ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira } 598ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 599ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira public void testReplaceChip() { 600ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira populateMocks(3); 601ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 602ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setMoreItem(createTestMoreItem()); 603ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setChipBackground(createChipBackground()); 604ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.setChipHeight(48); 605ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 606ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 607ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 608ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable = new SpannableStringBuilder(); 609ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.append(first + second + third); 610ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 611878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test replacing the first chip with a new chip. 612ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 613b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int firstEnd = firstStart + first.trim().length(); 614ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 615b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int secondEnd = secondStart + second.trim().length(); 616ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 617b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira int thirdEnd = thirdStart + third.trim().length(); 618ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 619ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 620ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 621ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 622ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira view.replaceChip(mMockRecips[mMockRecips.length - 3], RecipientEntry 623ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .constructGeneratedEntry("replacement", "replacement@replacement.com")); 624ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.toString(), mTokenizer 625ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .terminateToken("replacement <replacement@replacement.com>") 626ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira + second + third); 627ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), -1); 628ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), -1); 629ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), mEditable 630ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .toString().indexOf(second)); 631ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), mEditable 632ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .toString().indexOf(second) 633b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira + second.trim().length()); 634ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), mEditable 635ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .toString().indexOf(third)); 636ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), mEditable 637ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .toString().indexOf(third) 638b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira + third.trim().length()); 639ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira RecipientChip[] spans = mEditable.getSpans(0, mEditable.length(), RecipientChip.class); 640ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals(spans.length, 3); 641ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira spans = mEditable 642ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira .getSpans(0, mEditable.toString().indexOf(second) - 1, RecipientChip.class); 643ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira assertEquals((String) spans[0].getDisplay(), "replacement"); 644878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira 645878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira 646878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test replacing the middle chip with a new chip. 647878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable = new SpannableStringBuilder(); 648878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.append(first + second + third); 649878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira firstStart = mEditable.toString().indexOf(first); 650b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira firstEnd = firstStart + first.trim().length(); 651878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira secondStart = mEditable.toString().indexOf(second); 652b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira secondEnd = secondStart + second.trim().length(); 653878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira thirdStart = mEditable.toString().indexOf(third); 654b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira thirdEnd = thirdStart + third.trim().length(); 655878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 656878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 657878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 658878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 659878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira view.replaceChip(mMockRecips[mMockRecips.length - 2], RecipientEntry 660878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .constructGeneratedEntry("replacement", "replacement@replacement.com")); 661b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira assertEquals(mEditable.toString(), first + mTokenizer 662b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira .terminateToken("replacement <replacement@replacement.com>") + third); 663878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 664878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 665878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), -1); 666878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), -1); 667878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), mEditable 668878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .toString().indexOf(third)); 669878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), mEditable 670878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .toString().indexOf(third) 671b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira + third.trim().length()); 672878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira spans = mEditable.getSpans(0, mEditable.length(), RecipientChip.class); 673878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(spans.length, 3); 674878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira spans = mEditable 675878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .getSpans(firstEnd, mEditable.toString().indexOf(third) - 1, RecipientChip.class); 676878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals((String) spans[0].getDisplay(), "replacement"); 677878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira 678878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira 679878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira // Test replacing the last chip with a new chip. 680878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable = new SpannableStringBuilder(); 681878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.append(first + second + third); 682878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira firstStart = mEditable.toString().indexOf(first); 683b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira firstEnd = firstStart + first.trim().length(); 684878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira secondStart = mEditable.toString().indexOf(second); 685b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira secondEnd = secondStart + second.trim().length(); 686878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira thirdStart = mEditable.toString().indexOf(third); 687b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira thirdEnd = thirdStart + third.trim().length(); 688878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 689878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 690878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 691878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.toString(), first + second + third); 692878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira view.replaceChip(mMockRecips[mMockRecips.length - 1], RecipientEntry 693878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .constructGeneratedEntry("replacement", "replacement@replacement.com")); 694b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira assertEquals(mEditable.toString(), first + second + mTokenizer 695b3e42aaf97e476719cede047394718fd001fd79bMindy Pereira .terminateToken("replacement <replacement@replacement.com>")); 696878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart); 697878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 3]), firstEnd); 698878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart); 699878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 2]), secondEnd); 700878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 1]), -1); 701878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(mEditable.getSpanEnd(mMockRecips[mMockRecips.length - 1]), -1); 702878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira spans = mEditable.getSpans(0, mEditable.length(), RecipientChip.class); 703878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals(spans.length, 3); 704878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira spans = mEditable 705878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira .getSpans(secondEnd, mEditable.length(), RecipientChip.class); 706878b7cea14b1f8583611a7df58a4406b3eca34b6Mindy Pereira assertEquals((String) spans[0].getDisplay(), "replacement"); 707ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira } 708ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 70949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira public void testHandlePaste() { 71049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Start with an empty edit field. 71149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Add an address; the text should be left as is. 71249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 71349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setMoreItem(createTestMoreItem()); 71449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipBackground(createChipBackground()); 71549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipHeight(48); 71649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 71749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user@user.com"); 71849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 71949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 72049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 0); 72149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), "user@user.com"); 72249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 72349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Test adding a single address to an empty chips field with a space at 72449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // the end of it. The address should stay as text. 72549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 72649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira String tokenizedUser = "user@user.com" + " "; 72749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(tokenizedUser); 72849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 72949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 73049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 0); 73149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), tokenizedUser); 73249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 73349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Test adding a single address to an empty chips field with a semicolon at 73449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // the end of it. The address should become a chip 73549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 73649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira tokenizedUser = "user@user.com;"; 73749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(tokenizedUser); 73849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 73949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 74049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 1); 74149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 74249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Test adding 2 address to an empty chips field. The second to last 74349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // address should become a chip and the last address should stay as 74449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // text. 74549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 74649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user1,user2@user.com"); 74749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 74849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 74949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 1); 75049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.toString().indexOf("user2@user.com"), 75149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira RecipientChip.class).length, 1); 75249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), "<user1>, user2@user.com"); 75349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 75449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Test adding a single address to the end of existing chips. The existing 75549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // chips should remain, and the last address should stay as text. 75649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira populateMocks(3); 75749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 75849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 75949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 76049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 76149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(first + second + third); 76249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 76349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 76449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int firstEnd = firstStart + first.trim().length(); 76549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 76649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int secondEnd = secondStart + second.trim().length(); 76749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 76849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira int thirdEnd = thirdStart + third.trim().length(); 76949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 77049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 77149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 77249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 77349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user@user.com"); 77449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 77549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 77649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 77749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mMockRecips.length); 77849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), first + second + third + "user@user.com"); 77949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 78049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Paste 2 addresses after existing chips. We expect the first address to be turned into 78149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // a chip and the second to be left as text. 78249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira populateMocks(3); 78349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 78449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(first + second + third); 78549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 78649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 78749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 78849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 78949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 79049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user1, user2@user.com"); 79149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 79249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 79349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 79449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mMockRecips.length + 1); 79549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("<user1>"), mEditable 79649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .toString().indexOf("user2@user.com") - 1, RecipientChip.class).length, 1); 79749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("user2@user.com"), mEditable 79849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .length(), RecipientChip.class).length, 0); 79949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), first + second + third + "<user1>, user2@user.com"); 80049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 80149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Paste 2 addresses after existing chips. We expect the first address to be turned into 80249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // a chip and the second to be left as text. This removes the space seperator char between 80349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // addresses. 80449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira populateMocks(3); 80549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 80649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(first + second + third); 80749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 80849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 80949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 81049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 81149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 81249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user1,user2@user.com"); 81349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 81449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 81549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 81649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mMockRecips.length + 1); 81749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("<user1>"), mEditable 81849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .toString().indexOf("user2@user.com") - 1, RecipientChip.class).length, 1); 81949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("user2@user.com"), mEditable 82049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .length(), RecipientChip.class).length, 0); 82149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), first + second + third + "<user1>, user2@user.com"); 82249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 82349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira // Test a complete token pasted in at the end. It should be turned into a chip. 82449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 82549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append("user1, user2@user.com,"); 82649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setSelection(mEditable.length()); 82749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.handlePaste(); 82849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(0, mEditable.length(), RecipientChip.class).length, 2); 82949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("<user1>"), mEditable 83049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .toString().indexOf("user2@user.com") - 1, RecipientChip.class).length, 1); 83149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.getSpans(mEditable.toString().indexOf("user2@user.com"), mEditable 83249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira .length(), RecipientChip.class).length, 1); 83349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(mEditable.toString(), "<user1>, <user2@user.com>, "); 83449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira } 83549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 83649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira public void testGetPastTerminators() { 83749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 83849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setMoreItem(createTestMoreItem()); 83949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipBackground(createChipBackground()); 84049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipHeight(48); 84149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira String test = "test"; 84249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 84349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(test); 84449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(view.movePastTerminators(mTokenizer.findTokenEnd(mEditable.toString(), 0)), 84549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test.length()); 84649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 84749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test = "test,"; 84849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 84949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(test); 85049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(view.movePastTerminators(mTokenizer.findTokenEnd(mEditable.toString(), 0)), 85149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test.length()); 85249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 85349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test = "test, "; 85449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 85549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(test); 85649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(view.movePastTerminators(mTokenizer.findTokenEnd(mEditable.toString(), 0)), 85749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test.length()); 85849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 85949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test = "test;"; 86049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 86149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(test); 86249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(view.movePastTerminators(mTokenizer.findTokenEnd(mEditable.toString(), 0)), 86349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test.length()); 86449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 86549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test = "test; "; 86649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable = new SpannableStringBuilder(); 86749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira mEditable.append(test); 86849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertEquals(view.movePastTerminators(mTokenizer.findTokenEnd(mEditable.toString(), 0)), 86949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira test.length()); 87049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira } 87149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 87249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira public void testIsCompletedToken() { 87349ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 87449ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setMoreItem(createTestMoreItem()); 87549ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipBackground(createChipBackground()); 87649ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira view.setChipHeight(48); 87749ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertTrue(view.isCompletedToken("test;")); 87849ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertTrue(view.isCompletedToken("test,")); 87949ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertFalse(view.isCompletedToken("test")); 88049ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira assertFalse(view.isCompletedToken("test ")); 88149ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira } 88249ce9866ae314b3513e17008f107ceded23f9cf0Mindy Pereira 88300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira public void testGetLastChip() { 88400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira populateMocks(3); 88500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira MockRecipientEditTextView view = createViewForTesting(); 88600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira view.setMoreItem(createTestMoreItem()); 88700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira view.setChipBackground(createChipBackground()); 88800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira view.setChipHeight(48); 88900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String first = (String) mTokenizer.terminateToken("FIRST"); 89000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String second = (String) mTokenizer.terminateToken("SECOND"); 89100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira String third = (String) mTokenizer.terminateToken("THIRD"); 89200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable = new SpannableStringBuilder(); 89300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.append(first + second + third); 89400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira 89500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira // Test replacing the first chip with a new chip. 89600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int firstStart = mEditable.toString().indexOf(first); 89700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int firstEnd = firstStart + first.trim().length(); 89800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int secondStart = mEditable.toString().indexOf(second); 89900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int secondEnd = secondStart + second.trim().length(); 90000be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int thirdStart = mEditable.toString().indexOf(third); 90100be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira int thirdEnd = thirdStart + third.trim().length(); 90200be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 3], firstStart, firstEnd, 0); 90300be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 2], secondStart, secondEnd, 0); 90400be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.setSpan(mMockRecips[mMockRecips.length - 1], thirdStart, thirdEnd, 0); 90500be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(view.getLastChip(), mMockRecips[mMockRecips.length - 1]); 90600be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira mEditable.append("extra"); 90700be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira assertEquals(view.getLastChip(), mMockRecips[mMockRecips.length - 1]); 90800be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira } 90900be4ce28569ae7d1871a2f95453b0e6a6a47852Mindy Pereira 910ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira private Drawable createChipBackground() { 911ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira Bitmap drawable = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 912ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira return new BitmapDrawable(getContext().getResources(), drawable); 913ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira } 914ae7e41106f289f2668c54fff6c457c6fc91ab4a9Mindy Pereira 915a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira private TextView createTestMoreItem() { 916a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira TextView view = new TextView(getContext()); 917a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira view.setText("<xliff:g id='count'>%1$s</xliff:g> more..."); 918a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira return view; 919a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira } 920a3806ce9e97ef635dc6d4495f9664b690de74960Mindy Pereira 921a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira private void populateMocks(int size) { 922a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira mMockEntries = new RecipientEntry[size]; 923a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira for (int i = 0; i < size; i++) { 924a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira mMockEntries[i] = RecipientEntry.constructGeneratedEntry("user", 925a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira "user@username.com"); 926a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira } 927a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira mMockRecips = new RecipientChip[size]; 928a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira for (int i = 0; i < size; i++) { 929a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira mMockRecips[i] = new RecipientChip(null, mMockEntries[i], i); 930a63e3fa13ddf1370125b7b005775c538ec22b83aMindy Pereira } 93159827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira } 93259827bad5b89a47bcb7074448b37547efca5abcbMindy Pereira} 933