11760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen/* 21760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * Copyright (C) 2016 The Android Open Source Project 31760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * 41760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 51760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * you may not use this file except in compliance with the License. 61760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * You may obtain a copy of the License at 71760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * 81760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * http://www.apache.org/licenses/LICENSE-2.0 91760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * 101760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * Unless required by applicable law or agreed to in writing, software 111760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * distributed under the License is distributed on an "AS IS" BASIS, 121760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * See the License for the specific language governing permissions and 141760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen * limitations under the License. 151760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen */ 161760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 171760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen#include "map_converter.h" 181760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 191760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen#include <gmock/gmock.h> 201760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen#include <gtest/gtest.h> 211760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 221760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen#include "converter_interface_mock.h" 231760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 241760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohenusing testing::Return; 251760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohenusing testing::SetArgPointee; 261760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohenusing testing::Test; 271760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohenusing testing::_; 281760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 291760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohennamespace v4l2_camera_hal { 301760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 311760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohenclass MapConverterTest : public Test { 321760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen protected: 331760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen virtual void SetUp() { 341760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen converter_.reset(new ConverterInterfaceMock<int, int32_t>()); 351760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen dut_.reset(new MapConverter<int, int32_t, int32_t>(converter_, map_)); 361760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen } 371760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 381760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen virtual void ExpectConvertToV4L2(int32_t converted, int32_t expected) { 391760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int initial = 99; 401760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_CALL(*converter_, MetadataToV4L2(initial, _)) 411760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen .WillOnce(DoAll(SetArgPointee<1>(converted), Return(0))); 421760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 431760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int32_t actual = expected + 1; // Initialize to non-expected value. 441760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ASSERT_EQ(dut_->MetadataToV4L2(initial, &actual), 0); 451760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_EQ(actual, expected); 461760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen } 471760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 481760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen std::shared_ptr<ConverterInterfaceMock<int, int32_t>> converter_; 491760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen std::unique_ptr<MapConverter<int, int32_t, int32_t>> dut_; 501760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 511760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen const std::map<int32_t, int32_t> map_{{10, 1}, {40, 4}, {20, 2}, {30, 3}}; 521760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen}; 531760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 541760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, NormalConversionToV4L2) { 551760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that matches the map perfectly. 561760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.begin(); 571760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvertToV4L2(kv->first, kv->second); 581760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 591760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 601760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, RoundingDownConversionToV4L2) { 611760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's in range but not an exact key value. 621760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.begin(); 631760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvertToV4L2(kv->first + 1, kv->second); 641760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 651760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 661760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, RoundingUpConversionToV4L2) { 671760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's in range but not an exact key value. 681760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.begin(); 691760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ++kv; 701760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvertToV4L2(kv->first - 1, kv->second); 711760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 721760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 731760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, ClampUpConversionToV4L2) { 741760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's below range. 751760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.begin(); 761760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvertToV4L2(kv->first - 1, kv->second); 771760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 781760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 791760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, ClampDownConversionToV4L2) { 801760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's above range (even after fitting to step). 811760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.rbegin(); 821760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvertToV4L2(kv->first + 1, kv->second); 831760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 841760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 851760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, ConversionErrorToV4L2) { 861760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int initial = 99; 871760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int err = -99; 881760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_CALL(*converter_, MetadataToV4L2(initial, _)).WillOnce(Return(err)); 891760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 901760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int32_t unused; 911760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_EQ(dut_->MetadataToV4L2(initial, &unused), err); 921760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 931760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 941760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, NormalConversionToMetadata) { 951760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen auto kv = map_.begin(); 961760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int expected = 99; 971760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_CALL(*converter_, V4L2ToMetadata(kv->first, _)) 981760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen .WillOnce(DoAll(SetArgPointee<1>(expected), Return(0))); 991760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 1001760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int actual = expected + 1; // Initialize to non-expected value. 1011760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ASSERT_EQ(dut_->V4L2ToMetadata(kv->second, &actual), 0); 1021760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_EQ(actual, expected); 1031760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 1041760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 1051760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(MapConverterTest, NotFoundConversionToMetadata) { 1061760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int unused; 1071760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ASSERT_EQ(dut_->V4L2ToMetadata(100, &unused), -EINVAL); 1081760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 1091760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 1101760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} // namespace v4l2_camera_hal 111