1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "gtest/gtest.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(SEL_LDR)
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochint main(int argc, char* argv[]) {
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ::testing::InitGoogleTest(&argc, argv);
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return RUN_ALL_TESTS();
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/instance.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/var.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi_simple/ps_main.h"
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(WIN32)
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <Windows.h>
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#undef PostMessage
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass GTestEventListener : public ::testing::EmptyTestEventListener {
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // TestEventListener overrides.
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnTestStart(const ::testing::TestInfo& test_info) {
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::stringstream msg;
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    msg << "start:" << test_info.test_case_name() << "." << test_info.name();
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnTestPartResult(
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const ::testing::TestPartResult& test_part_result) {
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    if (test_part_result.failed()) {
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::stringstream msg;
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      msg << "fail:" << test_part_result.file_name() << ","
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          << test_part_result.line_number() << ","
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          << test_part_result.summary();
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    }
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnTestEnd(const ::testing::TestInfo& test_info) {
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::stringstream msg;
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    msg << "end:" << test_info.test_case_name() << "." << test_info.name()
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        << "," << (test_info.result()->Failed() ? "failed" : "ok");
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochint example_main(int argc, char* argv[]) {
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ::testing::InitGoogleTest(&argc, argv);
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ::testing::UnitTest::GetInstance()->listeners()
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      .Append(new GTestEventListener());
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return RUN_ALL_TESTS();
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Register the function to call once the Instance Object is initialized.
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// see: pappi_simple/ps_main.h
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochPPAPI_SIMPLE_REGISTER_MAIN(example_main);
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
67