#ifndef DEVICE_GAMEPAD_GAMEPAD_TEST_HELPERS_H_
#define DEVICE_GAMEPAD_GAMEPAD_TEST_HELPERS_H_
#include "base/memory/raw_ptr.h"
#include "base/synchronization/lock.h"
#include "base/synchronization/waitable_event.h"
#include "base/test/task_environment.h"
#include "device/gamepad/gamepad_data_fetcher.h"
#include "device/gamepad/gamepad_service.h"
#include "device/gamepad/gamepad_shared_buffer.h"
#include "device/gamepad/public/cpp/gamepads.h"
namespace device {
class MockGamepadDataFetcher : public GamepadDataFetcher {
public:
explicit MockGamepadDataFetcher(const Gamepads& test_data);
MockGamepadDataFetcher(const MockGamepadDataFetcher&) = delete;
MockGamepadDataFetcher& operator=(const MockGamepadDataFetcher&) = delete;
~MockGamepadDataFetcher() override;
GamepadSource source() override;
void GetGamepadData(bool devices_changed_hint) override;
void WaitForDataRead();
void WaitForDataReadAndCallbacksIssued();
void SetTestData(const Gamepads& new_data);
private:
base::Lock lock_;
Gamepads test_data_;
base::WaitableEvent read_data_;
};
class GamepadTestHelper {
public:
GamepadTestHelper();
GamepadTestHelper(const GamepadTestHelper&) = delete;
GamepadTestHelper& operator=(const GamepadTestHelper&) = delete;
virtual ~GamepadTestHelper();
private:
base::test::SingleThreadTaskEnvironment task_environment_;
};
class GamepadServiceTestConstructor : public GamepadTestHelper {
public:
explicit GamepadServiceTestConstructor(const Gamepads& test_data);
GamepadServiceTestConstructor(const GamepadServiceTestConstructor&) = delete;
GamepadServiceTestConstructor& operator=(
const GamepadServiceTestConstructor&) = delete;
~GamepadServiceTestConstructor() override;
GamepadService* gamepad_service() { return gamepad_service_; }
MockGamepadDataFetcher* data_fetcher() { return data_fetcher_; }
private:
raw_ptr<GamepadService, AcrossTasksDanglingUntriaged> gamepad_service_;
raw_ptr<MockGamepadDataFetcher, AcrossTasksDanglingUntriaged> data_fetcher_;
};
}
#endif