159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby/* 259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * Copyright (C) 2010 The Android Open Source Project 359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * 459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * you may not use this file except in compliance with the License. 659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * You may obtain a copy of the License at 759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * 859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * 1059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * Unless required by applicable law or agreed to in writing, software 1159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 1259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * See the License for the specific language governing permissions and 1459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby * limitations under the License. 1559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby */ 1659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 17436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambypackage com.android.settings.bluetooth; 1859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 1959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport android.test.AndroidTestCase; 2059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport android.text.InputFilter; 2159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport android.text.SpannableStringBuilder; 2259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 23436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport com.android.settings.bluetooth.Utf8ByteLengthFilter; 2459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 2559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport dalvik.annotation.TestLevel; 2659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport dalvik.annotation.TestTargetClass; 2759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport dalvik.annotation.TestTargetNew; 2859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambyimport dalvik.annotation.TestTargets; 2959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 30436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby@TestTargetClass(Utf8ByteLengthFilter.class) 3159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hambypublic class Utf8ByteLengthFilterTest extends AndroidTestCase { 3259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 3359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby @TestTargets({ 3459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby @TestTargetNew( 3559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby level = TestLevel.COMPLETE, 3659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby method = "filter", 3759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby args = {java.lang.CharSequence.class, int.class, int.class, android.text.Spanned.class, 3859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby int.class, int.class} 3959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby ), 4059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby @TestTargetNew( 4159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby level = TestLevel.COMPLETE, 42436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby method = "Utf8ByteLengthFilter", 4359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby args = {int.class} 4459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby ) 4559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby }) 4659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby public void testFilter() { 4759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby // Define the variables 4859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby CharSequence source; 4959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby SpannableStringBuilder dest; 5059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby // Constructor to create a LengthFilter 51436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby InputFilter lengthFilter = new Utf8ByteLengthFilter(10); 5259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby InputFilter[] filters = {lengthFilter}; 5359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 5459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby // filter() implicitly invoked. If the total length > filter length, the filter will 5559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby // cut off the source CharSequence from beginning to fit the filter length. 5659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby source = "abc"; 5759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest = new SpannableStringBuilder("abcdefgh"); 5859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.setFilters(filters); 5959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 6059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.insert(1, source); 6159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString1 = "aabbcdefgh"; 6259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString1, dest.toString()); 6359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 6459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(5, 8, source); 6559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString2 = "aabbcabcgh"; 6659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString2, dest.toString()); 6759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 6859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.insert(2, source); 6959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString2, dest.toString()); 7059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 7159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.delete(1, 3); 7259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString3 = "abcabcgh"; 7359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString3, dest.toString()); 7459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 7559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.append("12345"); 7659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString4 = "abcabcgh12"; 7759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString4, dest.toString()); 7859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 7959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby source = "\u60a8\u597d"; // 2 Chinese chars == 6 bytes in UTF-8 8059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(8, 10, source); 8159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString3, dest.toString()); 8259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 8359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(0, 1, source); 8459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString5 = "\u60a8bcabcgh"; 8559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString5, dest.toString()); 8659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 8759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(0, 4, source); 8859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString6 = "\u60a8\u597dbcgh"; 8959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString6, dest.toString()); 9059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 9159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby source = "\u00a3\u00a5"; // 2 Latin-1 chars == 4 bytes in UTF-8 9259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.delete(2, 6); 9359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.insert(0, source); 9459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString7 = "\u00a3\u00a5\u60a8\u597d"; 9559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString7, dest.toString()); 9659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 9759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(2, 3, source); 9859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString8 = "\u00a3\u00a5\u00a3\u597d"; 9959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString8, dest.toString()); 10059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 10159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest.replace(3, 4, source); 10259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedString9 = "\u00a3\u00a5\u00a3\u00a3\u00a5"; 10359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedString9, dest.toString()); 10459091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby 10559091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby // filter() explicitly invoked 10659091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby dest = new SpannableStringBuilder("abcdefgh"); 10759091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby CharSequence beforeFilterSource = "TestLengthFilter"; 10859091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby String expectedAfterFilter = "TestLength"; 10959091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby CharSequence actualAfterFilter = lengthFilter.filter(beforeFilterSource, 0, 11059091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby beforeFilterSource.length(), dest, 0, dest.length()); 11159091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby assertEquals(expectedAfterFilter, actualAfterFilter); 11259091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby } 11359091c08f4d0ad8f42013f58ce9bd23ac3306336Jake Hamby} 114