1 /* 2 * Copyright (C) 2010 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 17 package com.android.settings.bluetooth; 18 19 import android.test.AndroidTestCase; 20 import android.text.InputFilter; 21 import android.text.SpannableStringBuilder; 22 23 import com.android.settings.bluetooth.Utf8ByteLengthFilter; 24 25 import dalvik.annotation.TestLevel; 26 import dalvik.annotation.TestTargetClass; 27 import dalvik.annotation.TestTargetNew; 28 import dalvik.annotation.TestTargets; 29 30 @TestTargetClass(Utf8ByteLengthFilter.class) 31 public class Utf8ByteLengthFilterTest extends AndroidTestCase { 32 33 @TestTargets({ 34 @TestTargetNew( 35 level = TestLevel.COMPLETE, 36 method = "filter", 37 args = {java.lang.CharSequence.class, int.class, int.class, android.text.Spanned.class, 38 int.class, int.class} 39 ), 40 @TestTargetNew( 41 level = TestLevel.COMPLETE, 42 method = "Utf8ByteLengthFilter", 43 args = {int.class} 44 ) 45 }) 46 public void testFilter() { 47 // Define the variables 48 CharSequence source; 49 SpannableStringBuilder dest; 50 // Constructor to create a LengthFilter 51 InputFilter lengthFilter = new Utf8ByteLengthFilter(10); 52 InputFilter[] filters = {lengthFilter}; 53 54 // filter() implicitly invoked. If the total length > filter length, the filter will 55 // cut off the source CharSequence from beginning to fit the filter length. 56 source = "abc"; 57 dest = new SpannableStringBuilder("abcdefgh"); 58 dest.setFilters(filters); 59 60 dest.insert(1, source); 61 String expectedString1 = "aabbcdefgh"; 62 assertEquals(expectedString1, dest.toString()); 63 64 dest.replace(5, 8, source); 65 String expectedString2 = "aabbcabcgh"; 66 assertEquals(expectedString2, dest.toString()); 67 68 dest.insert(2, source); 69 assertEquals(expectedString2, dest.toString()); 70 71 dest.delete(1, 3); 72 String expectedString3 = "abcabcgh"; 73 assertEquals(expectedString3, dest.toString()); 74 75 dest.append("12345"); 76 String expectedString4 = "abcabcgh12"; 77 assertEquals(expectedString4, dest.toString()); 78 79 source = "\u60a8\u597d"; // 2 Chinese chars == 6 bytes in UTF-8 80 dest.replace(8, 10, source); 81 assertEquals(expectedString3, dest.toString()); 82 83 dest.replace(0, 1, source); 84 String expectedString5 = "\u60a8bcabcgh"; 85 assertEquals(expectedString5, dest.toString()); 86 87 dest.replace(0, 4, source); 88 String expectedString6 = "\u60a8\u597dbcgh"; 89 assertEquals(expectedString6, dest.toString()); 90 91 source = "\u00a3\u00a5"; // 2 Latin-1 chars == 4 bytes in UTF-8 92 dest.delete(2, 6); 93 dest.insert(0, source); 94 String expectedString7 = "\u00a3\u00a5\u60a8\u597d"; 95 assertEquals(expectedString7, dest.toString()); 96 97 dest.replace(2, 3, source); 98 String expectedString8 = "\u00a3\u00a5\u00a3\u597d"; 99 assertEquals(expectedString8, dest.toString()); 100 101 dest.replace(3, 4, source); 102 String expectedString9 = "\u00a3\u00a5\u00a3\u00a3\u00a5"; 103 assertEquals(expectedString9, dest.toString()); 104 105 // filter() explicitly invoked 106 dest = new SpannableStringBuilder("abcdefgh"); 107 CharSequence beforeFilterSource = "TestLengthFilter"; 108 String expectedAfterFilter = "TestLength"; 109 CharSequence actualAfterFilter = lengthFilter.filter(beforeFilterSource, 0, 110 beforeFilterSource.length(), dest, 0, dest.length()); 111 assertEquals(expectedAfterFilter, actualAfterFilter); 112 } 113 } 114