// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/android/jni_android.h"
#include "base/run_loop.h"
#include "base/test/multiprocess_test.h"
#include "base/test/test_timeouts.h"
#include "testing/multiprocess_func_list.h"

namespace base {
namespace android {

MULTIPROCESS_TEST_MAIN(BasicMain) {
  return 0;
}

MULTIPROCESS_TEST_MAIN(WaitingMain) {
  base::RunLoop().Run();
  return 0;
}

class ChildProcessTest : public MultiProcessTest {};

// Test disabled due to flakiness: https://crbug.com/950772.
TEST_F(ChildProcessTest, DISABLED_ChildHasCleanExit) {
  Process process = SpawnChild("BasicMain");
  int exit_code = 0;
  EXPECT_TRUE(WaitForMultiprocessTestChildExit(
      process, TestTimeouts::action_timeout(), &exit_code));
  EXPECT_EQ(exit_code, 0);
  EXPECT_TRUE(MultiProcessTestChildHasCleanExit(process));
}

TEST_F(ChildProcessTest, ChildTerminated) {
  Process process = SpawnChild("WaitingMain");
  EXPECT_TRUE(TerminateMultiProcessTestChild(process, 0, true));
  EXPECT_FALSE(MultiProcessTestChildHasCleanExit(process));
}

}  // namespace android
}  // namespace base
