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.
4
5// Note: This file also tests child_process.*.
6
7#include "mojo/shell/child_process_host.h"
8
9#include "base/logging.h"
10#include "base/macros.h"
11#include "base/message_loop/message_loop.h"
12#include "mojo/common/message_pump_mojo.h"
13#include "mojo/shell/context.h"
14#include "mojo/shell/shell_test_base.h"
15#include "testing/gtest/include/gtest/gtest.h"
16
17namespace mojo {
18namespace shell {
19namespace test {
20namespace {
21
22class TestChildProcessHostDelegate : public ChildProcessHost::Delegate {
23 public:
24  TestChildProcessHostDelegate() {}
25  virtual ~TestChildProcessHostDelegate() {}
26  virtual void WillStart() OVERRIDE {
27    VLOG(2) << "TestChildProcessHostDelegate::WillStart()";
28  }
29  virtual void DidStart(bool success) OVERRIDE {
30    VLOG(2) << "TestChildProcessHostDelegate::DidStart(" << success << ")";
31    base::MessageLoop::current()->QuitWhenIdle();
32  }
33};
34
35typedef ShellTestBase ChildProcessHostTest;
36
37TEST_F(ChildProcessHostTest, Basic) {
38  base::MessageLoop message_loop(
39      scoped_ptr<base::MessagePump>(new common::MessagePumpMojo()));
40
41  Context context;
42  TestChildProcessHostDelegate child_process_host_delegate;
43  ChildProcessHost child_process_host(&context,
44                                      &child_process_host_delegate,
45                                      ChildProcess::TYPE_TEST);
46  child_process_host.Start();
47  message_loop.Run();
48  int exit_code = child_process_host.Join();
49  VLOG(2) << "Joined child: exit_code = " << exit_code;
50  EXPECT_EQ(0, exit_code);
51}
52
53}  // namespace
54}  // namespace test
55}  // namespace shell
56}  // namespace mojo
57