1b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// Copyright 2013 The Chromium Authors. All rights reserved.
2b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// Use of this source code is governed by a BSD-style license that can be
3b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// found in the LICENSE file.
4b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
5b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include <string>
6b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
7b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "gtest/gtest.h"
8b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "ppapi/cpp/instance.h"
9b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "ppapi/cpp/var.h"
10b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "ppapi_simple/ps_main.h"
11b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
12b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#if defined(WIN32)
13b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include <Windows.h>
14b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#undef PostMessage
15b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#endif
16b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
17b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass GTestEventListener : public ::testing::EmptyTestEventListener {
18b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn public:
19b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // TestEventListener overrides.
20b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual void OnTestStart(const ::testing::TestInfo& test_info) {
21b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    std::stringstream msg;
22b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    msg << "start:" << test_info.test_case_name() << "." << test_info.name();
23b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
24b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  }
25b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
26b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual void OnTestPartResult(
27b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn      const ::testing::TestPartResult& test_part_result) {
28b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    if (test_part_result.failed()) {
29b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn      std::stringstream msg;
30b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn      msg << "fail:" << test_part_result.file_name() << ","
31b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn          << test_part_result.line_number() << ","
32b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn          << test_part_result.summary();
33b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn      pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
34b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    }
35b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  }
36b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
37b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual void OnTestEnd(const ::testing::TestInfo& test_info) {
38b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    std::stringstream msg;
39b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    msg << "end:" << test_info.test_case_name() << "." << test_info.name()
40b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn        << "," << (test_info.result()->Failed() ? "failed" : "ok");
41b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn    pp::Instance(PSGetInstanceId()).PostMessage(msg.str());
42b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  }
43b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn};
44b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
45b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornint example_main(int argc, char* argv[]) {
46b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor  ::testing::InitGoogleTest(&argc, argv);
4760d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor  if (PSGetInstanceId() != 0) {
48b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor    ::testing::UnitTest::GetInstance()->listeners()
49b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn        .Append(new GTestEventListener());
50b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  }
51287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn  return RUN_ALL_TESTS();
52287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn}
53287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn
54287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn// Register the function to call once the Instance Object is initialized.
55287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn// see: pappi_simple/ps_main.h
56b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne HackbornPPAPI_SIMPLE_REGISTER_MAIN(example_main);
57b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn