blob: 9eafd64e0814e262231a21a53cfc32502f817c68 [file] [log] [blame]
// Copyright 2021 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 <memory>
#include <base/files/file_path.h>
#include <base/memory/scoped_refptr.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "rmad/state_handler/mock_state_handler.h"
#include "rmad/state_handler/state_handler_manager.h"
#include "rmad/utils/json_store.h"
namespace rmad {
using testing::Return;
using testing::StrictMock;
class StateHandlerManagerTest : public testing::Test {
public:
StateHandlerManagerTest()
: json_store_(base::FilePath()), state_handler_manager_(&json_store_) {}
scoped_refptr<BaseStateHandler> CreateMockStateHandler(RmadState state,
RmadState next_state) {
auto handler =
base::MakeRefCounted<StrictMock<MockStateHandler>>(&json_store_);
EXPECT_CALL(*handler, GetState()).WillRepeatedly(Return(state));
EXPECT_CALL(*handler, GetNextState()).WillRepeatedly(Return(next_state));
return handler;
}
protected:
JsonStore json_store_;
StateHandlerManager state_handler_manager_;
};
TEST_F(StateHandlerManagerTest, GetStateHandler) {
auto handler1 = CreateMockStateHandler(STATE_RMA_NOT_REQUIRED, STATE_UNKNOWN);
auto handler2 = CreateMockStateHandler(STATE_WELCOME_SCREEN, STATE_UNKNOWN);
state_handler_manager_.RegisterStateHandler(handler1);
state_handler_manager_.RegisterStateHandler(handler2);
scoped_refptr<BaseStateHandler> nonexistent_handler =
state_handler_manager_.GetStateHandler(STATE_UNKNOWN);
EXPECT_FALSE(nonexistent_handler.get());
scoped_refptr<BaseStateHandler> retrieve_handler =
state_handler_manager_.GetStateHandler(STATE_WELCOME_SCREEN);
EXPECT_TRUE(retrieve_handler.get());
EXPECT_EQ(STATE_WELCOME_SCREEN, retrieve_handler->GetState());
EXPECT_EQ(STATE_UNKNOWN, retrieve_handler->GetNextState());
}
TEST_F(StateHandlerManagerTest, RegisterStateHandlerCollision) {
auto handler1 = CreateMockStateHandler(STATE_RMA_NOT_REQUIRED, STATE_UNKNOWN);
auto handler2 =
CreateMockStateHandler(STATE_RMA_NOT_REQUIRED, STATE_WELCOME_SCREEN);
state_handler_manager_.RegisterStateHandler(handler1);
EXPECT_DEATH(state_handler_manager_.RegisterStateHandler(handler2),
"Registered handlers should have unique RmadStates.");
}
} // namespace rmad