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