blob: ac3642be219fafde4ea973c9126debe340db9bc5 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 "peridot/bin/sessionmgr/puppet_master/command_runners/set_focus_state_command_runner.h"
#include <lib/gtest/test_loop_fixture.h>
#include "gtest/gtest.h"
namespace modular {
namespace {
class FocusHandler : fuchsia::modular::FocusProvider {
public:
FocusHandler() {}
void AddProviderBinding(
fidl::InterfaceRequest<fuchsia::modular::FocusProvider> request) {
provider_bindings_.AddBinding(this, std::move(request));
};
std::string request_called_with_story_id() {
return request_called_with_story_id_;
}
// |fuchsia::modular::FocusProvider|
void Request(fidl::StringPtr story_id) override {
request_called_with_story_id_ = story_id;
};
void Query(QueryCallback callback) override{};
void Watch(
fidl::InterfaceHandle<fuchsia::modular::FocusWatcher> watcher) override{};
private:
std::string request_called_with_story_id_;
fidl::BindingSet<fuchsia::modular::FocusProvider> provider_bindings_;
};
class SetFocusStateCommandRunnerTest : public gtest::TestLoopFixture {
public:
void SetUp() override {
fidl::InterfacePtr<fuchsia::modular::FocusProvider> focus_provider;
focus_handler_.AddProviderBinding(focus_provider.NewRequest());
runner_ =
std::make_unique<SetFocusStateCommandRunner>(std::move(focus_provider));
}
protected:
FocusHandler focus_handler_;
std::unique_ptr<SetFocusStateCommandRunner> runner_;
};
TEST_F(SetFocusStateCommandRunnerTest, Focus) {
fuchsia::modular::SetFocusState set_focus_state;
set_focus_state.focused = true;
fuchsia::modular::StoryCommand command;
command.set_set_focus_state(std::move(set_focus_state));
runner_->Execute("story1", nullptr /* story_storage */, std::move(command),
[&](fuchsia::modular::ExecuteResult result) {
EXPECT_EQ(fuchsia::modular::ExecuteStatus::OK,
result.status);
});
RunLoopUntilIdle();
EXPECT_EQ("story1", focus_handler_.request_called_with_story_id());
}
TEST_F(SetFocusStateCommandRunnerTest, Unfocus) {
fuchsia::modular::SetFocusState set_focus_state;
set_focus_state.focused = false;
fuchsia::modular::StoryCommand command;
command.set_set_focus_state(std::move(set_focus_state));
runner_->Execute(
nullptr /* story_id */, nullptr /* story_storage */, std::move(command),
[&](fuchsia::modular::ExecuteResult result) {
EXPECT_EQ(fuchsia::modular::ExecuteStatus::OK, result.status);
});
RunLoopUntilIdle();
EXPECT_TRUE(focus_handler_.request_called_with_story_id().empty());
}
} // namespace
} // namespace modular