// 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 <base/logging.h>
#include <gtest/gtest.h>

#include "biod/fp_mode.h"

namespace biod {

using Mode = FpMode::Mode;

TEST(FpModeTest, Constructor) {
  EXPECT_EQ(FpMode().mode(), Mode::kModeInvalid);
  EXPECT_EQ(FpMode(Mode::kResetSensor).mode(), Mode::kResetSensor);
  EXPECT_EQ(FpMode(1).mode(), Mode::kDeepsleep);
  EXPECT_EQ(FpMode(UINT32_MAX).mode(), Mode::kModeInvalid);
}

TEST(FpModeTest, Equality) {
  EXPECT_EQ(FpMode(Mode::kResetSensor), FpMode(Mode::kResetSensor));
  EXPECT_NE(FpMode(Mode::kResetSensor), FpMode(Mode::kMatch));
}

TEST(FpModeTest, Ostream) {
  std::ostringstream stream;
  stream << "mode: " << FpMode(Mode::kResetSensor);
  EXPECT_EQ(stream.str(), "mode: (enum: 10, raw: 0x80)");
}

TEST(FpModeTest, EnumVal) {
  EXPECT_EQ(FpMode(Mode::kNone).EnumVal(), 0);
  EXPECT_EQ(FpMode(Mode::kDeepsleep).EnumVal(), 1);
  EXPECT_EQ(FpMode(Mode::kFingerDown).EnumVal(), 2);
  EXPECT_EQ(FpMode(Mode::kFingerUp).EnumVal(), 3);
  EXPECT_EQ(FpMode(Mode::kCapture).EnumVal(), 4);
  EXPECT_EQ(FpMode(Mode::kEnrollSession).EnumVal(), 5);
  EXPECT_EQ(FpMode(Mode::kEnrollSessionFingerUp).EnumVal(), 6);
  EXPECT_EQ(FpMode(Mode::kEnrollSessionEnrollImage).EnumVal(), 7);
  EXPECT_EQ(FpMode(Mode::kEnrollImage).EnumVal(), 8);
  EXPECT_EQ(FpMode(Mode::kMatch).EnumVal(), 9);
  EXPECT_EQ(FpMode(Mode::kResetSensor).EnumVal(), 10);
  EXPECT_EQ(FpMode(Mode::kDontChange).EnumVal(), 11);
  EXPECT_EQ(FpMode(Mode::kModeInvalid).EnumVal(), 12);
}

TEST(FpModeTest, MaxEnumVal) {
  EXPECT_EQ(FpMode().MaxEnumVal(), 12);
}

TEST(FpModeTest, RawVal) {
  EXPECT_EQ(FpMode(Mode::kNone).RawVal(), 0);
  EXPECT_EQ(FpMode(Mode::kModeInvalid).RawVal(), 0);

  EXPECT_EQ(FpMode(Mode::kDeepsleep).RawVal(), 0x1);
  EXPECT_EQ(FpMode(Mode::kFingerDown).RawVal(), 0x2);
  EXPECT_EQ(FpMode(Mode::kFingerUp).RawVal(), 0x4);
  EXPECT_EQ(FpMode(Mode::kCapture).RawVal(), 0x8);
  EXPECT_EQ(FpMode(Mode::kEnrollSession).RawVal(), 0x10);
  EXPECT_EQ(FpMode(Mode::kEnrollImage).RawVal(), 0x20);
  EXPECT_EQ(FpMode(Mode::kMatch).RawVal(), 0x40);
  EXPECT_EQ(FpMode(Mode::kResetSensor).RawVal(), 0x80);
  EXPECT_EQ(FpMode(Mode::kDontChange).RawVal(), 0x80000000);

  EXPECT_EQ(FpMode(Mode::kEnrollSessionFingerUp).RawVal(), 0x14);
  EXPECT_EQ(FpMode(Mode::kEnrollSessionEnrollImage).RawVal(), 0x30);
}

}  // namespace biod
