Index: mojo/shell/native_runner_unittest.cc |
diff --git a/mojo/shell/native_runner_unittest.cc b/mojo/shell/native_runner_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4b8b5a07aeee313e7d16165bf77c4eaa48ec2ca7 |
--- /dev/null |
+++ b/mojo/shell/native_runner_unittest.cc |
@@ -0,0 +1,102 @@ |
+// Copyright 2014 The Chromium 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 "base/files/scoped_temp_dir.h" |
+#include "mojo/shell/application_manager/application_manager.h" |
+#include "mojo/shell/context.h" |
+#include "mojo/shell/filename_util.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace mojo { |
+namespace shell { |
+namespace { |
+ |
+struct TestState { |
+ TestState() |
+ : runner_was_created(false), |
+ runner_was_started(false), |
+ runner_was_destroyed(false) {} |
+ |
+ bool runner_was_created; |
+ bool runner_was_started; |
+ bool runner_was_destroyed; |
+}; |
+ |
+class TestNativeRunner : public NativeRunner { |
+ public: |
+ explicit TestNativeRunner(TestState* state) : state_(state) { |
+ state_->runner_was_created = true; |
+ } |
+ ~TestNativeRunner() override { |
+ state_->runner_was_destroyed = true; |
+ base::MessageLoop::current()->Quit(); |
+ } |
+ void Start(const base::FilePath& app_path, |
+ NativeApplicationCleanup cleanup, |
+ InterfaceRequest<Application> application_request, |
+ const base::Closure& app_completed_callback) override { |
+ state_->runner_was_started = true; |
+ } |
+ |
+ private: |
+ TestState* state_; |
+}; |
+ |
+class TestNativeRunnerFactory : public NativeRunnerFactory { |
+ public: |
+ explicit TestNativeRunnerFactory(TestState* state) : state_(state) {} |
+ ~TestNativeRunnerFactory() override {} |
+ scoped_ptr<NativeRunner> Create(const Options& options) override { |
+ return scoped_ptr<NativeRunner>(new TestNativeRunner(state_)); |
+ } |
+ |
+ private: |
+ TestState* state_; |
+}; |
+ |
+class NativeApplicationLoaderTest : public testing::Test, |
+ public ApplicationManager::Delegate { |
+ public: |
+ NativeApplicationLoaderTest() : application_manager_(this) {} |
+ ~NativeApplicationLoaderTest() override {} |
+ void SetUp() override { |
+ context_.Init(); |
+ scoped_ptr<NativeRunnerFactory> factory( |
+ new TestNativeRunnerFactory(&state_)); |
+ application_manager_.set_native_runner_factory(factory.Pass()); |
+ application_manager_.set_blocking_pool( |
+ context_.task_runners()->blocking_pool()); |
+ } |
+ void TearDown() override { context_.Shutdown(); } |
+ |
+ protected: |
+ shell::Context context_; |
+ base::MessageLoop loop_; |
+ ApplicationManager application_manager_; |
+ TestState state_; |
+ |
+ private: |
+ // ApplicationManager::Delegate |
+ GURL ResolveURL(const GURL& url) override { return url; } |
+ |
+ GURL ResolveMappings(const GURL& url) override { return url; } |
+}; |
+ |
+TEST_F(NativeApplicationLoaderTest, DoesNotExist) { |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ base::FilePath nonexistent_file(FILE_PATH_LITERAL("nonexistent.txt")); |
+ GURL url(FilePathToFileURL(temp_dir.path().Append(nonexistent_file))); |
+ InterfaceRequest<ServiceProvider> services; |
+ ServiceProviderPtr service_provider; |
+ application_manager_.ConnectToApplication( |
+ url, GURL(), services.Pass(), service_provider.Pass(), base::Closure()); |
+ EXPECT_FALSE(state_.runner_was_created); |
+ EXPECT_FALSE(state_.runner_was_started); |
+ EXPECT_FALSE(state_.runner_was_destroyed); |
+} |
+ |
+} // namespace |
+} // namespace shell |
+} // namespace mojo |