// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/crosapi/fullscreen_controller_ash.h"
#include "base/test/task_environment.h"
#include "base/test/test_future.h"
#include "chromeos/crosapi/mojom/fullscreen_controller.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace crosapi {
using mojom::FullscreenControllerClient;
using ShouldExitFullscreenBeforeLockCallback =
mojom::FullscreenControllerClient::ShouldExitFullscreenBeforeLockCallback;
class FullscreenControllerAshBaseTest : public testing::Test {
public:
void InvokeShouldExitFullscreenBeforeLock(bool expected_result) {
base::test::TestFuture<bool> future;
fullscreen_controller_ash()->ShouldExitFullscreenBeforeLock(
future.GetCallback());
EXPECT_EQ(future.Get(), expected_result);
}
FullscreenControllerAsh* fullscreen_controller_ash() {
return &fullscreen_controller_ash_;
}
private:
base::test::SingleThreadTaskEnvironment task_environment_;
FullscreenControllerAsh fullscreen_controller_ash_;
};
// Test that the default (True) is returned if
// `ShouldExitFullscreenBeforeLock()` is invoked with no client bound.
TEST_F(FullscreenControllerAshBaseTest,
ShouldExitFullscreenBeforeLockWithoutBoundClient) {
InvokeShouldExitFullscreenBeforeLock(/*expected_result=*/true);
}
class FullscreenControllerAshTest : public FullscreenControllerAshBaseTest,
public testing::WithParamInterface<bool> {
public:
class MockFullscreenControllerClient : public FullscreenControllerClient {
public:
MOCK_METHOD(void,
ShouldExitFullscreenBeforeLock,
(ShouldExitFullscreenBeforeLockCallback callback),
(override));
};
protected:
testing::StrictMock<MockFullscreenControllerClient> client_;
};
// Test that the correct response is returned if
// `ShouldExitFullscreenBeforeLock()` is invoked with a client bound.
TEST_P(FullscreenControllerAshTest,
ShouldExitFullscreenBeforeLockWithBoundClient) {
bool expected_result = GetParam();
// Bind `client_`.
mojo::Receiver<FullscreenControllerClient> client_receiver{&client_};
fullscreen_controller_ash()->AddClient(
client_receiver.BindNewPipeAndPassRemoteWithVersion());
// Mock `client_` response for `ShouldExitFullscreenBeforeLock()`.
EXPECT_CALL(client_, ShouldExitFullscreenBeforeLock)
.WillOnce(testing::Invoke(
[expected_result](ShouldExitFullscreenBeforeLockCallback callback) {
std::move(callback).Run(expected_result);
}));
InvokeShouldExitFullscreenBeforeLock(expected_result);
}
INSTANTIATE_TEST_SUITE_P(All, FullscreenControllerAshTest, testing::Bool());
} // namespace crosapi