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