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_;