Merge "Speed up MockImeSession set-up and tear-down"
diff --git a/build/device_info_package.mk b/build/device_info_package.mk
index 5c290b0..ba4fbb0 100644
--- a/build/device_info_package.mk
+++ b/build/device_info_package.mk
@@ -42,7 +42,7 @@
endif
ifeq ($(DEVICE_INFO_TARGET_SDK),)
-DEVICE_INFO_TARGET_SDK := 8
+DEVICE_INFO_TARGET_SDK := 17
endif
# Add the base device info
diff --git a/common/host-side/manifest-generator/tests/src/com/android/compatibility/common/generator/ManifestGeneratorTest.java b/common/host-side/manifest-generator/tests/src/com/android/compatibility/common/generator/ManifestGeneratorTest.java
index aed5926..b68b34c 100644
--- a/common/host-side/manifest-generator/tests/src/com/android/compatibility/common/generator/ManifestGeneratorTest.java
+++ b/common/host-side/manifest-generator/tests/src/com/android/compatibility/common/generator/ManifestGeneratorTest.java
@@ -30,11 +30,11 @@
private static final String PACKAGE = "test.package";
private static final String INSTRUMENT = "test.package.TestInstrument";
private static final String MIN_SDK = "8";
- private static final String TARGET_SDK = "9";
+ private static final String TARGET_SDK = "17";
private static final String MANIFEST = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>\r\n"
+ "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" "
+ "package=\"test.package\">\r\n"
- + " <uses-sdk android:minSdkVersion=\"8\" android:targetSdkVersion=\"9\" />\r\n"
+ + " <uses-sdk android:minSdkVersion=\"8\" android:targetSdkVersion=\"17\" />\r\n"
+ "%s"
+ " <application>\r\n"
+ "%s"
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparer.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparer.java
index cc48628..1bcc6f8 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparer.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparer.java
@@ -64,6 +64,10 @@
description = "Only download media files; do not run instrumentation or copy files")
protected boolean mMediaDownloadOnly = false;
+ @Option(name = "images-only",
+ description = "Only push images files to the device")
+ protected boolean mImagesOnly = false;
+
/*
* The pathnames of the device's directories that hold media files for the tests.
* These depend on the device's mount point, which is retrieved in the MediaPreparer's run
@@ -73,6 +77,7 @@
*/
protected String mBaseDeviceShortDir;
protected String mBaseDeviceFullDir;
+ protected String mBaseDeviceImagesDir;
/*
* Variables set by the MediaPreparerListener during retrieval of maximum media file
@@ -162,18 +167,20 @@
*/
protected boolean mediaFilesExistOnDevice(ITestDevice device)
throws DeviceNotAvailableException {
- for (Resolution resolution : RESOLUTIONS) {
- if (resolution.width > mMaxRes.width) {
- break; // no need to check for resolutions greater than this
- }
- String deviceShortFilePath = mBaseDeviceShortDir + resolution.toString();
- String deviceFullFilePath = mBaseDeviceFullDir + resolution.toString();
- if (!device.doesFileExist(deviceShortFilePath)
- || !device.doesFileExist(deviceFullFilePath)) {
- return false;
+ if (!mImagesOnly) {
+ for (Resolution resolution : RESOLUTIONS) {
+ if (resolution.width > mMaxRes.width) {
+ break; // no need to check for resolutions greater than this
+ }
+ String deviceShortFilePath = mBaseDeviceShortDir + resolution.toString();
+ String deviceFullFilePath = mBaseDeviceFullDir + resolution.toString();
+ if (!device.doesFileExist(deviceShortFilePath)
+ || !device.doesFileExist(deviceFullFilePath)) {
+ return false;
+ }
}
}
- return true;
+ return device.doesFileExist(mBaseDeviceImagesDir);
}
/*
@@ -237,11 +244,19 @@
* - are not already present on the device
* - contain video files of a resolution less than or equal to the device's
* max video playback resolution
+ * - contain image files
*
* This method is exposed for unit testing.
*/
- protected void copyMediaFiles(ITestDevice device)
- throws DeviceNotAvailableException {
+ protected void copyMediaFiles(ITestDevice device) throws DeviceNotAvailableException {
+ if (!mImagesOnly) {
+ copyVideoFiles(device);
+ }
+ copyImagesFiles(device);
+ }
+
+ // copy video files of a resolution <= the device's maximum video playback resolution
+ protected void copyVideoFiles(ITestDevice device) throws DeviceNotAvailableException {
for (Resolution resolution : RESOLUTIONS) {
if (resolution.width > mMaxRes.width) {
logInfo("Media file copying complete");
@@ -268,11 +283,20 @@
}
}
+ // copy image files to the device
+ protected void copyImagesFiles(ITestDevice device) throws DeviceNotAvailableException {
+ if (!device.doesFileExist(mBaseDeviceImagesDir)) {
+ logInfo("Copying images files to device");
+ device.pushDir(new File(mLocalMediaPath, "images"), mBaseDeviceImagesDir);
+ }
+ }
+
// Initialize directory strings where media files live on device
protected void setMountPoint(ITestDevice device) {
String mountPoint = device.getMountPoint(IDevice.MNT_EXTERNAL_STORAGE);
mBaseDeviceShortDir = String.format("%s/test/bbb_short/", mountPoint);
mBaseDeviceFullDir = String.format("%s/test/bbb_full/", mountPoint);
+ mBaseDeviceImagesDir = String.format("%s/test/images/", mountPoint);
}
@Override
@@ -285,7 +309,9 @@
}
if (!mMediaDownloadOnly) {
setMountPoint(device);
- setMaxRes(device, buildInfo);
+ if (!mImagesOnly) {
+ setMaxRes(device, buildInfo); // max resolution only applies to video files
+ }
if (mediaFilesExistOnDevice(device)) {
// if files already on device, do nothing
logInfo("Media files found on the device");
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
index 24bca49..960d788 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
@@ -30,6 +30,7 @@
import com.android.compatibility.common.tradefed.result.ResultReporterBuildInfoTest;
import com.android.compatibility.common.tradefed.result.ResultReporterTest;
import com.android.compatibility.common.tradefed.result.SubPlanHelperTest;
+import com.android.compatibility.common.tradefed.targetprep.MediaPreparerTest;
import com.android.compatibility.common.tradefed.targetprep.PropertyCheckTest;
import com.android.compatibility.common.tradefed.targetprep.SettingsPreparerTest;
import com.android.compatibility.common.tradefed.testtype.CompatibilityTestTest;
@@ -82,6 +83,7 @@
SubPlanHelperTest.class,
// targetprep
+ MediaPreparerTest.class,
PropertyCheckTest.class,
SettingsPreparerTest.class,
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparerTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparerTest.java
index 05d328d..015ec2a 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparerTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/targetprep/MediaPreparerTest.java
@@ -55,6 +55,7 @@
mMediaPreparer.mMaxRes = MediaPreparer.DEFAULT_MAX_RESOLUTION;
mMediaPreparer.mBaseDeviceShortDir = "/sdcard/test/bbb_short/";
mMediaPreparer.mBaseDeviceFullDir = "/sdcard/test/bbb_full/";
+ mMediaPreparer.mBaseDeviceImagesDir = "/sdcard/test/images";
for (MediaPreparer.Resolution resolution : MediaPreparer.RESOLUTIONS) {
String shortFile = String.format("%s%s", mMediaPreparer.mBaseDeviceShortDir,
resolution.toString());
@@ -63,6 +64,8 @@
EasyMock.expect(mMockDevice.doesFileExist(shortFile)).andReturn(true).once();
EasyMock.expect(mMockDevice.doesFileExist(fullFile)).andReturn(true).once();
}
+ EasyMock.expect(mMockDevice.doesFileExist(mMediaPreparer.mBaseDeviceImagesDir))
+ .andReturn(true).anyTimes();
EasyMock.replay(mMockDevice);
mMediaPreparer.copyMediaFiles(mMockDevice);
}
@@ -71,6 +74,7 @@
mMediaPreparer.mMaxRes = MediaPreparer.DEFAULT_MAX_RESOLUTION;
mMediaPreparer.mBaseDeviceShortDir = "/sdcard/test/bbb_short/";
mMediaPreparer.mBaseDeviceFullDir = "/sdcard/test/bbb_full/";
+ mMediaPreparer.mBaseDeviceImagesDir = "/sdcard/test/images";
for (MediaPreparer.Resolution resolution : MediaPreparer.RESOLUTIONS) {
String shortFile = String.format("%s%s", mMediaPreparer.mBaseDeviceShortDir,
resolution.toString());
@@ -79,6 +83,8 @@
EasyMock.expect(mMockDevice.doesFileExist(shortFile)).andReturn(true).anyTimes();
EasyMock.expect(mMockDevice.doesFileExist(fullFile)).andReturn(true).anyTimes();
}
+ EasyMock.expect(mMockDevice.doesFileExist(mMediaPreparer.mBaseDeviceImagesDir))
+ .andReturn(true).anyTimes();
EasyMock.replay(mMockDevice);
assertTrue(mMediaPreparer.mediaFilesExistOnDevice(mMockDevice));
}
diff --git a/hostsidetests/incident/src/com/android/server/cts/AlarmManagerIncidentTest.java b/hostsidetests/incident/src/com/android/server/cts/AlarmManagerIncidentTest.java
new file mode 100644
index 0000000..a3dc1d6
--- /dev/null
+++ b/hostsidetests/incident/src/com/android/server/cts/AlarmManagerIncidentTest.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2016 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 com.android.server.cts;
+
+import com.android.server.AlarmClockMetadataProto;
+import com.android.server.AlarmManagerServiceProto;
+import com.android.server.AlarmProto;
+import com.android.server.BatchProto;
+import com.android.server.BroadcastStatsProto;
+import com.android.server.ConstantsProto;
+import com.android.server.FilterStatsProto;
+import com.android.server.ForceAppStandbyTrackerProto;
+import com.android.server.IdleDispatchEntryProto;
+import com.android.server.InFlightProto;
+import com.android.server.WakeupEventProto;
+import java.util.List;
+
+/**
+ * Test to check that the alarm manager service properly outputs its dump state.
+ */
+public class AlarmManagerIncidentTest extends ProtoDumpTestCase {
+ public void testAlarmManagerServiceDump() throws Exception {
+ final AlarmManagerServiceProto dump =
+ getDump(AlarmManagerServiceProto.parser(), "dumpsys alarm --proto");
+
+ // Times should be positive.
+ assertTrue(0 < dump.getCurrentTime());
+ assertTrue(0 < dump.getElapsedRealtime());
+ assertTrue(0 < dump.getLastTimeChangeClockTime());
+ assertTrue(0 < dump.getLastTimeChangeRealtime());
+
+ // ConstantsProto
+ ConstantsProto settings = dump.getSettings();
+ assertTrue(0 < settings.getMinFuturityDurationMs());
+ assertTrue(0 < settings.getMinIntervalDurationMs());
+ assertTrue(0 < settings.getListenerTimeoutDurationMs());
+ assertTrue(0 < settings.getAllowWhileIdleShortDurationMs());
+ assertTrue(0 < settings.getAllowWhileIdleLongDurationMs());
+ assertTrue(0 < settings.getAllowWhileIdleWhitelistDurationMs());
+
+ // ForceAppStandbyTrackerProto
+ ForceAppStandbyTrackerProto forceAppStandbyTracker = dump.getForceAppStandbyTracker();
+ for (int uid : forceAppStandbyTracker.getForegroundUidsList()) {
+ // 0 is technically a valid UID.
+ assertTrue(0 <= uid);
+ }
+ for (int aid : forceAppStandbyTracker.getPowerSaveWhitelistAppIdsList()) {
+ assertTrue(0 <= aid);
+ }
+ for (int aid : forceAppStandbyTracker.getTempPowerSaveWhitelistAppIdsList()) {
+ assertTrue(0 <= aid);
+ }
+ for (ForceAppStandbyTrackerProto.RunAnyInBackgroundRestrictedPackages r : forceAppStandbyTracker.getRunAnyInBackgroundRestrictedPackagesList()) {
+ assertTrue(0 <= r.getUid());
+ }
+
+ if (!dump.getIsInteractive()) {
+ // These are only valid if is_interactive is false.
+ assertTrue(0 < dump.getTimeSinceNonInteractiveMs());
+ assertTrue(0 < dump.getMaxWakeupDelayMs());
+ assertTrue(0 < dump.getTimeSinceLastDispatchMs());
+ // time_until_next_non_wakeup_delivery_ms could be negative if the delivery time is in the past.
+ }
+
+ assertTrue(0 < dump.getTimeUntilNextNonWakeupAlarmMs());
+ assertTrue(0 < dump.getTimeUntilNextWakeupMs());
+ assertTrue(0 < dump.getTimeSinceLastWakeupMs());
+ assertTrue(0 < dump.getTimeSinceLastWakeupSetMs());
+ assertTrue(0 <= dump.getTimeChangeEventCount());
+
+ for (int aid : dump.getDeviceIdleUserWhitelistAppIdsList()) {
+ assertTrue(0 <= aid);
+ }
+
+ // AlarmClockMetadataProto
+ for (AlarmClockMetadataProto ac : dump.getNextAlarmClockMetadataList()) {
+ assertTrue(0 <= ac.getUser());
+ assertTrue(0 < ac.getTriggerTimeMs());
+ }
+
+ for (BatchProto b : dump.getPendingAlarmBatchesList()) {
+ final long start = b.getStartRealtime();
+ final long end = b.getEndRealtime();
+ assertTrue("Batch start time (" + start+ ") is negative", 0 <= start);
+ assertTrue("Batch end time (" + end + ") is negative", 0 <= end);
+ assertTrue("Batch start time (" + start + ") is after its end time (" + end + ")",
+ start <= end);
+ testAlarmProtoList(b.getAlarmsList());
+ }
+
+ testAlarmProtoList(dump.getPendingUserBlockedBackgroundAlarmsList());
+
+ testAlarmProto(dump.getPendingIdleUntil());
+
+ testAlarmProtoList(dump.getPendingWhileIdleAlarmsList());
+
+ testAlarmProto(dump.getNextWakeFromIdle());
+
+ testAlarmProtoList(dump.getPastDueNonWakeupAlarmsList());
+
+ assertTrue(0 <= dump.getDelayedAlarmCount());
+ assertTrue(0 <= dump.getTotalDelayTimeMs());
+ assertTrue(0 <= dump.getMaxDelayDurationMs());
+ assertTrue(0 <= dump.getMaxNonInteractiveDurationMs());
+
+ assertTrue(0 <= dump.getBroadcastRefCount());
+ assertTrue(0 <= dump.getPendingIntentSendCount());
+ assertTrue(0 <= dump.getPendingIntentFinishCount());
+ assertTrue(0 <= dump.getListenerSendCount());
+ assertTrue(0 <= dump.getListenerFinishCount());
+
+ for (InFlightProto f : dump.getOutstandingDeliveriesList()) {
+ assertTrue(0 <= f.getUid());
+ assertTrue(0 < f.getWhenElapsedMs());
+ testBroadcastStatsProto(f.getBroadcastStats());
+ testFilterStatsProto(f.getFilterStats());
+ }
+
+ long awimds = dump.getAllowWhileIdleMinDurationMs();
+ assertTrue(awimds == settings.getAllowWhileIdleShortDurationMs()
+ || awimds == settings.getAllowWhileIdleLongDurationMs());
+
+ for (AlarmManagerServiceProto.LastAllowWhileIdleDispatch l : dump.getLastAllowWhileIdleDispatchTimesList()) {
+ assertTrue(0 <= l.getUid());
+ assertTrue(0 < l.getTimeMs());
+ }
+
+ for (AlarmManagerServiceProto.TopAlarm ta : dump.getTopAlarmsList()) {
+ assertTrue(0 <= ta.getUid());
+ testFilterStatsProto(ta.getFilter());
+ }
+
+ for (AlarmManagerServiceProto.AlarmStat as : dump.getAlarmStatsList()) {
+ testBroadcastStatsProto(as.getBroadcast());
+ for (FilterStatsProto f : as.getFiltersList()) {
+ testFilterStatsProto(f);
+ }
+ }
+
+ for (IdleDispatchEntryProto id : dump.getAllowWhileIdleDispatchesList()) {
+ assertTrue(0 <= id.getUid());
+ assertTrue(0 <= id.getEntryCreationRealtime());
+ assertTrue(0 <= id.getArgRealtime());
+ }
+
+ for (WakeupEventProto we : dump.getRecentWakeupHistoryList()) {
+ assertTrue(0 <= we.getUid());
+ assertTrue(0 <= we.getWhen());
+ }
+ }
+
+ private void testAlarmProtoList(List<AlarmProto> alarms) throws Exception {
+ for (AlarmProto a : alarms) {
+ testAlarmProto(a);
+ }
+ }
+
+ private void testAlarmProto(AlarmProto alarm) throws Exception {
+ assertNotNull(alarm);
+
+ // alarm.time_until_when_elapsed_ms can be negative if 'when' is in the past.
+ assertTrue(0 <= alarm.getWindowLengthMs());
+ assertTrue(0 <= alarm.getRepeatIntervalMs());
+ assertTrue(0 <= alarm.getCount());
+ }
+
+ private void testBroadcastStatsProto(BroadcastStatsProto broadcast) throws Exception {
+ assertNotNull(broadcast);
+
+ assertTrue(0 <= broadcast.getUid());
+ assertTrue(0 <= broadcast.getTotalFlightDurationMs());
+ assertTrue(0 <= broadcast.getCount());
+ assertTrue(0 <= broadcast.getWakeupCount());
+ assertTrue(0 <= broadcast.getStartTimeRealtime());
+ // Nesting should be non-negative.
+ assertTrue(0 <= broadcast.getNesting());
+ }
+
+ private void testFilterStatsProto(FilterStatsProto filter) throws Exception {
+ assertNotNull(filter);
+
+ assertTrue(0 <= filter.getLastFlightTimeRealtime());
+ assertTrue(0 <= filter.getTotalFlightDurationMs());
+ assertTrue(0 <= filter.getCount());
+ assertTrue(0 <= filter.getWakeupCount());
+ assertTrue(0 <= filter.getStartTimeRealtime());
+ // Nesting should be non-negative.
+ assertTrue(0 <= filter.getNesting());
+ }
+}
+
diff --git a/hostsidetests/inputmethodservice/common/src/android/inputmethodservice/cts/common/DeviceEventConstants.java b/hostsidetests/inputmethodservice/common/src/android/inputmethodservice/cts/common/DeviceEventConstants.java
index 89a21f2..307693a 100644
--- a/hostsidetests/inputmethodservice/common/src/android/inputmethodservice/cts/common/DeviceEventConstants.java
+++ b/hostsidetests/inputmethodservice/common/src/android/inputmethodservice/cts/common/DeviceEventConstants.java
@@ -80,14 +80,7 @@
/**
* Param for {@link DeviceEventType#ON_START_INPUT}. Represents if IME is restarting.
*/
- ON_START_INPUT_RESTARTING(DeviceEventType.ON_START_INPUT, "onStartInput.restarting"),
-
- /**
- * Param for {@link DeviceEventType#ON_START_INPUT}. Represents if it's backed by a dummy
- * {@link android.view.inputmethod.InputConnection}.
- */
- ON_START_INPUT_DUMMY_INPUT_CONNECTION(DeviceEventType.ON_START_INPUT,
- "onStartInput.dummyinputconnection");
+ ON_START_INPUT_RESTARTING(DeviceEventType.ON_START_INPUT, "onStartInput.restarting");
private final DeviceEventType mType;
private final String mName;
diff --git a/hostsidetests/inputmethodservice/deviceside/devicetest/src/android/inputmethodservice/cts/devicetest/InputMethodServiceDeviceTest.java b/hostsidetests/inputmethodservice/deviceside/devicetest/src/android/inputmethodservice/cts/devicetest/InputMethodServiceDeviceTest.java
index d9593a5..e5613ff 100644
--- a/hostsidetests/inputmethodservice/deviceside/devicetest/src/android/inputmethodservice/cts/devicetest/InputMethodServiceDeviceTest.java
+++ b/hostsidetests/inputmethodservice/deviceside/devicetest/src/android/inputmethodservice/cts/devicetest/InputMethodServiceDeviceTest.java
@@ -18,7 +18,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static android.inputmethodservice.cts.DeviceEvent.isFrom;
@@ -73,7 +72,8 @@
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_CREATE))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_CREATE)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onCreate is called");
final long startActivityTime = SystemClock.uptimeMillis();
@@ -81,7 +81,8 @@
pollingCheck(() -> helper.queryAllEvents()
.filter(isNewerThan(startActivityTime))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onStartInput is called");
}
@@ -93,7 +94,8 @@
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_CREATE))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_CREATE)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onCreate is called");
final long startActivityTime = SystemClock.uptimeMillis();
@@ -101,7 +103,8 @@
pollingCheck(() -> helper.queryAllEvents()
.filter(isNewerThan(startActivityTime))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onStartInput is called");
helper.findUiObject(R.id.text_entry).click();
@@ -118,7 +121,8 @@
TIMEOUT, "CtsInputMethod2 is current IME");
pollingCheck(() -> helper.queryAllEvents()
.filter(isNewerThan(switchImeTime))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_DESTROY))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_DESTROY)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onDestroy is called");
pollingCheck(() -> helper.queryAllEvents()
.filter(isNewerThan(switchImeTime))
@@ -153,11 +157,13 @@
helper.findUiObject(R.id.search_view).click();
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(SHOW_SOFT_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(SHOW_SOFT_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.showSoftInput is called");
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onStartInput is called");
}
@@ -176,11 +182,13 @@
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_FINISH_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_FINISH_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.onFinishInput is called");
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(HIDE_SOFT_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(HIDE_SOFT_INPUT)))
+ .findAny().isPresent(),
TIMEOUT, "CtsInputMethod1.hideSoftInput is called");
}
@@ -195,7 +203,9 @@
// we should've only one onStartInput call.
pollingCheck(() -> helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
- .anyMatch(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT))),
+ .filter(isFrom(Ime1Constants.CLASS).and(isType(ON_START_INPUT)))
+ .findAny()
+ .isPresent(),
TIMEOUT, "CtsInputMethod1.onStartInput is called");
List<DeviceEvent> startInputEvents = helper.queryAllEvents()
.collect(startingFrom(helper.isStartOfTest()))
@@ -208,15 +218,10 @@
// check if that single event didn't cause IME restart.
final DeviceEvent event = startInputEvents.get(0);
- final Boolean isRestarting = DeviceEvent.getEventParamBoolean(
+ Boolean isRestarting = DeviceEvent.getEventParamBoolean(
DeviceEventTypeParam.ON_START_INPUT_RESTARTING, event);
- assertNotNull(isRestarting);
+ assertTrue(isRestarting != null);
assertFalse(isRestarting);
-
- final Boolean isDummyInputConnection = DeviceEvent.getEventParamBoolean(
- DeviceEventTypeParam.ON_START_INPUT_DUMMY_INPUT_CONNECTION, event);
- assertNotNull(isDummyInputConnection);
- assertFalse(isDummyInputConnection);
}
/**
diff --git a/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/DeviceEvent.java b/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/DeviceEvent.java
index cd2c557..ff412ef 100644
--- a/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/DeviceEvent.java
+++ b/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/DeviceEvent.java
@@ -277,16 +277,19 @@
public static Boolean getEventParamBoolean(
DeviceEventTypeParam eventParam, final DeviceEvent event) {
StringReader stringReader = new StringReader(event.paramsString);
- try (JsonReader reader = new JsonReader(stringReader)) {
+ JsonReader reader = new JsonReader(stringReader);
+
+ try {
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals(eventParam.getName())) {
Boolean value = reader.nextBoolean();
+ reader.endObject();
return value;
}
- reader.skipValue();
}
+ reader.endObject();
} catch (IOException e) {
throw new RuntimeException("DeviceEvent.getEventParamBoolean() failed.", e);
}
diff --git a/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/ime/CtsBaseInputMethod.java b/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/ime/CtsBaseInputMethod.java
index 3a99e71..b37873c 100644
--- a/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/ime/CtsBaseInputMethod.java
+++ b/hostsidetests/inputmethodservice/deviceside/lib/src/android/inputmethodservice/cts/ime/CtsBaseInputMethod.java
@@ -33,7 +33,6 @@
import android.os.ResultReceiver;
import android.util.Log;
import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputBinding;
import android.view.inputmethod.InputConnection;
import java.util.function.Consumer;
@@ -81,19 +80,15 @@
@Override
public void onStartInput(EditorInfo editorInfo, boolean restarting) {
- final boolean dummyConnection =
- getCurrentInputConnection() == getCurrentInputBinding().getConnection();
if (DEBUG) {
Log.d(mLogTag, "onStartInput:"
+ " editorInfo=" + editorInfo
- + " restarting=" + restarting
- + " dummyConnection=" + dummyConnection);
+ + " restarting=" + restarting);
}
sendEvent(DeviceEvent.builder()
.setType(ON_START_INPUT)
- .with(DeviceEventTypeParam.ON_START_INPUT_RESTARTING, restarting)
- .with(DeviceEventTypeParam.ON_START_INPUT_DUMMY_INPUT_CONNECTION, dummyConnection));
+ .with(DeviceEventTypeParam.ON_START_INPUT_RESTARTING, restarting));
super.onStartInput(editorInfo, restarting);
}
diff --git a/run_unit_tests.sh b/run_unit_tests.sh
index 64ecf25..3f29832 100755
--- a/run_unit_tests.sh
+++ b/run_unit_tests.sh
@@ -44,7 +44,6 @@
cts-tradefed-tests\
compatibility-device-info-tests\
compatibility-manifest-generator-tests
- compatibility-host-media-preconditions-tests\
CompatibilityTestApp"
pushd ${CTS_DIR}/..
@@ -74,5 +73,3 @@
${CTS_DIR}/common/util/tests/run_tests.sh
${CTS_DIR}/tools/cts-tradefed/tests/run_tests.sh
-
-${CTS_DIR}/tests/tests/mediastress/preconditions/tests/run_tests.sh
diff --git a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
index 4b2086f..8312b9e 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
@@ -234,6 +234,7 @@
setDeviceRotation(ROTATION_0);
}
+ @Presubmit
@Test
public void testPinnedStackOutOfBoundsInsetsNonNegative() throws Exception {
assumeTrue(supportsPip());
@@ -243,6 +244,7 @@
// Launch an activity into the pinned stack
launchActivity(PIP_ACTIVITY, EXTRA_ENTER_PIP, "true", EXTRA_TAP_TO_FINISH, "true");
mAmWmState.waitForValidState(PIP_ACTIVITY, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
+ mAmWmState.waitForAppTransitionIdle();
// Get the display dimensions
WindowManagerState.WindowState windowState = getWindowState(PIP_ACTIVITY);
@@ -1119,15 +1121,15 @@
}
/** Test that reported display size corresponds to fullscreen after exiting PiP. */
+ @Presubmit
@Test
public void testDisplayMetricsPinUnpin() throws Exception {
assumeTrue(supportsPip());
String logSeparator = clearLogcat();
launchActivity(TEST_ACTIVITY);
- final int defaultWindowingMode = WINDOWING_MODE_FULLSCREEN;
- // TODO: Uncomment the line below after we start dumping AM to proto.
- //final int defaultWindowingMode = mAmWmState.getAmState().getActivity(TEST_ACTIVITY).getWindowingMode();
+ final int defaultWindowingMode = mAmWmState.getAmState()
+ .getTaskByActivityName(TEST_ACTIVITY).getWindowingMode();
final ReportedSizes initialSizes = getLastReportedSizesForActivity(TEST_ACTIVITY,
logSeparator);
final Rect initialAppBounds = readAppBounds(TEST_ACTIVITY, logSeparator);
@@ -1137,6 +1139,7 @@
logSeparator = clearLogcat();
launchActivity(PIP_ACTIVITY, EXTRA_ENTER_PIP, "true");
mAmWmState.waitForValidState(PIP_ACTIVITY, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
+ mAmWmState.waitForAppTransitionIdle();
final ReportedSizes pinnedSizes = getLastReportedSizesForActivity(PIP_ACTIVITY,
logSeparator);
final Rect pinnedAppBounds = readAppBounds(PIP_ACTIVITY, logSeparator);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/CrossAppDragAndDropTests.java b/tests/framework/base/windowmanager/src/android/server/wm/CrossAppDragAndDropTests.java
index e3c4b89..c9b8b17 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/CrossAppDragAndDropTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/CrossAppDragAndDropTests.java
@@ -113,9 +113,6 @@
private static final String RESULT_EXCEPTION = "Exception";
private static final String RESULT_NULL_DROP_PERMISSIONS = "Null DragAndDropPermissions";
- private static final String AM_SUPPORTS_SPLIT_SCREEN_MULTIWINDOW =
- "am supports-split-screen-multi-window";
-
protected Context mContext;
protected ActivityManager mAm;
private UiDevice mDevice;
@@ -425,19 +422,11 @@
}
private static boolean supportsDragAndDrop() {
- String supportsMultiwindow = executeShellCommand("am supports-multiwindow").trim();
- if ("true".equals(supportsMultiwindow)) {
- return true;
- } else if ("false".equals(supportsMultiwindow)) {
- return false;
- } else {
- throw new RuntimeException(
- "device does not support \"am supports-multiwindow\" shell command.");
- }
+ return ActivityManager.supportsMultiWindow(InstrumentationRegistry.getContext());
}
private static boolean supportsSplitScreenMultiWindow() {
- return !executeShellCommand(AM_SUPPORTS_SPLIT_SCREEN_MULTIWINDOW).startsWith("false");
+ return ActivityManager.supportsSplitScreenMultiWindow(InstrumentationRegistry.getContext());
}
private static boolean supportsFreeformMultiWindow() {
diff --git a/tests/inputmethod/Android.mk b/tests/inputmethod/Android.mk
index 979ad78..5fc491e 100644
--- a/tests/inputmethod/Android.mk
+++ b/tests/inputmethod/Android.mk
@@ -38,6 +38,8 @@
LOCAL_PACKAGE_NAME := CtsInputMethodTestCases
+LOCAL_SDK_VERSION := test_current
+
include $(BUILD_CTS_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
index d5ace2e..d3efc72 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
@@ -493,8 +493,8 @@
public void testCloseConnection() {
final CharSequence source = "0123456789";
mConnection.commitText(source, source.length());
+ mConnection.setComposingRegion(2, 5);
final Editable text = mConnection.getEditable();
- BaseInputConnection.setComposingSpans(text, 2, 5);
assertEquals(2, BaseInputConnection.getComposingSpanStart(text));
assertEquals(5, BaseInputConnection.getComposingSpanEnd(text));
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodInfoTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodInfoTest.java
index 2b5d7ed..b538d41 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodInfoTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodInfoTest.java
@@ -250,7 +250,7 @@
ApplicationInfo.FLAG_SYSTEM) {
continue;
}
- if (serviceInfo.encryptionAware) {
+ if (serviceInfo.directBootAware) {
hasEncryptionAwareInputMethod = true;
break;
}
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/util/TestActivity.java b/tests/inputmethod/src/android/view/inputmethod/cts/util/TestActivity.java
index b23bdc1..2cb2253 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/util/TestActivity.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/util/TestActivity.java
@@ -16,10 +16,10 @@
package android.view.inputmethod.cts.util;
-import android.annotation.NonNull;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.test.InstrumentationRegistry;
import android.view.View;
diff --git a/tests/tests/calendarcommon/AndroidManifest.xml b/tests/tests/calendarcommon/AndroidManifest.xml
index 4f21b18..951404a 100644
--- a/tests/tests/calendarcommon/AndroidManifest.xml
+++ b/tests/tests/calendarcommon/AndroidManifest.xml
@@ -30,7 +30,7 @@
android:value="com.android.cts.runner.CtsTestRunListener" />
</instrumentation>
- <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="15"></uses-sdk>
+ <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="17"></uses-sdk>
</manifest>
diff --git a/tests/tests/dpi2/AndroidManifest.xml b/tests/tests/dpi2/AndroidManifest.xml
index 689be29..f3d5be0 100644
--- a/tests/tests/dpi2/AndroidManifest.xml
+++ b/tests/tests/dpi2/AndroidManifest.xml
@@ -25,7 +25,7 @@
<!-- target cupcake so we can test the default attributes get set
properly for the screen size attributes. -->
- <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="3" />
+ <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="17" />
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="android.dpi2.cts"
diff --git a/tests/tests/dpi2/src/android/dpi2/cts/DefaultManifestAttributesCupcakeTest.java b/tests/tests/dpi2/src/android/dpi2/cts/DefaultManifestAttributesCupcakeTest.java
index 04db412..abb8d66 100644
--- a/tests/tests/dpi2/src/android/dpi2/cts/DefaultManifestAttributesCupcakeTest.java
+++ b/tests/tests/dpi2/src/android/dpi2/cts/DefaultManifestAttributesCupcakeTest.java
@@ -34,6 +34,6 @@
// This is a sanity test to make sure that we're instrumenting the proper package
public void testPackageHasExpectedSdkVersion() {
- assertEquals(3, getAppInfo().targetSdkVersion);
+ assertEquals(3, getAppInfo().minSdkVersion);
}
}
diff --git a/tests/tests/media/AndroidTest.xml b/tests/tests/media/AndroidTest.xml
index 03d4770..8dbb0f0 100644
--- a/tests/tests/media/AndroidTest.xml
+++ b/tests/tests/media/AndroidTest.xml
@@ -15,6 +15,9 @@
-->
<configuration description="Config for CTS Media test cases">
<option name="config-descriptor:metadata" key="component" value="media" />
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.MediaPreparer">
+ <option name="images-only" value="true" />
+ </target_preparer>
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsMediaTestCases.apk" />
diff --git a/tests/tests/slice/src/android/slice/cts/SliceProvider.java b/tests/tests/slice/src/android/slice/cts/SliceProvider.java
index 265ea67..3390427 100644
--- a/tests/tests/slice/src/android/slice/cts/SliceProvider.java
+++ b/tests/tests/slice/src/android/slice/cts/SliceProvider.java
@@ -48,8 +48,8 @@
PendingIntent broadcast = PendingIntent.getBroadcast(getContext(), 0,
new Intent(getContext().getPackageName() + ".action"), 0);
return builder.addAction(broadcast, subSlice, "action").build();
- case "/color":
- return new Slice.Builder(sliceUri).addColor(0xff121212, "color").build();
+ case "/int":
+ return new Slice.Builder(sliceUri).addInt(0xff121212, "int").build();
case "/timestamp":
return new Slice.Builder(sliceUri).addTimestamp(43, "timestamp").build();
case "/hints":
diff --git a/tests/tests/slice/src/android/slice/cts/SliceTest.java b/tests/tests/slice/src/android/slice/cts/SliceTest.java
index 8efcf4c..dcc0b94 100644
--- a/tests/tests/slice/src/android/slice/cts/SliceTest.java
+++ b/tests/tests/slice/src/android/slice/cts/SliceTest.java
@@ -150,16 +150,16 @@
}
@Test
- public void testColor() {
- Uri uri = BASE_URI.buildUpon().appendPath("color").build();
+ public void testInt() {
+ Uri uri = BASE_URI.buildUpon().appendPath("int").build();
Slice s = Slice.bindSlice(mContext.getContentResolver(), uri,
Collections.emptyList());
assertEquals(uri, s.getUri());
assertEquals(1, s.getItems().size());
SliceItem item = s.getItems().get(0);
- assertEquals(SliceItem.FORMAT_COLOR, item.getFormat());
- assertEquals(0xff121212, item.getColor());
+ assertEquals(SliceItem.FORMAT_INT, item.getFormat());
+ assertEquals(0xff121212, item.getInt());
}
@Test
diff --git a/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java b/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
index a1423af..a074783 100644
--- a/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
@@ -110,6 +110,11 @@
}
private void verifyCdmaInfo(CellInfoCdma cdma) {
+ String alphaLong = (String) cdma.getCellIdentity().getOperatorAlphaLong();
+ assertNotNull("getOperatorAlphaLong() returns NULL!", alphaLong);
+ String alphaShort = (String) cdma.getCellIdentity().getOperatorAlphaShort();
+ assertNotNull("getOperatorAlphaShort() returns NULL!", alphaShort);
+
int level = cdma.getCellSignalStrength().getLevel();
assertTrue("getLevel() out of range [0,4], level=" + level, level >=0 && level <= 4);
}
@@ -123,6 +128,29 @@
// Physical cell id should be within [0, 503].
assertTrue("getPci() out of range [0, 503], pci=" + pci, pci >= 0 && pci <= 503);
+ String alphaLong = (String) lte.getCellIdentity().getOperatorAlphaLong();
+ assertNotNull("getOperatorAlphaLong() returns NULL!", alphaLong);
+ String alphaShort = (String) lte.getCellIdentity().getOperatorAlphaShort();
+ assertNotNull("getOperatorAlphaShort() returns NULL!", alphaShort);
+
+ String mccStr = lte.getCellIdentity().getMccStr();
+ // mccStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMccStr() out of range [0, 999], mcc=" + mccStr,
+ mccStr == null || mccStr.matches("^[0-9]{3}$"));
+ String mncStr = lte.getCellIdentity().getMncStr();
+ // mncStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMncStr() out of range [0, 999], mnc=" + mncStr,
+ mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+
+ int mcc = lte.getCellIdentity().getMcc();
+ // getMcc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
+ (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
+ int mnc = lte.getCellIdentity().getMnc();
+ // getMnc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
+ (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
+
int earfcn = lte.getCellIdentity().getEarfcn();
// Reference 3GPP 36.101 Table 5.7.3-1
assertTrue("getEarfcn() out of range [0,47000], earfcn=" + earfcn,
@@ -162,6 +190,29 @@
assertTrue("getUarfcn() out of range [400,11000], uarfcn=" + uarfcn,
uarfcn >= 400 && uarfcn <= 11000);
+ String alphaLong = (String) wcdma.getCellIdentity().getOperatorAlphaLong();
+ assertNotNull("getOperatorAlphaLong() returns NULL!", alphaLong);
+ String alphaShort = (String) wcdma.getCellIdentity().getOperatorAlphaShort();
+ assertNotNull("getOperatorAlphaShort() returns NULL!", alphaShort);
+
+ String mccStr = wcdma.getCellIdentity().getMccStr();
+ // mccStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMccStr() out of range [0, 999], mcc=" + mccStr,
+ mccStr == null || mccStr.matches("^[0-9]{3}$"));
+ String mncStr = wcdma.getCellIdentity().getMncStr();
+ // mncStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMncStr() out of range [0, 999], mnc=" + mncStr,
+ mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+
+ int mcc = wcdma.getCellIdentity().getMcc();
+ // getMcc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
+ (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
+ int mnc = wcdma.getCellIdentity().getMnc();
+ // getMnc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
+ (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
+
int level = wcdma.getCellSignalStrength().getLevel();
assertTrue("getLevel() out of range [0,4], level=" + level, level >=0 && level <= 4);
}
@@ -183,6 +234,29 @@
assertTrue("getArfcn() out of range [0,1024], arfcn=" + arfcn,
arfcn >= 0 && arfcn <= 1024);
+ String alphaLong = (String) gsm.getCellIdentity().getOperatorAlphaLong();
+ assertNotNull("getOperatorAlphaLong() returns NULL!", alphaLong);
+ String alphaShort = (String) gsm.getCellIdentity().getOperatorAlphaShort();
+ assertNotNull("getOperatorAlphaShort() returns NULL!", alphaShort);
+
+ String mccStr = gsm.getCellIdentity().getMccStr();
+ // mccStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMccStr() out of range [0, 999], mcc=" + mccStr,
+ mccStr == null || mccStr.matches("^[0-9]{3}$"));
+ String mncStr = gsm.getCellIdentity().getMncStr();
+ // mncStr is set as NULL if empty, unknown or invalid.
+ assertTrue("getMncStr() out of range [0, 999], mnc=" + mncStr,
+ mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+
+ int mcc = gsm.getCellIdentity().getMcc();
+ // getMcc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
+ (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
+ int mnc = gsm.getCellIdentity().getMnc();
+ // getMnc() returns Integer.MAX_VALUE if mccStr is null.
+ assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
+ (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
+
int level = gsm.getCellSignalStrength().getLevel();
assertTrue("getLevel() out of range [0,4], level=" + level, level >=0 && level <= 4);