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