blob: c45b873a51957f68c02ebf7b75796148f344827b [file] [log] [blame]
/*
* Copyright (C) 2006 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.content.res.cts;
import java.util.Locale;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Parcel;
import android.test.AndroidTestCase;
import android.util.LocaleUtil;
import android.view.View;
public class ConfigurationTest extends AndroidTestCase {
private Configuration mConfigDefault;
private Configuration mConfig;
@Override
protected void setUp() throws Exception {
super.setUp();
mConfigDefault = new Configuration();
makeConfiguration();
}
private void makeConfiguration() {
mConfig = new Configuration();
mConfig.fontScale = 2;
mConfig.mcc = mConfig.mnc = 1;
mConfig.locale = Locale.getDefault();
mConfig.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH;
mConfig.keyboard = Configuration.KEYBOARD_NOKEYS;
mConfig.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
mConfig.navigation = Configuration.NAVIGATION_NONAV;
mConfig.orientation = Configuration.ORIENTATION_PORTRAIT;
}
public void testConstructor() {
new Configuration();
new Configuration(mConfigDefault);
}
public void testCompareTo() {
final Configuration cfg1 = new Configuration();
final Configuration cfg2 = new Configuration();
assertEquals(0, cfg1.compareTo(cfg2));
cfg1.orientation = 2;
cfg2.orientation = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.orientation = 3;
cfg2.orientation = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.navigation = 2;
cfg2.navigation = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.navigation = 3;
cfg2.navigation = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.keyboardHidden = 2;
cfg2.keyboardHidden = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.keyboardHidden = 3;
cfg2.keyboardHidden = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.keyboard = 2;
cfg2.keyboard = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.keyboard = 3;
cfg2.keyboard = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.touchscreen = 2;
cfg2.touchscreen = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.touchscreen = 3;
cfg2.touchscreen = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("", "", "2");
cfg2.locale = new Locale("", "", "3");
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("", "", "3");
cfg2.locale = new Locale("", "", "2");
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("", "2", "");
cfg2.locale = new Locale("", "3", "");
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("", "3", "");
cfg2.locale = new Locale("", "2", "");
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("2", "", "");
cfg2.locale = new Locale("3", "", "");
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.locale = new Locale("3", "", "");
cfg2.locale = new Locale("2", "", "");
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.mnc = 2;
cfg2.mnc = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.mnc = 3;
cfg2.mnc = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.mcc = 2;
cfg2.mcc = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.mcc = 3;
cfg2.mcc = 2;
assertEquals(1, cfg1.compareTo(cfg2));
cfg1.fontScale = 2;
cfg2.fontScale = 3;
assertEquals(-1, cfg1.compareTo(cfg2));
cfg1.fontScale = 3;
cfg2.fontScale = 2;
assertEquals(1, cfg1.compareTo(cfg2));
}
public void testDescribeContents() {
assertEquals(0, mConfigDefault.describeContents());
}
void doConfigCompare(int expectedFlags, Configuration c1, Configuration c2) {
assertEquals(expectedFlags, c1.diff(c2));
Configuration tmpc1 = new Configuration(c1);
assertEquals(expectedFlags, tmpc1.updateFrom(c2));
assertEquals(0, tmpc1.diff(c2));
}
public void testDiff() {
Configuration config = new Configuration();
config.mcc = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC, mConfigDefault, config);
config.mnc = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC, mConfigDefault, config);
config.locale = Locale.getDefault();
config.setLayoutDirection(config.locale);
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION, mConfigDefault, config);
config.screenLayout = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT, mConfigDefault, config);
config.touchscreen = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN, mConfigDefault, config);
config.keyboard = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD, mConfigDefault, config);
config.keyboardHidden = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config);
config.keyboardHidden = 0;
config.hardKeyboardHidden = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config);
config.hardKeyboardHidden = 0;
config.navigationHidden = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config);
config.navigation = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN
| ActivityInfo.CONFIG_NAVIGATION, mConfigDefault, config);
config.orientation = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN
| ActivityInfo.CONFIG_NAVIGATION
| ActivityInfo.CONFIG_ORIENTATION, mConfigDefault, config);
config.uiMode = 1;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN
| ActivityInfo.CONFIG_NAVIGATION
| ActivityInfo.CONFIG_ORIENTATION
| ActivityInfo.CONFIG_UI_MODE, mConfigDefault, config);
config.fontScale = 2;
doConfigCompare(ActivityInfo.CONFIG_MCC
| ActivityInfo.CONFIG_MNC
| ActivityInfo.CONFIG_LOCALE
| ActivityInfo.CONFIG_LAYOUT_DIRECTION
| ActivityInfo.CONFIG_SCREEN_LAYOUT
| ActivityInfo.CONFIG_TOUCHSCREEN
| ActivityInfo.CONFIG_KEYBOARD
| ActivityInfo.CONFIG_KEYBOARD_HIDDEN
| ActivityInfo.CONFIG_NAVIGATION
| ActivityInfo.CONFIG_ORIENTATION
| ActivityInfo.CONFIG_UI_MODE
| ActivityInfo.CONFIG_FONT_SCALE, mConfigDefault, config);
}
public void testEquals() {
assertFalse(mConfigDefault.equals(mConfig));
assertFalse(mConfigDefault.equals(new Object()));
}
public void testHashCode() {
assertFalse(mConfigDefault.hashCode() == mConfig.hashCode());
}
public void testNeedNewResources() {
assertTrue(Configuration.needNewResources(ActivityInfo.CONFIG_MCC,
ActivityInfo.CONFIG_MCC));
assertFalse(Configuration.needNewResources(ActivityInfo.CONFIG_MNC,
ActivityInfo.CONFIG_MCC));
assertTrue(Configuration.needNewResources(
ActivityInfo.CONFIG_MNC|ActivityInfo.CONFIG_FONT_SCALE,
ActivityInfo.CONFIG_MCC));
}
public void testSetToDefaults() {
final Configuration temp = new Configuration(mConfig);
assertFalse(temp.equals(mConfigDefault));
temp.setToDefaults();
assertTrue(temp.equals(mConfigDefault));
}
public void testToString() {
assertNotNull(mConfigDefault.toString());
}
public void testWriteToParcel() {
assertWriteToParcel(createConfig(null), Parcel.obtain());
assertWriteToParcel(createConfig(Locale.JAPAN), Parcel.obtain());
}
public void testSetLocale() {
Configuration config = new Configuration();
config.setLocale(Locale.getDefault());
assertEquals(Locale.getDefault(), config.locale);
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
config.setLocale(Locale.ENGLISH);
assertEquals(Locale.ENGLISH, config.locale);
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
config.setLocale(Locale.US);
assertEquals(Locale.US, config.locale);
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
final Locale arEGLocale = new Locale("ar", "EG");
config.setLocale(arEGLocale);
assertEquals(arEGLocale, config.locale);
assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
final Locale faFALocale = new Locale("fa", "FA");
config.setLocale(faFALocale);
assertEquals(faFALocale, config.locale);
assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
// TODO: uncomment when ICU is fixed (4.8.1.1 version of ICS broke the following unit tests)
// final Locale iwILLocale = new Locale("iw", "IL");
// config.setLocale(iwILLocale);
// assertEquals(iwILLocale, config.locale);
// assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
}
public void testSetGetLayoutDirection() {
Configuration config = new Configuration();
config.setLayoutDirection(Locale.getDefault());
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
config.setLayoutDirection(Locale.ENGLISH);
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
config.setLayoutDirection(Locale.US);
assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection());
final Locale arEGLocale = new Locale("ar", "EG");
config.setLayoutDirection(arEGLocale);
assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
final Locale faFALocale = new Locale("fa", "FA");
config.setLayoutDirection(faFALocale);
assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
// TODO: uncomment when ICU is fixed (4.8.1.1 version of ICS broke the following unit tests)
// final Locale iwILLocale = new Locale("iw", "IL");
// config.setLayoutDirection(iwILLocale);
// assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection());
}
private Configuration createConfig(Locale locale) {
Configuration config = new Configuration();
config.fontScale = 13.37f;
config.mcc = 0;
config.mnc = 1;
config.locale = locale;
config.touchscreen = Configuration.TOUCHSCREEN_STYLUS;
config.keyboard = Configuration.KEYBOARD_UNDEFINED;
config.keyboardHidden = Configuration.KEYBOARDHIDDEN_YES;
config.hardKeyboardHidden = Configuration.KEYBOARDHIDDEN_UNDEFINED;
config.navigation = Configuration.NAVIGATION_DPAD;
config.navigationHidden = Configuration.NAVIGATIONHIDDEN_UNDEFINED;
config.orientation = Configuration.ORIENTATION_PORTRAIT;
config.screenLayout = Configuration.SCREENLAYOUT_LONG_UNDEFINED;
return config;
}
private void assertWriteToParcel(Configuration config, Parcel parcel) {
config.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
Configuration readConf = new Configuration();
readConf.readFromParcel(parcel);
assertEquals(config, readConf);
}
}