diff --git a/engine/src/flutter/tests/services/event-sender-expected.txt b/engine/src/flutter/tests/services/event-sender-expected.txt new file mode 100644 index 0000000000..855998c73c --- /dev/null +++ b/engine/src/flutter/tests/services/event-sender-expected.txt @@ -0,0 +1,6 @@ +#BEGIN +Running 1 tests +ok 1 Sky event sender should be able to send events +1 tests +1 pass +0 fail diff --git a/engine/src/flutter/tests/services/event-sender.sky b/engine/src/flutter/tests/services/event-sender.sky new file mode 100644 index 0000000000..748f64e001 --- /dev/null +++ b/engine/src/flutter/tests/services/event-sender.sky @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/engine/src/flutter/tools/tester/BUILD.gn b/engine/src/flutter/tools/tester/BUILD.gn index 4636e199db..36fedc91ff 100644 --- a/engine/src/flutter/tools/tester/BUILD.gn +++ b/engine/src/flutter/tools/tester/BUILD.gn @@ -25,6 +25,7 @@ shared_library("tester") { "//mojo/services/public/cpp/view_manager", "//mojo/services/public/interfaces/input_events", "//mojo/services/window_manager:lib", + "//sky/services/testing:bindings", "//sky/viewer:bindings", ] } diff --git a/engine/src/flutter/tools/tester/test_harness_impl.cc b/engine/src/flutter/tools/tester/test_harness_impl.cc index a468c7e7a0..79a3f75f72 100644 --- a/engine/src/flutter/tools/tester/test_harness_impl.cc +++ b/engine/src/flutter/tools/tester/test_harness_impl.cc @@ -25,5 +25,10 @@ void TestHarnessImpl::OnTestComplete(const mojo::String& test_result) { test_runner_->OnTestComplete(test_result); } +void TestHarnessImpl::DispatchInputEvent(mojo::EventPtr event) { + if (test_runner_) + test_runner_->client()->DispatchInputEvent(event.Pass()); +} + } // namespace tester } // namespace sky diff --git a/engine/src/flutter/tools/tester/test_harness_impl.h b/engine/src/flutter/tools/tester/test_harness_impl.h index d43e30c9ce..01d0c75838 100644 --- a/engine/src/flutter/tools/tester/test_harness_impl.h +++ b/engine/src/flutter/tools/tester/test_harness_impl.h @@ -8,7 +8,7 @@ #include "base/memory/weak_ptr.h" #include "mojo/public/cpp/application/interface_factory_impl.h" #include "mojo/public/cpp/system/core.h" -#include "sky/viewer/services/test_harness.mojom.h" +#include "sky/services/testing/test_harness.mojom.h" namespace sky { namespace tester { @@ -22,6 +22,7 @@ class TestHarnessImpl : public mojo::InterfaceImpl { private: // TestHarness implementation. void OnTestComplete(const mojo::String& test_result) override; + void DispatchInputEvent(mojo::EventPtr event) override; base::WeakPtr test_runner_; diff --git a/engine/src/flutter/tools/tester/test_runner.cc b/engine/src/flutter/tools/tester/test_runner.cc index f23349e81b..8dd58f84e7 100644 --- a/engine/src/flutter/tools/tester/test_runner.cc +++ b/engine/src/flutter/tools/tester/test_runner.cc @@ -13,6 +13,9 @@ namespace sky { namespace tester { +TestRunnerClient::~TestRunnerClient() { +} + TestRunner::TestRunner(TestRunnerClient* client, mojo::View* container, const std::string& url) : test_harness_factory_(this), diff --git a/engine/src/flutter/tools/tester/test_runner.h b/engine/src/flutter/tools/tester/test_runner.h index 1a40cbab9e..3c52f85062 100644 --- a/engine/src/flutter/tools/tester/test_runner.h +++ b/engine/src/flutter/tools/tester/test_runner.h @@ -18,6 +18,10 @@ namespace tester { class TestRunnerClient { public: virtual void OnTestComplete() = 0; + virtual void DispatchInputEvent(mojo::EventPtr event) = 0; + + protected: + virtual ~TestRunnerClient(); }; class TestRunner { @@ -26,6 +30,9 @@ class TestRunner { const std::string& url); virtual ~TestRunner(); + TestRunnerClient* client() const { return client_; } + TestHarnessFactory* test_harness_factory() { return &test_harness_factory_; } + base::WeakPtr GetWeakPtr(); void OnTestStart(); void OnTestComplete(const std::string& test_result); diff --git a/engine/src/flutter/tools/tester/tester.cc b/engine/src/flutter/tools/tester/tester.cc index 57815c6fb4..c71a6f7516 100644 --- a/engine/src/flutter/tools/tester/tester.cc +++ b/engine/src/flutter/tools/tester/tester.cc @@ -56,6 +56,8 @@ class SkyTester : public mojo::ApplicationDelegate, virtual bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { window_manager_app_->ConfigureIncomingConnection(connection); + if (test_runner_) + connection->AddService(test_runner_->test_harness_factory()); return true; } @@ -118,6 +120,10 @@ class SkyTester : public mojo::ApplicationDelegate, ScheduleRun(); } + void DispatchInputEvent(mojo::EventPtr event) override { + window_manager_app_->DispatchInputEventToView(content_, event.Pass()); + } + scoped_ptr window_manager_app_; std::string url_from_args_;