// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "libhwsec/test_utils/tpm1/test_fixture.h"

#include <gmock/gmock.h>

#include "libhwsec/overalls/overalls_singleton.h"

using ::testing::NiceMock;
using ::testing::StrictMock;

namespace hwsec {

namespace {

overalls::MockOveralls* CreateMockOveralls(MOCK_OVERALLS_TYPE mock_type) {
  switch (mock_type) {
    case MOCK_OVERALLS_TYPE::NICE:
      return new NiceMock<overalls::MockOveralls>();
    case MOCK_OVERALLS_TYPE::PLAIN:
      return new overalls::MockOveralls();
    case MOCK_OVERALLS_TYPE::STRICT:
      return new StrictMock<overalls::MockOveralls>();
  }
}

}  // namespace

Tpm1HwsecTest::Tpm1HwsecTest(): Tpm1HwsecTest(MOCK_OVERALLS_TYPE::NICE) {}

Tpm1HwsecTest::Tpm1HwsecTest(MOCK_OVERALLS_TYPE mock_overalls_type) {
  mock_overalls_.reset(CreateMockOveralls(mock_overalls_type));
  original_overalls_ =
      overalls::OverallsSingleton::SetInstance(mock_overalls_.get());
}

Tpm1HwsecTest::~Tpm1HwsecTest() {
  overalls::OverallsSingleton::SetInstance(original_overalls_);
}

}  // namespace hwsec
