| // 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.value_or(""); }; |
| 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 |