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