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_delegate.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_delegate_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 TaggedControlDelegateTest : public Test { 329bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen protected: 339bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen virtual void SetUp() { 349bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen mock_delegate_.reset(new ControlDelegateInterfaceMock<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 // delegate 429bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen // to the device. 439bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen dut_.reset( 449bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen new TaggedControlDelegate<uint8_t>(tag_, std::move(mock_delegate_))); 459bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen } 469bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 479bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen std::unique_ptr<TaggedControlDelegate<uint8_t>> dut_; 489bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen std::unique_ptr<ControlDelegateInterfaceMock<uint8_t>> mock_delegate_; 499bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen const int32_t tag_ = 123; 509bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen}; 519bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 529bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlDelegateTest, GetTag) { 539bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 549bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_EQ(dut_->tag(), tag_); 559bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 569bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 579bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlDelegateTest, GetSuccess) { 589bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t expected = 3; 599bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_delegate_, GetValue(_)) 609bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen .WillOnce(DoAll(SetArgPointee<0>(expected), Return(0))); 619bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 629bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t actual = expected + 1; // Initialize to an incorrect value. 639bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->GetValue(&actual), 0); 649bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_EQ(actual, expected); 659bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 669bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 679bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlDelegateTest, GetFailure) { 689bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen int err = 3; 699bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_delegate_, GetValue(_)).WillOnce(Return(err)); 709bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 719bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t unused = 0; 729bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->GetValue(&unused), err); 739bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 749bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 759bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlDelegateTest, SetSuccess) { 769bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t value = 3; 779bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_delegate_, SetValue(value)).WillOnce(Return(0)); 789bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 799bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->SetValue(value), 0); 809bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 819bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 829bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-CohenTEST_F(TaggedControlDelegateTest, SetFailure) { 839bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen int err = 3; 849bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen uint8_t value = 12; 859bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen EXPECT_CALL(*mock_delegate_, SetValue(value)).WillOnce(Return(err)); 869bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen PrepareDUT(); 879bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen ASSERT_EQ(dut_->SetValue(value), err); 889bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} 899bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen 909bd94f5581f50cb2a47f56e6f9dc44ed8a951903Ari Hausman-Cohen} // namespace v4l2_camera_hal 91