1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#define LOG_TAG "Sensor_test" 18 19#include <sensor/Sensor.h> 20#include <hardware/sensors.h> 21#include <utils/Errors.h> 22 23#include <gtest/gtest.h> 24 25namespace android { 26 27// Returns true if the two sensors have the same attributes. Does not compare 28// UUID since that should not be transmitted via flatten/unflatten. 29static bool sensorsMatch(const Sensor& a, const Sensor& b) { 30 return a.getName() == b.getName () && 31 a.getVendor() == b.getVendor () && 32 a.getHandle() == b.getHandle () && 33 a.getType() == b.getType () && 34 a.getMinValue() == b.getMinValue () && 35 a.getMaxValue() == b.getMaxValue () && 36 a.getResolution() == b.getResolution () && 37 a.getPowerUsage() == b.getPowerUsage () && 38 a.getMinDelay() == b.getMinDelay () && 39 a.getMinDelayNs() == b.getMinDelayNs () && 40 a.getVersion() == b.getVersion () && 41 a.getFifoReservedEventCount() == b.getFifoReservedEventCount () && 42 a.getFifoMaxEventCount() == b.getFifoMaxEventCount () && 43 a.getStringType() == b.getStringType () && 44 a.getRequiredPermission() == b.getRequiredPermission () && 45 a.isRequiredPermissionRuntime() == b.isRequiredPermissionRuntime () && 46 a.getRequiredAppOp() == b.getRequiredAppOp () && 47 a.getMaxDelay() == b.getMaxDelay () && 48 a.getFlags() == b.getFlags () && 49 a.isWakeUpSensor() == b.isWakeUpSensor () && 50 a.isDynamicSensor() == b.isDynamicSensor () && 51 a.hasAdditionalInfo() == b.hasAdditionalInfo () && 52 a.getReportingMode() == b.getReportingMode(); 53} 54 55// Creates and returns a sensor_t struct with some default values filled in. 56static sensor_t getTestSensorT() { 57 sensor_t hwSensor = {}; 58 hwSensor.name = "Test Sensor"; 59 hwSensor.vendor = "Test Vendor"; 60 hwSensor.version = 1; 61 hwSensor.handle = 2; 62 hwSensor.type = SENSOR_TYPE_ACCELEROMETER; 63 hwSensor.maxRange = 10.f; 64 hwSensor.resolution = 1.f; 65 hwSensor.power = 5.f; 66 hwSensor.minDelay = 1000; 67 hwSensor.fifoReservedEventCount = 50; 68 hwSensor.fifoMaxEventCount = 100; 69 hwSensor.stringType = SENSOR_STRING_TYPE_ACCELEROMETER; 70 hwSensor.requiredPermission = ""; 71 hwSensor.maxDelay = 5000; 72 hwSensor.flags = SENSOR_FLAG_CONTINUOUS_MODE; 73 return hwSensor; 74} 75 76TEST(SensorTest, FlattenAndUnflatten) { 77 sensor_t hwSensor = getTestSensorT(); 78 Sensor sensor1(&hwSensor, SENSORS_DEVICE_API_VERSION_1_4); 79 Sensor sensor2; 80 81 std::vector<uint8_t> buffer(sensor1.getFlattenedSize()); 82 ASSERT_EQ(OK, sensor1.flatten(buffer.data(), buffer.size())); 83 ASSERT_EQ(OK, sensor2.unflatten(buffer.data(), buffer.size())); 84 85 EXPECT_TRUE(sensorsMatch(sensor1, sensor2)); 86} 87 88} // namespace android 89