// 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/overalls/overalls_singleton.h"

#include <gmock/gmock.h>
#include <gtest/gtest.h>

namespace {

using ::testing::NotNull;

}  // namespace

namespace hwsec {

TEST(OverallsSingletonTest, GetInstanceNotNull) {
  overalls::Overalls* const instance =
      overalls::OverallsSingleton::GetInstance();
  EXPECT_THAT(instance, NotNull());
}

// Tests if the instance calls |trousers|; it is not a complete proof that the
// defualt instanace callls |trousers| just comparing the return values; however
// it is still a strong evidence.
TEST(OverallsSingletonTest, SamebehaviorAsTrousers) {
  overalls::Overalls* const instance =
      overalls::OverallsSingleton::GetInstance();
  EXPECT_EQ(instance->Ospi_Context_Connect(0, 0), Tspi_Context_Connect(0, 0));
}

TEST(OverallsSingletonTest, SetInstance) {
  overalls::Overalls* const instance =
      overalls::OverallsSingleton::GetInstance();
  overalls::Overalls local_object;
  EXPECT_EQ(instance, overalls::OverallsSingleton::SetInstance(&local_object));
  EXPECT_EQ(&local_object, overalls::OverallsSingleton::GetInstance());

  // Replicates the same step so the original instance is restored.
  EXPECT_EQ(&local_object, overalls::OverallsSingleton::SetInstance(instance));
  EXPECT_EQ(instance, overalls::OverallsSingleton::GetInstance());
}

}  // namespace hwsec
