/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.os;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.inputmethod.InputMethodSubtype;
import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
import java.util.Objects;
public class InputMethodSubtypeTest extends InstrumentationTestCase {
public void verifyLocale(final String localeString) {
// InputMethodSubtype#getLocale() returns exactly the same string that is passed to the
// constructor.
assertEquals(localeString, createDummySubtype(localeString).getLocale());
// InputMethodSubtype#getLocale() should be preserved via marshaling.
assertEquals(createDummySubtype(localeString).getLocale(),
cloneViaParcel(createDummySubtype(localeString)).getLocale());
// InputMethodSubtype#getLocale() should be preserved via marshaling.
assertEquals(createDummySubtype(localeString).getLocale(),
cloneViaParcel(cloneViaParcel(createDummySubtype(localeString))).getLocale());
// Make sure InputMethodSubtype#hashCode() returns the same hash code.
assertEquals(createDummySubtype(localeString).hashCode(),
createDummySubtype(localeString).hashCode());
assertEquals(createDummySubtype(localeString).hashCode(),
cloneViaParcel(createDummySubtype(localeString)).hashCode());
assertEquals(createDummySubtype(localeString).hashCode(),
cloneViaParcel(cloneViaParcel(createDummySubtype(localeString))).hashCode());
}
@SmallTest
public void testLocaleString() throws Exception {
// The locale string in InputMethodSubtype has accepted an arbitrary text actually,
// regardless of the validity of the text as a locale string.
verifyLocale("en_US");
verifyLocale("apparently invalid locale string");
verifyLocale("zz");
verifyLocale("iw");
verifyLocale("he");
}
@SmallTest
public void testDeprecatedLocaleString() throws Exception {
// Make sure "iw" is not automatically replaced with "he".
final InputMethodSubtype subtypeIw = createDummySubtype("iw");
final InputMethodSubtype subtypeHe = createDummySubtype("he");
assertEquals("iw", subtypeIw.getLocale());
assertEquals("he", subtypeHe.getLocale());
assertFalse(Objects.equals(subtypeIw, subtypeHe));
assertFalse(Objects.equals(subtypeIw.hashCode(), subtypeHe.hashCode()));
final InputMethodSubtype clonedSubtypeIw = cloneViaParcel(subtypeIw);
final InputMethodSubtype clonedSubtypeHe = cloneViaParcel(subtypeHe);
assertEquals(subtypeIw, clonedSubtypeIw);
assertEquals(subtypeHe, clonedSubtypeHe);
assertEquals("iw", clonedSubtypeIw.getLocale());
assertEquals("he", clonedSubtypeHe.getLocale());
}
private static final InputMethodSubtype cloneViaParcel(final InputMethodSubtype original) {
Parcel parcel = null;
try {
parcel = Parcel.obtain();
original.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
return InputMethodSubtype.CREATOR.createFromParcel(parcel);
} finally {
if (parcel != null) {
parcel.recycle();
}
}
}
private static final InputMethodSubtype createDummySubtype(final String locale) {
final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
return builder.setSubtypeNameResId(0)
.setSubtypeIconResId(0)
.setSubtypeLocale(locale)
.setIsAsciiCapable(true)
.build();
}
}
|