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