19bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen/* 29bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * Copyright (C) 2016 The Android Open Source Project 39bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * 49bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 59bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * you may not use this file except in compliance with the License. 69bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * You may obtain a copy of the License at 79bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * 89bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * http://www.apache.org/licenses/LICENSE-2.0 99bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * 109bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * Unless required by applicable law or agreed to in writing, software 119bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * distributed under the License is distributed on an "AS IS" BASIS, 129bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * See the License for the specific language governing permissions and 149bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen * limitations under the License. 159bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen */ 169bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 179bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen#include "tagged_control_options.h" 189bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 199bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen#include <gmock/gmock.h> 209bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen#include <gtest/gtest.h> 219bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 229bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen#include "control_options_interface_mock.h" 239bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 249bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohenusing testing::Return; 259bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohenusing testing::SetArgPointee; 269bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohenusing testing::Test; 279bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohenusing testing::_; 289bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 299bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohennamespace v4l2_camera_hal { 309bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 319bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohenclass TaggedControlOptionsTest : public Test { 329bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen protected: 339bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen virtual void SetUp() { 349bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen mock_options_.reset(new ControlOptionsInterfaceMock<uint8_t>()); 359bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen // Nullify dut so an error will be thrown if a test doesn't call PrepareDUT. 369bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen dut_.reset(); 379bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen } 389bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 399bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen virtual void PrepareDUT() { 409bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen // Use this method after all the EXPECT_CALLs to pass ownership of the 419bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen // options 429bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen // to the device. 439bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen dut_.reset( 449bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen new TaggedControlOptions<uint8_t>(tag_, std::move(mock_options_))); 459bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen } 469bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 479bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen std::unique_ptr<TaggedControlOptions<uint8_t>> dut_; 489bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen std::unique_ptr<ControlOptionsInterfaceMock<uint8_t>> mock_options_; 499bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen const int32_t tag_ = 123; 509bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen}; 519bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 529bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, GetTag) { 539bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 549bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_EQ(dut_->tag(), tag_); 559bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 569bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 579bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, MetadataRepresentation) { 589bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen std::vector<uint8_t> expected{3, 4, 5}; 599bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_options_, MetadataRepresentation()) 609bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen .WillOnce(Return(expected)); 619bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 629bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->MetadataRepresentation(), expected); 639bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 649bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 659bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, IsSupportedTrue) { 669bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen bool supported = true; 679bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t value = 3; 689bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_options_, IsSupported(value)).WillOnce(Return(supported)); 699bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 709bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->IsSupported(value), supported); 719bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 729bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 739bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, IsSupportedFalse) { 749bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen bool supported = false; 759bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t value = 3; 769bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_options_, IsSupported(value)).WillOnce(Return(supported)); 779bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 789bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->IsSupported(value), supported); 799bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 809bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 8110264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, DefaultValue) { 8210264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen uint8_t value = 99; 8310264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen int template_id = 3; 8410264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen EXPECT_CALL(*mock_options_, DefaultValueForTemplate(template_id, _)) 8510264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen .WillOnce(DoAll(SetArgPointee<1>(value), Return(0))); 8610264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen PrepareDUT(); 8710264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen uint8_t actual = value + 1; 8810264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen EXPECT_EQ(dut_->DefaultValueForTemplate(template_id, &actual), 0); 8910264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen EXPECT_EQ(actual, value); 9010264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen} 9110264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen 9210264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-CohenTEST_F(TaggedControlOptionsTest, DefaultValueFail) { 9310264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen int err = 12; 9410264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen int template_id = 3; 9510264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen EXPECT_CALL(*mock_options_, DefaultValueForTemplate(template_id, _)) 9610264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen .WillOnce(Return(err)); 9710264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen PrepareDUT(); 9810264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen uint8_t unused; 9910264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen EXPECT_EQ(dut_->DefaultValueForTemplate(template_id, &unused), err); 10010264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen} 10110264778189f69177c5ef820db2b8e803c99ab99Ari Hausman-Cohen 1029bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} // namespace v4l2_camera_hal 103