more test changes
This commit is contained in:
		
							parent
							
								
									96077bc9f3
								
							
						
					
					
						commit
						09fc73dde9
					
				@ -448,3 +448,17 @@ py_test(
 | 
				
			|||||||
    data = [":gtest_testbridge_test_"],
 | 
					    data = [":gtest_testbridge_test_"],
 | 
				
			||||||
    deps = [":gtest_test_utils"],
 | 
					    deps = [":gtest_test_utils"],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					py_test(
 | 
				
			||||||
 | 
					    name = "googletest-json-outfiles-test",
 | 
				
			||||||
 | 
					    size = "small",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "googletest-json-outfiles-test.py",
 | 
				
			||||||
 | 
					        "gtest_json_test_utils.py",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    data = [
 | 
				
			||||||
 | 
					        ":gtest_xml_outfile1_test_",
 | 
				
			||||||
 | 
					        ":gtest_xml_outfile2_test_",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    deps = [":gtest_test_utils"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										162
									
								
								googletest/test/googletest-json-outfiles-test.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								googletest/test/googletest-json-outfiles-test.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,162 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python
 | 
				
			||||||
 | 
					# Copyright 2018, Google Inc.
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					# modification, are permitted provided that the following conditions are
 | 
				
			||||||
 | 
					# met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					# notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					#     * Redistributions in binary form must reproduce the above
 | 
				
			||||||
 | 
					# copyright notice, this list of conditions and the following disclaimer
 | 
				
			||||||
 | 
					# in the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					# distribution.
 | 
				
			||||||
 | 
					#     * Neither the name of Google Inc. nor the names of its
 | 
				
			||||||
 | 
					# contributors may be used to endorse or promote products derived from
 | 
				
			||||||
 | 
					# this software without specific prior written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
				
			||||||
 | 
					# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
				
			||||||
 | 
					# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
				
			||||||
 | 
					# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
				
			||||||
 | 
					# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
				
			||||||
 | 
					# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""Unit test for the gtest_json_output module."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import gtest_json_test_utils
 | 
				
			||||||
 | 
					import gtest_test_utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GTEST_OUTPUT_SUBDIR = 'json_outfiles'
 | 
				
			||||||
 | 
					GTEST_OUTPUT_1_TEST = 'gtest_xml_outfile1_test_'
 | 
				
			||||||
 | 
					GTEST_OUTPUT_2_TEST = 'gtest_xml_outfile2_test_'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPECTED_1 = {
 | 
				
			||||||
 | 
					    u'tests': 1,
 | 
				
			||||||
 | 
					    u'failures': 0,
 | 
				
			||||||
 | 
					    u'disabled': 0,
 | 
				
			||||||
 | 
					    u'errors': 0,
 | 
				
			||||||
 | 
					    u'time': u'*',
 | 
				
			||||||
 | 
					    u'timestamp': u'*',
 | 
				
			||||||
 | 
					    u'name': u'AllTests',
 | 
				
			||||||
 | 
					    u'testsuites': [{
 | 
				
			||||||
 | 
					        u'name': u'PropertyOne',
 | 
				
			||||||
 | 
					        u'tests': 1,
 | 
				
			||||||
 | 
					        u'failures': 0,
 | 
				
			||||||
 | 
					        u'disabled': 0,
 | 
				
			||||||
 | 
					        u'errors': 0,
 | 
				
			||||||
 | 
					        u'time': u'*',
 | 
				
			||||||
 | 
					        u'testsuite': [{
 | 
				
			||||||
 | 
					            u'name': u'TestSomeProperties',
 | 
				
			||||||
 | 
					            u'status': u'RUN',
 | 
				
			||||||
 | 
					            u'time': u'*',
 | 
				
			||||||
 | 
					            u'classname': u'PropertyOne',
 | 
				
			||||||
 | 
					            u'SetUpProp': u'1',
 | 
				
			||||||
 | 
					            u'TestSomeProperty': u'1',
 | 
				
			||||||
 | 
					            u'TearDownProp': u'1',
 | 
				
			||||||
 | 
					        }],
 | 
				
			||||||
 | 
					    }],
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPECTED_2 = {
 | 
				
			||||||
 | 
					    u'tests': 1,
 | 
				
			||||||
 | 
					    u'failures': 0,
 | 
				
			||||||
 | 
					    u'disabled': 0,
 | 
				
			||||||
 | 
					    u'errors': 0,
 | 
				
			||||||
 | 
					    u'time': u'*',
 | 
				
			||||||
 | 
					    u'timestamp': u'*',
 | 
				
			||||||
 | 
					    u'name': u'AllTests',
 | 
				
			||||||
 | 
					    u'testsuites': [{
 | 
				
			||||||
 | 
					        u'name': u'PropertyTwo',
 | 
				
			||||||
 | 
					        u'tests': 1,
 | 
				
			||||||
 | 
					        u'failures': 0,
 | 
				
			||||||
 | 
					        u'disabled': 0,
 | 
				
			||||||
 | 
					        u'errors': 0,
 | 
				
			||||||
 | 
					        u'time': u'*',
 | 
				
			||||||
 | 
					        u'testsuite': [{
 | 
				
			||||||
 | 
					            u'name': u'TestSomeProperties',
 | 
				
			||||||
 | 
					            u'status': u'RUN',
 | 
				
			||||||
 | 
					            u'time': u'*',
 | 
				
			||||||
 | 
					            u'classname': u'PropertyTwo',
 | 
				
			||||||
 | 
					            u'SetUpProp': u'2',
 | 
				
			||||||
 | 
					            u'TestSomeProperty': u'2',
 | 
				
			||||||
 | 
					            u'TearDownProp': u'2',
 | 
				
			||||||
 | 
					        }],
 | 
				
			||||||
 | 
					    }],
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GTestJsonOutFilesTest(gtest_test_utils.TestCase):
 | 
				
			||||||
 | 
					  """Unit test for Google Test's JSON output functionality."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def setUp(self):
 | 
				
			||||||
 | 
					    # We want the trailing '/' that the last "" provides in os.path.join, for
 | 
				
			||||||
 | 
					    # telling Google Test to create an output directory instead of a single file
 | 
				
			||||||
 | 
					    # for xml output.
 | 
				
			||||||
 | 
					    self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(),
 | 
				
			||||||
 | 
					                                    GTEST_OUTPUT_SUBDIR, '')
 | 
				
			||||||
 | 
					    self.DeleteFilesAndDir()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def tearDown(self):
 | 
				
			||||||
 | 
					    self.DeleteFilesAndDir()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def DeleteFilesAndDir(self):
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + '.json'))
 | 
				
			||||||
 | 
					    except os.error:
 | 
				
			||||||
 | 
					      pass
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + '.json'))
 | 
				
			||||||
 | 
					    except os.error:
 | 
				
			||||||
 | 
					      pass
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					      os.rmdir(self.output_dir_)
 | 
				
			||||||
 | 
					    except os.error:
 | 
				
			||||||
 | 
					      pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def testOutfile1(self):
 | 
				
			||||||
 | 
					    self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def testOutfile2(self):
 | 
				
			||||||
 | 
					    self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def _TestOutFile(self, test_name, expected):
 | 
				
			||||||
 | 
					    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
 | 
				
			||||||
 | 
					    command = [gtest_prog_path, '--gtest_output=json:%s' % self.output_dir_]
 | 
				
			||||||
 | 
					    p = gtest_test_utils.Subprocess(command,
 | 
				
			||||||
 | 
					                                    working_dir=gtest_test_utils.GetTempDir())
 | 
				
			||||||
 | 
					    self.assert_(p.exited)
 | 
				
			||||||
 | 
					    self.assertEquals(0, p.exit_code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # TODO(wan@google.com): libtool causes the built test binary to be
 | 
				
			||||||
 | 
					    #   named lt-gtest_xml_outfiles_test_ instead of
 | 
				
			||||||
 | 
					    #   gtest_xml_outfiles_test_.  To account for this possibility, we
 | 
				
			||||||
 | 
					    #   allow both names in the following code.  We should remove this
 | 
				
			||||||
 | 
					    #   hack when Chandler Carruth's libtool replacement tool is ready.
 | 
				
			||||||
 | 
					    output_file_name1 = test_name + '.json'
 | 
				
			||||||
 | 
					    output_file1 = os.path.join(self.output_dir_, output_file_name1)
 | 
				
			||||||
 | 
					    output_file_name2 = 'lt-' + output_file_name1
 | 
				
			||||||
 | 
					    output_file2 = os.path.join(self.output_dir_, output_file_name2)
 | 
				
			||||||
 | 
					    self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2),
 | 
				
			||||||
 | 
					                 output_file1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if os.path.isfile(output_file1):
 | 
				
			||||||
 | 
					      with open(output_file1) as f:
 | 
				
			||||||
 | 
					        actual = json.load(f)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					      with open(output_file2) as f:
 | 
				
			||||||
 | 
					        actual = json.load(f)
 | 
				
			||||||
 | 
					    self.assertEqual(expected, gtest_json_test_utils.normalize(actual))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					  os.environ['GTEST_STACK_TRACE_DEPTH'] = '0'
 | 
				
			||||||
 | 
					  gtest_test_utils.Main()
 | 
				
			||||||
@ -1,311 +0,0 @@
 | 
				
			|||||||
// Copyright 2009 Google Inc. All rights reserved.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Redistribution and use in source and binary forms, with or without
 | 
					 | 
				
			||||||
// modification, are permitted provided that the following conditions are
 | 
					 | 
				
			||||||
// met:
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//     * Redistributions of source code must retain the above copyright
 | 
					 | 
				
			||||||
// notice, this list of conditions and the following disclaimer.
 | 
					 | 
				
			||||||
//     * Redistributions in binary form must reproduce the above
 | 
					 | 
				
			||||||
// copyright notice, this list of conditions and the following disclaimer
 | 
					 | 
				
			||||||
// in the documentation and/or other materials provided with the
 | 
					 | 
				
			||||||
// distribution.
 | 
					 | 
				
			||||||
//     * Neither the name of Google Inc. nor the names of its
 | 
					 | 
				
			||||||
// contributors may be used to endorse or promote products derived from
 | 
					 | 
				
			||||||
// this software without specific prior written permission.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
					 | 
				
			||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
					 | 
				
			||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
					 | 
				
			||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
					 | 
				
			||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
					 | 
				
			||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
					 | 
				
			||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
					 | 
				
			||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
					 | 
				
			||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
					 | 
				
			||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
					 | 
				
			||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Author: vladl@google.com (Vlad Losev)
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// The Google C++ Testing and Mocking Framework (Google Test)
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// This file verifies Google Test event listeners receive events at the
 | 
					 | 
				
			||||||
// right times.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "gtest/gtest.h"
 | 
					 | 
				
			||||||
#include <vector>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using ::testing::AddGlobalTestEnvironment;
 | 
					 | 
				
			||||||
using ::testing::Environment;
 | 
					 | 
				
			||||||
using ::testing::InitGoogleTest;
 | 
					 | 
				
			||||||
using ::testing::Test;
 | 
					 | 
				
			||||||
using ::testing::TestCase;
 | 
					 | 
				
			||||||
using ::testing::TestEventListener;
 | 
					 | 
				
			||||||
using ::testing::TestInfo;
 | 
					 | 
				
			||||||
using ::testing::TestPartResult;
 | 
					 | 
				
			||||||
using ::testing::UnitTest;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Used by tests to register their events.
 | 
					 | 
				
			||||||
std::vector<std::string>* g_events = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace testing {
 | 
					 | 
				
			||||||
namespace internal {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class EventRecordingListener : public TestEventListener {
 | 
					 | 
				
			||||||
 public:
 | 
					 | 
				
			||||||
  explicit EventRecordingListener(const char* name) : name_(name) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 protected:
 | 
					 | 
				
			||||||
  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestProgramStart"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
 | 
					 | 
				
			||||||
                                    int iteration) {
 | 
					 | 
				
			||||||
    Message message;
 | 
					 | 
				
			||||||
    message << GetFullMethodName("OnTestIterationStart")
 | 
					 | 
				
			||||||
            << "(" << iteration << ")";
 | 
					 | 
				
			||||||
    g_events->push_back(message.GetString());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestCaseStart"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestStart(const TestInfo& /*test_info*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestStart"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestPartResult"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestEnd(const TestInfo& /*test_info*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestEnd"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestCaseEnd"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
 | 
					 | 
				
			||||||
                                  int iteration) {
 | 
					 | 
				
			||||||
    Message message;
 | 
					 | 
				
			||||||
    message << GetFullMethodName("OnTestIterationEnd")
 | 
					 | 
				
			||||||
            << "("  << iteration << ")";
 | 
					 | 
				
			||||||
    g_events->push_back(message.GetString());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
 | 
					 | 
				
			||||||
    g_events->push_back(GetFullMethodName("OnTestProgramEnd"));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 private:
 | 
					 | 
				
			||||||
  std::string GetFullMethodName(const char* name) {
 | 
					 | 
				
			||||||
    return name_ + "." + name;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  std::string name_;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class EnvironmentInvocationCatcher : public Environment {
 | 
					 | 
				
			||||||
 protected:
 | 
					 | 
				
			||||||
  virtual void SetUp() {
 | 
					 | 
				
			||||||
    g_events->push_back("Environment::SetUp");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void TearDown() {
 | 
					 | 
				
			||||||
    g_events->push_back("Environment::TearDown");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class ListenerTest : public Test {
 | 
					 | 
				
			||||||
 protected:
 | 
					 | 
				
			||||||
  static void SetUpTestCase() {
 | 
					 | 
				
			||||||
    g_events->push_back("ListenerTest::SetUpTestCase");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static void TearDownTestCase() {
 | 
					 | 
				
			||||||
    g_events->push_back("ListenerTest::TearDownTestCase");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void SetUp() {
 | 
					 | 
				
			||||||
    g_events->push_back("ListenerTest::SetUp");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual void TearDown() {
 | 
					 | 
				
			||||||
    g_events->push_back("ListenerTest::TearDown");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_F(ListenerTest, DoesFoo) {
 | 
					 | 
				
			||||||
  // Test execution order within a test case is not guaranteed so we are not
 | 
					 | 
				
			||||||
  // recording the test name.
 | 
					 | 
				
			||||||
  g_events->push_back("ListenerTest::* Test Body");
 | 
					 | 
				
			||||||
  SUCCEED();  // Triggers OnTestPartResult.
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_F(ListenerTest, DoesBar) {
 | 
					 | 
				
			||||||
  g_events->push_back("ListenerTest::* Test Body");
 | 
					 | 
				
			||||||
  SUCCEED();  // Triggers OnTestPartResult.
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}  // namespace internal
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}  // namespace testing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using ::testing::internal::EnvironmentInvocationCatcher;
 | 
					 | 
				
			||||||
using ::testing::internal::EventRecordingListener;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void VerifyResults(const std::vector<std::string>& data,
 | 
					 | 
				
			||||||
                   const char* const* expected_data,
 | 
					 | 
				
			||||||
                   size_t expected_data_size) {
 | 
					 | 
				
			||||||
  const size_t actual_size = data.size();
 | 
					 | 
				
			||||||
  // If the following assertion fails, a new entry will be appended to
 | 
					 | 
				
			||||||
  // data.  Hence we save data.size() first.
 | 
					 | 
				
			||||||
  EXPECT_EQ(expected_data_size, actual_size);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Compares the common prefix.
 | 
					 | 
				
			||||||
  const size_t shorter_size = expected_data_size <= actual_size ?
 | 
					 | 
				
			||||||
      expected_data_size : actual_size;
 | 
					 | 
				
			||||||
  size_t i = 0;
 | 
					 | 
				
			||||||
  for (; i < shorter_size; ++i) {
 | 
					 | 
				
			||||||
    ASSERT_STREQ(expected_data[i], data[i].c_str())
 | 
					 | 
				
			||||||
        << "at position " << i;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Prints extra elements in the actual data.
 | 
					 | 
				
			||||||
  for (; i < actual_size; ++i) {
 | 
					 | 
				
			||||||
    printf("  Actual event #%lu: %s\n",
 | 
					 | 
				
			||||||
        static_cast<unsigned long>(i), data[i].c_str());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					 | 
				
			||||||
  std::vector<std::string> events;
 | 
					 | 
				
			||||||
  g_events = &events;
 | 
					 | 
				
			||||||
  InitGoogleTest(&argc, argv);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  UnitTest::GetInstance()->listeners().Append(
 | 
					 | 
				
			||||||
      new EventRecordingListener("1st"));
 | 
					 | 
				
			||||||
  UnitTest::GetInstance()->listeners().Append(
 | 
					 | 
				
			||||||
      new EventRecordingListener("2nd"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  AddGlobalTestEnvironment(new EnvironmentInvocationCatcher);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  GTEST_CHECK_(events.size() == 0)
 | 
					 | 
				
			||||||
      << "AddGlobalTestEnvironment should not generate any events itself.";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ::testing::GTEST_FLAG(repeat) = 2;
 | 
					 | 
				
			||||||
  int ret_val = RUN_ALL_TESTS();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const char* const expected_events[] = {
 | 
					 | 
				
			||||||
    "1st.OnTestProgramStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestProgramStart",
 | 
					 | 
				
			||||||
    "1st.OnTestIterationStart(0)",
 | 
					 | 
				
			||||||
    "2nd.OnTestIterationStart(0)",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsSetUpStart",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsSetUpStart",
 | 
					 | 
				
			||||||
    "Environment::SetUp",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsSetUpEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsSetUpEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestCaseStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestCaseStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUpTestCase",
 | 
					 | 
				
			||||||
    "1st.OnTestStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUp",
 | 
					 | 
				
			||||||
    "ListenerTest::* Test Body",
 | 
					 | 
				
			||||||
    "1st.OnTestPartResult",
 | 
					 | 
				
			||||||
    "2nd.OnTestPartResult",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUp",
 | 
					 | 
				
			||||||
    "ListenerTest::* Test Body",
 | 
					 | 
				
			||||||
    "1st.OnTestPartResult",
 | 
					 | 
				
			||||||
    "2nd.OnTestPartResult",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestEnd",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDownTestCase",
 | 
					 | 
				
			||||||
    "2nd.OnTestCaseEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestCaseEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsTearDownStart",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsTearDownStart",
 | 
					 | 
				
			||||||
    "Environment::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsTearDownEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsTearDownEnd",
 | 
					 | 
				
			||||||
    "2nd.OnTestIterationEnd(0)",
 | 
					 | 
				
			||||||
    "1st.OnTestIterationEnd(0)",
 | 
					 | 
				
			||||||
    "1st.OnTestIterationStart(1)",
 | 
					 | 
				
			||||||
    "2nd.OnTestIterationStart(1)",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsSetUpStart",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsSetUpStart",
 | 
					 | 
				
			||||||
    "Environment::SetUp",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsSetUpEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsSetUpEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestCaseStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestCaseStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUpTestCase",
 | 
					 | 
				
			||||||
    "1st.OnTestStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUp",
 | 
					 | 
				
			||||||
    "ListenerTest::* Test Body",
 | 
					 | 
				
			||||||
    "1st.OnTestPartResult",
 | 
					 | 
				
			||||||
    "2nd.OnTestPartResult",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestStart",
 | 
					 | 
				
			||||||
    "2nd.OnTestStart",
 | 
					 | 
				
			||||||
    "ListenerTest::SetUp",
 | 
					 | 
				
			||||||
    "ListenerTest::* Test Body",
 | 
					 | 
				
			||||||
    "1st.OnTestPartResult",
 | 
					 | 
				
			||||||
    "2nd.OnTestPartResult",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnTestEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestEnd",
 | 
					 | 
				
			||||||
    "ListenerTest::TearDownTestCase",
 | 
					 | 
				
			||||||
    "2nd.OnTestCaseEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestCaseEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsTearDownStart",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsTearDownStart",
 | 
					 | 
				
			||||||
    "Environment::TearDown",
 | 
					 | 
				
			||||||
    "2nd.OnEnvironmentsTearDownEnd",
 | 
					 | 
				
			||||||
    "1st.OnEnvironmentsTearDownEnd",
 | 
					 | 
				
			||||||
    "2nd.OnTestIterationEnd(1)",
 | 
					 | 
				
			||||||
    "1st.OnTestIterationEnd(1)",
 | 
					 | 
				
			||||||
    "2nd.OnTestProgramEnd",
 | 
					 | 
				
			||||||
    "1st.OnTestProgramEnd"
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  VerifyResults(events,
 | 
					 | 
				
			||||||
                expected_events,
 | 
					 | 
				
			||||||
                sizeof(expected_events)/sizeof(expected_events[0]));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // We need to check manually for ad hoc test failures that happen after
 | 
					 | 
				
			||||||
  // RUN_ALL_TESTS finishes.
 | 
					 | 
				
			||||||
  if (UnitTest::GetInstance()->Failed())
 | 
					 | 
				
			||||||
    ret_val = 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return ret_val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user