1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Note: This file also tests child_process.*.
7 #include "mojo/runner/child_process_host.h"
9 #include "base/logging.h"
10 #include "base/macros.h"
11 #include "base/message_loop/message_loop.h"
12 #include "base/path_service.h"
13 #include "mojo/message_pump/message_pump_mojo.h"
14 #include "mojo/runner/context.h"
15 #include "testing/gtest/include/gtest/gtest.h"
21 // Subclass just so we can observe |DidStart()|.
22 class TestChildProcessHost
: public ChildProcessHost
{
24 explicit TestChildProcessHost(Context
* context
)
25 : ChildProcessHost(context
, false, base::FilePath()) {}
26 ~TestChildProcessHost() override
{}
28 void DidStart(bool success
) override
{
30 ChildProcessHost::DidStart(success
);
31 base::MessageLoop::current()->QuitWhenIdle();
35 DISALLOW_COPY_AND_ASSIGN(TestChildProcessHost
);
38 #if defined(OS_ANDROID)
39 // TODO(qsr): Multiprocess shell tests are not supported on android.
40 #define MAYBE_StartJoin DISABLED_StartJoin
42 #define MAYBE_StartJoin StartJoin
43 #endif // defined(OS_ANDROID)
44 // Just tests starting the child process and joining it (without starting an
46 TEST(ChildProcessHostTest
, MAYBE_StartJoin
) {
47 base::FilePath shell_dir
;
48 PathService::Get(base::DIR_MODULE
, &shell_dir
);
49 Context
context(shell_dir
);
50 base::MessageLoop
message_loop(
51 scoped_ptr
<base::MessagePump
>(new common::MessagePumpMojo()));
53 TestChildProcessHost
child_process_host(&context
);
54 child_process_host
.Start();
56 child_process_host
.ExitNow(123);
57 int exit_code
= child_process_host
.Join();
58 VLOG(2) << "Joined child: exit_code = " << exit_code
;
59 EXPECT_EQ(123, exit_code
);