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 "ranged_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 RangedConverterTest : 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( 361760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen new RangedConverter<int, int32_t>(converter_, min_, max_, step_)); 371760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen } 381760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 391760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen virtual void ExpectConvert(int32_t converted, int32_t expected) { 401760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int initial = 99; 411760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_CALL(*converter_, MetadataToV4L2(initial, _)) 421760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen .WillOnce(DoAll(SetArgPointee<1>(converted), Return(0))); 431760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 441760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int32_t actual = expected + 1; // Initialize to non-expected value. 451760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ASSERT_EQ(dut_->MetadataToV4L2(initial, &actual), 0); 461760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_EQ(actual, expected); 471760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen } 481760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 491760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen std::shared_ptr<ConverterInterfaceMock<int, int32_t>> converter_; 501760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen std::unique_ptr<RangedConverter<int, int32_t>> dut_; 511760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 521760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen const int32_t min_ = -11; 531760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen const int32_t max_ = 10; 541760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen const int32_t step_ = 3; 551760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen}; 561760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 571760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(RangedConverterTest, NormalConversion) { 581760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's in range and on step. 591760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvert(max_ - step_, max_ - step_); 601760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 611760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 621760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(RangedConverterTest, RoundingConversion) { 631760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's in range but off step. 641760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvert(max_ - step_ + 1, max_ - step_); 651760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 661760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 671760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(RangedConverterTest, ClampUpConversion) { 681760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's below range. 691760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvert(min_ - 1, min_); 701760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 711760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 721760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(RangedConverterTest, ClampDownConversion) { 731760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen // A value that's above range (even after fitting to step). 741760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen ExpectConvert(max_ + step_, max_); 751760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 761760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 771760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-CohenTEST_F(RangedConverterTest, ConversionError) { 781760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int initial = 99; 791760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int err = -99; 801760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_CALL(*converter_, MetadataToV4L2(initial, _)).WillOnce(Return(err)); 811760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 821760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen int32_t unused; 831760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen EXPECT_EQ(dut_->MetadataToV4L2(initial, &unused), err); 841760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} 851760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen 861760aa2912463b63bb1af52e24cb0bbf58c0965dAri Hausman-Cohen} // namespace v4l2_camera_hal 87