blob: 6454678967c1d3f98ebad10e7e530f5df5aed701 [file] [log] [blame]
/*
* Copyright (C) 2013 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.hardware.cts;
import com.android.cts.util.ReportLog;
import com.android.cts.util.ResultType;
import com.android.cts.util.ResultUnit;
import android.app.Instrumentation;
import android.cts.util.DeviceReportLog;
import android.hardware.Sensor;
import android.hardware.cts.helpers.SensorStats;
import android.hardware.cts.helpers.SensorTestStateNotSupportedException;
import android.hardware.cts.helpers.TestSensorEnvironment;
import android.hardware.cts.helpers.sensoroperations.ISensorOperation;
import android.test.AndroidTestCase;
import android.util.Log;
/**
* Test Case class that handles gracefully sensors that are not available in the device.
*/
public abstract class SensorTestCase extends AndroidTestCase {
// TODO: consolidate all log tags
protected final String LOG_TAG = "TestRunner";
/**
* By default tests need to run in a {@link TestSensorEnvironment} that assumes each sensor is
* running with a load of several listeners, requesting data at different rates.
*
* In a better world the component acting as builder of {@link ISensorOperation} would compute
* this value based on the tests composed.
*
* Ideally, each {@link Sensor} object would expose this information to clients.
*/
private volatile boolean mEmulateSensorUnderLoad = true;
protected SensorTestCase() {}
@Override
public void runTest() throws Throwable {
try {
super.runTest();
} catch (SensorTestStateNotSupportedException e) {
// the sensor state is not supported in the device, log a warning and skip the test
Log.w(LOG_TAG, e.getMessage());
}
}
public void setEmulateSensorUnderLoad(boolean value) {
mEmulateSensorUnderLoad = value;
}
protected boolean shouldEmulateSensorUnderLoad() {
return mEmulateSensorUnderLoad;
}
/**
* Utility method to log selected stats to a {@link ReportLog} object. The stats must be
* a number or an array of numbers.
*/
public static void logSelectedStatsToReportLog(Instrumentation instrumentation, int depth,
String[] keys, SensorStats stats) {
DeviceReportLog reportLog = new DeviceReportLog(depth);
for (String key : keys) {
Object value = stats.getValue(key);
if (value instanceof Integer) {
reportLog.printValue(key, (Integer) value, ResultType.NEUTRAL, ResultUnit.NONE);
} else if (value instanceof Double) {
reportLog.printValue(key, (Double) value, ResultType.NEUTRAL, ResultUnit.NONE);
} else if (value instanceof Float) {
reportLog.printValue(key, (Float) value, ResultType.NEUTRAL, ResultUnit.NONE);
} else if (value instanceof double[]) {
reportLog.printArray(key, (double[]) value, ResultType.NEUTRAL, ResultUnit.NONE);
} else if (value instanceof float[]) {
float[] tmpFloat = (float[]) value;
double[] tmpDouble = new double[tmpFloat.length];
for (int i = 0; i < tmpDouble.length; i++) tmpDouble[i] = tmpFloat[i];
reportLog.printArray(key, tmpDouble, ResultType.NEUTRAL, ResultUnit.NONE);
}
}
reportLog.printSummary("summary", 0, ResultType.NEUTRAL, ResultUnit.NONE);
reportLog.deliverReportToHost(instrumentation);
}
}