14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2005, Google Inc. 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// All rights reserved. 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Redistribution and use in source and binary forms, with or without 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian// modification, are permitted provided that the following conditions are 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian// met: 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions of source code must retain the above copyright 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian// notice, this list of conditions and the following disclaimer. 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions in binary form must reproduce the above 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// copyright notice, this list of conditions and the following disclaimer 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// in the documentation and/or other materials provided with the 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// distribution. 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Neither the name of Google Inc. nor the names of its 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// contributors may be used to endorse or promote products derived from 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// this software without specific prior written permission. 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Author: wan@google.com (Zhanyong Wan) 314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests for Google Test itself. This verifies that the basic constructs of 334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Google Test work. 344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 352620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h" 360ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 370ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan// Verifies that the command line flag variables can be accessed 380ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan// in code once <gtest/gtest.h> has been #included. 390ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan// Do not move it after other #includes. 400ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wanTEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) { 410ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan bool dummy = testing::GTEST_FLAG(also_run_disabled_tests) 420ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(break_on_failure) 430ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(catch_exceptions) 440ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(color) != "unknown" 450ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(filter) != "unknown" 460ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(list_tests) 470ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(output) != "unknown" 480ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(print_time) 499b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan || testing::GTEST_FLAG(random_seed) 500ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(repeat) > 0 510ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan || testing::GTEST_FLAG(show_internal_stack_frames) 529b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan || testing::GTEST_FLAG(shuffle) 53b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan || testing::GTEST_FLAG(stack_trace_depth) > 0 54c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan || testing::GTEST_FLAG(stream_result_to) != "unknown" 55b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan || testing::GTEST_FLAG(throw_on_failure); 560ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused. 570ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan} 580ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 5993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <limits.h> // For INT_MAX. 6093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <stdlib.h> 6193fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <string.h> 6293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <time.h> 6393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev 6493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <map> 6593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <vector> 6693fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev#include <ostream> 6793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev 682620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest-spi.h" 694b6829f0d28990dd645e16386eb226d0f10c8731shiqian 704b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Indicates that this translation unit is part of Google Test's 714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// implementation. It must come before gtest-internal-inl.h is 724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// included, or there will be a compiler error. This trick is to 734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// prevent a user from accidentally including gtest-internal-inl.h in 744b6829f0d28990dd645e16386eb226d0f10c8731shiqian// his code. 754cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#define GTEST_IMPLEMENTATION_ 1 764b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "src/gtest-internal-inl.h" 774cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#undef GTEST_IMPLEMENTATION_ 784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 794b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace testing { 804b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace internal { 81b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan 82a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com#if GTEST_CAN_STREAM_RESULTS_ 83a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 84a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comclass StreamingListenerTest : public Test { 85a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com public: 86a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com class FakeSocketWriter : public StreamingListener::AbstractSocketWriter { 87a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com public: 88a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com // Sends a string to the socket. 89a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com virtual void Send(const string& message) { output_ += message; } 90a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 91a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com string output_; 92a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com }; 93a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 94a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com StreamingListenerTest() 95a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com : fake_sock_writer_(new FakeSocketWriter), 96a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_(fake_sock_writer_), 97a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com test_info_obj_("FooTest", "Bar", NULL, NULL, 0, NULL) {} 98a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 99a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com protected: 100a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com string* output() { return &(fake_sock_writer_->output_); } 101a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 102a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com FakeSocketWriter* const fake_sock_writer_; 103a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com StreamingListener streamer_; 104a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com UnitTest unit_test_; 105a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com TestInfo test_info_obj_; // The name test_info_ was taken by testing::Test. 106a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com}; 107a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 108a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestProgramEnd) { 109a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 110a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestProgramEnd(unit_test_); 111a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestProgramEnd&passed=1\n", *output()); 112a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 113a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 114a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestIterationEnd) { 115a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 116a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestIterationEnd(unit_test_, 42); 117a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output()); 118a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 119a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 120a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestCaseStart) { 121a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 122a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL)); 123a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestCaseStart&name=FooTest\n", *output()); 124a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 125a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 126a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestCaseEnd) { 127a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 128a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL)); 129a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output()); 130a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 131a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 132a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestStart) { 133a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 134a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestStart(test_info_obj_); 135a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestStart&name=Bar\n", *output()); 136a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 137a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 138a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestEnd) { 139a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 140a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestEnd(test_info_obj_); 141a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ("event=TestEnd&passed=1&elapsed_time=0ms\n", *output()); 142a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 143a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 144a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.comTEST_F(StreamingListenerTest, OnTestPartResult) { 145a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output() = ""; 146a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com streamer_.OnTestPartResult(TestPartResult( 147a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com TestPartResult::kFatalFailure, "foo.cc", 42, "failed=\n&%")); 148a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 149a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com // Meta characters in the failure message should be properly escaped. 150a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com EXPECT_EQ( 151a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", 152a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com *output()); 153a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com} 154a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 155a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com#endif // GTEST_CAN_STREAM_RESULTS_ 156a032cfff4091c87a137a8d24ce2eb97c740cf4c8kosak@google.com 157f6d087b78d230d875bf5d8281112662795044680zhanyong.wan// Provides access to otherwise private parts of the TestEventListeners class 158f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// that are needed to test it. 159f6d087b78d230d875bf5d8281112662795044680zhanyong.wanclass TestEventListenersAccessor { 160f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan public: 161f6d087b78d230d875bf5d8281112662795044680zhanyong.wan static TestEventListener* GetRepeater(TestEventListeners* listeners) { 162fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan return listeners->repeater(); 163fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan } 164f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 165f6d087b78d230d875bf5d8281112662795044680zhanyong.wan static void SetDefaultResultPrinter(TestEventListeners* listeners, 166fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan TestEventListener* listener) { 167f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners->SetDefaultResultPrinter(listener); 168f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 169f6d087b78d230d875bf5d8281112662795044680zhanyong.wan static void SetDefaultXmlGenerator(TestEventListeners* listeners, 170fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan TestEventListener* listener) { 171f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners->SetDefaultXmlGenerator(listener); 172f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 173f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 174f6d087b78d230d875bf5d8281112662795044680zhanyong.wan static bool EventForwardingEnabled(const TestEventListeners& listeners) { 175f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan return listeners.EventForwardingEnabled(); 176f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 177f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 178f6d087b78d230d875bf5d8281112662795044680zhanyong.wan static void SuppressEventForwarding(TestEventListeners* listeners) { 179f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners->SuppressEventForwarding(); 180f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 181f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan}; 182f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 183dfbdf0bab51520595679a99710983daba6fc18ebvladlosevclass UnitTestRecordPropertyTestHelper : public Test { 184dfbdf0bab51520595679a99710983daba6fc18ebvladlosev protected: 185dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordPropertyTestHelper() {} 186dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 187dfbdf0bab51520595679a99710983daba6fc18ebvladlosev // Forwards to UnitTest::RecordProperty() to bypass access controls. 188dfbdf0bab51520595679a99710983daba6fc18ebvladlosev void UnitTestRecordProperty(const char* key, const std::string& value) { 189dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.RecordProperty(key, value); 190dfbdf0bab51520595679a99710983daba6fc18ebvladlosev } 191dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 192dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTest unit_test_; 193dfbdf0bab51520595679a99710983daba6fc18ebvladlosev}; 194dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1954b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace internal 1964b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace testing 1974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 198760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::AssertionFailure; 199760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::AssertionResult; 200760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::AssertionSuccess; 201760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::DoubleLE; 202fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanusing testing::EmptyTestEventListener; 203dfbdf0bab51520595679a99710983daba6fc18ebvladlosevusing testing::Environment; 204760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::FloatLE; 205ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqianusing testing::GTEST_FLAG(also_run_disabled_tests); 206760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(break_on_failure); 207760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(catch_exceptions); 2084b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::GTEST_FLAG(color); 2091cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::GTEST_FLAG(death_test_use_fork); 210760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(filter); 211760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(list_tests); 212760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(output); 213760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(print_time); 2149b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanusing testing::GTEST_FLAG(random_seed); 215760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(repeat); 216760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(show_internal_stack_frames); 2179b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanusing testing::GTEST_FLAG(shuffle); 218760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::GTEST_FLAG(stack_trace_depth); 219c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wanusing testing::GTEST_FLAG(stream_result_to); 220b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wanusing testing::GTEST_FLAG(throw_on_failure); 221760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::IsNotSubstring; 222760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::IsSubstring; 223760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::Message; 2244b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::ScopedFakeTestPartResultReporter; 22521d43d1a7e09d960b790d992f1bb4e92c70391d4shiqianusing testing::StaticAssertTypeEq; 2261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::Test; 227fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanusing testing::TestCase; 228678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::TestEventListeners; 229dfbdf0bab51520595679a99710983daba6fc18ebvladlosevusing testing::TestInfo; 2301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::TestPartResult; 2311cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::TestPartResultArray; 232fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanusing testing::TestProperty; 233fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanusing testing::TestResult; 2348883b42f2a78976dde09f31ca72806072e33bd5fvladlosevusing testing::TimeInMillis; 2354b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::UnitTest; 236678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::AddReference; 237f6d087b78d230d875bf5d8281112662795044680zhanyong.wanusing testing::internal::AlwaysFalse; 238f6d087b78d230d875bf5d8281112662795044680zhanyong.wanusing testing::internal::AlwaysTrue; 2394b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::AppendUserMessage; 240678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::ArrayAwareFind; 241678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::ArrayEq; 242e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevusing testing::internal::CodePointToUtf8; 243678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::CompileAssertTypesEqual; 244678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::CopyArray; 24593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanusing testing::internal::CountIf; 2464b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::EqFailure; 247760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::internal::FloatingPoint; 24893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanusing testing::internal::ForEach; 2498883b42f2a78976dde09f31ca72806072e33bd5fvladlosevusing testing::internal::FormatEpochTimeInMillisAsIso8601; 250678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::FormatTimeInMillisAsSeconds; 2511cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::internal::GTestFlagSaver; 252f904a612d9444ab36c07a8e619c113432e046f49vladlosevusing testing::internal::GetCurrentOsStackTraceExceptTop; 25393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanusing testing::internal::GetElementOr; 2549b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanusing testing::internal::GetNextRandomSeed; 2559b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanusing testing::internal::GetRandomSeedFromFlag; 256fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianusing testing::internal::GetTestTypeId; 2578883b42f2a78976dde09f31ca72806072e33bd5fvladlosevusing testing::internal::GetTimeInMillis; 258fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianusing testing::internal::GetTypeId; 259a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wanusing testing::internal::GetUnitTestImpl; 260678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::ImplicitlyConvertible; 2614b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::Int32; 262905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanusing testing::internal::Int32FromEnvOrDie; 263678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::IsAProtocolMessage; 264678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::IsContainer; 265678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::IsContainerTest; 266678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::IsNotContainer; 267678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::NativeArray; 268f6d087b78d230d875bf5d8281112662795044680zhanyong.wanusing testing::internal::ParseInt32Flag; 269f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comusing testing::internal::RelationToSourceCopy; 270f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comusing testing::internal::RelationToSourceReference; 271678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::RemoveConst; 272678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanusing testing::internal::RemoveReference; 273905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanusing testing::internal::ShouldRunTestOnShard; 274905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanusing testing::internal::ShouldShard; 2754b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::ShouldUseColor; 27693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanusing testing::internal::Shuffle; 27793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanusing testing::internal::ShuffleRange; 2789748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wanusing testing::internal::SkipPrefix; 2794b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::StreamableToString; 2804b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::internal::String; 281f6d087b78d230d875bf5d8281112662795044680zhanyong.wanusing testing::internal::TestEventListenersAccessor; 282b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wanusing testing::internal::TestResultAccessor; 28385f555add7acc03149b76db239a4cdd18433a558zhanyong.wanusing testing::internal::UInt32; 284e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevusing testing::internal::WideStringToUtf8; 285d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comusing testing::internal::edit_distance::CalculateOptimalEdits; 286d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comusing testing::internal::edit_distance::CreateUnifiedDiff; 287d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comusing testing::internal::edit_distance::EditType; 288fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanusing testing::internal::kMaxRandomSeed; 2891cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing testing::internal::kTestTypeIdInGoogleTest; 290f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanusing testing::internal::scoped_ptr; 291f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comusing testing::kMaxStackTraceDepth; 2924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2935d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#if GTEST_HAS_STREAM_REDIRECTION 294cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wanusing testing::internal::CaptureStdout; 295cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wanusing testing::internal::GetCapturedStdout; 2965d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#endif 297cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan 298f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 299f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanusing testing::internal::ThreadWithParam; 300f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif 301f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 30293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanclass TestingVector : public std::vector<int> { 303f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan}; 304f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 305f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan::std::ostream& operator<<(::std::ostream& os, 306f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan const TestingVector& vector) { 307f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan os << "{ "; 30893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan for (size_t i = 0; i < vector.size(); i++) { 30993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan os << vector[i] << " "; 310f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 311f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan os << "}"; 312f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return os; 313f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 314f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 3154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This line tests that we can define tests in an unnamed namespace. 3164b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace { 3174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3189b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST(GetRandomSeedFromFlagTest, HandlesZero) { 3199b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const int seed = GetRandomSeedFromFlag(0); 3209b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(1, seed); 3219b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed)); 3229b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 3239b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 3249b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST(GetRandomSeedFromFlagTest, PreservesValidSeed) { 3259b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(1, GetRandomSeedFromFlag(1)); 3269b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(2, GetRandomSeedFromFlag(2)); 3279b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1)); 3289b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 3299b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GetRandomSeedFromFlag(kMaxRandomSeed)); 3309b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 3319b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 3329b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) { 3339b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const int seed1 = GetRandomSeedFromFlag(-1); 3349b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(1, seed1); 3359b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed)); 3369b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 3379b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1); 3389b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(1, seed2); 3399b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed)); 3409b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 3419b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 3429b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST(GetNextRandomSeedTest, WorksForValidInput) { 3439b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(2, GetNextRandomSeed(1)); 3449b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(3, GetNextRandomSeed(2)); 3459b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 3469b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GetNextRandomSeed(kMaxRandomSeed - 1)); 3479b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed)); 3489b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 3499b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // We deliberately don't test GetNextRandomSeed() with invalid 3509b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // inputs, as that requires death tests, which are expensive. This 3519b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // is fine as GetNextRandomSeed() is internal and has a 3529b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // straightforward definition. 3539b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 3549b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 355b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wanstatic void ClearCurrentTestPartResults() { 356b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan TestResultAccessor::ClearTestPartResults( 357b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan GetUnitTestImpl()->current_test_result()); 358b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan} 359b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan 360fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian// Tests GetTypeId. 361fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian 362fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianTEST(GetTypeIdTest, ReturnsSameValueForSameType) { 363fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>()); 364fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>()); 365fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian} 366fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian 367fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianclass SubClassOfTest : public Test {}; 368fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianclass AnotherSubClassOfTest : public Test {}; 369fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian 370fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianTEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) { 371fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>()); 372fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<int>(), GetTypeId<char>()); 373fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<int>(), GetTestTypeId()); 374fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId()); 375fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId()); 376fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>()); 377fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian} 378fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian 379fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian// Verifies that GetTestTypeId() returns the same value, no matter it 380fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian// is called from inside Google Test or outside of it. 381fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqianTEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) { 382fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId()); 383fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian} 384fe6a9a48c2a8280439e58c2e9020268a80df89b3shiqian 385f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian// Tests FormatTimeInMillisAsSeconds(). 386f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian 387f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqianTEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { 38865de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); 389f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian} 390f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian 391f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqianTEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { 39265de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3)); 39365de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); 39465de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); 39565de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); 39665de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); 397f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian} 398f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian 399f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqianTEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { 40065de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3)); 40165de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); 40265de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); 40365de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); 40465de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); 405f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian} 406f0e809a3c9946e99595d4faeb0a16bdc2ca9ffd5shiqian 4078883b42f2a78976dde09f31ca72806072e33bd5fvladlosev// Tests FormatEpochTimeInMillisAsIso8601(). The correctness of conversion 4088883b42f2a78976dde09f31ca72806072e33bd5fvladlosev// for particular dates below was verified in Python using 4098883b42f2a78976dde09f31ca72806072e33bd5fvladlosev// datetime.datetime.fromutctimestamp(<timetamp>/1000). 4108883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4118883b42f2a78976dde09f31ca72806072e33bd5fvladlosev// FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we 4128883b42f2a78976dde09f31ca72806072e33bd5fvladlosev// have to set up a particular timezone to obtain predictable results. 4138883b42f2a78976dde09f31ca72806072e33bd5fvladlosevclass FormatEpochTimeInMillisAsIso8601Test : public Test { 4148883b42f2a78976dde09f31ca72806072e33bd5fvladlosev public: 4158883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // On Cygwin, GCC doesn't allow unqualified integer literals to exceed 4168883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // 32 bits, even when 64-bit integer types are available. We have to 4178883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // force the constants to have a 64-bit type here. 4188883b42f2a78976dde09f31ca72806072e33bd5fvladlosev static const TimeInMillis kMillisPerSec = 1000; 4198883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4208883b42f2a78976dde09f31ca72806072e33bd5fvladlosev private: 4218883b42f2a78976dde09f31ca72806072e33bd5fvladlosev virtual void SetUp() { 4228883b42f2a78976dde09f31ca72806072e33bd5fvladlosev saved_tz_ = NULL; 423f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 424f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996 /* getenv, strdup: deprecated */) 4258883b42f2a78976dde09f31ca72806072e33bd5fvladlosev if (getenv("TZ")) 4268883b42f2a78976dde09f31ca72806072e33bd5fvladlosev saved_tz_ = strdup(getenv("TZ")); 427f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com GTEST_DISABLE_MSC_WARNINGS_POP_() 4288883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4298883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use. We 4308883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // cannot use the local time zone because the function's output depends 4318883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // on the time zone. 4328883b42f2a78976dde09f31ca72806072e33bd5fvladlosev SetTimeZone("UTC+00"); 4338883b42f2a78976dde09f31ca72806072e33bd5fvladlosev } 4348883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4358883b42f2a78976dde09f31ca72806072e33bd5fvladlosev virtual void TearDown() { 4368883b42f2a78976dde09f31ca72806072e33bd5fvladlosev SetTimeZone(saved_tz_); 4378883b42f2a78976dde09f31ca72806072e33bd5fvladlosev free(const_cast<char*>(saved_tz_)); 4388883b42f2a78976dde09f31ca72806072e33bd5fvladlosev saved_tz_ = NULL; 4398883b42f2a78976dde09f31ca72806072e33bd5fvladlosev } 4408883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4418883b42f2a78976dde09f31ca72806072e33bd5fvladlosev static void SetTimeZone(const char* time_zone) { 4428883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // tzset() distinguishes between the TZ variable being present and empty 4438883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // and not being present, so we have to consider the case of time_zone 4448883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // being NULL. 4458883b42f2a78976dde09f31ca72806072e33bd5fvladlosev#if _MSC_VER 4468883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // ...Unless it's MSVC, whose standard library's _putenv doesn't 4478883b42f2a78976dde09f31ca72806072e33bd5fvladlosev // distinguish between an empty and a missing variable. 4488883b42f2a78976dde09f31ca72806072e33bd5fvladlosev const std::string env_var = 4498883b42f2a78976dde09f31ca72806072e33bd5fvladlosev std::string("TZ=") + (time_zone ? time_zone : ""); 4508883b42f2a78976dde09f31ca72806072e33bd5fvladlosev _putenv(env_var.c_str()); 451f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996 /* deprecated function */) 4528883b42f2a78976dde09f31ca72806072e33bd5fvladlosev tzset(); 453f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com GTEST_DISABLE_MSC_WARNINGS_POP_() 4548883b42f2a78976dde09f31ca72806072e33bd5fvladlosev#else 4558883b42f2a78976dde09f31ca72806072e33bd5fvladlosev if (time_zone) { 4568883b42f2a78976dde09f31ca72806072e33bd5fvladlosev setenv(("TZ"), time_zone, 1); 4578883b42f2a78976dde09f31ca72806072e33bd5fvladlosev } else { 4588883b42f2a78976dde09f31ca72806072e33bd5fvladlosev unsetenv("TZ"); 4598883b42f2a78976dde09f31ca72806072e33bd5fvladlosev } 4608883b42f2a78976dde09f31ca72806072e33bd5fvladlosev tzset(); 4618883b42f2a78976dde09f31ca72806072e33bd5fvladlosev#endif 4628883b42f2a78976dde09f31ca72806072e33bd5fvladlosev } 4638883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4648883b42f2a78976dde09f31ca72806072e33bd5fvladlosev const char* saved_tz_; 4658883b42f2a78976dde09f31ca72806072e33bd5fvladlosev}; 4668883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4678883b42f2a78976dde09f31ca72806072e33bd5fvladlosevconst TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec; 4688883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4698883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) { 4708883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_EQ("2011-10-31T18:52:42", 4718883b42f2a78976dde09f31ca72806072e33bd5fvladlosev FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec)); 4728883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 4738883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4748883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) { 4758883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_EQ( 4768883b42f2a78976dde09f31ca72806072e33bd5fvladlosev "2011-10-31T18:52:42", 4778883b42f2a78976dde09f31ca72806072e33bd5fvladlosev FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234)); 4788883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 4798883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4808883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) { 4818883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_EQ("2011-09-03T05:07:02", 4828883b42f2a78976dde09f31ca72806072e33bd5fvladlosev FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec)); 4838883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 4848883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4858883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) { 4868883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_EQ("2011-09-28T17:08:22", 4878883b42f2a78976dde09f31ca72806072e33bd5fvladlosev FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec)); 4888883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 4898883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4908883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) { 4918883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_EQ("1970-01-01T00:00:00", FormatEpochTimeInMillisAsIso8601(0)); 4928883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 4938883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 4945147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#if GTEST_CAN_COMPARE_NULL 4954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 496733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# ifdef __BORLANDC__ 49798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Silences warnings: "Condition is always true", "Unreachable code" 498733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option push -w-ccc -w-rch 499733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif 50098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 501e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null 5024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// pointer literal. 5034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(NullLiteralTest, IsTrueForNullLiterals) { 504e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); 505e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); 506e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U)); 507e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L)); 5084b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 510e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null 5114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// pointer literal. 5124b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(NullLiteralTest, IsFalseForNonNullLiterals) { 513e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1)); 514e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0)); 515e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a')); 516e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL))); 5174b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 519733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# ifdef __BORLANDC__ 520d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev// Restores warnings after previous "#pragma option push" suppressed them. 521733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option pop 522733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif 52398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 5245147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#endif // GTEST_CAN_COMPARE_NULL 525e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// 526e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests CodePointToUtf8(). 5274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the NUL character L'\0' is encoded correctly. 529e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncodeNul) { 5303b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("", CodePointToUtf8(L'\0')); 5314b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that ASCII characters are encoded correctly. 534e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncodeAscii) { 5353b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("a", CodePointToUtf8(L'a')); 5363b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("Z", CodePointToUtf8(L'Z')); 5373b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("&", CodePointToUtf8(L'&')); 5383b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\x7F", CodePointToUtf8(L'\x7F')); 5394b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5414b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Unicode code-points that have 8 to 11 bits are encoded 5424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// as 110xxxxx 10xxxxxx. 543e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncode8To11Bits) { 5444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 000 1101 0011 => 110-00011 10-010011 5453b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xC3\x93", CodePointToUtf8(L'\xD3')); 5464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5474b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 101 0111 0110 => 110-10101 10-110110 548b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints 549b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // in wide strings and wide chars. In order to accomodate them, we have to 550b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // introduce such character constants as integers. 5513b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xD5\xB6", 5523b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com CodePointToUtf8(static_cast<wchar_t>(0x576))); 5534b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Unicode code-points that have 12 to 16 bits are encoded 5564b6829f0d28990dd645e16386eb226d0f10c8731shiqian// as 1110xxxx 10xxxxxx 10xxxxxx. 557e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncode12To16Bits) { 5584b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 5593b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xE0\xA3\x93", 5603b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com CodePointToUtf8(static_cast<wchar_t>(0x8D3))); 5614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5624b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 5633b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xEC\x9D\x8D", 5643b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com CodePointToUtf8(static_cast<wchar_t>(0xC74D))); 5654b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5674cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_WIDE_STRING_USES_UTF16_ 5684b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests in this group require a wchar_t to hold > 16 bits, and thus 5694f1d72ed86ade239a3a03b4cb4482012daab0bffshiqian// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is 570e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// 16-bit wide. This code may not compile on those systems. 5714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Unicode code-points that have 17 to 21 bits are encoded 5734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. 574e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncode17To21Bits) { 5754b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 5763b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3')); 577e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 578e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000 5793b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400')); 5804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 581e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 5823b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634')); 5834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that encoding an invalid code-point generates the expected result. 586e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) { 5873b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com EXPECT_EQ("(Invalid Unicode 0x1234ABCD)", CodePointToUtf8(L'\x1234ABCD')); 588e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 589e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 5904cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_WIDE_STRING_USES_UTF16_ 591e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 592e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests WideStringToUtf8(). 593e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 594e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that the NUL character L'\0' is encoded correctly. 595e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncodeNul) { 596e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str()); 597e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str()); 598e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 599e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 600e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that ASCII strings are encoded correctly. 601e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncodeAscii) { 602e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str()); 603e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str()); 604e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str()); 605e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str()); 606e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 607e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 608e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that Unicode code-points that have 8 to 11 bits are encoded 609e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// as 110xxxxx 10xxxxxx. 610e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncode8To11Bits) { 611e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 000 1101 0011 => 110-00011 10-010011 612e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str()); 613e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str()); 614e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 615e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 101 0111 0110 => 110-10101 10-110110 616b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s[] = { 0x576, '\0' }; 617b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str()); 618b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str()); 619e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 620e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 621e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that Unicode code-points that have 12 to 16 bits are encoded 622e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// as 1110xxxx 10xxxxxx 10xxxxxx. 623e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncode12To16Bits) { 624e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 625b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s1[] = { 0x8D3, '\0' }; 626b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str()); 627b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str()); 628e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 629e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 630b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s2[] = { 0xC74D, '\0' }; 631b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str()); 632b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str()); 6334b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 635e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that the conversion stops when the function encounters \0 character. 636e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, StopsOnNulCharacter) { 637e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str()); 638e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 639e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 640e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that the conversion stops when the function reaches the limit 641e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// specified by the 'length' parameter. 642e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) { 643e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str()); 644e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 645e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 6464cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_WIDE_STRING_USES_UTF16_ 647e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that Unicode code-points that have 17 to 21 bits are encoded 648e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile 649e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// on the systems using UTF-16 encoding. 650e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncode17To21Bits) { 651e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 652e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str()); 653e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str()); 654e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 655e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 656e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str()); 657e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str()); 658e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 659e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 660e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that encoding an invalid code-point generates the expected result. 661e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) { 662e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ("(Invalid Unicode 0xABCDFF)", 663e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev WideStringToUtf8(L"\xABCDFF", -1).c_str()); 664e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 6654cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#else // !GTEST_WIDE_STRING_USES_UTF16_ 666e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that surrogate pairs are encoded correctly on the systems using 667e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// UTF-16 encoding in the wide strings. 668e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) { 669b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s[] = { 0xD801, 0xDC00, '\0' }; 670b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str()); 671e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 672e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 673e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that encoding an invalid UTF-16 surrogate pair 674e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// generates the expected result. 675e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) { 676e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // Leading surrogate is at the end of the string. 677b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s1[] = { 0xD800, '\0' }; 678b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str()); 679e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // Leading surrogate is not followed by the trailing surrogate. 680b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s2[] = { 0xD800, 'M', '\0' }; 681b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str()); 682e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev // Trailing surrogate appearas without a leading surrogate. 683b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' }; 684b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str()); 685e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 6864cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_WIDE_STRING_USES_UTF16_ 687e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev 688e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev// Tests that codepoint concatenation works correctly. 6894cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_WIDE_STRING_USES_UTF16_ 690e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 691b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'}; 692e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ( 693e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xF4\x88\x98\xB4" 694e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xEC\x9D\x8D" 695e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\n" 696e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xD5\xB6" 697e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xE0\xA3\x93" 698e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xF4\x88\x98\xB4", 699b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan WideStringToUtf8(s, -1).c_str()); 700e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 701e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev#else 702e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosevTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 703b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'}; 704e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev EXPECT_STREQ( 705e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93", 706b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan WideStringToUtf8(s, -1).c_str()); 707e006e686a4230b548709d6ba2d42bfdf4f9f1638vladlosev} 7084cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_WIDE_STRING_USES_UTF16_ 7094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 71085f555add7acc03149b76db239a4cdd18433a558zhanyong.wan// Tests the Random class. 71185f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 71285f555add7acc03149b76db239a4cdd18433a558zhanyong.wanTEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) { 71385f555add7acc03149b76db239a4cdd18433a558zhanyong.wan testing::internal::Random random(42); 71485f555add7acc03149b76db239a4cdd18433a558zhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 71585f555add7acc03149b76db239a4cdd18433a558zhanyong.wan random.Generate(0), 71685f555add7acc03149b76db239a4cdd18433a558zhanyong.wan "Cannot generate a number in the range \\[0, 0\\)"); 71785f555add7acc03149b76db239a4cdd18433a558zhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 71885f555add7acc03149b76db239a4cdd18433a558zhanyong.wan random.Generate(testing::internal::Random::kMaxRange + 1), 71985f555add7acc03149b76db239a4cdd18433a558zhanyong.wan "Generation of a number in \\[0, 2147483649\\) was requested, " 72085f555add7acc03149b76db239a4cdd18433a558zhanyong.wan "but this can only generate numbers in \\[0, 2147483648\\)"); 72185f555add7acc03149b76db239a4cdd18433a558zhanyong.wan} 72285f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 72385f555add7acc03149b76db239a4cdd18433a558zhanyong.wanTEST(RandomTest, GeneratesNumbersWithinRange) { 72485f555add7acc03149b76db239a4cdd18433a558zhanyong.wan const UInt32 kRange = 10000; 72585f555add7acc03149b76db239a4cdd18433a558zhanyong.wan testing::internal::Random random(12345); 72685f555add7acc03149b76db239a4cdd18433a558zhanyong.wan for (int i = 0; i < 10; i++) { 72785f555add7acc03149b76db239a4cdd18433a558zhanyong.wan EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i; 72885f555add7acc03149b76db239a4cdd18433a558zhanyong.wan } 72985f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 73085f555add7acc03149b76db239a4cdd18433a558zhanyong.wan testing::internal::Random random2(testing::internal::Random::kMaxRange); 73185f555add7acc03149b76db239a4cdd18433a558zhanyong.wan for (int i = 0; i < 10; i++) { 73285f555add7acc03149b76db239a4cdd18433a558zhanyong.wan EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i; 73385f555add7acc03149b76db239a4cdd18433a558zhanyong.wan } 73485f555add7acc03149b76db239a4cdd18433a558zhanyong.wan} 73585f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 73685f555add7acc03149b76db239a4cdd18433a558zhanyong.wanTEST(RandomTest, RepeatsWhenReseeded) { 73785f555add7acc03149b76db239a4cdd18433a558zhanyong.wan const int kSeed = 123; 73885f555add7acc03149b76db239a4cdd18433a558zhanyong.wan const int kArraySize = 10; 73985f555add7acc03149b76db239a4cdd18433a558zhanyong.wan const UInt32 kRange = 10000; 74085f555add7acc03149b76db239a4cdd18433a558zhanyong.wan UInt32 values[kArraySize]; 74185f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 74285f555add7acc03149b76db239a4cdd18433a558zhanyong.wan testing::internal::Random random(kSeed); 74385f555add7acc03149b76db239a4cdd18433a558zhanyong.wan for (int i = 0; i < kArraySize; i++) { 74485f555add7acc03149b76db239a4cdd18433a558zhanyong.wan values[i] = random.Generate(kRange); 74585f555add7acc03149b76db239a4cdd18433a558zhanyong.wan } 74685f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 74785f555add7acc03149b76db239a4cdd18433a558zhanyong.wan random.Reseed(kSeed); 74885f555add7acc03149b76db239a4cdd18433a558zhanyong.wan for (int i = 0; i < kArraySize; i++) { 74985f555add7acc03149b76db239a4cdd18433a558zhanyong.wan EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i; 75085f555add7acc03149b76db239a4cdd18433a558zhanyong.wan } 75185f555add7acc03149b76db239a4cdd18433a558zhanyong.wan} 75285f555add7acc03149b76db239a4cdd18433a558zhanyong.wan 75393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan// Tests STL container utilities. 754449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 75593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan// Tests CountIf(). 756449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 75793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanstatic bool IsPositive(int n) { return n > 0; } 758a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan 75993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanTEST(ContainerUtilityTest, CountIf) { 76093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan std::vector<int> v; 76193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(0, CountIf(v, IsPositive)); // Works for an empty container. 762a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan 76393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(-1); 76493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(0); 76593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(0, CountIf(v, IsPositive)); // Works when no value satisfies. 766a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan 76793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(2); 76893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(-10); 76993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(10); 77093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(2, CountIf(v, IsPositive)); 7719644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan} 7724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 77393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan// Tests ForEach(). 774f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 77593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanstatic int g_sum = 0; 77693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanstatic void Accumulate(int n) { g_sum += n; } 777f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 77893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanTEST(ContainerUtilityTest, ForEach) { 77993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan std::vector<int> v; 78093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan g_sum = 0; 78193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ForEach(v, Accumulate); 78293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(0, g_sum); // Works for an empty container; 783f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 78493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan g_sum = 0; 78593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(1); 78693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ForEach(v, Accumulate); 78793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(1, g_sum); // Works for a container with one element. 78893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan 78993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan g_sum = 0; 79093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(20); 79193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan v.push_back(300); 79293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ForEach(v, Accumulate); 79393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(321, g_sum); 794f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 795f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 79693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan// Tests GetElementOr(). 79793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanTEST(ContainerUtilityTest, GetElementOr) { 79893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan std::vector<char> a; 79993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ('x', GetElementOr(a, 0, 'x')); 800f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 80193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan a.push_back('a'); 80293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan a.push_back('b'); 80393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ('a', GetElementOr(a, 0, 'x')); 80493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ('b', GetElementOr(a, 1, 'x')); 80593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ('x', GetElementOr(a, -2, 'x')); 80693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ('x', GetElementOr(a, 2, 'x')); 807f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 808f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 80993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wanTEST(ContainerUtilityDeathTest, ShuffleRange) { 81093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan std::vector<int> a; 81193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan a.push_back(0); 81293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan a.push_back(1); 81393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan a.push_back(2); 814f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan testing::internal::Random random(1); 815f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 816f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 81793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random, -1, 1, &a), 818f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan "Invalid shuffle range start -1: must be in range \\[0, 3\\]"); 819f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 82093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random, 4, 4, &a), 821f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan "Invalid shuffle range start 4: must be in range \\[0, 3\\]"); 822f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 82393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random, 3, 2, &a), 824f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan "Invalid shuffle range finish 2: must be in range \\[3, 3\\]"); 825f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 82693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random, 3, 4, &a), 827f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan "Invalid shuffle range finish 4: must be in range \\[3, 3\\]"); 828f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 829f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 830f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanclass VectorShuffleTest : public Test { 831f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan protected: 832f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static const int kVectorSize = 20; 833f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 834f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan VectorShuffleTest() : random_(1) { 835f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan for (int i = 0; i < kVectorSize; i++) { 83693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector_.push_back(i); 837f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 838f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 839f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 840f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool VectorIsCorrupt(const TestingVector& vector) { 84193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan if (kVectorSize != static_cast<int>(vector.size())) { 842f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return true; 843f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 844f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 845f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan bool found_in_vector[kVectorSize] = { false }; 84693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan for (size_t i = 0; i < vector.size(); i++) { 84793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan const int e = vector[i]; 848f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan if (e < 0 || e >= kVectorSize || found_in_vector[e]) { 849f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return true; 850f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 851f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan found_in_vector[e] = true; 852f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 853f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 854f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // Vector size is correct, elements' range is correct, no 855f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // duplicate elements. Therefore no corruption has occurred. 856f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return false; 857f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 858f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 859f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool VectorIsNotCorrupt(const TestingVector& vector) { 860f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return !VectorIsCorrupt(vector); 861f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 862f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 863f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) { 864f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan for (int i = begin; i < end; i++) { 86593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan if (i != vector[i]) { 866f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return true; 867f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 868f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 869f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return false; 870f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 871f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 872f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool RangeIsUnshuffled( 873f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan const TestingVector& vector, int begin, int end) { 874f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return !RangeIsShuffled(vector, begin, end); 875f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 876f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 877f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool VectorIsShuffled(const TestingVector& vector) { 878b03ca47c10be432be5d984cb91ce22c81dfa2252zhanyong.wan return RangeIsShuffled(vector, 0, static_cast<int>(vector.size())); 879f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 880f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 881f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan static bool VectorIsUnshuffled(const TestingVector& vector) { 882f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan return !VectorIsShuffled(vector); 883f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 884f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 885f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan testing::internal::Random random_; 886f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan TestingVector vector_; 887f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan}; // class VectorShuffleTest 888f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 889f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanconst int VectorShuffleTest::kVectorSize; 890f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 891f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, HandlesEmptyRange) { 892f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // Tests an empty range at the beginning... 89393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, 0, 0, &vector_); 894f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 895f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 896f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 897f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // ...in the middle... 89893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_); 899f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 900f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 901f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 902f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // ...at the end... 90393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_); 904f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 905f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 906f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 907f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // ...and past the end. 90893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_); 909f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 910f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 911f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 912f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 913f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) { 914f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // Tests a size one range at the beginning... 91593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, 0, 1, &vector_); 916f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 917f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 918f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 919f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // ...in the middle... 92093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_); 921f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 922f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 923f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 924f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // ...and at the end. 92593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_); 926f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 927f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsUnshuffled, vector_); 928f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 929f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 930f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// Because we use our own random number generator and a fixed seed, 931f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// we can guarantee that the following "random" tests will succeed. 932f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 933f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, ShufflesEntireVector) { 93493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan Shuffle(&random_, &vector_); 935f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 936f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_; 937f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 938f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // Tests the first and last elements in particular to ensure that 939f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan // there are no off-by-one problems in our shuffle algorithm. 94093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_NE(0, vector_[0]); 94193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]); 942f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 943f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 944f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, ShufflesStartOfVector) { 945f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan const int kRangeSize = kVectorSize/2; 946f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 94793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, 0, kRangeSize, &vector_); 948f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 949f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 950f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize); 951f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize); 952f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 953f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 954f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, ShufflesEndOfVector) { 955f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan const int kRangeSize = kVectorSize / 2; 95693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_); 957f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 958f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 959f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 960f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize); 961f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 962f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 963f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, ShufflesMiddleOfVector) { 964f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan int kRangeSize = kVectorSize/3; 96593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_); 966f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 967f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 968f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 969f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize); 970f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize); 971f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 972f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 973f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(VectorShuffleTest, ShufflesRepeatably) { 974f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan TestingVector vector2; 975f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan for (int i = 0; i < kVectorSize; i++) { 97693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector2.push_back(i); 977f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 978f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 979f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan random_.Reseed(1234); 98093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan Shuffle(&random_, &vector_); 981f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan random_.Reseed(1234); 98293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan Shuffle(&random_, &vector2); 983f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 984f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector_); 985f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan ASSERT_PRED1(VectorIsNotCorrupt, vector2); 986f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 987f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan for (int i = 0; i < kVectorSize; i++) { 98893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i; 989f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan } 990f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan} 991f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan 992f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests the size of the AssertHelper class. 9934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 994f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(AssertHelperTest, AssertHelperIsSmall) { 99589be5763249cbab785abfa310fb1cd6b5e9c4adfzhanyong.wan // To avoid breaking clients that use lots of assertions in one 996f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // function, we cannot grow the size of AssertHelper. 997f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*)); 99889be5763249cbab785abfa310fb1cd6b5e9c4adfzhanyong.wan} 99989be5763249cbab785abfa310fb1cd6b5e9c4adfzhanyong.wan 10004b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests String::EndsWithCaseInsensitive(). 10014b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringTest, EndsWithCaseInsensitive) { 100203c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "BAR")); 100303c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_TRUE(String::EndsWithCaseInsensitive("foobaR", "bar")); 100403c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "")); 100503c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_TRUE(String::EndsWithCaseInsensitive("", "")); 10064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 100703c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_FALSE(String::EndsWithCaseInsensitive("Foobar", "foo")); 100803c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_FALSE(String::EndsWithCaseInsensitive("foobar", "Foo")); 100903c314931649a999b0cf5deb0a434a1009157416jgm@google.com EXPECT_FALSE(String::EndsWithCaseInsensitive("", "foo")); 10104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 10114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 101298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// C++Builder's preprocessor is buggy; it fails to expand macros that 101398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// appear in macro parameters after wide char literals. Provide an alias 101498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// for NULL as a workaround. 101598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wanstatic const wchar_t* const kNull = NULL; 101698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 1017e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// Tests String::CaseInsensitiveWideCStringEquals 1018e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTEST(StringTest, CaseInsensitiveWideCStringEquals) { 1019e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL)); 102098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"")); 102198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull)); 102298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar")); 102398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull)); 1024e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar")); 1025e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR")); 1026e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar")); 1027e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 1028e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 10294cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_OS_WINDOWS 10304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 10314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests String::ShowWideCString(). 10324b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringTest, ShowWideCString) { 10334b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("(null)", 10344b6829f0d28990dd645e16386eb226d0f10c8731shiqian String::ShowWideCString(NULL).c_str()); 10354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("", String::ShowWideCString(L"").c_str()); 10364b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str()); 10374b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 10384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1039733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_OS_WINDOWS_MOBILE 1040dd4a17bc20377d250ed116b1083d851adbe45f25shiqianTEST(StringTest, AnsiAndUtf16Null) { 1041dd4a17bc20377d250ed116b1083d851adbe45f25shiqian EXPECT_EQ(NULL, String::AnsiToUtf16(NULL)); 1042dd4a17bc20377d250ed116b1083d851adbe45f25shiqian EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL)); 1043dd4a17bc20377d250ed116b1083d851adbe45f25shiqian} 1044dd4a17bc20377d250ed116b1083d851adbe45f25shiqian 1045dd4a17bc20377d250ed116b1083d851adbe45f25shiqianTEST(StringTest, AnsiAndUtf16ConvertBasic) { 1046dd4a17bc20377d250ed116b1083d851adbe45f25shiqian const char* ansi = String::Utf16ToAnsi(L"str"); 1047dd4a17bc20377d250ed116b1083d851adbe45f25shiqian EXPECT_STREQ("str", ansi); 1048dd4a17bc20377d250ed116b1083d851adbe45f25shiqian delete [] ansi; 1049dd4a17bc20377d250ed116b1083d851adbe45f25shiqian const WCHAR* utf16 = String::AnsiToUtf16("str"); 10504e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan EXPECT_EQ(0, wcsncmp(L"str", utf16, 3)); 1051dd4a17bc20377d250ed116b1083d851adbe45f25shiqian delete [] utf16; 1052dd4a17bc20377d250ed116b1083d851adbe45f25shiqian} 1053dd4a17bc20377d250ed116b1083d851adbe45f25shiqian 1054dd4a17bc20377d250ed116b1083d851adbe45f25shiqianTEST(StringTest, AnsiAndUtf16ConvertPathChars) { 1055dd4a17bc20377d250ed116b1083d851adbe45f25shiqian const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?"); 1056dd4a17bc20377d250ed116b1083d851adbe45f25shiqian EXPECT_STREQ(".:\\ \"*?", ansi); 1057dd4a17bc20377d250ed116b1083d851adbe45f25shiqian delete [] ansi; 1058dd4a17bc20377d250ed116b1083d851adbe45f25shiqian const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?"); 10594e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3)); 1060dd4a17bc20377d250ed116b1083d851adbe45f25shiqian delete [] utf16; 1061dd4a17bc20377d250ed116b1083d851adbe45f25shiqian} 1062733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_OS_WINDOWS_MOBILE 1063dd4a17bc20377d250ed116b1083d851adbe45f25shiqian 10644b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_OS_WINDOWS 10654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 10664b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests TestProperty construction. 10674b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestPropertyTest, StringValue) { 10684b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property("key", "1"); 10694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("key", property.key()); 10704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1", property.value()); 10714b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 10724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 10734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests TestProperty replacing a value. 10744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestPropertyTest, ReplaceStringValue) { 10754b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property("key", "1"); 10764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1", property.value()); 10774b6829f0d28990dd645e16386eb226d0f10c8731shiqian property.SetValue("2"); 10784b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("2", property.value()); 10794b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 10804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 108198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// AddFatalFailure() and AddNonfatalFailure() must be stand-alone 108298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// functions (i.e. their definitions cannot be inlined at the call 108398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// sites), or C++Builder won't compile the code. 108498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wanstatic void AddFatalFailure() { 108598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan FAIL() << "Expected fatal failure."; 108698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan} 108798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 108898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wanstatic void AddNonfatalFailure() { 108998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ADD_FAILURE() << "Expected non-fatal failure."; 109098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan} 109198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 1092e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass ScopedFakeTestPartResultReporterTest : public Test { 1093acd0f32c50622ace5eb0c62b38820981c1ecd1e9tsunanet public: // Must be public and not protected due to a bug in g++ 3.4.2. 1094e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian enum FailureMode { 1095e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian FATAL_FAILURE, 1096e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian NONFATAL_FAILURE 1097e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }; 1098e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian static void AddFailure(FailureMode failure) { 1099e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian if (failure == FATAL_FAILURE) { 110098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddFatalFailure(); 1101e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } else { 110298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddNonfatalFailure(); 1103e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 1104e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 11054b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 11064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1107e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that ScopedFakeTestPartResultReporter intercepts test 1108e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// failures. 1109e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) { 1110e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 1111e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 1112e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter reporter( 1113e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, 1114e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian &results); 1115e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailure(NONFATAL_FAILURE); 1116e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailure(FATAL_FAILURE); 1117e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 11184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1119e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(2, results.size()); 1120e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 1121e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 11224b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 11234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1124e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) { 1125e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 1126e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 1127e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Tests, that the deprecated constructor still works. 1128e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter reporter(&results); 1129e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailure(NONFATAL_FAILURE); 1130e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 1131e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(1, results.size()); 11324b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 11334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1134f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 1135e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1136e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass ScopedFakeTestPartResultReporterWithThreadsTest 1137e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian : public ScopedFakeTestPartResultReporterTest { 1138e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian protected: 1139e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian static void AddFailureInOtherThread(FailureMode failure) { 1140f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL); 1141f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan thread.Join(); 1142e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 1143e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 1144e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1145e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ScopedFakeTestPartResultReporterWithThreadsTest, 1146e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian InterceptsTestFailuresInAllThreads) { 1147e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 1148e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 1149e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter reporter( 1150e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results); 1151e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailure(NONFATAL_FAILURE); 1152e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailure(FATAL_FAILURE); 1153e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailureInOtherThread(NONFATAL_FAILURE); 1154e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailureInOtherThread(FATAL_FAILURE); 1155e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 1156e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1157e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(4, results.size()); 1158e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 1159e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 1160e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed()); 1161e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed()); 11624b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 11634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1164f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif // GTEST_IS_THREADSAFE 1165e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 116698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}. Makes sure that they 116798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// work even if the failure is generated in a called function rather than 116898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// the current context. 1169e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1170e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wantypedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest; 1171e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1172e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) { 117398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure."); 11744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 11754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1176375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan#if GTEST_HAS_GLOBAL_STRING 1177375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wanTEST_F(ExpectFatalFailureTest, AcceptsStringObject) { 1178375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure.")); 1179375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan} 1180375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan#endif 1181375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan 1182375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wanTEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) { 1183375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan EXPECT_FATAL_FAILURE(AddFatalFailure(), 1184375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan ::std::string("Expected fatal failure.")); 1185375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan} 1186375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan 1187e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) { 1188e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan // We have another test below to verify that the macro catches fatal 1189e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan // failures generated on another thread. 119098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(), 1191e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected fatal failure."); 11924b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 11934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 119498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 119598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Silences warnings: "Condition is always true" 1196733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option push -w-ccc 119798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 119898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 1199e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void 1200e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// function even when the statement in it contains ASSERT_*. 1201e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1202e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanint NonVoidFunction() { 1203e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 1204e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 1205e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan return 0; 1206e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 1207e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1208e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) { 1209e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan NonVoidFunction(); 1210e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 1211e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1212e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the 1213e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// current function even though 'statement' generates a fatal failure. 1214e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1215e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanvoid DoesNotAbortHelper(bool* aborted) { 1216e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 1217e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 1218e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1219e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan *aborted = false; 1220e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 1221e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 122298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 1223d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev// Restores warnings after previous "#pragma option push" suppressed them. 1224733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option pop 122598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 122698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 1227e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectFatalFailureTest, DoesNotAbort) { 1228e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan bool aborted = true; 1229e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan DoesNotAbortHelper(&aborted); 1230e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_FALSE(aborted); 12314b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 12324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1233e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a 1234e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// statement that contains a macro which expands to code containing an 1235e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// unprotected comma. 12364b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1237e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianstatic int global_var = 0; 1238e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++ 12394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1240e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 1241ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ 1242ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan // ICE's in C++Builder. 1243e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE({ 1244e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian GTEST_USE_UNPROTECTED_COMMA_; 124598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddFatalFailure(); 1246e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }, ""); 124798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 12484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1249e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE_ON_ALL_THREADS({ 1250e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian GTEST_USE_UNPROTECTED_COMMA_; 125198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddFatalFailure(); 1252e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }, ""); 1253e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 1254e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1255e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}. 1256e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1257e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wantypedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest; 1258e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1259e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) { 126098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1261e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan "Expected non-fatal failure."); 1262e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 12634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1264375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan#if GTEST_HAS_GLOBAL_STRING 1265375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wanTEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) { 1266375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1267375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan ::string("Expected non-fatal failure.")); 1268375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan} 1269375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan#endif 1270375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan 1271375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wanTEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) { 1272375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1273375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan ::std::string("Expected non-fatal failure.")); 1274375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan} 1275375ce98f43aebcc1bd702cf9fcb860788e5cb820zhanyong.wan 1276e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) { 1277e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan // We have another test below to verify that the macro catches 1278e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan // non-fatal failures generated on another thread. 127998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(), 1280e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan "Expected non-fatal failure."); 1281e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 1282e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 1283e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a 1284e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// statement that contains a macro which expands to code containing an 1285e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// unprotected comma. 1286e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 1287e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE({ 1288e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian GTEST_USE_UNPROTECTED_COMMA_; 128998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddNonfatalFailure(); 1290e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }, ""); 12914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1292e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({ 1293e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian GTEST_USE_UNPROTECTED_COMMA_; 129498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan AddNonfatalFailure(); 1295e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }, ""); 12964b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 12974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1298f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 12994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1300e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiantypedef ScopedFakeTestPartResultReporterWithThreadsTest 1301e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ExpectFailureWithThreadsTest; 13024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1303e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) { 1304e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE), 1305e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected fatal failure."); 1306e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 1307e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 1308e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) { 1309e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( 1310e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); 13114b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 13124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1313f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif // GTEST_IS_THREADSAFE 1314e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 13151cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// Tests the TestProperty class. 13161cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 13171cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(TestPropertyTest, ConstructorWorks) { 13181cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan const TestProperty property("key", "value"); 13191cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("key", property.key()); 13201cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("value", property.value()); 13211cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 13221cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 13231cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(TestPropertyTest, SetValue) { 13241cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan TestProperty property("key", "value_1"); 13251cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("key", property.key()); 13261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan property.SetValue("value_2"); 13271cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("key", property.key()); 13281cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("value_2", property.value()); 13291cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 13301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 13314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the TestResult class 13324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The test fixture for testing TestResult. 1334760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass TestResultTest : public Test { 13354b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 133693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan typedef std::vector<TestPartResult> TPRVector; 13374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13384b6829f0d28990dd645e16386eb226d0f10c8731shiqian // We make use of 2 TestPartResult objects, 13394b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestPartResult * pr1, * pr2; 13404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13414b6829f0d28990dd645e16386eb226d0f10c8731shiqian // ... and 3 TestResult objects. 13424b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestResult * r0, * r1, * r2; 13434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13444b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 13454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // pr1 is for success. 1346334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan pr1 = new TestPartResult(TestPartResult::kSuccess, 1347334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan "foo/bar.cc", 1348334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan 10, 1349334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan "Success!"); 13504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13514b6829f0d28990dd645e16386eb226d0f10c8731shiqian // pr2 is for fatal failure. 1352334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan pr2 = new TestPartResult(TestPartResult::kFatalFailure, 1353334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan "foo/bar.cc", 1354760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian -1, // This line number means "unknown" 1355760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian "Failure!"); 13564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13574b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates the TestResult objects. 13584b6829f0d28990dd645e16386eb226d0f10c8731shiqian r0 = new TestResult(); 13594b6829f0d28990dd645e16386eb226d0f10c8731shiqian r1 = new TestResult(); 13604b6829f0d28990dd645e16386eb226d0f10c8731shiqian r2 = new TestResult(); 13614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13624b6829f0d28990dd645e16386eb226d0f10c8731shiqian // In order to test TestResult, we need to modify its internal 136393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan // state, in particular the TestPartResult vector it holds. 136493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan // test_part_results() returns a const reference to this vector. 13654b6829f0d28990dd645e16386eb226d0f10c8731shiqian // We cast it to a non-const object s.t. it can be modified (yes, 13664b6829f0d28990dd645e16386eb226d0f10c8731shiqian // this is a hack). 136793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan TPRVector* results1 = const_cast<TPRVector*>( 1368b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan &TestResultAccessor::test_part_results(*r1)); 136993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan TPRVector* results2 = const_cast<TPRVector*>( 1370b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan &TestResultAccessor::test_part_results(*r2)); 13714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13724b6829f0d28990dd645e16386eb226d0f10c8731shiqian // r0 is an empty TestResult. 13734b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13744b6829f0d28990dd645e16386eb226d0f10c8731shiqian // r1 contains a single SUCCESS TestPartResult. 137593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan results1->push_back(*pr1); 13764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13774b6829f0d28990dd645e16386eb226d0f10c8731shiqian // r2 contains a SUCCESS, and a FAILURE. 137893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan results2->push_back(*pr1); 137993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan results2->push_back(*pr2); 13804b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 13814b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13824b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 13834b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete pr1; 13844b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete pr2; 13854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 13864b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete r0; 13874b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete r1; 13884b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete r2; 13894b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 13909644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 13919644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // Helper that compares two two TestPartResults. 1392449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan static void CompareTestPartResult(const TestPartResult& expected, 1393449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestPartResult& actual) { 1394449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.type(), actual.type()); 1395449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ(expected.file_name(), actual.file_name()); 1396449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.line_number(), actual.line_number()); 1397449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ(expected.summary(), actual.summary()); 1398449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ(expected.message(), actual.message()); 1399449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.passed(), actual.passed()); 1400449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.failed(), actual.failed()); 1401449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed()); 1402449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed()); 14039644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan } 14044b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 14054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1406b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan// Tests TestResult::total_part_count(). 14074b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestResultTest, total_part_count) { 1408b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(0, r0->total_part_count()); 1409b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(1, r1->total_part_count()); 1410b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(2, r2->total_part_count()); 14114b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 14139644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan// Tests TestResult::Passed(). 14144b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestResultTest, Passed) { 14154b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(r0->Passed()); 14164b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(r1->Passed()); 14174b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(r2->Passed()); 14184b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 14209644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan// Tests TestResult::Failed(). 14214b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestResultTest, Failed) { 14224b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(r0->Failed()); 14234b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(r1->Failed()); 14244b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(r2->Failed()); 14254b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 14279644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan// Tests TestResult::GetTestPartResult(). 1428449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 1429449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wantypedef TestResultTest TestResultDeathTest; 1430449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 1431449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wanTEST_F(TestResultDeathTest, GetTestPartResult) { 1432449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan CompareTestPartResult(*pr1, r2->GetTestPartResult(0)); 1433449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan CompareTestPartResult(*pr2, r2->GetTestPartResult(1)); 143493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), ""); 143593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), ""); 14369644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan} 14379644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 1438b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan// Tests TestResult has no properties when none are added. 14394b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) { 14404b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestResult test_result; 1441b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(0, test_result.test_property_count()); 14424b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1444b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan// Tests TestResult has the expected property when added. 14454b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) { 14464b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestResult test_result; 14474b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property("key_1", "1"); 1448dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property); 1449b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(1, test_result.test_property_count()); 1450449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& actual_property = test_result.GetTestProperty(0); 1451449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_1", actual_property.key()); 1452449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("1", actual_property.value()); 14534b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1455b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan// Tests TestResult has multiple properties when added. 14564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) { 14574b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestResult test_result; 14584b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_1("key_1", "1"); 14594b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_2("key_2", "2"); 1460dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1461dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 1462b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(2, test_result.test_property_count()); 1463449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 1464449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_1", actual_property_1.key()); 1465449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("1", actual_property_1.value()); 14664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1467449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 1468449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_2", actual_property_2.key()); 1469449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("2", actual_property_2.value()); 14704b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 14714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1472b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan// Tests TestResult::RecordProperty() overrides values for duplicate keys. 14734b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) { 14744b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestResult test_result; 14754b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_1_1("key_1", "1"); 14764b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_2_1("key_2", "2"); 14774b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_1_2("key_1", "12"); 14784b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestProperty property_2_2("key_2", "22"); 1479dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_1); 1480dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_1); 1481dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_2); 1482dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_2); 14839644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 14849644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan ASSERT_EQ(2, test_result.test_property_count()); 1485449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 1486449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_1", actual_property_1.key()); 1487449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("12", actual_property_1.value()); 1488b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan 1489449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 1490449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_2", actual_property_2.key()); 1491449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("22", actual_property_2.value()); 14929644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan} 14939644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 14949644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan// Tests TestResult::GetTestProperty(). 1495dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST(TestResultPropertyTest, GetTestProperty) { 14969644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan TestResult test_result; 14979644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan TestProperty property_1("key_1", "1"); 14989644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan TestProperty property_2("key_2", "2"); 14999644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan TestProperty property_3("key_3", "3"); 1500dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1501dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 1502dfbdf0bab51520595679a99710983daba6fc18ebvladlosev TestResultAccessor::RecordProperty(&test_result, "testcase", property_3); 15039644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 1504449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& fetched_property_1 = test_result.GetTestProperty(0); 1505449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& fetched_property_2 = test_result.GetTestProperty(1); 1506449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan const TestProperty& fetched_property_3 = test_result.GetTestProperty(2); 15079644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 1508449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_1", fetched_property_1.key()); 1509449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("1", fetched_property_1.value()); 15109644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 1511449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_2", fetched_property_2.key()); 1512449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("2", fetched_property_2.value()); 15139644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 1514449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("key_3", fetched_property_3.key()); 1515449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan EXPECT_STREQ("3", fetched_property_3.value()); 15169644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 151793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), ""); 151893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), ""); 15199644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan} 15209644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan 15214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that GTestFlagSaver works on Windows and Mac. 15224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1523760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass GTestFlagSaverTest : public Test { 15244b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 15254b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Saves the Google Test flags such that we can restore them later, and 15264b6829f0d28990dd645e16386eb226d0f10c8731shiqian // then sets them to their default values. This will be called 15274b6829f0d28990dd645e16386eb226d0f10c8731shiqian // before the first test in this test case is run. 15284b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void SetUpTestCase() { 1529760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian saver_ = new GTestFlagSaver; 1530760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian 1531ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian GTEST_FLAG(also_run_disabled_tests) = false; 1532760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(break_on_failure) = false; 1533760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(catch_exceptions) = false; 153421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian GTEST_FLAG(death_test_use_fork) = false; 1535760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(color) = "auto"; 1536760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(filter) = ""; 1537760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(list_tests) = false; 1538760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(output) = ""; 153973ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan GTEST_FLAG(print_time) = true; 15409b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(random_seed) = 0; 1541760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(repeat) = 1; 15429b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(shuffle) = false; 1543ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 1544c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan GTEST_FLAG(stream_result_to) = ""; 1545b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan GTEST_FLAG(throw_on_failure) = false; 15464b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 15474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 15484b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Restores the Google Test flags that the tests have modified. This will 15494b6829f0d28990dd645e16386eb226d0f10c8731shiqian // be called after the last test in this test case is run. 15504b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void TearDownTestCase() { 15514b6829f0d28990dd645e16386eb226d0f10c8731shiqian delete saver_; 15524b6829f0d28990dd645e16386eb226d0f10c8731shiqian saver_ = NULL; 15534b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 15544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 15554b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Verifies that the Google Test flags have their default values, and then 15564b6829f0d28990dd645e16386eb226d0f10c8731shiqian // modifies each of them. 15574b6829f0d28990dd645e16386eb226d0f10c8731shiqian void VerifyAndModifyFlags() { 1558ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests)); 1559760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_FALSE(GTEST_FLAG(break_on_failure)); 1560760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_FALSE(GTEST_FLAG(catch_exceptions)); 1561760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_STREQ("auto", GTEST_FLAG(color).c_str()); 156221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian EXPECT_FALSE(GTEST_FLAG(death_test_use_fork)); 1563760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_STREQ("", GTEST_FLAG(filter).c_str()); 1564760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_FALSE(GTEST_FLAG(list_tests)); 1565760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_STREQ("", GTEST_FLAG(output).c_str()); 156673ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan EXPECT_TRUE(GTEST_FLAG(print_time)); 15679b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(0, GTEST_FLAG(random_seed)); 1568760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_EQ(1, GTEST_FLAG(repeat)); 15699b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_FALSE(GTEST_FLAG(shuffle)); 1570ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth)); 1571c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str()); 1572b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan EXPECT_FALSE(GTEST_FLAG(throw_on_failure)); 1573760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian 1574ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian GTEST_FLAG(also_run_disabled_tests) = true; 1575760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(break_on_failure) = true; 1576760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(catch_exceptions) = true; 1577760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(color) = "no"; 157821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian GTEST_FLAG(death_test_use_fork) = true; 1579760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(filter) = "abc"; 1580760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(list_tests) = true; 1581760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(output) = "xml:foo.xml"; 158273ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan GTEST_FLAG(print_time) = false; 15839b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(random_seed) = 1; 1584760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian GTEST_FLAG(repeat) = 100; 15859b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(shuffle) = true; 1586ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_FLAG(stack_trace_depth) = 1; 1587c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan GTEST_FLAG(stream_result_to) = "localhost:1234"; 1588b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan GTEST_FLAG(throw_on_failure) = true; 15894b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 159093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev 15914b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 15924b6829f0d28990dd645e16386eb226d0f10c8731shiqian // For saving Google Test flags during this test case. 1593760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian static GTestFlagSaver* saver_; 15944b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 15954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1596760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianGTestFlagSaver* GTestFlagSaverTest::saver_ = NULL; 15974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 15984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Google Test doesn't guarantee the order of tests. The following two 15994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tests are designed to work regardless of their order. 16004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Modifies the Google Test flags in the test body. 16024b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(GTestFlagSaverTest, ModifyGTestFlags) { 16034b6829f0d28990dd645e16386eb226d0f10c8731shiqian VerifyAndModifyFlags(); 16044b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16064b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Verifies that the Google Test flags in the body of the previous test were 16074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// restored to their original values. 16084b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(GTestFlagSaverTest, VerifyGTestFlags) { 16094b6829f0d28990dd645e16386eb226d0f10c8731shiqian VerifyAndModifyFlags(); 16104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Sets an environment variable with the given name to the given 16134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// value. If the value argument is "", unsets the environment 16144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// variable. The caller must ensure that both arguments are not NULL. 16154b6829f0d28990dd645e16386eb226d0f10c8731shiqianstatic void SetEnv(const char* name, const char* value) { 1616fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#if GTEST_OS_WINDOWS_MOBILE 16174b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Environment variables are not supported on Windows CE. 16184b6829f0d28990dd645e16386eb226d0f10c8731shiqian return; 1619673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 162098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // C++Builder's putenv only stores a pointer to its parameter; we have to 162198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // ensure that the string remains valid as long as it might be needed. 162298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // We use an std::map to do so. 162303c314931649a999b0cf5deb0a434a1009157416jgm@google.com static std::map<std::string, std::string*> added_env; 162498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 162598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // Because putenv stores a pointer to the string buffer, we can't delete the 162698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // previous string (if present) until after it's replaced. 162703c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::string *prev_env = NULL; 162898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan if (added_env.find(name) != added_env.end()) { 162998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan prev_env = added_env[name]; 163098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan } 163103c314931649a999b0cf5deb0a434a1009157416jgm@google.com added_env[name] = new std::string( 163203c314931649a999b0cf5deb0a434a1009157416jgm@google.com (Message() << name << "=" << value).GetString()); 1633673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev 1634673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // The standard signature of putenv accepts a 'char*' argument. Other 1635673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // implementations, like C++Builder's, accept a 'const char*'. 1636673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // We cast away the 'const' since that would work for both variants. 1637673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev putenv(const_cast<char*>(added_env[name]->c_str())); 163898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan delete prev_env; 16394cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#elif GTEST_OS_WINDOWS // If we are on Windows proper. 1640760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian _putenv((Message() << name << "=" << value).GetString().c_str()); 16414b6829f0d28990dd645e16386eb226d0f10c8731shiqian#else 16424b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (*value == '\0') { 16434b6829f0d28990dd645e16386eb226d0f10c8731shiqian unsetenv(name); 16444b6829f0d28990dd645e16386eb226d0f10c8731shiqian } else { 16454b6829f0d28990dd645e16386eb226d0f10c8731shiqian setenv(name, value, 1); 16464b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 1647fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#endif // GTEST_OS_WINDOWS_MOBILE 16484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1650fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#if !GTEST_OS_WINDOWS_MOBILE 16514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Environment variables are not supported on Windows CE. 16524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1653760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianusing testing::internal::Int32FromGTestEnv; 16544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests Int32FromGTestEnv(). 16564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16574b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Int32FromGTestEnv() returns the default value when the 16584b6829f0d28990dd645e16386eb226d0f10c8731shiqian// environment variable is not set. 16594b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) { 16604cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", ""); 16614b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(10, Int32FromGTestEnv("temp", 10)); 16624b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Int32FromGTestEnv() returns the default value when the 16654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// environment variable overflows as an Int32. 16664b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) { 16674b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 warnings)\n"); 16684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16694cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321"); 16704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(20, Int32FromGTestEnv("temp", 20)); 16714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16724cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321"); 16734b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(30, Int32FromGTestEnv("temp", 30)); 16744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16764b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Int32FromGTestEnv() returns the default value when the 16774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// environment variable does not represent a valid decimal integer. 16784b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) { 16794b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 warnings)\n"); 16804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16814cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1"); 16824b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(40, Int32FromGTestEnv("temp", 40)); 16834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16844cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X"); 16854b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(50, Int32FromGTestEnv("temp", 50)); 16864b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 16874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16884b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Int32FromGTestEnv() parses and returns the value of the 16894b6829f0d28990dd645e16386eb226d0f10c8731shiqian// environment variable when it represents a valid decimal integer in 16904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// the range of an Int32. 16914b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) { 16924cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123"); 16934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, Int32FromGTestEnv("temp", 0)); 16944b6829f0d28990dd645e16386eb226d0f10c8731shiqian 16954cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321"); 16964b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0)); 16974b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1698fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#endif // !GTEST_OS_WINDOWS_MOBILE 16994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17004b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ParseInt32Flag(). 17014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that ParseInt32Flag() returns false and doesn't change the 17034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// output value when the flag has wrong format 17044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) { 17054b6829f0d28990dd645e16386eb226d0f10c8731shiqian Int32 value = 123; 17064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value)); 17074b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17094b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value)); 17104b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17114b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 17124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that ParseInt32Flag() returns false and doesn't change the 17144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// output value when the flag overflows as an Int32. 17154b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { 17164b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 warnings)\n"); 17174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17184b6829f0d28990dd645e16386eb226d0f10c8731shiqian Int32 value = 123; 17194b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value)); 17204b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17224b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value)); 17234b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17244b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 17254b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that ParseInt32Flag() returns false and doesn't change the 17274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// output value when the flag does not represent a valid decimal 17284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// integer. 17294b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { 17304b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 warnings)\n"); 17314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17324b6829f0d28990dd645e16386eb226d0f10c8731shiqian Int32 value = 123; 17334b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value)); 17344b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17364b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value)); 17374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(123, value); 17384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 17394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 17404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that ParseInt32Flag() parses the value of the flag and 17414b6829f0d28990dd645e16386eb226d0f10c8731shiqian// returns true when the flag represents a valid decimal integer in 17424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// the range of an Int32. 17434b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) { 17444b6829f0d28990dd645e16386eb226d0f10c8731shiqian Int32 value = 123; 17454cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value)); 17464b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(456, value); 17474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 174898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", 174998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "abc", &value)); 17504b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(-789, value); 17514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 17524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1753905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that Int32FromEnvOrDie() parses the value of the var or 1754905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// returns the correct default. 1755c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan// Environment variables are not supported on Windows CE. 1756fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#if !GTEST_OS_WINDOWS_MOBILE 1757905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) { 17584cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 17594cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123"); 17604cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 17614cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123"); 17624cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 1763905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1764fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#endif // !GTEST_OS_WINDOWS_MOBILE 1765905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1766905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that Int32FromEnvOrDie() aborts with an error message 1767905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// if the variable is not an Int32. 1768905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) { 17694cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx"); 1770535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 1771449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 1772449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan ".*"); 1773905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1774905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1775905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that Int32FromEnvOrDie() aborts with an error message 1776905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// if the variable cannot be represnted by an Int32. 1777905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) { 17784cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234"); 1779535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED( 1780449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 1781449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan ".*"); 1782905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1783905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1784905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that ShouldRunTestOnShard() selects all tests 1785905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// where there is 1 shard. 1786905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) { 1787905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0)); 1788905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1)); 1789905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2)); 1790905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3)); 1791905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4)); 1792905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1793905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1794905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanclass ShouldShardTest : public testing::Test { 1795905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan protected: 1796905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan virtual void SetUp() { 17974cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX"; 17984cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL"; 1799905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1800905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1801905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan virtual void TearDown() { 1802905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, ""); 1803905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, ""); 1804905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1805905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1806905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan const char* index_var_; 1807905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan const char* total_var_; 1808905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan}; 1809905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1810905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that sharding is disabled if neither of the environment variables 1811905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// are set. 1812905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) { 1813905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, ""); 1814905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, ""); 1815905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1816905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 1817905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1818905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1819905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1820905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that sharding is not enabled if total_shards == 1. 1821905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) { 1822905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "0"); 1823905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "1"); 1824905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 1825905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1826905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1827905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1828905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that sharding is enabled if total_shards > 1 and 1829905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// we are not in a death test subprocess. 1830c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan// Environment variables are not supported on Windows CE. 1831fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#if !GTEST_OS_WINDOWS_MOBILE 1832905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) { 1833905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "4"); 1834905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "22"); 1835905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1836905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1837905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1838905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "8"); 1839905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "9"); 1840905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1841905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1842905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1843905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "0"); 1844905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "9"); 1845905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1846905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1847905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1848fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan#endif // !GTEST_OS_WINDOWS_MOBILE 1849905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1850905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that we exit in error if the sharding values are not valid. 1851449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 1852449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wantypedef ShouldShardTest ShouldShardDeathTest; 1853449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wan 1854449f84de9b0c48289e20f63c6d08a39bcee2021bzhanyong.wanTEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) { 1855905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "4"); 1856905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "4"); 1857535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1858905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1859905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "4"); 1860905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "-2"); 1861535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1862905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1863905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, "5"); 1864905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, ""); 1865535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1866905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1867905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(index_var_, ""); 1868905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan SetEnv(total_var_, "5"); 1869535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1870905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1871905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1872905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// Tests that ShouldRunTestOnShard is a partition when 5 1873905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan// shards are used. 1874905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) { 1875905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan // Choose an arbitrary number of tests and shards. 1876905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan const int num_tests = 17; 1877905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan const int num_shards = 5; 1878905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1879905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan // Check partitioning: each test should be on exactly 1 shard. 1880905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan for (int test_id = 0; test_id < num_tests; test_id++) { 1881905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan int prev_selected_shard_index = -1; 1882905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan for (int shard_index = 0; shard_index < num_shards; shard_index++) { 1883905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) { 1884905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan if (prev_selected_shard_index < 0) { 1885905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan prev_selected_shard_index = shard_index; 1886905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } else { 1887905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and " 1888905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan << shard_index << " are both selected to run test " << test_id; 1889905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1890905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1891905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1892905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1893905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 1894905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan // Check balance: This is not required by the sharding protocol, but is a 1895905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan // desirable property for performance. 1896905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan for (int shard_index = 0; shard_index < num_shards; shard_index++) { 1897905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan int num_tests_on_shard = 0; 1898905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan for (int test_id = 0; test_id < num_tests; test_id++) { 1899905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan num_tests_on_shard += 1900905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan ShouldRunTestOnShard(num_shards, shard_index, test_id); 1901905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1902905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan EXPECT_GE(num_tests_on_shard, num_tests / num_shards); 1903905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan } 1904905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 1905905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 19064b6829f0d28990dd645e16386eb226d0f10c8731shiqian// For the same reason we are not explicitly testing everything in the 1907c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian// Test class, there are no separate tests for the following classes 1908c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian// (except for some trivial cases): 19094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 19104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// TestCase, UnitTest, UnitTestResultPrinter. 19114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 19124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Similarly, there are no separate tests for the following macros: 19134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 19144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// TEST, TEST_F, RUN_ALL_TESTS 19154b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1916c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqianTEST(UnitTestTest, CanGetOriginalWorkingDir) { 1917c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL); 1918c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), ""); 1919c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian} 1920c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian 19218883b42f2a78976dde09f31ca72806072e33bd5fvladlosevTEST(UnitTestTest, ReturnsPlausibleTimestamp) { 19228883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp()); 19238883b42f2a78976dde09f31ca72806072e33bd5fvladlosev EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis()); 19248883b42f2a78976dde09f31ca72806072e33bd5fvladlosev} 19258883b42f2a78976dde09f31ca72806072e33bd5fvladlosev 1926dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// When a property using a reserved key is supplied to this function, it 1927dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// tests that a non-fatal failure is added, a fatal failure is not added, 1928dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// and that the property is not recorded. 1929dfbdf0bab51520595679a99710983daba6fc18ebvladlosevvoid ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1930dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const TestResult& test_result, const char* key) { 1931dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, "1"), "Reserved key"); 1932dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_EQ(0, test_result.test_property_count()) << "Property for key '" << key 1933dfbdf0bab51520595679a99710983daba6fc18ebvladlosev << "' recorded unexpectedly."; 1934dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 1935dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1936dfbdf0bab51520595679a99710983daba6fc18ebvladlosevvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 1937dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const char* key) { 1938dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); 1939dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_TRUE(test_info != NULL); 1940dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(), 1941dfbdf0bab51520595679a99710983daba6fc18ebvladlosev key); 1942dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 1943dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1944dfbdf0bab51520595679a99710983daba6fc18ebvladlosevvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1945dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const char* key) { 1946dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1947dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_TRUE(test_case != NULL); 1948dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1949dfbdf0bab51520595679a99710983daba6fc18ebvladlosev test_case->ad_hoc_test_result(), key); 1950dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 1951dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1952dfbdf0bab51520595679a99710983daba6fc18ebvladlosevvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 1953dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const char* key) { 1954dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1955dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTest::GetInstance()->ad_hoc_test_result(), key); 1956dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 1957dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1958dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// Tests that property recording functions in UnitTest outside of tests 1959dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// functions correcly. Creating a separate instance of UnitTest ensures it 1960dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// is in a state similar to the UnitTest's singleton's between tests. 1961dfbdf0bab51520595679a99710983daba6fc18ebvladlosevclass UnitTestRecordPropertyTest : 1962dfbdf0bab51520595679a99710983daba6fc18ebvladlosev public testing::internal::UnitTestRecordPropertyTestHelper { 1963dfbdf0bab51520595679a99710983daba6fc18ebvladlosev public: 1964dfbdf0bab51520595679a99710983daba6fc18ebvladlosev static void SetUpTestCase() { 1965dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1966dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "disabled"); 1967dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1968dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "errors"); 1969dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1970dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "failures"); 1971dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1972dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "name"); 1973dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1974dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "tests"); 1975dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1976dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "time"); 1977dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1978dfbdf0bab51520595679a99710983daba6fc18ebvladlosev Test::RecordProperty("test_case_key_1", "1"); 1979dfbdf0bab51520595679a99710983daba6fc18ebvladlosev const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1980dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_TRUE(test_case != NULL); 1981dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1982dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count()); 1983dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("test_case_key_1", 1984dfbdf0bab51520595679a99710983daba6fc18ebvladlosev test_case->ad_hoc_test_result().GetTestProperty(0).key()); 1985dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("1", 1986dfbdf0bab51520595679a99710983daba6fc18ebvladlosev test_case->ad_hoc_test_result().GetTestProperty(0).value()); 1987dfbdf0bab51520595679a99710983daba6fc18ebvladlosev } 1988dfbdf0bab51520595679a99710983daba6fc18ebvladlosev}; 1989dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1990dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// Tests TestResult has the expected property when added. 1991dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) { 1992dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_1", "1"); 1993dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1994dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count()); 1995dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 1996dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("key_1", 1997dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 1998dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("1", 1999dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2000dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 2001dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2002dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// Tests TestResult has multiple properties when added. 2003dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) { 2004dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_1", "1"); 2005dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_2", "2"); 2006dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2007dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2008dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2009dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("key_1", 2010dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2011dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2012dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2013dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("key_2", 2014dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2015dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("2", unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2016dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 2017dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2018dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// Tests TestResult::RecordProperty() overrides values for duplicate keys. 2019dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) { 2020dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_1", "1"); 2021dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_2", "2"); 2022dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_1", "12"); 2023dfbdf0bab51520595679a99710983daba6fc18ebvladlosev UnitTestRecordProperty("key_2", "22"); 2024dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2025dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2026dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2027dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("key_1", 2028dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2029dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("12", 2030dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2031dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2032dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("key_2", 2033dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2034dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_STREQ("22", 2035dfbdf0bab51520595679a99710983daba6fc18ebvladlosev unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2036dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 2037dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2038dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST_F(UnitTestRecordPropertyTest, 2039dfbdf0bab51520595679a99710983daba6fc18ebvladlosev AddFailureInsideTestsWhenUsingTestCaseReservedKeys) { 2040dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2041dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "name"); 2042dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2043dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "value_param"); 2044dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2045dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "type_param"); 2046dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2047dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "status"); 2048dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2049dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "time"); 2050dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2051dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "classname"); 2052dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 2053dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2054dfbdf0bab51520595679a99710983daba6fc18ebvladlosevTEST_F(UnitTestRecordPropertyTest, 2055dfbdf0bab51520595679a99710983daba6fc18ebvladlosev AddRecordWithReservedKeysGeneratesCorrectPropertyList) { 2056dfbdf0bab51520595679a99710983daba6fc18ebvladlosev EXPECT_NONFATAL_FAILURE( 2057dfbdf0bab51520595679a99710983daba6fc18ebvladlosev Test::RecordProperty("name", "1"), 2058dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "'classname', 'name', 'status', 'time', 'type_param', and 'value_param'" 2059dfbdf0bab51520595679a99710983daba6fc18ebvladlosev " are reserved"); 2060dfbdf0bab51520595679a99710983daba6fc18ebvladlosev} 2061dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2062dfbdf0bab51520595679a99710983daba6fc18ebvladlosevclass UnitTestRecordPropertyTestEnvironment : public Environment { 2063dfbdf0bab51520595679a99710983daba6fc18ebvladlosev public: 2064dfbdf0bab51520595679a99710983daba6fc18ebvladlosev virtual void TearDown() { 2065dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2066dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "tests"); 2067dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2068dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "failures"); 2069dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2070dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "disabled"); 2071dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2072dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "errors"); 2073dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2074dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "name"); 2075dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2076dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "timestamp"); 2077dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2078dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "time"); 2079dfbdf0bab51520595679a99710983daba6fc18ebvladlosev ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2080dfbdf0bab51520595679a99710983daba6fc18ebvladlosev "random_seed"); 2081dfbdf0bab51520595679a99710983daba6fc18ebvladlosev } 2082dfbdf0bab51520595679a99710983daba6fc18ebvladlosev}; 2083dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 2084dfbdf0bab51520595679a99710983daba6fc18ebvladlosev// This will test property recording outside of any test or test case. 2085dfbdf0bab51520595679a99710983daba6fc18ebvladlosevstatic Environment* record_property_env = 2086dfbdf0bab51520595679a99710983daba6fc18ebvladlosev AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); 2087dfbdf0bab51520595679a99710983daba6fc18ebvladlosev 20884b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This group of tests is for predicate assertions (ASSERT_PRED*, etc) 20894b6829f0d28990dd645e16386eb226d0f10c8731shiqian// of various arities. They do not attempt to be exhaustive. Rather, 20904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// view them as smoke tests that can be easily reviewed and verified. 20914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A more complete set of tests for predicate assertions can be found 20924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// in gtest_pred_impl_unittest.cc. 20934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 20944b6829f0d28990dd645e16386eb226d0f10c8731shiqian// First, some predicates and predicate-formatters needed by the tests. 20954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 20964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Returns true iff the argument is an even number. 20974b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool IsEven(int n) { 20984b6829f0d28990dd645e16386eb226d0f10c8731shiqian return (n % 2) == 0; 20994b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 21004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A functor that returns true iff the argument is an even number. 21024b6829f0d28990dd645e16386eb226d0f10c8731shiqianstruct IsEvenFunctor { 21034b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool operator()(int n) { return IsEven(n); } 21044b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 21054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21064b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A predicate-formatter function that asserts the argument is an even 21074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// number. 2108760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianAssertionResult AssertIsEven(const char* expr, int n) { 21094b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (IsEven(n)) { 2110760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionSuccess(); 21114b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2113760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 21144b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << expr << " evaluates to " << n << ", which is not even."; 2115760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionFailure(msg); 21164b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 21174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2118fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// A predicate function that returns AssertionResult for use in 2119fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// EXPECT/ASSERT_TRUE/FALSE. 2120fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevAssertionResult ResultIsEven(int n) { 2121fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev if (IsEven(n)) 2122fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev return AssertionSuccess() << n << " is even"; 2123fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev else 2124fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev return AssertionFailure() << n << " is odd"; 2125fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 2126fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 2127fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// A predicate function that returns AssertionResult but gives no 2128fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// explanation why it succeeds. Needed for testing that 2129fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// EXPECT/ASSERT_FALSE handles such functions correctly. 2130fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevAssertionResult ResultIsEvenNoExplanation(int n) { 2131fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev if (IsEven(n)) 2132fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev return AssertionSuccess(); 2133fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev else 2134fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev return AssertionFailure() << n << " is odd"; 2135fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 2136fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 21374b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A predicate-formatter functor that asserts the argument is an even 21384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// number. 21394b6829f0d28990dd645e16386eb226d0f10c8731shiqianstruct AssertIsEvenFunctor { 2140760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionResult operator()(const char* expr, int n) { 21414b6829f0d28990dd645e16386eb226d0f10c8731shiqian return AssertIsEven(expr, n); 21424b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21434b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 21444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Returns true iff the sum of the arguments is an even number. 21464b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool SumIsEven2(int n1, int n2) { 21474b6829f0d28990dd645e16386eb226d0f10c8731shiqian return IsEven(n1 + n2); 21484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 21494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21504b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A functor that returns true iff the sum of the arguments is an even 21514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// number. 21524b6829f0d28990dd645e16386eb226d0f10c8731shiqianstruct SumIsEven3Functor { 21534b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool operator()(int n1, int n2, int n3) { 21544b6829f0d28990dd645e16386eb226d0f10c8731shiqian return IsEven(n1 + n2 + n3); 21554b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21564b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 21574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21584b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A predicate-formatter function that asserts the sum of the 21594b6829f0d28990dd645e16386eb226d0f10c8731shiqian// arguments is an even number. 2160760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianAssertionResult AssertSumIsEven4( 2161760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian const char* e1, const char* e2, const char* e3, const char* e4, 2162760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian int n1, int n2, int n3, int n4) { 21634b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int sum = n1 + n2 + n3 + n4; 21644b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (IsEven(sum)) { 2165760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionSuccess(); 21664b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2168760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 21694b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 21704b6829f0d28990dd645e16386eb226d0f10c8731shiqian << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 21714b6829f0d28990dd645e16386eb226d0f10c8731shiqian << ") evaluates to " << sum << ", which is not even."; 2172760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionFailure(msg); 21734b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 21744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A predicate-formatter functor that asserts the sum of the arguments 21764b6829f0d28990dd645e16386eb226d0f10c8731shiqian// is an even number. 21774b6829f0d28990dd645e16386eb226d0f10c8731shiqianstruct AssertSumIsEven5Functor { 2178760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionResult operator()( 2179760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian const char* e1, const char* e2, const char* e3, const char* e4, 2180760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian const char* e5, int n1, int n2, int n3, int n4, int n5) { 21814b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int sum = n1 + n2 + n3 + n4 + n5; 21824b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (IsEven(sum)) { 2183760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionSuccess(); 21844b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2186760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 21874b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 21884b6829f0d28990dd645e16386eb226d0f10c8731shiqian << " (" 21894b6829f0d28990dd645e16386eb226d0f10c8731shiqian << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5 21904b6829f0d28990dd645e16386eb226d0f10c8731shiqian << ") evaluates to " << sum << ", which is not even."; 2191760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return AssertionFailure(msg); 21924b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 21934b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 21944b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests unary predicate assertions. 21974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 21984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests unary predicate assertions that don't use a custom formatter. 21994b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Pred1Test, WithoutFormat) { 22004b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Success cases. 22014b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!"; 22024b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED1(IsEven, 4); 22034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22044b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Failure cases. 22054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 22064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED1(IsEven, 5) << "This failure is expected."; 22074b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 22084b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5), 22094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "evaluates to false"); 22104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 22114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests unary predicate assertions that use a custom formatter. 22134b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Pred1Test, WithFormat) { 22144b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Success cases. 22154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT1(AssertIsEven, 2); 22164b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4) 22174b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is UNEXPECTED!"; 22184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22194b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Failure cases. 22204b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n = 5; 22214b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n), 22224b6829f0d28990dd645e16386eb226d0f10c8731shiqian "n evaluates to 5, which is not even."); 22234b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 22244b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected."; 22254b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 22264b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 22274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that unary predicate assertions evaluates their arguments 22294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// exactly once. 22304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Pred1Test, SingleEvaluationOnFailure) { 22314b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success case. 22324b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int n = 0; 22334b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED1(IsEven, n++); 22344b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n) << "The argument is not evaluated exactly once."; 22354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22364b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure case. 22374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 22384b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++) 22394b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is expected."; 22404b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 22414b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(2, n) << "The argument is not evaluated exactly once."; 22424b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 22434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests predicate assertions whose arity is >= 2. 22464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22474b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests predicate assertions that don't use a custom formatter. 22484b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredTest, WithoutFormat) { 22494b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Success cases. 22504b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!"; 22514b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8); 22524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22534b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Failure cases. 22544b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n1 = 1; 22554b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n2 = 2; 22564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 22574b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected."; 22584b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 22594b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 22604b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4); 22614b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "evaluates to false"); 22624b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 22634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests predicate assertions that use a custom formatter. 22654b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredTest, WithFormat) { 22664b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Success cases. 22674b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) << 22684b6829f0d28990dd645e16386eb226d0f10c8731shiqian "This failure is UNEXPECTED!"; 22694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10); 22704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22714b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Failure cases. 22724b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n1 = 1; 22734b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n2 = 2; 22744b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n3 = 4; 22754b6829f0d28990dd645e16386eb226d0f10c8731shiqian const int n4 = 6; 22764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 22774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4); 22784b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "evaluates to 13, which is not even."); 22794b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 22804b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8) 22814b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is expected."; 22824b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 22834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 22844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that predicate assertions evaluates their arguments 22864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// exactly once. 22874b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredTest, SingleEvaluationOnFailure) { 22884b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success case. 22894b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n1 = 0; 22904b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n2 = 0; 22914b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED2(SumIsEven2, n1++, n2++); 22924b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 22934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 22944b6829f0d28990dd645e16386eb226d0f10c8731shiqian 22954b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Another success case. 22964b6829f0d28990dd645e16386eb226d0f10c8731shiqian n1 = n2 = 0; 22974b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n3 = 0; 22984b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n4 = 0; 22994b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n5 = 0; 23004b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 23014b6829f0d28990dd645e16386eb226d0f10c8731shiqian n1++, n2++, n3++, n4++, n5++) 23024b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is UNEXPECTED!"; 23034b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23044b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 23074b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once."; 23084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23094b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure case. 23104b6829f0d28990dd645e16386eb226d0f10c8731shiqian n1 = n2 = n3 = 0; 23114b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 23124b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++) 23134b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is expected."; 23144b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "This failure is expected."); 23154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23164b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23194b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Another failure case. 23204b6829f0d28990dd645e16386eb226d0f10c8731shiqian n1 = n2 = n3 = n4 = 0; 23214b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 23224b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++); 23234b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "evaluates to 1, which is not even."); 23244b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23254b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23274b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 23284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Some helper functions for testing using overloaded/template 23324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// functions with ASSERT_PREDn and EXPECT_PREDn. 23334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23344b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool IsPositive(double x) { 23354b6829f0d28990dd645e16386eb226d0f10c8731shiqian return x > 0; 23364b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23384b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename T> 23394b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool IsNegative(T x) { 23404b6829f0d28990dd645e16386eb226d0f10c8731shiqian return x < 0; 23414b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23434b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename T1, typename T2> 23444b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool GreaterThan(T1 x1, T2 x2) { 23454b6829f0d28990dd645e16386eb226d0f10c8731shiqian return x1 > x2; 23464b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23484b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that overloaded functions can be used in *_PRED* as long as 23494b6829f0d28990dd645e16386eb226d0f10c8731shiqian// their types are explicitly specified. 23504b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredicateAssertionTest, AcceptsOverloadedFunction) { 235198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // C++Builder requires C-style casts rather than static_cast. 235298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED1((bool (*)(int))(IsPositive), 5); // NOLINT 235398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0); // NOLINT 23544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23564b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that template functions can be used in *_PRED* as long as 23574b6829f0d28990dd645e16386eb226d0f10c8731shiqian// their types are explicitly specified. 23584b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredicateAssertionTest, AcceptsTemplateFunction) { 23594b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED1(IsNegative<int>, -5); 23604b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Makes sure that we can handle templates with more than one 23614b6829f0d28990dd645e16386eb226d0f10c8731shiqian // parameter. 23624b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED2((GreaterThan<int, int>), 5, 0); 23634b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23664b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Some helper functions for testing using overloaded/template 23674b6829f0d28990dd645e16386eb226d0f10c8731shiqian// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn. 23684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2369b0a12f719caf4e37894868334ce41b1864b0be53zhanyong.wanAssertionResult IsPositiveFormat(const char* /* expr */, int n) { 2370760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return n > 0 ? AssertionSuccess() : 2371760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionFailure(Message() << "Failure"); 23724b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23734b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2374b0a12f719caf4e37894868334ce41b1864b0be53zhanyong.wanAssertionResult IsPositiveFormat(const char* /* expr */, double x) { 2375760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return x > 0 ? AssertionSuccess() : 2376760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionFailure(Message() << "Failure"); 23774b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23794b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename T> 2380b0a12f719caf4e37894868334ce41b1864b0be53zhanyong.wanAssertionResult IsNegativeFormat(const char* /* expr */, T x) { 2381760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return x < 0 ? AssertionSuccess() : 2382760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionFailure(Message() << "Failure"); 23834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23854b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename T1, typename T2> 2386b0a12f719caf4e37894868334ce41b1864b0be53zhanyong.wanAssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */, 2387760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian const T1& x1, const T2& x2) { 2388760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian return x1 == x2 ? AssertionSuccess() : 2389760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian AssertionFailure(Message() << "Failure"); 23904b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that overloaded functions can be used in *_PRED_FORMAT* 2393b0a12f719caf4e37894868334ce41b1864b0be53zhanyong.wan// without explicitly specifying their types. 23944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) { 23954b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT1(IsPositiveFormat, 5); 23964b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0); 23974b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 23984b6829f0d28990dd645e16386eb226d0f10c8731shiqian 23994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that template functions can be used in *_PRED_FORMAT* without 24004b6829f0d28990dd645e16386eb226d0f10c8731shiqian// explicitly specifying their types. 24014b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) { 24024b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED_FORMAT1(IsNegativeFormat, -5); 24034b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3); 24044b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests string assertions. 24084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STREQ with non-NULL arguments. 24104b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STREQ) { 24114b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char * const p1 = "good"; 24124b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(p1, p1); 24134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24144b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Let p2 have the same content as p1, but be at a different address. 24154b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char p2[] = "good"; 24164b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(p1, p2); 24174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24184b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"), 24194b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: \"bad\""); 24204b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STREQ with NULL arguments. 24234b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STREQ_Null) { 24244b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(static_cast<const char *>(NULL), NULL); 24254b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"), 24264b6829f0d28990dd645e16386eb226d0f10c8731shiqian "non-null"); 24274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STREQ with NULL arguments. 24304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STREQ_Null2) { 24314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL), 24324b6829f0d28990dd645e16386eb226d0f10c8731shiqian "non-null"); 24334b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STRNE. 24364b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STRNE) { 24374b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("hi", "Hi"); 24384b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("Hi", NULL); 24394b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE(NULL, "Hi"); 24404b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("", NULL); 24414b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE(NULL, ""); 24424b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("", "Hi"); 24434b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("Hi", ""); 24444b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"), 24454b6829f0d28990dd645e16386eb226d0f10c8731shiqian "\"Hi\" vs \"Hi\""); 24464b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24484b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STRCASEEQ. 24494b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STRCASEEQ) { 24504b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASEEQ("hi", "Hi"); 24514b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL); 24524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24534b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASEEQ("", ""); 24544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"), 24554b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(ignoring case)"); 24564b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24584b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_STRCASENE. 24594b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, ASSERT_STRCASENE) { 24604b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("hi1", "Hi2"); 24614b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("Hi", NULL); 24624b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE(NULL, "Hi"); 24634b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("", NULL); 24644b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE(NULL, ""); 24654b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("", "Hi"); 24664b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("Hi", ""); 24674b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"), 24684b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(ignoring case)"); 24694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests *_STREQ on wide strings. 24724b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, STREQ_Wide) { 24734b6829f0d28990dd645e16386eb226d0f10c8731shiqian // NULL strings. 24744b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL); 24754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24764b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Empty strings. 24774b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(L"", L""); 24784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24794b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Non-null vs NULL. 24804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL), 24814b6829f0d28990dd645e16386eb226d0f10c8731shiqian "non-null"); 24824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Equal strings. 24844b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ(L"Hi", L"Hi"); 24854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24864b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Unequal strings. 24874b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"), 24884b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Abc"); 24894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 24904b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Strings containing wide characters. 24914b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"), 24924b6829f0d28990dd645e16386eb226d0f10c8731shiqian "abc"); 24937a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 24947a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com // The streaming variation. 24957a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE({ // NOLINT 24967a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_STREQ(L"abc\x8119", L"abc\x8121") << "Expected failure"; 24977a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com }, "Expected failure"); 24984b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 24994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25004b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests *_STRNE on wide strings. 25014b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StringAssertionTest, STRNE_Wide) { 25024b6829f0d28990dd645e16386eb226d0f10c8731shiqian // NULL strings. 25034b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 25044b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL); 25054b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 25064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25074b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Empty strings. 25084b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""), 25094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "L\"\""); 25104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25114b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Non-null vs NULL. 25124b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE(L"non-null", NULL); 25134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25144b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Equal strings. 25154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"), 25164b6829f0d28990dd645e16386eb226d0f10c8731shiqian "L\"Hi\""); 25174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25184b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Unequal strings. 25194b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE(L"abc", L"Abc"); 25204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25214b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Strings containing wide characters. 25224b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"), 25234b6829f0d28990dd645e16386eb226d0f10c8731shiqian "abc"); 25247a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 25257a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com // The streaming variation. 25267a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_STRNE(L"abc\x8119", L"abc\x8120") << "This shouldn't happen"; 25274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests for ::testing::IsSubstring(). 25304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring() returns the correct result when the input 25324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const char*. 25334b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, ReturnsCorrectResultForCString) { 25344b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsSubstring("", "", NULL, "a")); 25354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsSubstring("", "", "b", NULL)); 25364b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsSubstring("", "", "needle", "haystack")); 25374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25384b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL)); 25394b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsSubstring("", "", "needle", "two needles")); 25404b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring() returns the correct result when the input 25434b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const wchar_t*. 25444b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, ReturnsCorrectResultForWideCString) { 254598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(IsSubstring("", "", kNull, L"a")); 254698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FALSE(IsSubstring("", "", L"b", kNull)); 25474b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack")); 25484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL)); 25504b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles")); 25514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25534b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring() generates the correct message when the input 25544b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const char*. 25554b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, GeneratesCorrectMessageForCString) { 25564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("Value of: needle_expr\n" 25574b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: \"needle\"\n" 25584b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: a substring of haystack_expr\n" 25594b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: \"haystack\"", 2560760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian IsSubstring("needle_expr", "haystack_expr", 2561760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian "needle", "haystack").failure_message()); 25624b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring returns the correct result when the input 25654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::string. 25664b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, ReturnsCorrectResultsForStdString) { 2567760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob")); 2568760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world"))); 25694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25714b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_STD_WSTRING 25724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring returns the correct result when the input 25734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::wstring. 25744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) { 25754b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 25764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 25774b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25794b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsSubstring() generates the correct message when the input 25804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::wstring. 25814b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsSubstringTest, GeneratesCorrectMessageForWstring) { 25824b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("Value of: needle_expr\n" 25834b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: L\"needle\"\n" 25844b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: a substring of haystack_expr\n" 25854b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: L\"haystack\"", 2586760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian IsSubstring( 25874b6829f0d28990dd645e16386eb226d0f10c8731shiqian "needle_expr", "haystack_expr", 25884b6829f0d28990dd645e16386eb226d0f10c8731shiqian ::std::wstring(L"needle"), L"haystack").failure_message()); 25894b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 25904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25914b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_STD_WSTRING 25924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests for ::testing::IsNotSubstring(). 25944b6829f0d28990dd645e16386eb226d0f10c8731shiqian 25954b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring() returns the correct result when the input 25964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const char*. 25974b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, ReturnsCorrectResultForCString) { 25984b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack")); 25994b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles")); 26004b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring() returns the correct result when the input 26034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const wchar_t*. 26044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) { 26054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack")); 26064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles")); 26074b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring() generates the correct message when the input 26104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is const wchar_t*. 26114b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) { 26124b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("Value of: needle_expr\n" 26134b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: L\"needle\"\n" 26144b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: not a substring of haystack_expr\n" 26154b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: L\"two needles\"", 2616760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian IsNotSubstring( 26174b6829f0d28990dd645e16386eb226d0f10c8731shiqian "needle_expr", "haystack_expr", 26184b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"needle", L"two needles").failure_message()); 26194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring returns the correct result when the input 26224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::string. 26234b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) { 26244b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob")); 26254b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world"))); 26264b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring() generates the correct message when the input 26294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::string. 26304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) { 26314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("Value of: needle_expr\n" 26324b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: \"needle\"\n" 26334b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: not a substring of haystack_expr\n" 26344b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: \"two needles\"", 2635760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian IsNotSubstring( 26364b6829f0d28990dd645e16386eb226d0f10c8731shiqian "needle_expr", "haystack_expr", 26374b6829f0d28990dd645e16386eb226d0f10c8731shiqian ::std::string("needle"), "two needles").failure_message()); 26384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26404b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_STD_WSTRING 26414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that IsNotSubstring returns the correct result when the input 26434b6829f0d28990dd645e16386eb226d0f10c8731shiqian// argument type is ::std::wstring. 26444b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) { 26454b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE( 26464b6829f0d28990dd645e16386eb226d0f10c8731shiqian IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 26474b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 26484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 26494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26504b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_STD_WSTRING 26514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests floating-point assertions. 26534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26544b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename RawType> 2655760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass FloatingPointTest : public Test { 26564b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 265798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // Pre-calculated numbers to be used by the tests. 265898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan struct TestValues { 265998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType close_to_positive_zero; 266098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType close_to_negative_zero; 266198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType further_from_negative_zero; 266298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 266398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType close_to_one; 266498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType further_from_one; 266598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 266698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType infinity; 266798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType close_to_infinity; 266898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType further_from_infinity; 266998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 267098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType nan1; 267198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan RawType nan2; 267298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }; 267398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 26744b6829f0d28990dd645e16386eb226d0f10c8731shiqian typedef typename testing::internal::FloatingPoint<RawType> Floating; 26754b6829f0d28990dd645e16386eb226d0f10c8731shiqian typedef typename Floating::Bits Bits; 26764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26774b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 26784b6829f0d28990dd645e16386eb226d0f10c8731shiqian const size_t max_ulps = Floating::kMaxUlps; 26794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26804b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The bits that represent 0.0. 26814b6829f0d28990dd645e16386eb226d0f10c8731shiqian const Bits zero_bits = Floating(0).bits(); 26824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Makes some numbers close to 0.0. 268498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.close_to_positive_zero = Floating::ReinterpretBits( 268598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan zero_bits + max_ulps/2); 268698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.close_to_negative_zero = -Floating::ReinterpretBits( 26874b6829f0d28990dd645e16386eb226d0f10c8731shiqian zero_bits + max_ulps - max_ulps/2); 268898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.further_from_negative_zero = -Floating::ReinterpretBits( 26894b6829f0d28990dd645e16386eb226d0f10c8731shiqian zero_bits + max_ulps + 1 - max_ulps/2); 26904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26914b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The bits that represent 1.0. 26924b6829f0d28990dd645e16386eb226d0f10c8731shiqian const Bits one_bits = Floating(1).bits(); 26934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26944b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Makes some numbers close to 1.0. 269598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps); 269698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.further_from_one = Floating::ReinterpretBits( 269798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan one_bits + max_ulps + 1); 26984b6829f0d28990dd645e16386eb226d0f10c8731shiqian 26994b6829f0d28990dd645e16386eb226d0f10c8731shiqian // +infinity. 270098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.infinity = Floating::Infinity(); 27014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27024b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The bits that represent +infinity. 270398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan const Bits infinity_bits = Floating(values_.infinity).bits(); 27044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27054b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Makes some numbers close to infinity. 270698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.close_to_infinity = Floating::ReinterpretBits( 270798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan infinity_bits - max_ulps); 270898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.further_from_infinity = Floating::ReinterpretBits( 27094b6829f0d28990dd645e16386eb226d0f10c8731shiqian infinity_bits - max_ulps - 1); 27104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 271198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // Makes some NAN's. Sets the most significant bit of the fraction so that 271298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // our NaN's are quiet; trying to process a signaling NaN would raise an 271398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // exception if our environment enables floating point exceptions. 271498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask 271598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1); 271698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask 271798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200); 27184b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 27194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27204b6829f0d28990dd645e16386eb226d0f10c8731shiqian void TestSize() { 27214b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(sizeof(RawType), sizeof(Bits)); 27224b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 27234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 272498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan static TestValues values_; 27254b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 27264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27274b6829f0d28990dd645e16386eb226d0f10c8731shiqiantemplate <typename RawType> 272898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wantypename FloatingPointTest<RawType>::TestValues 272998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan FloatingPointTest<RawType>::values_; 27304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Instantiates FloatingPointTest for testing *_FLOAT_EQ. 27324b6829f0d28990dd645e16386eb226d0f10c8731shiqiantypedef FloatingPointTest<float> FloatTest; 27334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27344b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the size of Float::Bits matches the size of float. 27354b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, Size) { 27364b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestSize(); 27374b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 27384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing with +0 and -0. 27404b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, Zeros) { 27414b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FLOAT_EQ(0.0, -0.0); 27424b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0), 27434b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1.0"); 27444b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5), 27454b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1.5"); 27464b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 27474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27484b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers close to 0. 27494b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 27504b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This ensures that *_FLOAT_EQ handles the sign correctly and no 27514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// overflow occurs when comparing numbers whose absolute value is very 27524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// small. 27534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, AlmostZeros) { 275498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // In C++Builder, names within local classes (such as used by 275598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 275698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // scoping class. Use a static local alias as a workaround. 2757673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // We use the assignment syntax since some compilers, like Sun Studio, 2758673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // don't allow initializing references using construction syntax 2759673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // (parentheses). 2760673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev static const FloatTest::TestValues& v = this->values_; 276198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 276298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero); 276398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero); 276498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 27654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27664b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 276798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_FLOAT_EQ(v.close_to_positive_zero, 276898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan v.further_from_negative_zero); 276998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "v.further_from_negative_zero"); 27704b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 27714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers close to each other. 27734b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, SmallDiff) { 277498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(1.0, values_.close_to_one); 277598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one), 277698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "values_.further_from_one"); 27774b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 27784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27794b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers far apart. 27804b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, LargeDiff) { 27814b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0), 27824b6829f0d28990dd645e16386eb226d0f10c8731shiqian "3.0"); 27834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 27844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 27854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing with infinity. 27864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 27874b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This ensures that no overflow occurs when comparing numbers whose 27884b6829f0d28990dd645e16386eb226d0f10c8731shiqian// absolute value is very large. 27894b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, Infinity) { 279098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity); 279198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity); 27924cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_OS_SYMBIAN 2793e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 279498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity), 279598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "-values_.infinity"); 27964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 279798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // This is interesting as the representations of infinity and nan1 27984b6829f0d28990dd645e16386eb226d0f10c8731shiqian // are only 1 DLP apart. 279998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1), 280098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "values_.nan1"); 28014cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_OS_SYMBIAN 28024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that comparing with NAN always returns false. 28054b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, NaN) { 28064cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_OS_SYMBIAN 2807e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Nokia's STLport crashes if we try to output infinity or NaN. 280898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 280998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // In C++Builder, names within local classes (such as used by 281098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 281198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // scoping class. Use a static local alias as a workaround. 2812673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // We use the assignment syntax since some compilers, like Sun Studio, 2813673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // don't allow initializing references using construction syntax 2814673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // (parentheses). 2815673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev static const FloatTest::TestValues& v = this->values_; 281698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 281798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1), 281898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.nan1"); 281998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2), 282098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.nan2"); 282198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1), 282298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.nan1"); 282398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 282498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity), 282598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.infinity"); 28264cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_OS_SYMBIAN 28274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that *_FLOAT_EQ are reflexive. 28304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, Reflexive) { 28314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FLOAT_EQ(0.0, 0.0); 28324b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FLOAT_EQ(1.0, 1.0); 283398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_FLOAT_EQ(values_.infinity, values_.infinity); 28344b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that *_FLOAT_EQ are commutative. 28374b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, Commutative) { 283898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one). 283998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FLOAT_EQ(values_.close_to_one, 1.0); 28404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 284198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one). 284298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0), 28434b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1.0"); 28444b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28454b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28464b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_NEAR. 28474b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, EXPECT_NEAR) { 28484b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NEAR(-1.0f, -1.1f, 0.2f); 28494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NEAR(2.0f, 3.0f, 1.0f); 285065de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 285165de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "The difference between 1.0f and 1.5f is 0.5, " 285265de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "which exceeds 0.25f"); 28534b6829f0d28990dd645e16386eb226d0f10c8731shiqian // To work around a bug in gcc 2.95.0, there is intentionally no 28544b6829f0d28990dd645e16386eb226d0f10c8731shiqian // space after the first comma in the previous line. 28554b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28574b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_NEAR. 28584b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, ASSERT_NEAR) { 28594b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NEAR(-1.0f, -1.1f, 0.2f); 28604b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NEAR(2.0f, 3.0f, 1.0f); 286165de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 286265de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "The difference between 1.0f and 1.5f is 0.5, " 286365de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "which exceeds 0.25f"); 28644b6829f0d28990dd645e16386eb226d0f10c8731shiqian // To work around a bug in gcc 2.95.0, there is intentionally no 28654b6829f0d28990dd645e16386eb226d0f10c8731shiqian // space after the first comma in the previous line. 28664b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28684b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the cases where FloatLE() should succeed. 28694b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, FloatLESucceeds) { 2870760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2, 2871760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2, 28724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28734b6829f0d28990dd645e16386eb226d0f10c8731shiqian // or when val1 is greater than, but almost equals to, val2. 287498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f); 28754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 28764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the cases where FloatLE() should fail. 28784b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FloatTest, FloatLEFails) { 28794b6829f0d28990dd645e16386eb226d0f10c8731shiqian // When val1 is greater than val2 by a large margin, 2880760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f), 28814b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(2.0f) <= (1.0f)"); 28824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 28834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // or by a small yet non-negligible margin, 28844b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 288598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f); 288698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.further_from_one) <= (1.0f)"); 28874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 288898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 2889e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 289098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // C++Builder gives bad results for ordered comparisons involving NaNs 289198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // due to compiler bugs. 28924b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 289398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity); 289498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.nan1) <= (values_.infinity)"); 28954b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 289698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1); 289798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(-values_.infinity) <= (values_.nan1)"); 28984b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 289998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1); 290098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.nan1) <= (values_.nan1)"); 290198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 29024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Instantiates FloatingPointTest for testing *_DOUBLE_EQ. 29054b6829f0d28990dd645e16386eb226d0f10c8731shiqiantypedef FloatingPointTest<double> DoubleTest; 29064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the size of Double::Bits matches the size of double. 29084b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, Size) { 29094b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestSize(); 29104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing with +0 and -0. 29134b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, Zeros) { 29144b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_DOUBLE_EQ(0.0, -0.0); 29154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0), 29164b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1.0"); 29174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0), 29184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1.0"); 29194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers close to 0. 29224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 29234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This ensures that *_DOUBLE_EQ handles the sign correctly and no 29244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// overflow occurs when comparing numbers whose absolute value is very 29254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// small. 29264b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, AlmostZeros) { 292798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // In C++Builder, names within local classes (such as used by 292898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 292998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // scoping class. Use a static local alias as a workaround. 2930673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // We use the assignment syntax since some compilers, like Sun Studio, 2931673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // don't allow initializing references using construction syntax 2932673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // (parentheses). 2933673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev static const DoubleTest::TestValues& v = this->values_; 293498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 293598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero); 293698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero); 293798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 29384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29394b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 294098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_DOUBLE_EQ(v.close_to_positive_zero, 294198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan v.further_from_negative_zero); 294298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "v.further_from_negative_zero"); 29434b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers close to each other. 29464b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, SmallDiff) { 294798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(1.0, values_.close_to_one); 294898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one), 294998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "values_.further_from_one"); 29504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing numbers far apart. 29534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, LargeDiff) { 29544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0), 29554b6829f0d28990dd645e16386eb226d0f10c8731shiqian "3.0"); 29564b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29584b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests comparing with infinity. 29594b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 29604b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This ensures that no overflow occurs when comparing numbers whose 29614b6829f0d28990dd645e16386eb226d0f10c8731shiqian// absolute value is very large. 29624b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, Infinity) { 296398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity); 296498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity); 29654cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_OS_SYMBIAN 2966e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 296798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity), 296898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "-values_.infinity"); 29694b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29704b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This is interesting as the representations of infinity_ and nan1_ 29714b6829f0d28990dd645e16386eb226d0f10c8731shiqian // are only 1 DLP apart. 297298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1), 297398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "values_.nan1"); 29744cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_OS_SYMBIAN 29754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that comparing with NAN always returns false. 29784b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, NaN) { 29794cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_OS_SYMBIAN 298098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // In C++Builder, names within local classes (such as used by 298198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 298298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // scoping class. Use a static local alias as a workaround. 2983673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // We use the assignment syntax since some compilers, like Sun Studio, 2984673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // don't allow initializing references using construction syntax 2985673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev // (parentheses). 2986673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev static const DoubleTest::TestValues& v = this->values_; 298798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 2988e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 298998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1), 299098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.nan1"); 299198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2"); 299298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1"); 299398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity), 299498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "v.infinity"); 29954cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_OS_SYMBIAN 29964b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 29974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 29984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that *_DOUBLE_EQ are reflexive. 29994b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, Reflexive) { 30004b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_DOUBLE_EQ(0.0, 0.0); 30014b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_DOUBLE_EQ(1.0, 1.0); 30024cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if !GTEST_OS_SYMBIAN 3003e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 300498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity); 30054cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // !GTEST_OS_SYMBIAN 30064b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30074b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30084b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that *_DOUBLE_EQ are commutative. 30094b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, Commutative) { 301098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one). 301198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0); 30124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 301398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one). 301498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0), 301598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "1.0"); 30164b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_NEAR. 30194b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, EXPECT_NEAR) { 30204b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NEAR(-1.0, -1.1, 0.2); 30214b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NEAR(2.0, 3.0, 1.0); 302265de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25), // NOLINT 302365de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "The difference between 1.0 and 1.5 is 0.5, " 302465de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "which exceeds 0.25"); 30254b6829f0d28990dd645e16386eb226d0f10c8731shiqian // To work around a bug in gcc 2.95.0, there is intentionally no 30264b6829f0d28990dd645e16386eb226d0f10c8731shiqian // space after the first comma in the previous statement. 30274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_NEAR. 30304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, ASSERT_NEAR) { 30314b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NEAR(-1.0, -1.1, 0.2); 30324b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NEAR(2.0, 3.0, 1.0); 303365de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25), // NOLINT 303465de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "The difference between 1.0 and 1.5 is 0.5, " 303565de7e062b96a0b579ba832ec8e5527528b8fa51zhanyong.wan "which exceeds 0.25"); 30364b6829f0d28990dd645e16386eb226d0f10c8731shiqian // To work around a bug in gcc 2.95.0, there is intentionally no 30374b6829f0d28990dd645e16386eb226d0f10c8731shiqian // space after the first comma in the previous statement. 30384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the cases where DoubleLE() should succeed. 30414b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, DoubleLESucceeds) { 3042760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2, 3043760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2, 30444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // or when val1 is greater than, but almost equals to, val2. 304698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0); 30474b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30494b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the cases where DoubleLE() should fail. 30504b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DoubleTest, DoubleLEFails) { 30514b6829f0d28990dd645e16386eb226d0f10c8731shiqian // When val1 is greater than val2 by a large margin, 3052760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0), 30534b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(2.0) <= (1.0)"); 30544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30554b6829f0d28990dd645e16386eb226d0f10c8731shiqian // or by a small yet non-negligible margin, 30564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 305798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0); 305898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.further_from_one) <= (1.0)"); 30594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 306098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 3061e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Nokia's STLport crashes if we try to output infinity or NaN. 306298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // C++Builder gives bad results for ordered comparisons involving NaNs 306398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // due to compiler bugs. 30644b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 306598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity); 306698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.nan1) <= (values_.infinity)"); 30674b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 306898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1); 306998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, " (-values_.infinity) <= (values_.nan1)"); 30704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 307198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1); 307298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan }, "(values_.nan1) <= (values_.nan1)"); 307398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 30744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Verifies that a test or test case whose name starts with DISABLED_ is 30784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// not run. 30794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test whose name starts with DISABLED_. 30814b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Should not run. 30824b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(DisabledTest, DISABLED_TestShouldNotRun) { 30834b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: Disabled test should not be run."; 30844b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test whose name does not start with DISABLED_. 30874b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Should run. 30884b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(DisabledTest, NotDISABLED_TestShouldRun) { 30894b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, 1); 30904b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test case whose name starts with DISABLED_. 30934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Should not run. 30944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(DISABLED_TestCase, TestShouldNotRun) { 30954b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 30964b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 30974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 30984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test case and test whose names start with DISABLED_. 30994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Should not run. 31004b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) { 31014b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 31024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 31034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 31044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Check that when all tests in a test case are disabled, SetupTestCase() and 31054b6829f0d28990dd645e16386eb226d0f10c8731shiqian// TearDownTestCase() are not called. 3106760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass DisabledTestsTest : public Test { 31074b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 31084b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void SetUpTestCase() { 31094b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: All tests disabled in test case. " 31104b6829f0d28990dd645e16386eb226d0f10c8731shiqian "SetupTestCase() should not be called."; 31114b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 31124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 31134b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void TearDownTestCase() { 31144b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: All tests disabled in test case. " 31154b6829f0d28990dd645e16386eb226d0f10c8731shiqian "TearDownTestCase() should not be called."; 31164b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 31174b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 31184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 31194b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) { 31204b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: Disabled test should not be run."; 31214b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 31224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 31234b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) { 31244b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Unexpected failure: Disabled test should not be run."; 31254b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 31264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3127e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// Tests that disabled typed tests aren't run. 3128e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 31294cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_TYPED_TEST 3130e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3131e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 3132e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass TypedTest : public Test { 3133e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 3134e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3135e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantypedef testing::Types<int, double> NumericTypes; 3136e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE(TypedTest, NumericTypes); 3137e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3138e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST(TypedTest, DISABLED_ShouldNotRun) { 3139e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian FAIL() << "Unexpected failure: Disabled typed test should not run."; 3140e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 3141e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3142e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 3143e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass DISABLED_TypedTest : public Test { 3144e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 3145e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3146e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes); 3147e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3148e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST(DISABLED_TypedTest, ShouldNotRun) { 3149e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian FAIL() << "Unexpected failure: Disabled typed test should not run."; 3150e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 3151e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3152e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian#endif // GTEST_HAS_TYPED_TEST 3153e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3154e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// Tests that disabled type-parameterized tests aren't run. 3155e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 31564cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_TYPED_TEST_P 3157e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3158e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 3159e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass TypedTestP : public Test { 3160e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 3161e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3162e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE_P(TypedTestP); 3163e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3164e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) { 3165e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian FAIL() << "Unexpected failure: " 3166e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian << "Disabled type-parameterized test should not run."; 3167e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 3168e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3169e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianREGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun); 3170e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3171e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianINSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes); 3172e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3173e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 3174e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass DISABLED_TypedTestP : public Test { 3175e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 3176e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3177e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE_P(DISABLED_TypedTestP); 3178e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3179e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) { 3180e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian FAIL() << "Unexpected failure: " 3181e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian << "Disabled type-parameterized test should not run."; 3182e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 3183e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3184e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianREGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun); 3185e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3186e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianINSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes); 3187e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 3188e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian#endif // GTEST_HAS_TYPED_TEST_P 31894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 31904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that assertion macros evaluate their arguments exactly once. 31914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3192760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass SingleEvaluationTest : public Test { 3193acd0f32c50622ace5eb0c62b38820981c1ecd1e9tsunanet public: // Must be public and not protected due to a bug in g++ 3.4.2. 31944b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This helper function is needed by the FailedASSERT_STREQ test 319598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // below. It's public to work around C++Builder's bug with scoping local 319698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // classes. 31974b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void CompareAndIncrementCharPtrs() { 31984b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(p1_++, p2_++); 31994b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 32004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 320198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // This helper function is needed by the FailedASSERT_NE test below. It's 320298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // public to work around C++Builder's bug with scoping local classes. 32034b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void CompareAndIncrementInts() { 32044b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NE(a_++, b_++); 32054b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 32064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 320798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan protected: 320898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan SingleEvaluationTest() { 320998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan p1_ = s1_; 321098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan p2_ = s2_; 321198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan a_ = 0; 321298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan b_ = 0; 321398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan } 321498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 32154b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char* const s1_; 32164b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char* const s2_; 32174b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char* p1_; 32184b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char* p2_; 32194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32204b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int a_; 32214b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int b_; 32224b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 32234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32244b6829f0d28990dd645e16386eb226d0f10c8731shiqianconst char* const SingleEvaluationTest::s1_ = "01234"; 32254b6829f0d28990dd645e16386eb226d0f10c8731shiqianconst char* const SingleEvaluationTest::s2_ = "abcde"; 32264b6829f0d28990dd645e16386eb226d0f10c8731shiqianconst char* SingleEvaluationTest::p1_; 32274b6829f0d28990dd645e16386eb226d0f10c8731shiqianconst char* SingleEvaluationTest::p2_; 32284b6829f0d28990dd645e16386eb226d0f10c8731shiqianint SingleEvaluationTest::a_; 32294b6829f0d28990dd645e16386eb226d0f10c8731shiqianint SingleEvaluationTest::b_; 32304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that when ASSERT_STREQ fails, it evaluates its arguments 32324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// exactly once. 32334b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SingleEvaluationTest, FailedASSERT_STREQ) { 323498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(), 32354b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p2_++"); 32364b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s1_ + 1, p1_); 32374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s2_ + 1, p2_); 32384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 32394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that string assertion arguments are evaluated exactly once. 32414b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SingleEvaluationTest, ASSERT_STR) { 32424b6829f0d28990dd645e16386eb226d0f10c8731shiqian // successful EXPECT_STRNE 32434b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE(p1_++, p2_++); 32444b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s1_ + 1, p1_); 32454b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s2_ + 1, p2_); 32464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32474b6829f0d28990dd645e16386eb226d0f10c8731shiqian // failed EXPECT_STRCASEEQ 32484b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++), 32494b6829f0d28990dd645e16386eb226d0f10c8731shiqian "ignoring case"); 32504b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s1_ + 2, p1_); 32514b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(s2_ + 2, p2_); 32524b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 32534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32544b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that when ASSERT_NE fails, it evaluates its arguments exactly 32554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// once. 32564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SingleEvaluationTest, FailedASSERT_NE) { 325798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(), 325898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan "(a_++) != (b_++)"); 32594b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, a_); 32604b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, b_); 32614b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 32624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that assertion arguments are evaluated exactly once. 32644b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SingleEvaluationTest, OtherCases) { 32654b6829f0d28990dd645e16386eb226d0f10c8731shiqian // successful EXPECT_TRUE 32664b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(0 == a_++); // NOLINT 32674b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, a_); 32684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32694b6829f0d28990dd645e16386eb226d0f10c8731shiqian // failed EXPECT_TRUE 32704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++"); 32714b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(2, a_); 32724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32734b6829f0d28990dd645e16386eb226d0f10c8731shiqian // successful EXPECT_GT 32744b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GT(a_++, b_++); 32754b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(3, a_); 32764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, b_); 32774b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32784b6829f0d28990dd645e16386eb226d0f10c8731shiqian // failed EXPECT_LT 32794b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)"); 32804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(4, a_); 32814b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(2, b_); 32824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // successful ASSERT_TRUE 32844b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(0 < a_++); // NOLINT 32854b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(5, a_); 32864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32874b6829f0d28990dd645e16386eb226d0f10c8731shiqian // successful ASSERT_GT 32884b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_GT(a_++, b_++); 32894b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(6, a_); 32904b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(3, b_); 32914b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 32924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 32939204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 32949204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 32959204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianvoid ThrowAnInteger() { 32969204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian throw 1; 32979204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 32989204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 32999204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests that assertion arguments are evaluated exactly once. 33009204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST_F(SingleEvaluationTest, ExceptionTests) { 33019204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // successful EXPECT_THROW 33029204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_THROW({ // NOLINT 33039204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian a_++; 33049204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ThrowAnInteger(); 33059204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian }, int); 33069204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(1, a_); 33079204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33089204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // failed EXPECT_THROW, throws different 33099204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT 33109204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian a_++; 33119204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ThrowAnInteger(); 33129204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian }, bool), "throws a different type"); 33139204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(2, a_); 33149204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33159204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // failed EXPECT_THROW, throws nothing 33169204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing"); 33179204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(3, a_); 33189204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33199204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // successful EXPECT_NO_THROW 33209204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NO_THROW(a_++); 33219204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(4, a_); 33229204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33239204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // failed EXPECT_NO_THROW 33249204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT 33259204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian a_++; 33269204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ThrowAnInteger(); 33279204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian }), "it throws"); 33289204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(5, a_); 33299204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33309204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // successful EXPECT_ANY_THROW 33319204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_ANY_THROW({ // NOLINT 33329204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian a_++; 33339204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ThrowAnInteger(); 33349204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian }); 33359204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(6, a_); 33369204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33379204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian // failed EXPECT_ANY_THROW 33389204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't"); 33399204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_EQ(7, a_); 33409204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 33419204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 33429204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 33434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3344e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE. 3345e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass NoFatalFailureTest : public Test { 3346e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian protected: 3347e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian void Succeeds() {} 3348e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian void FailsNonFatal() { 3349e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ADD_FAILURE() << "some non-fatal failure"; 3350e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3351e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian void Fails() { 3352e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian FAIL() << "some fatal failure"; 3353e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3354e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3355e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian void DoAssertNoFatalFailureOnFails() { 3356e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_NO_FATAL_FAILURE(Fails()); 3357e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ADD_FAILURE() << "shold not reach here."; 3358e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3359e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3360e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian void DoExpectNoFatalFailureOnFails() { 3361e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(Fails()); 3362e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ADD_FAILURE() << "other failure"; 3363e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3364e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 3365e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3366e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(NoFatalFailureTest, NoFailure) { 3367e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(Succeeds()); 3368e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_NO_FATAL_FAILURE(Succeeds()); 3369e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 3370e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3371e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(NoFatalFailureTest, NonFatalIsNoFailure) { 3372e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE( 3373e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(FailsNonFatal()), 3374e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "some non-fatal failure"); 3375e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE( 3376e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_NO_FATAL_FAILURE(FailsNonFatal()), 3377e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "some non-fatal failure"); 3378e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 3379e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3380e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) { 3381e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray gtest_failures; 3382e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 3383e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3384e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian DoAssertNoFatalFailureOnFails(); 3385e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3386e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_EQ(2, gtest_failures.size()); 3387334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kFatalFailure, 3388e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).type()); 3389334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kFatalFailure, 3390e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).type()); 3391e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 3392e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).message()); 3393e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 3394e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).message()); 3395e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 3396e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3397e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) { 3398e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray gtest_failures; 3399e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 3400e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3401e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian DoExpectNoFatalFailureOnFails(); 3402e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3403e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_EQ(3, gtest_failures.size()); 3404334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kFatalFailure, 3405e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).type()); 3406334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, 3407e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).type()); 3408334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, 3409e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(2).type()); 3410e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 3411e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).message()); 3412e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 3413e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).message()); 3414e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure", 3415e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(2).message()); 3416e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 3417e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3418e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(NoFatalFailureTest, MessageIsStreamable) { 3419e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray gtest_failures; 3420e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 3421e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3422e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message"; 3423e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 3424e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_EQ(2, gtest_failures.size()); 3425334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, 3426e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).type()); 3427334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, 3428e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).type()); 3429e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo", 3430e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(0).message()); 3431e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message", 3432e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian gtest_failures.GetTestPartResult(1).message()); 3433e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 3434e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 34354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests non-string assertions. 34364b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3437d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comstd::string EditsToString(const std::vector<EditType>& edits) { 3438d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com std::string out; 3439d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com for (size_t i = 0; i < edits.size(); ++i) { 3440d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com static const char kEdits[] = " +-/"; 3441d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com out.append(1, kEdits[edits[i]]); 3442d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com } 3443d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com return out; 3444d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 3445d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 3446d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comstd::vector<size_t> CharsToIndices(const std::string& str) { 3447d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com std::vector<size_t> out; 3448d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com for (size_t i = 0; i < str.size(); ++i) { 3449d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com out.push_back(str[i]); 3450d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com } 3451d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com return out; 3452d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 3453d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 3454d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comstd::vector<std::string> CharsToLines(const std::string& str) { 3455d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com std::vector<std::string> out; 3456d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com for (size_t i = 0; i < str.size(); ++i) { 3457d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com out.push_back(str.substr(i, 1)); 3458d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com } 3459d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com return out; 3460d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 3461d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 3462d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comTEST(EditDistance, TestCases) { 3463d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com struct Case { 3464d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com int line; 3465d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const char* left; 3466d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const char* right; 3467d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const char* expected_edits; 3468d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const char* expected_diff; 3469d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com }; 3470d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com static const Case kCases[] = { 3471d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com // No change. 3472d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "A", "A", " ", ""}, 3473d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "ABCDE", "ABCDE", " ", ""}, 3474d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com // Simple adds. 3475d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "X", "XA", " +", "@@ +1,2 @@\n X\n+A\n"}, 3476d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "X", "XABCD", " ++++", "@@ +1,5 @@\n X\n+A\n+B\n+C\n+D\n"}, 3477d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com // Simple removes. 3478d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "XA", "X", " -", "@@ -1,2 @@\n X\n-A\n"}, 3479d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "XABCD", "X", " ----", "@@ -1,5 @@\n X\n-A\n-B\n-C\n-D\n"}, 3480d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com // Simple replaces. 3481d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "A", "a", "/", "@@ -1,1 +1,1 @@\n-A\n+a\n"}, 3482d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "ABCD", "abcd", "////", 3483d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -1,4 +1,4 @@\n-A\n-B\n-C\n-D\n+a\n+b\n+c\n+d\n"}, 3484d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com // Path finding. 3485d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "ABCDEFGH", "ABXEGH1", " -/ - +", 3486d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -1,8 +1,7 @@\n A\n B\n-C\n-D\n+X\n E\n-F\n G\n H\n+1\n"}, 3487d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "AAAABCCCC", "ABABCDCDC", "- / + / ", 3488d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -1,9 +1,9 @@\n-A\n A\n-A\n+B\n A\n B\n C\n+D\n C\n-C\n+D\n C\n"}, 3489d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "ABCDE", "BCDCD", "- +/", 3490d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -1,5 +1,5 @@\n-A\n B\n C\n D\n-E\n+C\n+D\n"}, 3491d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {__LINE__, "ABCDEFGHIJKL", "BCDCDEFGJKLJK", "- ++ -- ++", 3492d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -1,4 +1,5 @@\n-A\n B\n+C\n+D\n C\n D\n" 3493d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -6,7 +7,7 @@\n F\n G\n-H\n-I\n J\n K\n L\n+J\n+K\n"}, 3494d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com {}}; 3495d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com for (const Case* c = kCases; c->left; ++c) { 3496d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EXPECT_TRUE(c->expected_edits == 3497d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EditsToString(CalculateOptimalEdits(CharsToIndices(c->left), 3498d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com CharsToIndices(c->right)))) 3499d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com << "Left <" << c->left << "> Right <" << c->right << "> Edits <" 3500d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com << EditsToString(CalculateOptimalEdits( 3501d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com CharsToIndices(c->left), CharsToIndices(c->right))) << ">"; 3502d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EXPECT_TRUE(c->expected_diff == CreateUnifiedDiff(CharsToLines(c->left), 3503d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com CharsToLines(c->right))) 3504d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com << "Left <" << c->left << "> Right <" << c->right << "> Diff <" 3505d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com << CreateUnifiedDiff(CharsToLines(c->left), CharsToLines(c->right)) 3506d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com << ">"; 3507d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com } 3508d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 3509d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 35104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EqFailure(), used for implementing *EQ* assertions. 35114b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, EqFailure) { 351203c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string foo_val("5"), bar_val("6"); 351303c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string msg1( 35144b6829f0d28990dd645e16386eb226d0f10c8731shiqian EqFailure("foo", "bar", foo_val, bar_val, false) 35154b6829f0d28990dd645e16386eb226d0f10c8731shiqian .failure_message()); 35164b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ( 35174b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: bar\n" 35184b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: 6\n" 35194b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: foo\n" 35204b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: 5", 35214b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg1.c_str()); 35224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 352303c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string msg2( 35244b6829f0d28990dd645e16386eb226d0f10c8731shiqian EqFailure("foo", "6", foo_val, bar_val, false) 35254b6829f0d28990dd645e16386eb226d0f10c8731shiqian .failure_message()); 35264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ( 35274b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 6\n" 35284b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: foo\n" 35294b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: 5", 35304b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg2.c_str()); 35314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 353203c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string msg3( 35334b6829f0d28990dd645e16386eb226d0f10c8731shiqian EqFailure("5", "bar", foo_val, bar_val, false) 35344b6829f0d28990dd645e16386eb226d0f10c8731shiqian .failure_message()); 35354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ( 35364b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: bar\n" 35374b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: 6\n" 35384b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 5", 35394b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg3.c_str()); 35404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 354103c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string msg4( 35424b6829f0d28990dd645e16386eb226d0f10c8731shiqian EqFailure("5", "6", foo_val, bar_val, false).failure_message()); 35434b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ( 35444b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 6\n" 35454b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 5", 35464b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg4.c_str()); 35474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 354803c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string msg5( 35494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EqFailure("foo", "bar", 355003c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::string("\"x\""), std::string("\"y\""), 35514b6829f0d28990dd645e16386eb226d0f10c8731shiqian true).failure_message()); 35524b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ( 35534b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: bar\n" 35544b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: \"y\"\n" 35554b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: foo (ignoring case)\n" 35564b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: \"x\"", 35574b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg5.c_str()); 35584b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 35594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3560d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comTEST(AssertionTest, EqFailureWithDiff) { 3561d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const std::string left( 3562d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "1\\n2XXX\\n3\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12XXX\\n13\\n14\\n15"); 3563d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const std::string right( 3564d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n11\\n12\\n13\\n14"); 3565d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com const std::string msg1( 3566d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EqFailure("left", "right", left, right, false).failure_message()); 3567d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EXPECT_STREQ( 3568d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "Value of: right\n" 3569d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com " Actual: 1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n11\\n12\\n13\\n14\n" 3570d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "Expected: left\n" 3571d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "Which is: " 3572d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "1\\n2XXX\\n3\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12XXX\\n13\\n14\\n15\n" 3573d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "With diff:\n@@ -1,5 +1,6 @@\n 1\n-2XXX\n+2\n 3\n+4\n 5\n 6\n" 3574d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com "@@ -7,8 +8,6 @@\n 8\n 9\n-10\n 11\n-12XXX\n+12\n 13\n 14\n-15\n", 3575d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com msg1.c_str()); 3576d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 3577d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 35784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests AppendUserMessage(), used for implementing the *EQ* macros. 35794b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, AppendUserMessage) { 358003c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string foo("foo"); 35814b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3582760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 35834b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("foo", 35844b6829f0d28990dd645e16386eb226d0f10c8731shiqian AppendUserMessage(foo, msg).c_str()); 35854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 35864b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << "bar"; 35874b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("foo\nbar", 35884b6829f0d28990dd645e16386eb226d0f10c8731shiqian AppendUserMessage(foo, msg).c_str()); 35894b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 35904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 359198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 359298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Silences warnings: "Condition is always true", "Unreachable code" 3593733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option push -w-ccc -w-rch 359498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 359598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 35964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_TRUE. 35974b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_TRUE) { 35984b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(2 > 1); // NOLINT 35994b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1), 36004b6829f0d28990dd645e16386eb226d0f10c8731shiqian "2 < 1"); 36014b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 36024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3603fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult. 3604fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionTest, AssertTrueWithAssertionResult) { 3605fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev ASSERT_TRUE(ResultIsEven(2)); 3606ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ 3607ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan // ICE's in C++Builder. 3608fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)), 3609fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEven(3)\n" 3610fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: false (3 is odd)\n" 3611fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: true"); 3612d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev#endif 3613fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev ASSERT_TRUE(ResultIsEvenNoExplanation(2)); 3614fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)), 3615fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEvenNoExplanation(3)\n" 3616fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: false (3 is odd)\n" 3617fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: true"); 3618fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 3619fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 36204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_FALSE. 36214b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_FALSE) { 36224b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(2 < 1); // NOLINT 36234b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1), 36244b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 2 > 1\n" 36254b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: true\n" 36264b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: false"); 36274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 36284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3629fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult. 3630fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionTest, AssertFalseWithAssertionResult) { 3631fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev ASSERT_FALSE(ResultIsEven(3)); 3632ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ 3633ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan // ICE's in C++Builder. 3634fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)), 3635fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEven(2)\n" 3636fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: true (2 is even)\n" 3637fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: false"); 3638d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev#endif 3639fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev ASSERT_FALSE(ResultIsEvenNoExplanation(3)); 3640fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)), 3641fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEvenNoExplanation(2)\n" 3642fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: true\n" 3643fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: false"); 3644fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 3645fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 364698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 364798efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Restores warnings after previous "#pragma option push" supressed them 3648733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option pop 364998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 365098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 36514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using ASSERT_EQ on double values. The purpose is to make 36524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// sure that the specialization we did for integer and anonymous enums 36534b6829f0d28990dd645e16386eb226d0f10c8731shiqian// isn't used for double arguments. 36544b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, ASSERT_EQ_Double) { 36554b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 36564b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(5.6, 5.6); 36574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36584b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 36594b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2), 36604b6829f0d28990dd645e16386eb226d0f10c8731shiqian "5.1"); 36614b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 36624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_EQ. 36644b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_EQ) { 36654b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(5, 2 + 3); 36664b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3), 36674b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 2*3\n" 36684b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: 6\n" 36694b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 5"); 36704b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 36714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_EQ(NULL, pointer). 36735147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#if GTEST_CAN_COMPARE_NULL 36744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_EQ_NULL) { 36754b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 36764b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* p = NULL; 36779644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // Some older GCC versions may issue a spurious waring in this or the next 36789644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // assertion statement. This warning should not be suppressed with 36799644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // static_cast since the test verifies the ability to use bare NULL as the 36809644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // expected parameter to the macro. 36814b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(NULL, p); 36824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 36844b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int n = 0; 36854b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n), 36864b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: &n\n"); 36874b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 36885147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#endif // GTEST_CAN_COMPARE_NULL 36894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be 36914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// treated as a null pointer by the compiler, we need to make sure 36924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as 36934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// ASSERT_EQ(static_cast<void*>(NULL), non_pointer). 36944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, ASSERT_EQ_0) { 36954b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n = 0; 36964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 36974b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 36984b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(0, n); 36994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37004b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 37014b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6), 37024b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 0"); 37034b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37054b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_NE. 37064b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_NE) { 37074b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_NE(6, 7); 37084b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'), 37094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: ('a') != ('a'), " 37104b6829f0d28990dd645e16386eb226d0f10c8731shiqian "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 37114b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_LE. 37144b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_LE) { 37154b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_LE(2, 3); 37164b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_LE(2, 2); 37174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0), 37184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) <= (0), actual: 2 vs 0"); 37194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_LT. 37224b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_LT) { 37234b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_LT(2, 3); 37244b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2), 37254b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) < (2), actual: 2 vs 2"); 37264b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_GE. 37294b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_GE) { 37304b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_GE(2, 1); 37314b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_GE(2, 2); 37324b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3), 37334b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) >= (3), actual: 2 vs 3"); 37344b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ASSERT_GT. 37374b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ASSERT_GT) { 37384b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_GT(2, 1); 37394b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2), 37404b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) > (2), actual: 2 vs 2"); 37414b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37439204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 37449204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 3745ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wanvoid ThrowNothing() {} 3746ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan 37479204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests ASSERT_THROW. 37489204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(AssertionTest, ASSERT_THROW) { 37499204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ASSERT_THROW(ThrowAnInteger(), int); 3750d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev 3751733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# ifndef __BORLANDC__ 3752733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3753d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev // ICE's in C++Builder 2007 and 2009. 3754ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_FATAL_FAILURE( 3755ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan ASSERT_THROW(ThrowAnInteger(), bool), 3756ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowAnInteger() throws an exception of type bool.\n" 3757ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan " Actual: it throws a different type."); 3758733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif 3759d6b4941ba371a4de8b8ea6b69bf50741cbe97292vladlosev 3760ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_FATAL_FAILURE( 3761ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan ASSERT_THROW(ThrowNothing(), bool), 3762ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowNothing() throws an exception of type bool.\n" 3763ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan " Actual: it throws nothing."); 37649204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 37659204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 37669204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests ASSERT_NO_THROW. 37679204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(AssertionTest, ASSERT_NO_THROW) { 3768ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan ASSERT_NO_THROW(ThrowNothing()); 37699204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()), 3770ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowAnInteger() doesn't throw an exception." 37719204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "\n Actual: it throws."); 37729204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 37739204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 37749204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests ASSERT_ANY_THROW. 37759204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(AssertionTest, ASSERT_ANY_THROW) { 37769204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ASSERT_ANY_THROW(ThrowAnInteger()); 3777ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_FATAL_FAILURE( 3778ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan ASSERT_ANY_THROW(ThrowNothing()), 3779ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowNothing() throws an exception.\n" 3780ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan " Actual: it doesn't."); 37819204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 37829204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 37839204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 37849204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 37854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Makes sure we deal with the precedence of <<. This test should 37864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// compile. 37874b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, AssertPrecedence) { 37884b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1 < 2, true); 37895e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan bool false_value = false; 37905e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan ASSERT_EQ(true && false_value, false); 37914b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A subroutine used by the following test. 37944b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestEq1(int x) { 37954b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, x); 37964b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 37974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 37984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests calling a test subroutine that's not part of a fixture. 37994b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, NonFixtureSubroutine) { 38004b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(TestEq1(2), 38014b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: x"); 38024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// An uncopyable class. 38054b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Uncopyable { 38064b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 38077de3401f5f8c2a61476a3623e9802f973764fc27zhanyong.wan explicit Uncopyable(int a_value) : value_(a_value) {} 38084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38094b6829f0d28990dd645e16386eb226d0f10c8731shiqian int value() const { return value_; } 38104b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool operator==(const Uncopyable& rhs) const { 38114b6829f0d28990dd645e16386eb226d0f10c8731shiqian return value() == rhs.value(); 38124b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 38134b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 38144b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This constructor deliberately has no implementation, as we don't 38154b6829f0d28990dd645e16386eb226d0f10c8731shiqian // want this class to be copyable. 38164b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable(const Uncopyable&); // NOLINT 38174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38184b6829f0d28990dd645e16386eb226d0f10c8731shiqian int value_; 38194b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 38204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38214b6829f0d28990dd645e16386eb226d0f10c8731shiqian::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) { 38224b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << value.value(); 38234b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38254b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38264b6829f0d28990dd645e16386eb226d0f10c8731shiqianbool IsPositiveUncopyable(const Uncopyable& x) { 38274b6829f0d28990dd645e16386eb226d0f10c8731shiqian return x.value() > 0; 38284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A subroutine used by the following test. 38314b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestAssertNonPositive() { 38324b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable y(-1); 38334b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED1(IsPositiveUncopyable, y); 38344b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A subroutine used by the following test. 38364b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestAssertEqualsUncopyable() { 38374b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable x(5); 38384b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable y(-1); 38394b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(x, y); 38404b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that uncopyable objects can be used in assertions. 38434b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, AssertWorksWithUncopyableObject) { 38444b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable x(5); 38454b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_PRED1(IsPositiveUncopyable, x); 38464b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(x, x); 38474b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(TestAssertNonPositive(), 38484b6829f0d28990dd645e16386eb226d0f10c8731shiqian "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 38494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(), 38504b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 38514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38534b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that uncopyable objects can be used in expects. 38544b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, ExpectWorksWithUncopyableObject) { 38554b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable x(5); 38564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_PRED1(IsPositiveUncopyable, x); 38574b6829f0d28990dd645e16386eb226d0f10c8731shiqian Uncopyable y(-1); 38584b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y), 38594b6829f0d28990dd645e16386eb226d0f10c8731shiqian "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 38604b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(x, x); 38614b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), 38624b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 38634b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 38644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3865739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wanenum NamedEnum { 3866739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan kE1 = 0, 386766d8d6b9c4e8af839780a7241e596eaee5ae1956zhanyong.wan kE2 = 1 3868739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan}; 3869739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan 3870739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wanTEST(AssertionTest, NamedEnum) { 3871739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_EQ(kE1, kE1); 3872739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_LT(kE1, kE2); 3873739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0"); 3874739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1"); 3875739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan} 38764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The version of gcc used in XCode 2.2 has a bug and doesn't allow 3878efa2fc7fd8a71afd54841b780829ce57cc487938zhanyong.wan// anonymous enums in assertions. Therefore the following test is not 3879efa2fc7fd8a71afd54841b780829ce57cc487938zhanyong.wan// done on Mac. 3880c2df1529d41617b516a4d89241940433b03f10aazhanyong.wan// Sun Studio and HP aCC also reject this code. 3881c2df1529d41617b516a4d89241940433b03f10aazhanyong.wan#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC) 38824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 38834b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using assertions with anonymous enums. 38844b6829f0d28990dd645e16386eb226d0f10c8731shiqianenum { 3885739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan kCaseA = -1, 3886733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3887733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_OS_LINUX 3888733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 38894b6829f0d28990dd645e16386eb226d0f10c8731shiqian // We want to test the case where the size of the anonymous enum is 38904b6829f0d28990dd645e16386eb226d0f10c8731shiqian // larger than sizeof(int), to make sure our implementation of the 38914b6829f0d28990dd645e16386eb226d0f10c8731shiqian // assertions doesn't truncate the enums. However, MSVC 38924b6829f0d28990dd645e16386eb226d0f10c8731shiqian // (incorrectly) doesn't allow an enum value to exceed the range of 38934b6829f0d28990dd645e16386eb226d0f10c8731shiqian // an int, so this has to be conditionally compiled. 38944b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 3895739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan // On Linux, kCaseB and kCaseA have the same value when truncated to 38964b6829f0d28990dd645e16386eb226d0f10c8731shiqian // int size. We want to test whether this will confuse the 38974b6829f0d28990dd645e16386eb226d0f10c8731shiqian // assertions. 3898739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan kCaseB = testing::internal::kMaxBiggestInt, 3899733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3900733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# else 3901733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3902739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan kCaseB = INT_MAX, 3903733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3904733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_OS_LINUX 3905733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3906e5c597132926ef2742ea7d89076117b9ae22b117vladlosev kCaseC = 42 39074b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 39084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39094b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionTest, AnonymousEnum) { 3910733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_OS_LINUX 3911733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3912739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB)); 3913733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 3914733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_OS_LINUX 39154b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3916739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_EQ(kCaseA, kCaseA); 3917739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_NE(kCaseA, kCaseB); 3918739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_LT(kCaseA, kCaseB); 3919739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_LE(kCaseA, kCaseB); 3920739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_GT(kCaseB, kCaseA); 3921739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_GE(kCaseA, kCaseA); 3922739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB), 3923739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan "(kCaseA) >= (kCaseB)"); 3924739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC), 3925739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan "-1 vs 42"); 3926739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan 3927739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_EQ(kCaseA, kCaseA); 3928739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_NE(kCaseA, kCaseB); 3929739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_LT(kCaseA, kCaseB); 3930739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_LE(kCaseA, kCaseB); 3931739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_GT(kCaseB, kCaseA); 3932739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan ASSERT_GE(kCaseA, kCaseA); 3933ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan 3934ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan# ifndef __BORLANDC__ 3935ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan 3936ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan // ICE's in C++Builder. 3937739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB), 3938739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan "Value of: kCaseB"); 3939739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 3940739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan "Actual: 42"); 3941ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan# endif 3942ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan 3943739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 3944739d30448cd8477c7c8802d41d4e0d969a9490dezhanyong.wan "Which is: -1"); 39454b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3947673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev#endif // !GTEST_OS_MAC && !defined(__SUNPRO_CC) 39484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39494cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_OS_WINDOWS 39504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39514b6829f0d28990dd645e16386eb226d0f10c8731shiqianstatic HRESULT UnexpectedHRESULTFailure() { 39524b6829f0d28990dd645e16386eb226d0f10c8731shiqian return E_UNEXPECTED; 39534b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39554b6829f0d28990dd645e16386eb226d0f10c8731shiqianstatic HRESULT OkHRESULTSuccess() { 39564b6829f0d28990dd645e16386eb226d0f10c8731shiqian return S_OK; 39574b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39584b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39594b6829f0d28990dd645e16386eb226d0f10c8731shiqianstatic HRESULT FalseHRESULTSuccess() { 39604b6829f0d28990dd645e16386eb226d0f10c8731shiqian return S_FALSE; 39614b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// HRESULT assertion tests test both zero and non-zero 39644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// success codes as well as failure message for each. 39654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 39664b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Windows CE doesn't support message texts. 39674b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) { 39684b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_SUCCEEDED(S_OK); 39694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_SUCCEEDED(S_FALSE); 39704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39714b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 3972afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 3973afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian " Actual: 0x8000FFFF"); 39744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39764b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) { 39774b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_SUCCEEDED(S_OK); 39784b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_SUCCEEDED(S_FALSE); 39794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 3981afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 3982afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian " Actual: 0x8000FFFF"); 39834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39854b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) { 39864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_FAILED(E_UNEXPECTED); 39874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()), 3989afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (OkHRESULTSuccess()) fails.\n" 39903b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com " Actual: 0x0"); 39914b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()), 3992afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (FalseHRESULTSuccess()) fails.\n" 39933b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com " Actual: 0x1"); 39944b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 39954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 39964b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) { 39974b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_FAILED(E_UNEXPECTED); 39984b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3999733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# ifndef __BORLANDC__ 4000733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 400198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // ICE's in C++Builder 2007 and 2009. 40024b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()), 4003afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (OkHRESULTSuccess()) fails.\n" 40043b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com " Actual: 0x0"); 4005733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif 4006733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 40074b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()), 4008afebcbd73013bbaf27147b285ef24ffef2046ea6shiqian "Expected: (FalseHRESULTSuccess()) fails.\n" 40093b8388d9490a64a47ed8cbdab2021935b1b2c76ckosak@google.com " Actual: 0x1"); 40104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 40114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 40124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that streaming to the HRESULT macros works. 40134b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(HRESULTAssertionTest, Streaming) { 40144b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 40154b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 40164b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 40174b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 40184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 40194b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE( 40204b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 40214b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 40224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4023733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# ifndef __BORLANDC__ 4024733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 402598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan // ICE's in C++Builder 2007 and 2009. 40264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE( 40274b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 40284b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 4029733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif 40304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 40314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE( 40324b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_HRESULT_FAILED(S_OK) << "expected failure", 40334b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 40344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 40354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE( 40364b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_HRESULT_FAILED(S_OK) << "expected failure", 40374b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 40384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 40394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 40404cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // GTEST_OS_WINDOWS 40414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 404298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 404398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Silences warnings: "Condition is always true", "Unreachable code" 4044733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option push -w-ccc -w-rch 404598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 404698efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 40474b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the assertion macros behave like single statements. 4048e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) { 4049f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 40504b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(false) << "This should never be executed; " 40514b6829f0d28990dd645e16386eb226d0f10c8731shiqian "It's a compilation test only."; 40524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4053f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysTrue()) 40544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(false); 40554b6829f0d28990dd645e16386eb226d0f10c8731shiqian else 40564e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 40574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4058f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 40594b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_LT(1, 3); 40604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4061f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 40624e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 40634b6829f0d28990dd645e16386eb226d0f10c8731shiqian else 40644b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GT(3, 2) << ""; 4065e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 40669204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 40679204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 4068e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// Tests that the compiler will not complain about unreachable code in the 4069e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros. 4070e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wanTEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) { 4071e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan int n = 0; 4072e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 4073e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_THROW(throw 1, int); 4074e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), ""); 4075e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), ""); 4076e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_NO_THROW(n++); 4077e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), ""); 4078e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_ANY_THROW(throw 1); 4079e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), ""); 4080e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan} 4081e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 4082e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) { 4083f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 4084ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_THROW(ThrowNothing(), bool); 40859204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 4086f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysTrue()) 40879204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_THROW(ThrowAnInteger(), int); 40889204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian else 40894e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 40909204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 4091f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 40929204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NO_THROW(ThrowAnInteger()); 40939204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 4094f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysTrue()) 4095ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NO_THROW(ThrowNothing()); 40969204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian else 40974e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 40989204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 4099f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 4100ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_ANY_THROW(ThrowNothing()); 41019204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 4102f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysTrue()) 41039204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_ANY_THROW(ThrowAnInteger()); 41049204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian else 41054e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 4106e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 41079204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 4108e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 4109e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) { 4110f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 4111e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. " 4112e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian << "It's a compilation test only."; 4113e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian else 41144e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 4115e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 4116f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 4117e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_NO_FATAL_FAILURE(FAIL()) << ""; 4118e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian else 41194e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 4120e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 4121f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysTrue()) 4122e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NO_FATAL_FAILURE(SUCCEED()); 4123e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian else 41244e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 4125e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 4126f6d087b78d230d875bf5d8281112662795044680zhanyong.wan if (AlwaysFalse()) 41274e7e2fcd7ac837bf81d8f120a9a30785d83b3897zhanyong.wan ; // NOLINT 4128e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian else 4129e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ASSERT_NO_FATAL_FAILURE(SUCCEED()); 41304b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 41314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the assertion macros work well with switch statements. 41334b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(AssertionSyntaxTest, WorksWithSwitch) { 41344b6829f0d28990dd645e16386eb226d0f10c8731shiqian switch (0) { 41354b6829f0d28990dd645e16386eb226d0f10c8731shiqian case 1: 41364b6829f0d28990dd645e16386eb226d0f10c8731shiqian break; 41374b6829f0d28990dd645e16386eb226d0f10c8731shiqian default: 41384b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(true); 41394b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 41404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41414b6829f0d28990dd645e16386eb226d0f10c8731shiqian switch (0) 41424b6829f0d28990dd645e16386eb226d0f10c8731shiqian case 0: 41434b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case"; 41444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Binary assertions are implemented using a different code path 41464b6829f0d28990dd645e16386eb226d0f10c8731shiqian // than the Boolean assertions. Hence we test them separately. 41474b6829f0d28990dd645e16386eb226d0f10c8731shiqian switch (0) { 41484b6829f0d28990dd645e16386eb226d0f10c8731shiqian case 1: 41494b6829f0d28990dd645e16386eb226d0f10c8731shiqian default: 41504b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler"; 41514b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 41524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41534b6829f0d28990dd645e16386eb226d0f10c8731shiqian switch (0) 41544b6829f0d28990dd645e16386eb226d0f10c8731shiqian case 0: 41554b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NE(1, 2); 41564b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 41574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41589204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 41599204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 41609204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianvoid ThrowAString() { 416103c314931649a999b0cf5deb0a434a1009157416jgm@google.com throw "std::string"; 41629204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 41639204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 41649204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Test that the exception assertion macros compile and work with const 41659204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// type qualifier. 41669204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(AssertionSyntaxTest, WorksWithConst) { 41679204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ASSERT_THROW(ThrowAString(), const char*); 41689204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 41699204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_THROW(ThrowAString(), const char*); 41709204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 41719204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 41729204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 41739204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 41744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace 41754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41764b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace testing { 41774b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test tracks SUCCEED*. 41794b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SuccessfulAssertionTest, SUCCEED) { 41804b6829f0d28990dd645e16386eb226d0f10c8731shiqian SUCCEED(); 41814b6829f0d28990dd645e16386eb226d0f10c8731shiqian SUCCEED() << "OK"; 41821cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count()); 41834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 41844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test doesn't track successful EXPECT_*. 41864b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SuccessfulAssertionTest, EXPECT) { 41874b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(true); 41881cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41894b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 41904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test doesn't track successful EXPECT_STR*. 41924b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SuccessfulAssertionTest, EXPECT_STR) { 41934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("", ""); 41941cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41954b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 41964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 41974b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test doesn't track successful ASSERT_*. 41984b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SuccessfulAssertionTest, ASSERT) { 41994b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(true); 42001cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 42014b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 42024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 42034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test doesn't track successful ASSERT_STR*. 42044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SuccessfulAssertionTest, ASSERT_STR) { 42054b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ("", ""); 42061cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 42074b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 42084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 42094b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace testing 42104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 42114b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace { 42124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 42137a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests the message streaming variation of assertions. 42147a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42157a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, EXPECT) { 42167a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_EQ(1, 1) << "This should succeed."; 42177a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << "Expected failure #1.", 42187a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #1"); 42197a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_LE(1, 2) << "This should succeed."; 42207a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << "Expected failure #2.", 42217a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #2."); 42227a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_GE(1, 0) << "This should succeed."; 42237a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << "Expected failure #3.", 42247a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #3."); 42257a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42267a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_STREQ("1", "1") << "This should succeed."; 42277a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("1", "1") << "Expected failure #4.", 42287a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #4."); 42297a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_STRCASEEQ("a", "A") << "This should succeed."; 42307a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("a", "A") << "Expected failure #5.", 42317a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #5."); 42327a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42337a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FLOAT_EQ(1, 1) << "This should succeed."; 42347a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << "Expected failure #6.", 42357a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure #6."); 42367a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NEAR(1, 1.1, 0.2) << "This should succeed."; 42377a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42387a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42397a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, ASSERT) { 42407a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_EQ(1, 1) << "This should succeed."; 42417a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_NE(1, 2) << "This should succeed."; 42427a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_LE(1, 2) << "This should succeed."; 42437a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_LT(1, 2) << "This should succeed."; 42447a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_GE(1, 0) << "This should succeed."; 42457a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << "Expected failure.", 42467a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure."); 42477a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42487a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42497a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, ASSERT_STR) { 42507a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_STREQ("1", "1") << "This should succeed."; 42517a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_STRNE("1", "2") << "This should succeed."; 42527a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_STRCASEEQ("a", "A") << "This should succeed."; 42537a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("a", "A") << "Expected failure.", 42547a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expected failure."); 42557a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42567a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42577a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, ASSERT_FLOATING) { 42587a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_FLOAT_EQ(1, 1) << "This should succeed."; 42597a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_DOUBLE_EQ(1, 1) << "This should succeed."; 42607a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << "Expect failure.", // NOLINT 42617a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Expect failure."); 42627a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com // To work around a bug in gcc 2.95.0, there is intentionally no 42637a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com // space after the first comma in the previous statement. 42647a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42657a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42667a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests using ASSERT_FALSE with a streamed message. 42677a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, ASSERT_FALSE) { 42687a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_FALSE(false) << "This shouldn't fail."; 42697a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE({ // NOLINT 42707a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_FALSE(true) << "Expected failure: " << 2 << " > " << 1 42717a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com << " evaluates to " << true; 42727a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com }, "Expected failure"); 42737a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42747a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42757a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests using FAIL with a streamed message. 42767a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, FAIL) { 42777a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE(FAIL() << 0, 42787a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "0"); 42797a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42807a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42817a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests using SUCCEED with a streamed message. 42827a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, SUCCEED) { 42837a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com SUCCEED() << "Success == " << 1; 42847a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42857a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42867a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests using ASSERT_TRUE with a streamed message. 42877a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, ASSERT_TRUE) { 42887a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_TRUE(true) << "This should succeed."; 42897a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_TRUE(true) << true; 42907a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE({ // NOLINT 42917a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_TRUE(false) << static_cast<const char *>(NULL) 42927a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com << static_cast<char *>(NULL); 42937a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com }, "(null)(null)"); 42947a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 42957a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 42967a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com#if GTEST_OS_WINDOWS 42977a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests using wide strings in assertion messages. 42987a574c99ea1d474f8ec5f040deba54169120f063jgm@google.comTEST(AssertionWithMessageTest, WideStringMessage) { 42997a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE({ // NOLINT 43007a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_TRUE(false) << L"This failure is expected.\x8119"; 43017a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com }, "This failure is expected."); 43027a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FATAL_FAILURE({ // NOLINT 43037a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ASSERT_EQ(1, 2) << "This failure is " 43047a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com << L"expected too.\x8120"; 43057a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com }, "This failure is expected too."); 43067a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com} 43077a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com#endif // GTEST_OS_WINDOWS 43087a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com 43094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_TRUE. 43104b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_TRUE) { 43117a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_TRUE(true) << "Intentional success"; 43127a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #1.", 43137a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Intentional failure #1."); 43147a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #2.", 43157a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Intentional failure #2."); 43164b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(2 > 1); // NOLINT 43174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1), 43184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 2 < 1\n" 43194b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: false\n" 43204b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: true"); 43214b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3), 43224b6829f0d28990dd645e16386eb226d0f10c8731shiqian "2 > 3"); 43234b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 43244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4325fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult. 4326fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(ExpectTest, ExpectTrueWithAssertionResult) { 4327fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_TRUE(ResultIsEven(2)); 4328fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)), 4329fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEven(3)\n" 4330fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: false (3 is odd)\n" 4331fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: true"); 4332fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_TRUE(ResultIsEvenNoExplanation(2)); 4333fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)), 4334fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEvenNoExplanation(3)\n" 4335fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: false (3 is odd)\n" 4336fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: true"); 4337fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 4338fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 43397a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// Tests EXPECT_FALSE with a streamed message. 43404b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_FALSE) { 43414b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(2 < 1); // NOLINT 43427a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_FALSE(false) << "Intentional success"; 43437a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #1.", 43447a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Intentional failure #1."); 43457a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #2.", 43467a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Intentional failure #2."); 43474b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1), 43484b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 2 > 1\n" 43494b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: true\n" 43504b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: false"); 43514b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3), 43524b6829f0d28990dd645e16386eb226d0f10c8731shiqian "2 < 3"); 43534b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 43544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4355fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult. 4356fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(ExpectTest, ExpectFalseWithAssertionResult) { 4357fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(ResultIsEven(3)); 4358fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)), 4359fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEven(2)\n" 4360fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: true (2 is even)\n" 4361fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: false"); 4362fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(ResultIsEvenNoExplanation(3)); 4363fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)), 4364fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Value of: ResultIsEvenNoExplanation(2)\n" 4365fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev " Actual: true\n" 4366fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev "Expected: false"); 4367fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 4368fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 436998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 437098efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Restores warnings after previous "#pragma option push" supressed them 4371733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option pop 437298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 437398efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 43744b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_EQ. 43754b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_EQ) { 43764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(5, 2 + 3); 43774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3), 43784b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: 2*3\n" 43794b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: 6\n" 43804b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 5"); 43814b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3), 43824b6829f0d28990dd645e16386eb226d0f10c8731shiqian "2 - 3"); 43834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 43844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 43854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using EXPECT_EQ on double values. The purpose is to make 43864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// sure that the specialization we did for integer and anonymous enums 43874b6829f0d28990dd645e16386eb226d0f10c8731shiqian// isn't used for double arguments. 43884b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_EQ_Double) { 43894b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 43904b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(5.6, 5.6); 43914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 43924b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 43934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2), 43944b6829f0d28990dd645e16386eb226d0f10c8731shiqian "5.1"); 43954b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 43964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 43975147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#if GTEST_CAN_COMPARE_NULL 43984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_EQ(NULL, pointer). 43994b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_EQ_NULL) { 44004b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 44014b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* p = NULL; 44025e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan // Some older GCC versions may issue a spurious warning in this or the next 44039644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // assertion statement. This warning should not be suppressed with 44049644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // static_cast since the test verifies the ability to use bare NULL as the 44059644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan // expected parameter to the macro. 44064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(NULL, p); 44074b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44084b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 44094b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n = 0; 44104b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n), 44114b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: &n\n"); 44124b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44135147b45584b1a782f016a59fdd251ce3810dc1c4vladlosev#endif // GTEST_CAN_COMPARE_NULL 44144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be 44164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// treated as a null pointer by the compiler, we need to make sure 44174b6829f0d28990dd645e16386eb226d0f10c8731shiqian// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as 44184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// EXPECT_EQ(static_cast<void*>(NULL), non_pointer). 44194b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_EQ_0) { 44204b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n = 0; 44214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44224b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A success. 44234b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(0, n); 44244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44254b6829f0d28990dd645e16386eb226d0f10c8731shiqian // A failure. 44264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6), 44274b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: 0"); 44284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_NE. 44314b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_NE) { 44324b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NE(6, 7); 44334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44344b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'), 44354b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: ('a') != ('a'), " 44364b6829f0d28990dd645e16386eb226d0f10c8731shiqian "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 44374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2), 44384b6829f0d28990dd645e16386eb226d0f10c8731shiqian "2"); 44394b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p0 = NULL; 44404b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0), 44414b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p0"); 44424b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Only way to get the Nokia compiler to compile the cast 44434b6829f0d28990dd645e16386eb226d0f10c8731shiqian // is to have a separate void* variable first. Putting 44444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the two casts on the same line doesn't work, neither does 44454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // a direct C-style to char*. 44464b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv1 = (void*)0x1234; // NOLINT 44474b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p1 = reinterpret_cast<char*>(pv1); 44484b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1), 44494b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p1"); 44504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_LE. 44534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_LE) { 44544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_LE(2, 3); 44554b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_LE(2, 2); 44564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0), 44574b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) <= (0), actual: 2 vs 0"); 44584b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9), 44594b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(1.1) <= (0.9)"); 44604b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_LT. 44634b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_LT) { 44644b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_LT(2, 3); 44654b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2), 44664b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) < (2), actual: 2 vs 2"); 44674b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1), 44684b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(2) < (1)"); 44694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_GE. 44724b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_GE) { 44734b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GE(2, 1); 44744b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GE(2, 2); 44754b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3), 44764b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) >= (3), actual: 2 vs 3"); 44774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1), 44784b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(0.9) >= (1.1)"); 44794b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44814b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests EXPECT_GT. 44824b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, EXPECT_GT) { 44834b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GT(2, 1); 44844b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2), 44854b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: (2) > (2), actual: 2 vs 2"); 44864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3), 44874b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(2) > (3)"); 44884b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 44894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 44909204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 44919204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 44929204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests EXPECT_THROW. 44939204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(ExpectTest, EXPECT_THROW) { 44949204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_THROW(ThrowAnInteger(), int); 44959204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool), 4496ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowAnInteger() throws an exception of " 44979204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "type bool.\n Actual: it throws a different type."); 4498ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NONFATAL_FAILURE( 4499ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_THROW(ThrowNothing(), bool), 4500ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowNothing() throws an exception of type bool.\n" 4501ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan " Actual: it throws nothing."); 45029204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 45039204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 45049204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests EXPECT_NO_THROW. 45059204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(ExpectTest, EXPECT_NO_THROW) { 4506ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NO_THROW(ThrowNothing()); 45079204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()), 4508ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowAnInteger() doesn't throw an " 45099204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "exception.\n Actual: it throws."); 45109204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 45119204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 45129204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian// Tests EXPECT_ANY_THROW. 45139204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(ExpectTest, EXPECT_ANY_THROW) { 45149204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_ANY_THROW(ThrowAnInteger()); 4515ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NONFATAL_FAILURE( 4516ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_ANY_THROW(ThrowNothing()), 4517ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan "Expected: ThrowNothing() throws an exception.\n" 4518ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan " Actual: it doesn't."); 45199204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 45209204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 45219204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 45229204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 45234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Make sure we deal with the precedence of <<. 45244b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectTest, ExpectPrecedence) { 45254b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1 < 2, true); 45264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false), 45274b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: true && false"); 45284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the StreamableToString() function. 45324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using StreamableToString() on a scalar. 45344b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableToStringTest, Scalar) { 45354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("5", StreamableToString(5).c_str()); 45364b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using StreamableToString() on a non-char pointer. 45394b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableToStringTest, Pointer) { 45404b6829f0d28990dd645e16386eb226d0f10c8731shiqian int n = 0; 45414b6829f0d28990dd645e16386eb226d0f10c8731shiqian int* p = &n; 45424b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE("(null)", StreamableToString(p).c_str()); 45434b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using StreamableToString() on a NULL non-char pointer. 45464b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableToStringTest, NullPointer) { 45474b6829f0d28990dd645e16386eb226d0f10c8731shiqian int* p = NULL; 45484b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 45494b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using StreamableToString() on a C string. 45524b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableToStringTest, CString) { 45534b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("Foo", StreamableToString("Foo").c_str()); 45544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45564b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using StreamableToString() on a NULL C string. 45574b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableToStringTest, NullCString) { 45584b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* p = NULL; 45594b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 45604b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using streamable values as assertion messages. 45634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using std::string as an assertion message. 45654b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, string) { 45664b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const std::string str( 45674b6829f0d28990dd645e16386eb226d0f10c8731shiqian "This failure message is a std::string, and is expected."); 45684b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << str, 45694b6829f0d28990dd645e16386eb226d0f10c8731shiqian str.c_str()); 45704b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that we can output strings containing embedded NULs. 45734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Limited to Linux because we can only do this with std::string's. 45744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, stringWithEmbeddedNUL) { 45754b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char char_array_with_nul[] = 45764b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Here's a NUL\0 and some more string"; 45774b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const std::string string_with_nul(char_array_with_nul, 45784b6829f0d28990dd645e16386eb226d0f10c8731shiqian sizeof(char_array_with_nul) 45794b6829f0d28990dd645e16386eb226d0f10c8731shiqian - 1); // drops the trailing NUL 45804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << string_with_nul, 45814b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Here's a NUL\\0 and some more string"); 45824b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45844b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that we can output a NUL char. 45854b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, NULChar) { 45864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 45874b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "A NUL" << '\0' << " and some more string"; 45884b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "A NUL\\0 and some more string"); 45894b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using int as an assertion message. 45924b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, int) { 45934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << 900913, 45944b6829f0d28990dd645e16386eb226d0f10c8731shiqian "900913"); 45954b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 45964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 45974b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using NULL char pointer as an assertion message. 45984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 45994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// In MSVC, streaming a NULL char * causes access violation. Google Test 46004b6829f0d28990dd645e16386eb226d0f10c8731shiqian// implemented a workaround (substituting "(null)" for NULL). This 46014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tests whether the workaround works. 46024b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, NullCharPtr) { 46034b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL), 46044b6829f0d28990dd645e16386eb226d0f10c8731shiqian "(null)"); 46054b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that basic IO manipulators (endl, ends, and flush) can be 46084b6829f0d28990dd645e16386eb226d0f10c8731shiqian// streamed to testing::Message. 46094b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamableTest, BasicIoManip) { 46104b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 46114b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Line 1." << std::endl 46124b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "A NUL char " << std::ends << std::flush << " in line 2."; 46134b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Line 1.\nA NUL char \\0 in line 2."); 46144b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46154b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the macros that haven't been covered so far. 46174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46184b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid AddFailureHelper(bool* aborted) { 46194b6829f0d28990dd645e16386eb226d0f10c8731shiqian *aborted = true; 46207a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ADD_FAILURE() << "Intentional failure."; 46214b6829f0d28990dd645e16386eb226d0f10c8731shiqian *aborted = false; 46224b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests ADD_FAILURE. 46254b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MacroTest, ADD_FAILURE) { 46264b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool aborted = true; 46274b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted), 46287a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com "Intentional failure."); 46294b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(aborted); 46304b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4632d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan// Tests ADD_FAILURE_AT. 4633d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wanTEST(MacroTest, ADD_FAILURE_AT) { 4634d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and 4635d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // the failure message contains the user-streamed part. 4636d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!"); 4637d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan 4638d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // Verifies that the user-streamed part is optional. 4639d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed"); 4640d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan 4641d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // Unfortunately, we cannot verify that the failure message contains 4642d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // the right file path and line number the same way, as 4643d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and 4644d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan // line number. Instead, we do that in gtest_output_test_.cc. 4645d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan} 4646d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan 46474b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests FAIL. 46484b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MacroTest, FAIL) { 46494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL(), 46504b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Failed"); 46514b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.", 46524b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Intentional failure."); 46534b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests SUCCEED 46564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MacroTest, SUCCEED) { 46574b6829f0d28990dd645e16386eb226d0f10c8731shiqian SUCCEED(); 46584b6829f0d28990dd645e16386eb226d0f10c8731shiqian SUCCEED() << "Explicit success."; 46594b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46614b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests for EXPECT_EQ() and ASSERT_EQ(). 46624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 46634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// These tests fail *intentionally*, s.t. the failure messages can be 46644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// generated and tested. 46654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 46664b6829f0d28990dd645e16386eb226d0f10c8731shiqian// We have different tests for different argument types. 46674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46684b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using bool values in {EXPECT|ASSERT}_EQ. 46694b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, Bool) { 46704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(true, true); 46715e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan EXPECT_FATAL_FAILURE({ 46725e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan bool false_value = false; 46735e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan ASSERT_EQ(false_value, true); 46745e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan }, "Value of: true"); 46754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using int values in {EXPECT|ASSERT}_EQ. 46784b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, Int) { 46794b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(32, 32); 46804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33), 46814b6829f0d28990dd645e16386eb226d0f10c8731shiqian "33"); 46824b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46844b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using time_t values in {EXPECT|ASSERT}_EQ. 46854b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, Time_T) { 46864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(static_cast<time_t>(0), 46874b6829f0d28990dd645e16386eb226d0f10c8731shiqian static_cast<time_t>(0)); 46884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0), 46894b6829f0d28990dd645e16386eb226d0f10c8731shiqian static_cast<time_t>(1234)), 46904b6829f0d28990dd645e16386eb226d0f10c8731shiqian "1234"); 46914b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 46924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 46934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using char values in {EXPECT|ASSERT}_EQ. 46944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, Char) { 46954b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ('z', 'z'); 46964b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char ch = 'b'; 46974b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch), 46984b6829f0d28990dd645e16386eb226d0f10c8731shiqian "ch"); 46994b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch), 47004b6829f0d28990dd645e16386eb226d0f10c8731shiqian "ch"); 47014b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 47024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using wchar_t values in {EXPECT|ASSERT}_EQ. 47044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, WideChar) { 47054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(L'b', L'b'); 47064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47074b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'), 47084b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: L'x'\n" 47094b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: L'x' (120, 0x78)\n" 47104b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Expected: L'\0'\n" 47114b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Which is: L'\0' (0, 0x0)"); 47124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47134b6829f0d28990dd645e16386eb226d0f10c8731shiqian static wchar_t wchar; 47144b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar = L'b'; 47154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar), 47164b6829f0d28990dd645e16386eb226d0f10c8731shiqian "wchar"); 4717b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan wchar = 0x8119; 4718b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar), 47194b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: wchar"); 47204b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 47214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using ::std::string values in {EXPECT|ASSERT}_EQ. 47234b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, StdString) { 47244b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a const char* to an std::string that has identical 47254b6829f0d28990dd645e16386eb226d0f10c8731shiqian // content. 47264b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ("Test", ::std::string("Test")); 47274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47284b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two identical std::strings. 47294b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const ::std::string str1("A * in the middle"); 47304b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const ::std::string str2(str1); 47314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(str1, str2); 47324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47334b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a const char* to an std::string that has different 47344b6829f0d28990dd645e16386eb226d0f10c8731shiqian // content 47354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")), 4736f2ac1ec8018f164081b8c002bcfbd88a4b52f65ezhanyong.wan "\"test\""); 47374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47384b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares an std::string to a char* that has different content. 47394b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p1 = const_cast<char*>("foo"); 47404b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1), 47414b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p1"); 47424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47434b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two std::strings that have different contents, one of 47444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // which having a NUL character in the middle. This should fail. 47454b6829f0d28990dd645e16386eb226d0f10c8731shiqian static ::std::string str3(str1); 47464b6829f0d28990dd645e16386eb226d0f10c8731shiqian str3.at(2) = '\0'; 47474b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3), 47484b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: str3\n" 47494b6829f0d28990dd645e16386eb226d0f10c8731shiqian " Actual: \"A \\0 in the middle\""); 47504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 47514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47524b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_STD_WSTRING 47534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47544b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ. 47554b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, StdWideString) { 47564b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two identical std::wstrings. 47574b6829f0d28990dd645e16386eb226d0f10c8731shiqian const ::std::wstring wstr1(L"A * in the middle"); 47584b6829f0d28990dd645e16386eb226d0f10c8731shiqian const ::std::wstring wstr2(wstr1); 47594b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(wstr1, wstr2); 47604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4761b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // Compares an std::wstring to a const wchar_t* that has identical 4762b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // content. 4763b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 4764b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119); 4765b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan 47664b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares an std::wstring to a const wchar_t* that has different 47674b6829f0d28990dd645e16386eb226d0f10c8731shiqian // content. 4768b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 47694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 4770b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120); 4771b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan }, "kTestX8120"); 47724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47734b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two std::wstrings that have different contents, one of 47744b6829f0d28990dd645e16386eb226d0f10c8731shiqian // which having a NUL character in the middle. 47754b6829f0d28990dd645e16386eb226d0f10c8731shiqian ::std::wstring wstr3(wstr1); 47764b6829f0d28990dd645e16386eb226d0f10c8731shiqian wstr3.at(2) = L'\0'; 47774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3), 47784b6829f0d28990dd645e16386eb226d0f10c8731shiqian "wstr3"); 47794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47804b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a wchar_t* to an std::wstring that has different 47814b6829f0d28990dd645e16386eb226d0f10c8731shiqian // content. 47824b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 47834b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar")); 47844b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 47854b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 47864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47874b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_STD_WSTRING 47884b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47894b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_GLOBAL_STRING 47904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using ::string values in {EXPECT|ASSERT}_EQ. 47914b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, GlobalString) { 47924b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a const char* to a ::string that has identical content. 47934b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ("Test", ::string("Test")); 47944b6829f0d28990dd645e16386eb226d0f10c8731shiqian 47954b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two identical ::strings. 47964b6829f0d28990dd645e16386eb226d0f10c8731shiqian const ::string str1("A * in the middle"); 47974b6829f0d28990dd645e16386eb226d0f10c8731shiqian const ::string str2(str1); 47984b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(str1, str2); 47994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48004b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a ::string to a const char* that has different content. 48014b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"), 48024b6829f0d28990dd645e16386eb226d0f10c8731shiqian "test"); 48034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48044b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two ::strings that have different contents, one of which 48054b6829f0d28990dd645e16386eb226d0f10c8731shiqian // having a NUL character in the middle. 48064b6829f0d28990dd645e16386eb226d0f10c8731shiqian ::string str3(str1); 48074b6829f0d28990dd645e16386eb226d0f10c8731shiqian str3.at(2) = '\0'; 48084b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3), 48094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "str3"); 48104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48114b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a ::string to a char* that has different content. 48124b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ // NOLINT 48134b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(::string("bar"), const_cast<char*>("foo")); 48144b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 48154b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 48164b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48174b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_GLOBAL_STRING 48184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48194b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_GLOBAL_WSTRING 48204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using ::wstring values in {EXPECT|ASSERT}_EQ. 48224b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, GlobalWideString) { 48234b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two identical ::wstrings. 48244b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const ::wstring wstr1(L"A * in the middle"); 48254b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const ::wstring wstr2(wstr1); 48264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(wstr1, wstr2); 48274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4828b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan // Compares a const wchar_t* to a ::wstring that has identical content. 4829b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 4830b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan ASSERT_EQ(kTestX8119, ::wstring(kTestX8119)); 4831b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan 48324b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a const wchar_t* to a ::wstring that has different 48334b6829f0d28990dd645e16386eb226d0f10c8731shiqian // content. 4834b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 48354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 4836b499e7bd16c3014d350967917dcdb85b19721af4zhanyong.wan EXPECT_EQ(kTestX8120, ::wstring(kTestX8119)); 48374b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Test\\x8119"); 48384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48394b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares a wchar_t* to a ::wstring that has different content. 48404b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar_t* const p1 = const_cast<wchar_t*>(L"foo"); 48414b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")), 48424b6829f0d28990dd645e16386eb226d0f10c8731shiqian "bar"); 48434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Compares two ::wstrings that have different contents, one of which 48454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // having a NUL character in the middle. 48464b6829f0d28990dd645e16386eb226d0f10c8731shiqian static ::wstring wstr3; 48474b6829f0d28990dd645e16386eb226d0f10c8731shiqian wstr3 = wstr1; 48484b6829f0d28990dd645e16386eb226d0f10c8731shiqian wstr3.at(2) = L'\0'; 48494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3), 48504b6829f0d28990dd645e16386eb226d0f10c8731shiqian "wstr3"); 48514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 48524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48534b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_GLOBAL_WSTRING 48544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using char pointers in {EXPECT|ASSERT}_EQ. 48564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, CharPointer) { 48574b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p0 = NULL; 48584b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Only way to get the Nokia compiler to compile the cast 48594b6829f0d28990dd645e16386eb226d0f10c8731shiqian // is to have a separate void* variable first. Putting 48604b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the two casts on the same line doesn't work, neither does 48614b6829f0d28990dd645e16386eb226d0f10c8731shiqian // a direct C-style to char*. 48624b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv1 = (void*)0x1234; // NOLINT 48634b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv2 = (void*)0xABC0; // NOLINT 48644b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p1 = reinterpret_cast<char*>(pv1); 48654b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p2 = reinterpret_cast<char*>(pv2); 48664b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(p1, p1); 48674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48684b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 48694b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: p2"); 48704b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 48714b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p2"); 48724b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234), 48734b6829f0d28990dd645e16386eb226d0f10c8731shiqian reinterpret_cast<char*>(0xABC0)), 48744b6829f0d28990dd645e16386eb226d0f10c8731shiqian "ABC0"); 48754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 48764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ. 48784b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, WideCharPointer) { 48794b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar_t* const p0 = NULL; 48804b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Only way to get the Nokia compiler to compile the cast 48814b6829f0d28990dd645e16386eb226d0f10c8731shiqian // is to have a separate void* variable first. Putting 48824b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the two casts on the same line doesn't work, neither does 48834b6829f0d28990dd645e16386eb226d0f10c8731shiqian // a direct C-style to char*. 48844b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv1 = (void*)0x1234; // NOLINT 48854b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv2 = (void*)0xABC0; // NOLINT 48864b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1); 48874b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2); 48884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(p0, p0); 48894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 48904b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 48914b6829f0d28990dd645e16386eb226d0f10c8731shiqian "Value of: p2"); 48924b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 48934b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p2"); 48944b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv3 = (void*)0x1234; // NOLINT 48954b6829f0d28990dd645e16386eb226d0f10c8731shiqian void* pv4 = (void*)0xABC0; // NOLINT 48964b6829f0d28990dd645e16386eb226d0f10c8731shiqian const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3); 48974b6829f0d28990dd645e16386eb226d0f10c8731shiqian const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4); 48984b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4), 48994b6829f0d28990dd645e16386eb226d0f10c8731shiqian "p4"); 49004b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 49014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using other types of pointers in {EXPECT|ASSERT}_EQ. 49034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(EqAssertionTest, OtherPointer) { 49044b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(static_cast<const int*>(NULL), 49054b6829f0d28990dd645e16386eb226d0f10c8731shiqian static_cast<const int*>(NULL)); 49064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL), 49074b6829f0d28990dd645e16386eb226d0f10c8731shiqian reinterpret_cast<const int*>(0x1234)), 49084b6829f0d28990dd645e16386eb226d0f10c8731shiqian "0x1234"); 49094b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 49104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 491139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan// A class that supports binary comparison operators but not streaming. 491239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wanclass UnprintableChar { 491339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan public: 491439dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan explicit UnprintableChar(char ch) : char_(ch) {} 491539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 491639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator==(const UnprintableChar& rhs) const { 491739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ == rhs.char_; 491839dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 491939dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator!=(const UnprintableChar& rhs) const { 492039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ != rhs.char_; 492139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 492239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator<(const UnprintableChar& rhs) const { 492339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ < rhs.char_; 492439dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 492539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator<=(const UnprintableChar& rhs) const { 492639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ <= rhs.char_; 492739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 492839dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator>(const UnprintableChar& rhs) const { 492939dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ > rhs.char_; 493039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 493139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan bool operator>=(const UnprintableChar& rhs) const { 493239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan return char_ >= rhs.char_; 493339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan } 493439dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 493539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan private: 493639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan char char_; 493739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan}; 493839dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 493939dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan// Tests that ASSERT_EQ() and friends don't require the arguments to 494039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan// be printable. 494139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wanTEST(ComparisonAssertionTest, AcceptsUnprintableArgs) { 494239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan const UnprintableChar x('x'), y('y'); 494339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan ASSERT_EQ(x, x); 494439dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NE(x, y); 494539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan ASSERT_LT(x, y); 494639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_LE(x, y); 494739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan ASSERT_GT(y, x); 494839dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_GE(x, x); 494939dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 495039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>"); 495139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>"); 495239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>"); 495339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>"); 495439dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>"); 495539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 495639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan // Code tested by EXPECT_FATAL_FAILURE cannot reference local 495739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan // variables, so we have to write UnprintableChar('x') instead of x. 4958ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ 4959ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan // ICE's in C++Builder. 496039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')), 496139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan "1-byte object <78>"); 496239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 496339dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan "1-byte object <78>"); 4964ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#endif 496539dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 496639dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan "1-byte object <79>"); 496739dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 496839dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan "1-byte object <78>"); 496939dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 497039dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan "1-byte object <79>"); 497139dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan} 497239dc95e495fd9f888bcd460c383a2594bf57429dzhanyong.wan 49734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the FRIEND_TEST macro. 49744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This class has a private member we want to test. We will test it 49764b6829f0d28990dd645e16386eb226d0f10c8731shiqian// both in a TEST and in a TEST_F. 49774b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Foo { 49784b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 49794b6829f0d28990dd645e16386eb226d0f10c8731shiqian Foo() {} 49804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49814b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 49824b6829f0d28990dd645e16386eb226d0f10c8731shiqian int Bar() const { return 1; } 49834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49844b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Declares the friend tests that can access the private member 49854b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Bar(). 49864b6829f0d28990dd645e16386eb226d0f10c8731shiqian FRIEND_TEST(FRIEND_TEST_Test, TEST); 49874b6829f0d28990dd645e16386eb226d0f10c8731shiqian FRIEND_TEST(FRIEND_TEST_Test2, TEST_F); 49884b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 49894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the FRIEND_TEST declaration allows a TEST to access a 49914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// class's private members. This should compile. 49924b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FRIEND_TEST_Test, TEST) { 49934b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, Foo().Bar()); 49944b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 49954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 49964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The fixture needed to test using FRIEND_TEST with TEST_F. 4997760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass FRIEND_TEST_Test2 : public Test { 49984b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 49994b6829f0d28990dd645e16386eb226d0f10c8731shiqian Foo foo; 50004b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 50014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that the FRIEND_TEST declaration allows a TEST_F to access a 50034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// class's private members. This should compile. 50044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FRIEND_TEST_Test2, TEST_F) { 50054b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, foo.Bar()); 50064b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 50074b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50084b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the life cycle of Test objects. 50094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The test fixture for testing the life cycle of Test objects. 50114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 50124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This class counts the number of live test objects that uses this 50134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// fixture. 5014760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass TestLifeCycleTest : public Test { 50154b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 50164b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Constructor. Increments the number of test objects that uses 50174b6829f0d28990dd645e16386eb226d0f10c8731shiqian // this fixture. 50184b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestLifeCycleTest() { count_++; } 50194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50204b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Destructor. Decrements the number of test objects that uses this 50214b6829f0d28990dd645e16386eb226d0f10c8731shiqian // fixture. 50224b6829f0d28990dd645e16386eb226d0f10c8731shiqian ~TestLifeCycleTest() { count_--; } 50234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50244b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Returns the number of live test objects that uses this fixture. 50254b6829f0d28990dd645e16386eb226d0f10c8731shiqian int count() const { return count_; } 50264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50274b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 50284b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int count_; 50294b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 50304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50314b6829f0d28990dd645e16386eb226d0f10c8731shiqianint TestLifeCycleTest::count_ = 0; 50324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the life cycle of test objects. 50344b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestLifeCycleTest, Test1) { 50354b6829f0d28990dd645e16386eb226d0f10c8731shiqian // There should be only one test object in this test case that's 50364b6829f0d28990dd645e16386eb226d0f10c8731shiqian // currently alive. 50374b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, count()); 50384b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 50394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the life cycle of test objects. 50414b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestLifeCycleTest, Test2) { 50424b6829f0d28990dd645e16386eb226d0f10c8731shiqian // After Test1 is done and Test2 is started, there should still be 50434b6829f0d28990dd645e16386eb226d0f10c8731shiqian // only one live test object, as the object for Test1 should've been 50444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // deleted. 50454b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, count()); 50464b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 50474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 50484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace 50494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5050fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests that the copy constructor works when it is NOT optimized away by 5051fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// the compiler. 5052fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) { 5053fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev // Checks that the copy constructor doesn't try to dereference NULL pointers 5054fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev // in the source object. 5055fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r1 = AssertionSuccess(); 5056fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r2 = r1; 5057fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev // The following line is added to prevent the compiler from optimizing 5058fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev // away the constructor call. 5059fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev r1 << "abc"; 5060fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5061fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r3 = r1; 5062fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1)); 5063fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("abc", r1.message()); 5064fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 5065fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5066fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// Tests that AssertionSuccess and AssertionFailure construct 5067fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev// AssertionResult objects as expected. 5068fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionResultTest, ConstructionWorks) { 5069fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r1 = AssertionSuccess(); 5070fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_TRUE(r1); 5071fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("", r1.message()); 5072fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5073fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r2 = AssertionSuccess() << "abc"; 5074fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_TRUE(r2); 5075fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("abc", r2.message()); 5076fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5077fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r3 = AssertionFailure(); 5078fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(r3); 5079fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("", r3.message()); 5080fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5081fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r4 = AssertionFailure() << "def"; 5082fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(r4); 5083fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("def", r4.message()); 5084fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5085fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r5 = AssertionFailure(Message() << "ghi"); 5086fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(r5); 5087fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("ghi", r5.message()); 5088fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 5089fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 50901287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev// Tests that the negation flips the predicate result but keeps the message. 5091fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionResultTest, NegationWorks) { 5092fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r1 = AssertionSuccess() << "abc"; 5093fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_FALSE(!r1); 5094fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("abc", (!r1).message()); 5095fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5096fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r2 = AssertionFailure() << "def"; 5097fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_TRUE(!r2); 5098fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("def", (!r2).message()); 5099fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 5100fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5101fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosevTEST(AssertionResultTest, StreamingWorks) { 5102fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev AssertionResult r = AssertionSuccess(); 5103fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev r << "abc" << 'd' << 0 << true; 5104fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev EXPECT_STREQ("abcd0true", r.message()); 51051287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev} 51061287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev 51071287840af7b9efca823ad2fecb6d905f2c4a3acevladlosevTEST(AssertionResultTest, CanStreamOstreamManipulators) { 51081287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev AssertionResult r = AssertionSuccess(); 51091287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev r << "Data" << std::endl << std::flush << std::ends << "Will be visible"; 51101287840af7b9efca823ad2fecb6d905f2c4a3acevladlosev EXPECT_STREQ("Data\n\\0Will be visible", r.message()); 5111fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev} 5112fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev 5113f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com// The next test uses explicit conversion operators -- a C++11 feature. 5114f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com#if GTEST_LANG_CXX11 5115f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 5116f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comTEST(AssertionResultTest, ConstructibleFromContextuallyConvertibleToBool) { 5117f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com struct ExplicitlyConvertibleToBool { 5118f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com explicit operator bool() const { return value; } 5119f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com bool value; 5120f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com }; 5121f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com ExplicitlyConvertibleToBool v1 = {false}; 5122f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com ExplicitlyConvertibleToBool v2 = {true}; 5123f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com EXPECT_FALSE(v1); 5124f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com EXPECT_TRUE(v2); 5125f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com} 5126f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 5127f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com#endif // GTEST_LANG_CXX11 5128f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 5129f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comstruct ConvertibleToAssertionResult { 5130f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com operator AssertionResult() const { return AssertionResult(true); } 5131f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com}; 5132f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 5133f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.comTEST(AssertionResultTest, ConstructibleFromImplicitlyConvertible) { 5134f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com ConvertibleToAssertionResult obj; 5135f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com EXPECT_TRUE(obj); 5136f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com} 5137f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 51384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming a user type whose definition and operator << are 51394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// both in the global namespace. 51404b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Base { 51414b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 51427de3401f5f8c2a61476a3623e9802f973764fc27zhanyong.wan explicit Base(int an_x) : x_(an_x) {} 51434b6829f0d28990dd645e16386eb226d0f10c8731shiqian int x() const { return x_; } 51444b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 51454b6829f0d28990dd645e16386eb226d0f10c8731shiqian int x_; 51464b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 51474b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 51484b6829f0d28990dd645e16386eb226d0f10c8731shiqian const Base& val) { 51494b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << val.x(); 51504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51514b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 51524b6829f0d28990dd645e16386eb226d0f10c8731shiqian const Base* pointer) { 51534b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << "(" << pointer->x() << ")"; 51544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) { 5157760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 51584b6829f0d28990dd645e16386eb226d0f10c8731shiqian Base a(1); 51594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51604b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << a << &a; // Uses ::operator<<. 51614b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1(1)", msg.GetString().c_str()); 51624b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming a user type whose definition and operator<< are 51654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// both in an unnamed namespace. 51664b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace { 51674b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MyTypeInUnnamedNameSpace : public Base { 51684b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 51697de3401f5f8c2a61476a3623e9802f973764fc27zhanyong.wan explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {} 51704b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 51714b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 51724b6829f0d28990dd645e16386eb226d0f10c8731shiqian const MyTypeInUnnamedNameSpace& val) { 51734b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << val.x(); 51744b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51754b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 51764b6829f0d28990dd645e16386eb226d0f10c8731shiqian const MyTypeInUnnamedNameSpace* pointer) { 51774b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << "(" << pointer->x() << ")"; 51784b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51794b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace 51804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51814b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) { 5182760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 51834b6829f0d28990dd645e16386eb226d0f10c8731shiqian MyTypeInUnnamedNameSpace a(1); 51844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51854b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << a << &a; // Uses <unnamed_namespace>::operator<<. 51864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1(1)", msg.GetString().c_str()); 51874b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 51884b6829f0d28990dd645e16386eb226d0f10c8731shiqian 51894b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming a user type whose definition and operator<< are 51904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// both in a user namespace. 51914b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace namespace1 { 51924b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MyTypeInNameSpace1 : public Base { 51934b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 51947de3401f5f8c2a61476a3623e9802f973764fc27zhanyong.wan explicit MyTypeInNameSpace1(int an_x): Base(an_x) {} 51954b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 51964b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 51974b6829f0d28990dd645e16386eb226d0f10c8731shiqian const MyTypeInNameSpace1& val) { 51984b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << val.x(); 51994b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52004b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 52014b6829f0d28990dd645e16386eb226d0f10c8731shiqian const MyTypeInNameSpace1* pointer) { 52024b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << "(" << pointer->x() << ")"; 52034b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52044b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace namespace1 52054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52064b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, CanStreamUserTypeInUserNameSpace) { 5207760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 52084b6829f0d28990dd645e16386eb226d0f10c8731shiqian namespace1::MyTypeInNameSpace1 a(1); 52094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52104b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << a << &a; // Uses namespace1::operator<<. 52114b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1(1)", msg.GetString().c_str()); 52124b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming a user type whose definition is in a user namespace 52154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// but whose operator<< is in the global namespace. 52164b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace namespace2 { 52174b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MyTypeInNameSpace2 : public ::Base { 52184b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 52197de3401f5f8c2a61476a3623e9802f973764fc27zhanyong.wan explicit MyTypeInNameSpace2(int an_x): Base(an_x) {} 52204b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 52214b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace namespace2 52224b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 52234b6829f0d28990dd645e16386eb226d0f10c8731shiqian const namespace2::MyTypeInNameSpace2& val) { 52244b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << val.x(); 52254b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52264b6829f0d28990dd645e16386eb226d0f10c8731shiqianstd::ostream& operator<<(std::ostream& os, 52274b6829f0d28990dd645e16386eb226d0f10c8731shiqian const namespace2::MyTypeInNameSpace2* pointer) { 52284b6829f0d28990dd645e16386eb226d0f10c8731shiqian return os << "(" << pointer->x() << ")"; 52294b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52314b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) { 5232760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 52334b6829f0d28990dd645e16386eb226d0f10c8731shiqian namespace2::MyTypeInNameSpace2 a(1); 52344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52354b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << a << &a; // Uses ::operator<<. 52364b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("1(1)", msg.GetString().c_str()); 52374b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming NULL pointers to testing::Message. 52404b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, NullPointers) { 5241760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message msg; 52424b6829f0d28990dd645e16386eb226d0f10c8731shiqian char* const p1 = NULL; 52434b6829f0d28990dd645e16386eb226d0f10c8731shiqian unsigned char* const p2 = NULL; 52444b6829f0d28990dd645e16386eb226d0f10c8731shiqian int* p3 = NULL; 52454b6829f0d28990dd645e16386eb226d0f10c8731shiqian double* p4 = NULL; 52464b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool* p5 = NULL; 5247760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Message* p6 = NULL; 52484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52494b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg << p1 << p2 << p3 << p4 << p5 << p6; 52504b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ("(null)(null)(null)(null)(null)(null)", 52514b6829f0d28990dd645e16386eb226d0f10c8731shiqian msg.GetString().c_str()); 52524b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52544b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests streaming wide strings to testing::Message. 52554b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(MessageTest, WideStrings) { 52564b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Streams a NULL of type const wchar_t*. 52574b6829f0d28990dd645e16386eb226d0f10c8731shiqian const wchar_t* const_wstr = NULL; 52584b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("(null)", 52594b6829f0d28990dd645e16386eb226d0f10c8731shiqian (Message() << const_wstr).GetString().c_str()); 52604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52614b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Streams a NULL of type wchar_t*. 52624b6829f0d28990dd645e16386eb226d0f10c8731shiqian wchar_t* wstr = NULL; 52634b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("(null)", 52644b6829f0d28990dd645e16386eb226d0f10c8731shiqian (Message() << wstr).GetString().c_str()); 52654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52664b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Streams a non-NULL of type const wchar_t*. 52674b6829f0d28990dd645e16386eb226d0f10c8731shiqian const_wstr = L"abc\x8119"; 52684b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("abc\xe8\x84\x99", 52694b6829f0d28990dd645e16386eb226d0f10c8731shiqian (Message() << const_wstr).GetString().c_str()); 52704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52714b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Streams a non-NULL of type wchar_t*. 52724b6829f0d28990dd645e16386eb226d0f10c8731shiqian wstr = const_cast<wchar_t*>(const_wstr); 52734b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("abc\xe8\x84\x99", 52744b6829f0d28990dd645e16386eb226d0f10c8731shiqian (Message() << wstr).GetString().c_str()); 52754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 52764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52774b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This line tests that we can define tests in the testing namespace. 52794b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace testing { 52804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52814b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the TestInfo class. 52824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5283760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass TestInfoTest : public Test { 52844b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 5285b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan static const TestInfo* GetTestInfo(const char* test_name) { 5286b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan const TestCase* const test_case = GetUnitTestImpl()-> 5287b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan GetTestCase("TestInfoTest", "", NULL, NULL); 5288b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan 5289b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan for (int i = 0; i < test_case->total_test_count(); ++i) { 5290b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan const TestInfo* const test_info = test_case->GetTestInfo(i); 5291b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan if (strcmp(test_name, test_info->name()) == 0) 5292b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan return test_info; 5293b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan } 5294b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan return NULL; 52954b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 52964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52974b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const TestResult* GetTestResult( 5298760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian const TestInfo* test_info) { 52994b6829f0d28990dd645e16386eb226d0f10c8731shiqian return test_info->result(); 53004b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 53014b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 53024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53034b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests TestInfo::test_case_name() and TestInfo::name(). 53044b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestInfoTest, Names) { 5305b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan const TestInfo* const test_info = GetTestInfo("Names"); 53064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53074b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ("TestInfoTest", test_info->test_case_name()); 53084b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ("Names", test_info->name()); 53094b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 53104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests TestInfo::result(). 53124b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TestInfoTest, result) { 5313b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan const TestInfo* const test_info = GetTestInfo("result"); 53144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53154b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Initially, there is no TestPartResult for this test. 5316b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 53174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53184b6829f0d28990dd645e16386eb226d0f10c8731shiqian // After the previous assertion, there is still none. 5319b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 53204b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 53214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests setting up and tearing down a test case. 53234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5324760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass SetUpTestCaseTest : public Test { 53254b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 53264b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This will be called once before the first test in this test case 53274b6829f0d28990dd645e16386eb226d0f10c8731shiqian // is run. 53284b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void SetUpTestCase() { 53294b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("Setting up the test case . . .\n"); 53304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53314b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Initializes some shared resource. In this simple example, we 53324b6829f0d28990dd645e16386eb226d0f10c8731shiqian // just create a C string. More complex stuff can be done if 53334b6829f0d28990dd645e16386eb226d0f10c8731shiqian // desired. 53344b6829f0d28990dd645e16386eb226d0f10c8731shiqian shared_resource_ = "123"; 53354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53364b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Increments the number of test cases that have been set up. 53374b6829f0d28990dd645e16386eb226d0f10c8731shiqian counter_++; 53384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53394b6829f0d28990dd645e16386eb226d0f10c8731shiqian // SetUpTestCase() should be called only once. 53404b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, counter_); 53414b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 53424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53434b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This will be called once after the last test in this test case is 53444b6829f0d28990dd645e16386eb226d0f10c8731shiqian // run. 53454b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void TearDownTestCase() { 53464b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("Tearing down the test case . . .\n"); 53474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53484b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Decrements the number of test cases that have been set up. 53494b6829f0d28990dd645e16386eb226d0f10c8731shiqian counter_--; 53504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53514b6829f0d28990dd645e16386eb226d0f10c8731shiqian // TearDownTestCase() should be called only once. 53524b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(0, counter_); 53534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53544b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Cleans up the shared resource. 53554b6829f0d28990dd645e16386eb226d0f10c8731shiqian shared_resource_ = NULL; 53564b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 53574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53584b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This will be called before each test in this test case. 53594b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 53604b6829f0d28990dd645e16386eb226d0f10c8731shiqian // SetUpTestCase() should be called only once, so counter_ should 53614b6829f0d28990dd645e16386eb226d0f10c8731shiqian // always be 1. 53624b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, counter_); 53634b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 53644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53654b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Number of test cases that have been set up. 53664b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int counter_; 53674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53684b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Some resource to be shared by all tests in this test case. 53694b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const char* shared_resource_; 53704b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 53714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53724b6829f0d28990dd645e16386eb226d0f10c8731shiqianint SetUpTestCaseTest::counter_ = 0; 53734b6829f0d28990dd645e16386eb226d0f10c8731shiqianconst char* SetUpTestCaseTest::shared_resource_ = NULL; 53744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test that uses the shared resource. 53764b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SetUpTestCaseTest, Test1) { 53774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE(NULL, shared_resource_); 53784b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 53794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Another test that uses the shared resource. 53814b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(SetUpTestCaseTest, Test2) { 53824b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("123", shared_resource_); 53834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 53844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The InitGoogleTestTest test case tests testing::InitGoogleTest(). 53864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 53874b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The Flags struct stores a copy of all Google Test flags. 53884b6829f0d28990dd645e16386eb226d0f10c8731shiqianstruct Flags { 53894b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Constructs a Flags struct where each flag has its default value. 5390ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian Flags() : also_run_disabled_tests(false), 5391ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian break_on_failure(false), 53924b6829f0d28990dd645e16386eb226d0f10c8731shiqian catch_exceptions(false), 539321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian death_test_use_fork(false), 53944b6829f0d28990dd645e16386eb226d0f10c8731shiqian filter(""), 53954b6829f0d28990dd645e16386eb226d0f10c8731shiqian list_tests(false), 53964b6829f0d28990dd645e16386eb226d0f10c8731shiqian output(""), 539773ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan print_time(true), 53989b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan random_seed(0), 5399b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan repeat(1), 54009b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan shuffle(false), 5401ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev stack_trace_depth(kMaxStackTraceDepth), 5402c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan stream_result_to(""), 5403b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan throw_on_failure(false) {} 54044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54054b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Factory methods. 54064b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5407ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // Creates a Flags struct where the gtest_also_run_disabled_tests flag has 5408ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // the given value. 5409ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) { 5410ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian Flags flags; 5411ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian flags.also_run_disabled_tests = also_run_disabled_tests; 5412ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian return flags; 5413ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian } 5414ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 54154b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_break_on_failure flag has 54164b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the given value. 54174b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags BreakOnFailure(bool break_on_failure) { 54184b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54194b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.break_on_failure = break_on_failure; 54204b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54214b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54234b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_catch_exceptions flag has 54244b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the given value. 54254b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags CatchExceptions(bool catch_exceptions) { 54264b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54274b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.catch_exceptions = catch_exceptions; 54284b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54294b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 543121d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian // Creates a Flags struct where the gtest_death_test_use_fork flag has 543221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian // the given value. 543321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian static Flags DeathTestUseFork(bool death_test_use_fork) { 543421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian Flags flags; 543521d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian flags.death_test_use_fork = death_test_use_fork; 543621d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian return flags; 543721d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian } 543821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 54394b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_filter flag has the given 54404b6829f0d28990dd645e16386eb226d0f10c8731shiqian // value. 54414b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags Filter(const char* filter) { 54424b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54434b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.filter = filter; 54444b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54454b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54474b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_list_tests flag has the 54484b6829f0d28990dd645e16386eb226d0f10c8731shiqian // given value. 54494b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags ListTests(bool list_tests) { 54504b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54514b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.list_tests = list_tests; 54524b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54534b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54554b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_output flag has the given 54564b6829f0d28990dd645e16386eb226d0f10c8731shiqian // value. 54574b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags Output(const char* output) { 54584b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54594b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.output = output; 54604b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54614b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5463d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian // Creates a Flags struct where the gtest_print_time flag has the given 5464d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian // value. 5465d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian static Flags PrintTime(bool print_time) { 5466d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian Flags flags; 5467d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian flags.print_time = print_time; 5468d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian return flags; 5469d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian } 5470d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 54719b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // Creates a Flags struct where the gtest_random_seed flag has 54729b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // the given value. 54739b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan static Flags RandomSeed(Int32 random_seed) { 54749b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan Flags flags; 54759b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan flags.random_seed = random_seed; 54769b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan return flags; 54779b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan } 54789b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 54794b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Creates a Flags struct where the gtest_repeat flag has the given 54804b6829f0d28990dd645e16386eb226d0f10c8731shiqian // value. 54814b6829f0d28990dd645e16386eb226d0f10c8731shiqian static Flags Repeat(Int32 repeat) { 54824b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 54834b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.repeat = repeat; 54844b6829f0d28990dd645e16386eb226d0f10c8731shiqian return flags; 54854b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 54864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54879b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // Creates a Flags struct where the gtest_shuffle flag has 54889b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan // the given value. 54899b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan static Flags Shuffle(bool shuffle) { 54909b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan Flags flags; 54919b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan flags.shuffle = shuffle; 54929b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan return flags; 54939b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan } 54949b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 5495ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has 5496ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev // the given value. 5497ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev static Flags StackTraceDepth(Int32 stack_trace_depth) { 5498ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Flags flags; 5499ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev flags.stack_trace_depth = stack_trace_depth; 5500ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev return flags; 5501ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev } 5502ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 5503c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has 5504c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan // the given value. 5505c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan static Flags StreamResultTo(const char* stream_result_to) { 5506c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan Flags flags; 5507c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan flags.stream_result_to = stream_result_to; 5508c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan return flags; 5509c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan } 5510c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan 5511b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan // Creates a Flags struct where the gtest_throw_on_failure flag has 5512b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan // the given value. 5513b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan static Flags ThrowOnFailure(bool throw_on_failure) { 5514b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan Flags flags; 5515b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan flags.throw_on_failure = throw_on_failure; 5516b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan return flags; 5517b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan } 5518b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 55194b6829f0d28990dd645e16386eb226d0f10c8731shiqian // These fields store the flag values. 5520ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian bool also_run_disabled_tests; 55214b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool break_on_failure; 55224b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool catch_exceptions; 552321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian bool death_test_use_fork; 55244b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* filter; 55254b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool list_tests; 55264b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* output; 5527d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian bool print_time; 55289b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan Int32 random_seed; 55294b6829f0d28990dd645e16386eb226d0f10c8731shiqian Int32 repeat; 55309b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan bool shuffle; 5531ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Int32 stack_trace_depth; 5532c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan const char* stream_result_to; 5533b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan bool throw_on_failure; 55344b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 55354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 55364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Fixture for testing InitGoogleTest(). 5537760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass InitGoogleTestTest : public Test { 55384b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 55394b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Clears the flags before each test. 55404b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 5541ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian GTEST_FLAG(also_run_disabled_tests) = false; 55424b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(break_on_failure) = false; 55434b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(catch_exceptions) = false; 554421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian GTEST_FLAG(death_test_use_fork) = false; 55454b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(filter) = ""; 55464b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(list_tests) = false; 55474b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(output) = ""; 554873ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan GTEST_FLAG(print_time) = true; 55499b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(random_seed) = 0; 55504b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(repeat) = 1; 55519b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan GTEST_FLAG(shuffle) = false; 5552ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 5553c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan GTEST_FLAG(stream_result_to) = ""; 5554b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan GTEST_FLAG(throw_on_failure) = false; 55554b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 55564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 55574b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Asserts that two narrow or wide string arrays are equal. 55584b6829f0d28990dd645e16386eb226d0f10c8731shiqian template <typename CharType> 55594b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void AssertStringArrayEq(size_t size1, CharType** array1, 55604b6829f0d28990dd645e16386eb226d0f10c8731shiqian size_t size2, CharType** array2) { 55614b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(size1, size2) << " Array sizes different."; 55624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 55634b6829f0d28990dd645e16386eb226d0f10c8731shiqian for (size_t i = 0; i != size1; i++) { 55644b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i; 55654b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 55664b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 55674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 55684b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Verifies that the flag values match the expected values. 55694b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void CheckFlags(const Flags& expected) { 5570ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian EXPECT_EQ(expected.also_run_disabled_tests, 5571ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian GTEST_FLAG(also_run_disabled_tests)); 55724b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure)); 55734b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions)); 557421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork)); 55754b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str()); 55764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests)); 55774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str()); 5578d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time)); 55799b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed)); 55804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat)); 55819b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle)); 5582ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth)); 5583c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan EXPECT_STREQ(expected.stream_result_to, 5584c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan GTEST_FLAG(stream_result_to).c_str()); 5585c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure)); 55864b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 55874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 55884b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Parses a command line (specified by argc1 and argv1), then 55894b6829f0d28990dd645e16386eb226d0f10c8731shiqian // verifies that the flag values are expected and that the 55904b6829f0d28990dd645e16386eb226d0f10c8731shiqian // recognized flags are removed from the command line. 55914b6829f0d28990dd645e16386eb226d0f10c8731shiqian template <typename CharType> 55924b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void TestParsingFlags(int argc1, const CharType** argv1, 55934b6829f0d28990dd645e16386eb226d0f10c8731shiqian int argc2, const CharType** argv2, 5594ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev const Flags& expected, bool should_print_help) { 5595ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev const bool saved_help_flag = ::testing::internal::g_help_flag; 5596ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev ::testing::internal::g_help_flag = false; 5597ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 55985d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#if GTEST_HAS_STREAM_REDIRECTION 5599cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan CaptureStdout(); 56005d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#endif 5601cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan 56024b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Parses the command line. 5603f179f4ee7cc76e7103a726ebf666902b07f89659vladlosev internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1)); 56044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56055d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#if GTEST_HAS_STREAM_REDIRECTION 560603c314931649a999b0cf5deb0a434a1009157416jgm@google.com const std::string captured_stdout = GetCapturedStdout(); 56075d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#endif 5608cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan 56094b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Verifies the flag values. 56104b6829f0d28990dd645e16386eb226d0f10c8731shiqian CheckFlags(expected); 56114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56124b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Verifies that the recognized flags are removed from the command 56134b6829f0d28990dd645e16386eb226d0f10c8731shiqian // line. 56144b6829f0d28990dd645e16386eb226d0f10c8731shiqian AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2); 5615ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 5616ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the 5617ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev // help message for the flags it recognizes. 5618ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag); 5619ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 56205d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#if GTEST_HAS_STREAM_REDIRECTION 5621cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan const char* const expected_help_fragment = 5622cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan "This program contains tests written using"; 5623cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan if (should_print_help) { 5624cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout); 5625cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan } else { 5626cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan EXPECT_PRED_FORMAT2(IsNotSubstring, 5627cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan expected_help_fragment, captured_stdout); 5628cf8a584c9971a7d646d58be41dd3547e62cb538fzhanyong.wan } 56295d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan#endif // GTEST_HAS_STREAM_REDIRECTION 5630ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 5631ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev ::testing::internal::g_help_flag = saved_help_flag; 56324b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 56334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56344b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This macro wraps TestParsingFlags s.t. the user doesn't need 56354b6829f0d28990dd645e16386eb226d0f10c8731shiqian // to specify the array sizes. 5636733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 5637ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \ 56384b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \ 5639ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev sizeof(argv2)/sizeof(*argv2) - 1, argv2, \ 5640ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev expected, should_print_help) 56414b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 56424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56434b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing an empty command line. 56444b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, Empty) { 56454b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 56464b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56474b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56494b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 56504b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56514b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5653ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 56544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 56554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56564b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing a command line that has no flag. 56574b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, NoFlag) { 56584b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 56594b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56604b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56614b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56634b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 56644b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56654b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56664b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5668ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 56694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 56704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing a bad --gtest_filter flag. 56724b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, FilterBad) { 56734b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 56744b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56754b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter", 56764b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56774b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56794b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 56804b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56814b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter", 56824b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56834b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5685ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true); 56864b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 56874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56884b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing an empty --gtest_filter flag. 56894b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, FilterEmpty) { 56904b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 56914b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56924b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter=", 56934b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56944b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 56954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 56964b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 56974b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 56984b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 56994b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5701ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false); 57024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing a non-empty --gtest_filter flag. 57054b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, FilterNonEmpty) { 57064b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57074b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57084b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter=abc", 57094b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57104b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57124b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57134b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57144b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57154b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57164b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5717ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false); 57184b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_break_on_failure. 57219b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) { 57224b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57234b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57244b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure", 57254b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57264b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 57274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57284b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57294b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57304b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57314b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5733ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 57344b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_break_on_failure=0. 57374b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) { 57384b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57394b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57404b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure=0", 57414b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57424b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57444b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57454b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57464b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57474b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5749ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 57504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_break_on_failure=f. 57534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) { 57544b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57554b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57564b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure=f", 57574b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57584b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57604b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57614b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57624b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57634b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5765ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 57664b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57684b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_break_on_failure=F. 57694b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) { 57704b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57714b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57724b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure=F", 57734b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57744b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57764b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57774b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57784b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57794b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5781ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 57824b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 57834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57844b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing a --gtest_break_on_failure flag that has a "true" 57854b6829f0d28990dd645e16386eb226d0f10c8731shiqian// definition. 57864b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, BreakOnFailureTrue) { 57874b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 57884b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57894b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure=1", 57904b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57914b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 57934b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 57944b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 57954b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 57964b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 57974b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5798ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 57994b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 58004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_catch_exceptions. 58024b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, CatchExceptions) { 58034b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 58044b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58054b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_catch_exceptions", 58064b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58074b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58094b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 58104b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58114b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58124b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5814ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false); 58154b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 58164b6829f0d28990dd645e16386eb226d0f10c8731shiqian 581721d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian// Tests parsing --gtest_death_test_use_fork. 581821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqianTEST_F(InitGoogleTestTest, DeathTestUseFork) { 581921d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian const char* argv[] = { 582021d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian "foo.exe", 582121d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian "--gtest_death_test_use_fork", 582221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian NULL 582321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian }; 582421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 582521d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian const char* argv2[] = { 582621d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian "foo.exe", 582721d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian NULL 582821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian }; 582921d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 5830ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false); 583121d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian} 583221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 58334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests having the same flag twice with different values. The 58344b6829f0d28990dd645e16386eb226d0f10c8731shiqian// expected behavior is that the one coming last takes precedence. 58354b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, DuplicatedFlags) { 58364b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 58374b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58384b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter=a", 58394b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter=b", 58404b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58414b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58434b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 58444b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58454b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58464b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5848ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false); 58494b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 58504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests having an unrecognized flag on the command line. 58524b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, UnrecognizedFlag) { 58534b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 58544b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58554b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_break_on_failure", 58564b6829f0d28990dd645e16386eb226d0f10c8731shiqian "bar", // Unrecognized by Google Test. 58574b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_filter=b", 58584b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58594b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58614b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 58624b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58634b6829f0d28990dd645e16386eb226d0f10c8731shiqian "bar", 58644b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58654b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58674b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags flags; 58684b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.break_on_failure = true; 58694b6829f0d28990dd645e16386eb226d0f10c8731shiqian flags.filter = "b"; 5870ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false); 58714b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 58724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests having a --gtest_list_tests flag 58744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, ListTestsFlag) { 58754b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 58764b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58774b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_list_tests", 58784b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58794b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58814b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 58824b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58834b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58844b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5886ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 58874b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 58884b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58894b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests having a --gtest_list_tests flag with a "true" value 58904b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, ListTestsTrue) { 58914b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 58924b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58934b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_list_tests=1", 58944b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 58954b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 58964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 58974b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 58984b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 58994b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59004b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5902ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 59034b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59054b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests having a --gtest_list_tests flag with a "false" value 59064b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, ListTestsFalse) { 59074b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59084b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_list_tests=0", 59104b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59114b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59124b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59134b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59144b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59154b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59164b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5918ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 59194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_list_tests=f. 59224b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, ListTestsFalse_f) { 59234b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59244b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59254b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_list_tests=f", 59264b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59274b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59294b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59304b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59314b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59324b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5934ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 59354b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59364b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59379b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// Tests parsing --gtest_list_tests=F. 59384b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, ListTestsFalse_F) { 59394b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59404b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59414b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_list_tests=F", 59424b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59434b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59454b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59464b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59474b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59484b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5950ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 59514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59534b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_output (invalid). 59544b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, OutputEmpty) { 59554b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59564b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59574b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_output", 59584b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59594b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59614b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59624b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59634b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_output", 59644b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59654b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5967ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true); 59684b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59694b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59704b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_output=xml 59714b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, OutputXml) { 59724b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59734b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59744b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_output=xml", 59754b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59764b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59774b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59784b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59794b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59804b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59814b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5983ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false); 59844b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 59854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59864b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_output=xml:file 59874b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, OutputXmlFile) { 59884b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 59894b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59904b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_output=xml:file", 59914b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59924b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 59944b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 59954b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 59964b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 59974b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 59984b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5999ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false); 60004b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 60014b6829f0d28990dd645e16386eb226d0f10c8731shiqian 60024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_output=xml:directory/path/ 60034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, OutputXmlDirectory) { 60044b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 60054b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 60064b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_output=xml:directory/path/", 60074b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 60084b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 60094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 60104b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 60114b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 60124b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 60134b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 60144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6015ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6016ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Flags::Output("xml:directory/path/"), false); 60174b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 60184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6019d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian// Tests having a --gtest_print_time flag 6020d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqianTEST_F(InitGoogleTestTest, PrintTimeFlag) { 6021d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv[] = { 6022d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6023d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "--gtest_print_time", 6024d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6025d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6026d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6027d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv2[] = { 6028d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6029d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6030d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6031d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6032ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 6033d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian} 6034d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6035d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian// Tests having a --gtest_print_time flag with a "true" value 6036d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqianTEST_F(InitGoogleTestTest, PrintTimeTrue) { 6037d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv[] = { 6038d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6039d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "--gtest_print_time=1", 6040d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6041d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6042d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6043d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv2[] = { 6044d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6045d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6046d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6047d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6048ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 6049d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian} 6050d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6051d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian// Tests having a --gtest_print_time flag with a "false" value 6052d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqianTEST_F(InitGoogleTestTest, PrintTimeFalse) { 6053d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv[] = { 6054d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6055d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "--gtest_print_time=0", 6056d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6057d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6058d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6059d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv2[] = { 6060d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6061d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6062d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6063d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6064ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 6065d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian} 6066d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6067d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian// Tests parsing --gtest_print_time=f. 6068d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqianTEST_F(InitGoogleTestTest, PrintTimeFalse_f) { 6069d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv[] = { 6070d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6071d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "--gtest_print_time=f", 6072d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6073d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6074d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6075d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv2[] = { 6076d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6077d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6078d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6079d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6080ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 6081d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian} 6082d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6083d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian// Tests parsing --gtest_print_time=F. 6084d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqianTEST_F(InitGoogleTestTest, PrintTimeFalse_F) { 6085d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv[] = { 6086d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6087d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "--gtest_print_time=F", 6088d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6089d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6090d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6091d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian const char* argv2[] = { 6092d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian "foo.exe", 6093d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian NULL 6094d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian }; 6095d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 6096ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 6097d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian} 6098d981cee92591b1c48b0256fa603f5b8e4e1f7eb0shiqian 60999b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// Tests parsing --gtest_random_seed=number 61009b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, RandomSeed) { 61019b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv[] = { 61029b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 61039b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "--gtest_random_seed=1000", 61049b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 61059b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 61069b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 61079b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv2[] = { 61089b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 61099b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 61109b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 61119b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 6112ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false); 61139b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 61149b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 61154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing --gtest_repeat=number 61164b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, Repeat) { 61174b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv[] = { 61184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 61194b6829f0d28990dd645e16386eb226d0f10c8731shiqian "--gtest_repeat=1000", 61204b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 61214b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 61224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 61234b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char* argv2[] = { 61244b6829f0d28990dd645e16386eb226d0f10c8731shiqian "foo.exe", 61254b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 61264b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 61274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6128ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false); 61294b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 61304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6131ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian// Tests having a --gtest_also_run_disabled_tests flag 6132ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqianTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) { 6133ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv[] = { 6134ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6135ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "--gtest_also_run_disabled_tests", 6136ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6137ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6138ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6139ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv2[] = { 6140ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6141ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6142ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6143ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6144ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6145ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Flags::AlsoRunDisabledTests(true), false); 6146ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian} 6147ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6148ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian// Tests having a --gtest_also_run_disabled_tests flag with a "true" value 6149ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqianTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) { 6150ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv[] = { 6151ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6152ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "--gtest_also_run_disabled_tests=1", 6153ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6154ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6155ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6156ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv2[] = { 6157ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6158ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6159ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6160ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6161ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6162ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Flags::AlsoRunDisabledTests(true), false); 6163ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian} 6164ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6165ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian// Tests having a --gtest_also_run_disabled_tests flag with a "false" value 6166ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqianTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) { 6167ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv[] = { 6168ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6169ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "--gtest_also_run_disabled_tests=0", 6170ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6171ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6172ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6173ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian const char* argv2[] = { 6174ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian "foo.exe", 6175ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian NULL 6176ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian }; 6177ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 6178ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6179ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev Flags::AlsoRunDisabledTests(false), false); 6180ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian} 6181ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 61829b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// Tests parsing --gtest_shuffle. 61839b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, ShuffleWithoutValue) { 61849b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv[] = { 61859b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 61869b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "--gtest_shuffle", 61879b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 61889b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan}; 61899b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 61909b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv2[] = { 61919b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 61929b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 61939b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 61949b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 6195ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 61969b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 61979b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 61989b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// Tests parsing --gtest_shuffle=0. 61999b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, ShuffleFalse_0) { 62009b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv[] = { 62019b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 62029b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "--gtest_shuffle=0", 62039b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 62049b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 62059b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 62069b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv2[] = { 62079b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 62089b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 62099b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 62109b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 6211ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false); 62129b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 62139b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 62149b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// Tests parsing a --gtest_shuffle flag that has a "true" 62159b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan// definition. 62169b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, ShuffleTrue) { 62179b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv[] = { 62189b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 62199b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "--gtest_shuffle=1", 62209b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 62219b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 62229b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 62239b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan const char* argv2[] = { 62249b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan "foo.exe", 62259b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan NULL 62269b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan }; 62279b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan 6228ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 6229ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev} 6230ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 6231ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev// Tests parsing --gtest_stack_trace_depth=number. 6232ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosevTEST_F(InitGoogleTestTest, StackTraceDepth) { 6233ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev const char* argv[] = { 6234ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev "foo.exe", 6235ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev "--gtest_stack_trace_depth=5", 6236ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev NULL 6237ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev }; 6238ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 6239ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev const char* argv2[] = { 6240ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev "foo.exe", 6241ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev NULL 6242ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev }; 6243ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev 6244ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false); 62459b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wan} 6246b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6247c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wanTEST_F(InitGoogleTestTest, StreamResultTo) { 6248c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan const char* argv[] = { 6249c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan "foo.exe", 6250c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan "--gtest_stream_result_to=localhost:1234", 6251c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan NULL 6252c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan }; 6253c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan 6254c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan const char* argv2[] = { 6255c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan "foo.exe", 6256c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan NULL 6257c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan }; 6258c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan 6259c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan GTEST_TEST_PARSING_FLAGS_( 6260c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan argv, argv2, Flags::StreamResultTo("localhost:1234"), false); 6261c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan} 6262c95489ee7dd54fc6a2cd1d3e890c330718ead714zhanyong.wan 6263b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan// Tests parsing --gtest_throw_on_failure. 62649b9794ffb9cfafb94f5def851f76b9a104fcb891zhanyong.wanTEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) { 6265b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv[] = { 6266b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6267b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "--gtest_throw_on_failure", 6268b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6269b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan}; 6270b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6271b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv2[] = { 6272b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6273b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6274b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan }; 6275b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6276ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 6277b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan} 6278b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6279b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan// Tests parsing --gtest_throw_on_failure=0. 6280b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wanTEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) { 6281b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv[] = { 6282b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6283b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "--gtest_throw_on_failure=0", 6284b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6285b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan }; 6286b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6287b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv2[] = { 6288b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6289b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6290b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan }; 6291b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6292ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false); 6293b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan} 6294b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6295b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan// Tests parsing a --gtest_throw_on_failure flag that has a "true" 6296b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan// definition. 6297b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wanTEST_F(InitGoogleTestTest, ThrowOnFailureTrue) { 6298b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv[] = { 6299b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6300b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "--gtest_throw_on_failure=1", 6301b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6302b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan }; 6303b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6304b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan const char* argv2[] = { 6305b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan "foo.exe", 6306b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan NULL 6307b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan }; 6308b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 6309ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 6310b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan} 6311b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 63124cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_OS_WINDOWS 63134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests parsing wide strings. 63144b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(InitGoogleTestTest, WideStrings) { 63154b6829f0d28990dd645e16386eb226d0f10c8731shiqian const wchar_t* argv[] = { 63164b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"foo.exe", 63174b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"--gtest_filter=Foo*", 63184b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"--gtest_list_tests=1", 63194b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"--gtest_break_on_failure", 63204b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"--non_gtest_flag", 63214b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 63224b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 63234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63244b6829f0d28990dd645e16386eb226d0f10c8731shiqian const wchar_t* argv2[] = { 63254b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"foo.exe", 63264b6829f0d28990dd645e16386eb226d0f10c8731shiqian L"--non_gtest_flag", 63274b6829f0d28990dd645e16386eb226d0f10c8731shiqian NULL 63284b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 63294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63304b6829f0d28990dd645e16386eb226d0f10c8731shiqian Flags expected_flags; 63314b6829f0d28990dd645e16386eb226d0f10c8731shiqian expected_flags.break_on_failure = true; 63324b6829f0d28990dd645e16386eb226d0f10c8731shiqian expected_flags.filter = "Foo*"; 63334b6829f0d28990dd645e16386eb226d0f10c8731shiqian expected_flags.list_tests = true; 63344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6335ba015a9176a56cbfab316fc8f781bbd11a6edc2bvladlosev GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false); 63364b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 63374b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_OS_WINDOWS 63384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests current_test_info() in UnitTest. 63404b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass CurrentTestInfoTest : public Test { 63414b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 63424b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Tests that current_test_info() returns NULL before the first test in 63434b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the test case is run. 63444b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void SetUpTestCase() { 63454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // There should be no tests running at this point. 63464b6829f0d28990dd645e16386eb226d0f10c8731shiqian const TestInfo* test_info = 63474b6829f0d28990dd645e16386eb226d0f10c8731shiqian UnitTest::GetInstance()->current_test_info(); 63489644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan EXPECT_TRUE(test_info == NULL) 63494b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "There should be no tests running at this point."; 63504b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 63514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63524b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Tests that current_test_info() returns NULL after the last test in 63534b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the test case has run. 63544b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void TearDownTestCase() { 63554b6829f0d28990dd645e16386eb226d0f10c8731shiqian const TestInfo* test_info = 63564b6829f0d28990dd645e16386eb226d0f10c8731shiqian UnitTest::GetInstance()->current_test_info(); 63579644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan EXPECT_TRUE(test_info == NULL) 63584b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "There should be no tests running at this point."; 63594b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 63604b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 63614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that current_test_info() returns TestInfo for currently running 63634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// test by checking the expected test name against the actual one. 63644b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) { 63654b6829f0d28990dd645e16386eb226d0f10c8731shiqian const TestInfo* test_info = 63664b6829f0d28990dd645e16386eb226d0f10c8731shiqian UnitTest::GetInstance()->current_test_info(); 63674b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(NULL != test_info) 63684b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "There is a test running so we should have a valid TestInfo."; 63694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 63704b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "Expected the name of the currently running test case."; 63714b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name()) 63724b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "Expected the name of the currently running test."; 63734b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 63744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that current_test_info() returns TestInfo for currently running 63764b6829f0d28990dd645e16386eb226d0f10c8731shiqian// test by checking the expected test name against the actual one. We 63774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// use this test to see that the TestInfo object actually changed from 63784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// the previous invocation. 63794b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) { 63804b6829f0d28990dd645e16386eb226d0f10c8731shiqian const TestInfo* test_info = 63814b6829f0d28990dd645e16386eb226d0f10c8731shiqian UnitTest::GetInstance()->current_test_info(); 63824b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(NULL != test_info) 63834b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "There is a test running so we should have a valid TestInfo."; 63844b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 63854b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "Expected the name of the currently running test case."; 63864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name()) 63874b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "Expected the name of the currently running test."; 63884b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 63894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63904b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace testing 63914b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// These two lines test that we can define tests in a namespace that 63934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// has the name "testing" and is nested in another namespace. 63944b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace my_namespace { 63954b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace testing { 63964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 63974b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Makes sure that TEST knows to use ::testing::Test instead of 63984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// ::my_namespace::testing::Test. 63994b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Test {}; 64004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Makes sure that an assertion knows to use ::testing::Message instead of 64024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// ::my_namespace::testing::Message. 64034b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Message {}; 64044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64054b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Makes sure that an assertion knows to use 64064b6829f0d28990dd645e16386eb226d0f10c8731shiqian// ::testing::AssertionResult instead of 64074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// ::my_namespace::testing::AssertionResult. 64084b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass AssertionResult {}; 64094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that an assertion that should succeed works as expected. 64114b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(NestedTestingNamespaceTest, Success) { 64124b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, 1) << "This shouldn't fail."; 64134b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that an assertion that should fail works as expected. 64164b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(NestedTestingNamespaceTest, Failure) { 64174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.", 64184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "This failure is expected."); 64194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64214b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace testing 64224b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace my_namespace 64234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that one can call superclass SetUp and TearDown methods-- 64254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// that is, that they are not private. 64264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// No tests are based on this fixture; the test "passes" if it compiles 64274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// successfully. 6428760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqianclass ProtectedFixtureMethodsTest : public Test { 64294b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 64304b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 6431760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Test::SetUp(); 64324b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 64334b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 6434760af5c16f8af7d34b7ef75a0e4d0b18f023f3f3shiqian Test::TearDown(); 64354b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 64364b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 64374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// StreamingAssertionsTest tests the streaming versions of a representative 64394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// sample of assertions. 64404b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, Unconditional) { 64414b6829f0d28990dd645e16386eb226d0f10c8731shiqian SUCCEED() << "expected success"; 64424b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure", 64434b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64444b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(FAIL() << "expected failure", 64454b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64464b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 644898efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 644998efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Silences warnings: "Condition is always true", "Unreachable code" 6450733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option push -w-ccc -w-rch 645198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 645298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 64534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, Truth) { 64544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(true) << "unexpected failure"; 64554b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_TRUE(true) << "unexpected failure"; 64564b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure", 64574b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64584b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure", 64594b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64604b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64624b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, Truth2) { 64634b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(false) << "unexpected failure"; 64644b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(false) << "unexpected failure"; 64654b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure", 64664b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64674b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure", 64684b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 647198efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#ifdef __BORLANDC__ 647298efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan// Restores warnings after previous "#pragma option push" supressed them 6473733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# pragma option pop 647498efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan#endif 647598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan 64764b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, IntegerEquals) { 64774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, 1) << "unexpected failure"; 64784b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, 1) << "unexpected failure"; 64794b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure", 64804b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64814b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure", 64824b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64834b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64844b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64854b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, IntegerLessThan) { 64864b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_LT(1, 2) << "unexpected failure"; 64874b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_LT(1, 2) << "unexpected failure"; 64884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure", 64894b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64904b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure", 64914b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64924b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 64934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 64944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, StringsEqual) { 64954b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STREQ("foo", "foo") << "unexpected failure"; 64964b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STREQ("foo", "foo") << "unexpected failure"; 64974b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure", 64984b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 64994b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure", 65004b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65014b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, StringsNotEqual) { 65044b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRNE("foo", "bar") << "unexpected failure"; 65054b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRNE("foo", "bar") << "unexpected failure"; 65064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure", 65074b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65084b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure", 65094b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65104b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65124b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, StringsEqualIgnoringCase) { 65134b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 65144b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 65154b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure", 65164b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65174b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure", 65184b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65194b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65214b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) { 65224b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_STRCASENE("foo", "bar") << "unexpected failure"; 65234b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_STRCASENE("foo", "bar") << "unexpected failure"; 65244b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure", 65254b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure", 65274b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(StreamingAssertionsTest, FloatingPointEquals) { 65314b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 65324b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 65334b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure", 65344b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure", 65364b6829f0d28990dd645e16386eb226d0f10c8731shiqian "expected failure"); 65374b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65399204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#if GTEST_HAS_EXCEPTIONS 65409204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 65419204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(StreamingAssertionsTest, Throw) { 65429204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 65439204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 65449204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) << 65459204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 65469204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) << 65479204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 65489204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 65499204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 65509204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(StreamingAssertionsTest, NoThrow) { 6551ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure"; 6552ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure"; 65539204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) << 65549204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 65559204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) << 65569204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 65579204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 65589204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 65599204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqianTEST(StreamingAssertionsTest, AnyThrow) { 65609204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 65619204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 6562ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) << 65639204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 6564ac60cef37792a6cb7f3534d3f4e2c6d69ab4b5e6zhanyong.wan EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) << 65659204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian "expected failure", "expected failure"); 65669204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian} 65679204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 65689204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian#endif // GTEST_HAS_EXCEPTIONS 65699204c8ec6edda2013cd81bf3c93e9cb6c45b9bb5shiqian 65704b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that Google Test correctly decides whether to use colors in the output. 65714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65724b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) { 65734b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "yes"; 65744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65754b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); // TERM supports colors. 65764b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65774b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 65784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65794b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "dumb"); // TERM doesn't support colors. 65804b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65814b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 65824b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65844b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) { 65854b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "dumb"); // TERM doesn't support colors. 65864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65874b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "True"; 65884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 65894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65904b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "t"; 65914b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 65924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65934b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "1"; 65944b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 65954b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 65964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 65974b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) { 65984b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "no"; 65994b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66004b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); // TERM supports colors. 66014b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66024b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 66034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66044b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "dumb"); // TERM doesn't support colors. 66054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66064b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 66074b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 66084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66094b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) { 66104b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); // TERM supports colors. 66114b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66124b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "F"; 66134b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66154b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "0"; 66164b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66184b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "unknown"; 66194b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66204b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 66214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66224b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) { 66234b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "auto"; 66244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66254b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); // TERM supports colors. 66264b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 66274b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66284b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 66294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66304b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) { 66314b6829f0d28990dd645e16386eb226d0f10c8731shiqian GTEST_FLAG(color) = "auto"; 66324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66334cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_OS_WINDOWS 66344b6829f0d28990dd645e16386eb226d0f10c8731shiqian // On Windows, we ignore the TERM variable as it's usually not set. 66354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66364b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "dumb"); 66374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66394b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", ""); 66404b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66424b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); 66434b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66444b6829f0d28990dd645e16386eb226d0f10c8731shiqian#else 66454b6829f0d28990dd645e16386eb226d0f10c8731shiqian // On non-Windows platforms, we rely on TERM to determine if the 66464b6829f0d28990dd645e16386eb226d0f10c8731shiqian // terminal supports colors. 66474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66484b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "dumb"); // TERM doesn't support colors. 66494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66514b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "emacs"); // TERM doesn't support colors. 66524b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66544b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "vt100"); // TERM doesn't support colors. 66554b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66574b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors. 66584b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 66594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66604b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm"); // TERM supports colors. 66614b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66624b6829f0d28990dd645e16386eb226d0f10c8731shiqian 66634b6829f0d28990dd645e16386eb226d0f10c8731shiqian SetEnv("TERM", "xterm-color"); // TERM supports colors. 66644b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6665a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan 66669f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev SetEnv("TERM", "xterm-256color"); // TERM supports colors. 66679f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66689f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev 66699f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev SetEnv("TERM", "screen"); // TERM supports colors. 66709f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66719f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev 66724036e7d55c332d45cfb3f22ed682acce2b8390fdzhanyong.wan SetEnv("TERM", "screen-256color"); // TERM supports colors. 66734036e7d55c332d45cfb3f22ed682acce2b8390fdzhanyong.wan EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66744036e7d55c332d45cfb3f22ed682acce2b8390fdzhanyong.wan 6675a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan SetEnv("TERM", "linux"); // TERM supports colors. 6676a8a582fb926a678d1c4303384bd4dc872f746de8zhanyong.wan EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66779f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev 66789f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev SetEnv("TERM", "cygwin"); // TERM supports colors. 66799f2549154b3d605f0eec2fb691c741e087b61e6fvladlosev EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 66804b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_OS_WINDOWS 66814b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 66824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 668321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian// Verifies that StaticAssertTypeEq works in a namespace scope. 668421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 66855e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wanstatic bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>(); 66865e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wanstatic bool dummy2 GTEST_ATTRIBUTE_UNUSED_ = 66875e255e0b6affbdc56718d81f0bb5d1b802a1c6c2zhanyong.wan StaticAssertTypeEq<const int, const int>(); 668821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 668921d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian// Verifies that StaticAssertTypeEq works in a class. 669021d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 669121d43d1a7e09d960b790d992f1bb4e92c70391d4shiqiantemplate <typename T> 669221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqianclass StaticAssertTypeEqTestHelper { 669321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian public: 669421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); } 669521d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian}; 669621d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 669721d43d1a7e09d960b790d992f1bb4e92c70391d4shiqianTEST(StaticAssertTypeEqTest, WorksInClass) { 669821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian StaticAssertTypeEqTestHelper<bool>(); 669921d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian} 670021d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 670121d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian// Verifies that StaticAssertTypeEq works inside a function. 670221d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 670321d43d1a7e09d960b790d992f1bb4e92c70391d4shiqiantypedef int IntAlias; 670421d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 670521d43d1a7e09d960b790d992f1bb4e92c70391d4shiqianTEST(StaticAssertTypeEqTest, CompilesForEqualTypes) { 670621d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian StaticAssertTypeEq<int, IntAlias>(); 670721d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian StaticAssertTypeEq<int*, IntAlias*>(); 670821d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian} 670921d43d1a7e09d960b790d992f1bb4e92c70391d4shiqian 6710f904a612d9444ab36c07a8e619c113432e046f49vladlosevTEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) { 6711f904a612d9444ab36c07a8e619c113432e046f49vladlosev testing::UnitTest* const unit_test = testing::UnitTest::GetInstance(); 6712f904a612d9444ab36c07a8e619c113432e046f49vladlosev 6713f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We don't have a stack walker in Google Test yet. 6714f904a612d9444ab36c07a8e619c113432e046f49vladlosev EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str()); 6715f904a612d9444ab36c07a8e619c113432e046f49vladlosev EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str()); 6716f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 67171b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67181b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) { 67191b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_FALSE(HasNonfatalFailure()); 67201b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67211b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67221b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanstatic void FailFatally() { FAIL(); } 67231b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67241b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) { 67251b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan FailFatally(); 67261b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_nonfatal_failure = HasNonfatalFailure(); 67271b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67281b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_FALSE(has_nonfatal_failure); 67291b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67301b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67311b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 67321b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67331b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_nonfatal_failure = HasNonfatalFailure(); 67341b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67351b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_nonfatal_failure); 67361b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67371b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67381b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 67391b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan FailFatally(); 67401b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67411b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_nonfatal_failure = HasNonfatalFailure(); 67421b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67431b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_nonfatal_failure); 67441b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67451b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67461b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan// A wrapper for calling HasNonfatalFailure outside of a test body. 67471b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanstatic bool HasNonfatalFailureHelper() { 67481b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan return testing::Test::HasNonfatalFailure(); 67491b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67501b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67511b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) { 67521b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_FALSE(HasNonfatalFailureHelper()); 67531b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67541b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67551b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) { 67561b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67571b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_nonfatal_failure = HasNonfatalFailureHelper(); 67581b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67591b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_nonfatal_failure); 67601b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67611b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67621b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) { 67631b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_FALSE(HasFailure()); 67641b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67651b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67661b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) { 67671b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan FailFatally(); 67681b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_failure = HasFailure(); 67691b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67701b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_failure); 67711b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67721b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67731b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 67741b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67751b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_failure = HasFailure(); 67761b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67771b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_failure); 67781b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67791b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67801b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 67811b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan FailFatally(); 67821b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67831b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_failure = HasFailure(); 67841b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67851b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_failure); 67861b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67871b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67881b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan// A wrapper for calling HasFailure outside of a test body. 67891b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanstatic bool HasFailureHelper() { return testing::Test::HasFailure(); } 67901b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67911b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, WorksOutsideOfTestBody) { 67921b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_FALSE(HasFailureHelper()); 67931b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 67941b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan 67951b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wanTEST(HasFailureTest, WorksOutsideOfTestBody2) { 67961b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ADD_FAILURE(); 67971b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan const bool has_failure = HasFailureHelper(); 67981b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan ClearCurrentTestPartResults(); 67991b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan EXPECT_TRUE(has_failure); 68001b171100b3341c01fb377f8202d9eaccbeec1f55zhanyong.wan} 6801f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6802f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanclass TestListener : public EmptyTestEventListener { 6803f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan public: 6804f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {} 6805f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener(int* on_start_counter, bool* is_destroyed) 6806f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan : on_start_counter_(on_start_counter), 6807f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan is_destroyed_(is_destroyed) {} 6808f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6809f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan virtual ~TestListener() { 6810f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan if (is_destroyed_) 6811f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *is_destroyed_ = true; 6812f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6813f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6814f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan protected: 68157dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 6816f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan if (on_start_counter_ != NULL) 6817f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan (*on_start_counter_)++; 6818f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6819f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6820f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan private: 6821f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int* on_start_counter_; 6822f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool* is_destroyed_; 6823f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan}; 6824f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6825f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests the constructor. 6826f6d087b78d230d875bf5d8281112662795044680zhanyong.wanTEST(TestEventListenersTest, ConstructionWorks) { 6827f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 6828f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6829f6d087b78d230d875bf5d8281112662795044680zhanyong.wan EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL); 6830f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_result_printer() == NULL); 6831f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_xml_generator() == NULL); 6832f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6833f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6834f6d087b78d230d875bf5d8281112662795044680zhanyong.wan// Tests that the TestEventListeners destructor deletes all the listeners it 6835f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// owns. 6836f6d087b78d230d875bf5d8281112662795044680zhanyong.wanTEST(TestEventListenersTest, DestructionWorks) { 6837f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool default_result_printer_is_destroyed = false; 6838f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool default_xml_printer_is_destroyed = false; 6839f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool extra_listener_is_destroyed = false; 6840f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* default_result_printer = new TestListener( 6841f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan NULL, &default_result_printer_is_destroyed); 6842f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* default_xml_printer = new TestListener( 6843f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan NULL, &default_xml_printer_is_destroyed); 6844f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* extra_listener = new TestListener( 6845f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan NULL, &extra_listener_is_destroyed); 6846f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6847f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan { 6848f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 6849f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, 6850f6d087b78d230d875bf5d8281112662795044680zhanyong.wan default_result_printer); 6851f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, 6852f6d087b78d230d875bf5d8281112662795044680zhanyong.wan default_xml_printer); 6853f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners.Append(extra_listener); 6854f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6855f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(default_result_printer_is_destroyed); 6856f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(default_xml_printer_is_destroyed); 6857f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(extra_listener_is_destroyed); 6858f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6859f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6860f6d087b78d230d875bf5d8281112662795044680zhanyong.wan// Tests that a listener Append'ed to a TestEventListeners list starts 6861f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// receiving events. 6862f6d087b78d230d875bf5d8281112662795044680zhanyong.wanTEST(TestEventListenersTest, Append) { 6863f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 6864f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 6865f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6866f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan { 6867f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 6868f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners.Append(listener); 6869f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6870f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 6871f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(1, on_start_counter); 6872f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6873f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(is_destroyed); 6874f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6875f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 68767dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan// Tests that listeners receive events in the order they were appended to 68777dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan// the list, except for *End requests, which must be received in the reverse 68787dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan// order. 6879f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanclass SequenceTestingListener : public EmptyTestEventListener { 6880f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan public: 688103c314931649a999b0cf5deb0a434a1009157416jgm@google.com SequenceTestingListener(std::vector<std::string>* vector, const char* id) 68827dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan : vector_(vector), id_(id) {} 6883f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6884f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan protected: 68857dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 688693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector_->push_back(GetEventDescription("OnTestProgramStart")); 68877dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan } 68887dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 68897dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 689093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector_->push_back(GetEventDescription("OnTestProgramEnd")); 68917dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan } 68927dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 68937dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 68947dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan int /*iteration*/) { 689593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector_->push_back(GetEventDescription("OnTestIterationStart")); 68967dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan } 68977dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 68987dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 68997dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan int /*iteration*/) { 690093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vector_->push_back(GetEventDescription("OnTestIterationEnd")); 6901f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6902f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6903f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan private: 690403c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::string GetEventDescription(const char* method) { 69057dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan Message message; 69067dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan message << id_ << "." << method; 69077dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan return message.GetString(); 69087dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan } 69097dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 691003c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::vector<std::string>* vector_; 69117dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan const char* const id_; 6912d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 6913d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener); 6914f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan}; 6915f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6916f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, AppendKeepsOrder) { 691703c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::vector<std::string> vec; 6918f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 69197dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan listeners.Append(new SequenceTestingListener(&vec, "1st")); 69207dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan listeners.Append(new SequenceTestingListener(&vec, "2nd")); 69217dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan listeners.Append(new SequenceTestingListener(&vec, "3rd")); 69227dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 6923f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 69247dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan *UnitTest::GetInstance()); 692593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ASSERT_EQ(3U, vec.size()); 692693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str()); 692793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str()); 692893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str()); 69297dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 693093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vec.clear(); 6931f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd( 6932f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 693393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ASSERT_EQ(3U, vec.size()); 693493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str()); 693593d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str()); 693693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str()); 69377dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 693893d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vec.clear(); 6939f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart( 69407dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan *UnitTest::GetInstance(), 0); 694193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ASSERT_EQ(3U, vec.size()); 694293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str()); 694393d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str()); 694493d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str()); 69457dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan 694693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan vec.clear(); 6947f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd( 69487dcfb6b7375177814c5154e9770efc5406778ad0zhanyong.wan *UnitTest::GetInstance(), 0); 694993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan ASSERT_EQ(3U, vec.size()); 695093d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str()); 695193d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str()); 695293d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str()); 6953f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6954f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6955f6d087b78d230d875bf5d8281112662795044680zhanyong.wan// Tests that a listener removed from a TestEventListeners list stops receiving 6956f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// events and is not deleted when the list is destroyed. 6957f6d087b78d230d875bf5d8281112662795044680zhanyong.wanTEST(TestEventListenersTest, Release) { 6958f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 6959f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 6960f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Although Append passes the ownership of this object to the list, 6961f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // the following calls release it, and we need to delete it before the 6962f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // test ends. 6963f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6964f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan { 6965f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 6966f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners.Append(listener); 6967f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(listener, listeners.Release(listener)); 6968f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6969f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 6970f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.Release(listener) == NULL); 6971f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 6972f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(0, on_start_counter); 6973f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_FALSE(is_destroyed); 6974f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan delete listener; 6975f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6976f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6977f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that no events are forwarded when event forwarding is disabled. 6978f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, SuppressEventForwarding) { 6979f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 6980f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, NULL); 6981f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6982f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 6983f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan listeners.Append(listener); 6984f6d087b78d230d875bf5d8281112662795044680zhanyong.wan ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 6985f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SuppressEventForwarding(&listeners); 6986f6d087b78d230d875bf5d8281112662795044680zhanyong.wan ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 6987f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6988f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 6989f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(0, on_start_counter); 6990f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 6991f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 6992f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that events generated by Google Test are not forwarded in 6993f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// death test subprocesses. 6994f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) { 6995d541f0259d2f6857df769f581363f84e8c4b2899zhanyong.wan EXPECT_DEATH_IF_SUPPORTED({ 6996f6d087b78d230d875bf5d8281112662795044680zhanyong.wan GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled( 6997f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *GetUnitTestImpl()->listeners())) << "expected failure";}, 6998f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan "expected failure"); 6999f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 7000f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7001f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that a listener installed via SetDefaultResultPrinter() starts 7002f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// receiving events and is returned via default_result_printer() and that 7003f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// the previous default_result_printer is removed from the list and deleted. 7004f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, default_result_printer) { 7005f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 7006f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 7007f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 7008f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7009f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 7010f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 7011f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7012f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(listener, listeners.default_result_printer()); 7013f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7014f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7015f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7016f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7017f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(1, on_start_counter); 7018f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7019f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Replacing default_result_printer with something else should remove it 7020f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // from the list and destroy it. 7021f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL); 7022f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7023f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_result_printer() == NULL); 7024f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(is_destroyed); 7025f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7026f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // After broadcasting an event the counter is still the same, indicating 7027f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // the listener is not in the list anymore. 7028f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7029f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7030f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(1, on_start_counter); 7031f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 7032f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7033f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that the default_result_printer listener stops receiving events 7034f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// when removed via Release and that is not owned by the list anymore. 7035f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, RemovingDefaultResultPrinterWorks) { 7036f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 7037f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 7038f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Although Append passes the ownership of this object to the list, 7039f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // the following calls release it, and we need to delete it before the 7040f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // test ends. 7041f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 7042f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan { 7043f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 7044f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 7045f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7046f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(listener, listeners.Release(listener)); 7047f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_result_printer() == NULL); 7048f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_FALSE(is_destroyed); 7049f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7050f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Broadcasting events now should not affect default_result_printer. 7051f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7052f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7053f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(0, on_start_counter); 7054f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 7055f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Destroying the list should not affect the listener now, too. 7056f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_FALSE(is_destroyed); 7057f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan delete listener; 7058f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 7059f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7060f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that a listener installed via SetDefaultXmlGenerator() starts 7061f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// receiving events and is returned via default_xml_generator() and that 7062f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// the previous default_xml_generator is removed from the list and deleted. 7063f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, default_xml_generator) { 7064f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 7065f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 7066f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 7067f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7068f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 7069f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 7070f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7071f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(listener, listeners.default_xml_generator()); 7072f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7073f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7074f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7075f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7076f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(1, on_start_counter); 7077f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7078f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Replacing default_xml_generator with something else should remove it 7079f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // from the list and destroy it. 7080f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL); 7081f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7082f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_xml_generator() == NULL); 7083f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(is_destroyed); 7084f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7085f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // After broadcasting an event the counter is still the same, indicating 7086f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // the listener is not in the list anymore. 7087f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7088f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7089f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(1, on_start_counter); 7090f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 7091f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7092f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// Tests that the default_xml_generator listener stops receiving events 7093f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan// when removed via Release and that is not owned by the list anymore. 7094f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wanTEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) { 7095f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan int on_start_counter = 0; 7096f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan bool is_destroyed = false; 7097f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Although Append passes the ownership of this object to the list, 7098f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // the following calls release it, and we need to delete it before the 7099f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // test ends. 7100f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 7101f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan { 7102f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListeners listeners; 7103f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 7104f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7105f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(listener, listeners.Release(listener)); 7106f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_TRUE(listeners.default_xml_generator() == NULL); 7107f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_FALSE(is_destroyed); 7108f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan 7109f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Broadcasting events now should not affect default_xml_generator. 7110f6d087b78d230d875bf5d8281112662795044680zhanyong.wan TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7111f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan *UnitTest::GetInstance()); 7112f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_EQ(0, on_start_counter); 7113f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan } 7114f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan // Destroying the list should not affect the listener now, too. 7115f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan EXPECT_FALSE(is_destroyed); 7116f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan delete listener; 7117f39160b423e8f90902066cf6774e4180667dcbeezhanyong.wan} 71181618bb491b881bc39faa3317ee8778847646226dzhanyong.wan 71191618bb491b881bc39faa3317ee8778847646226dzhanyong.wan// Sanity tests to ensure that the alternative, verbose spellings of 71201618bb491b881bc39faa3317ee8778847646226dzhanyong.wan// some of the macros work. We don't test them thoroughly as that 71211618bb491b881bc39faa3317ee8778847646226dzhanyong.wan// would be quite involved. Since their implementations are 71221618bb491b881bc39faa3317ee8778847646226dzhanyong.wan// straightforward, and they are rarely used, we'll just rely on the 71231618bb491b881bc39faa3317ee8778847646226dzhanyong.wan// users to tell us when they are broken. 71241618bb491b881bc39faa3317ee8778847646226dzhanyong.wanGTEST_TEST(AlternativeNameTest, Works) { // GTEST_TEST is the same as TEST. 71251618bb491b881bc39faa3317ee8778847646226dzhanyong.wan GTEST_SUCCEED() << "OK"; // GTEST_SUCCEED is the same as SUCCEED. 71261618bb491b881bc39faa3317ee8778847646226dzhanyong.wan 71271618bb491b881bc39faa3317ee8778847646226dzhanyong.wan // GTEST_FAIL is the same as FAIL. 71281618bb491b881bc39faa3317ee8778847646226dzhanyong.wan EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure", 71291618bb491b881bc39faa3317ee8778847646226dzhanyong.wan "An expected failure"); 71300bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71310bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan // GTEST_ASSERT_XY is the same as ASSERT_XY. 71320bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71330bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_EQ(0, 0); 71340bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure", 71350bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71360bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure", 71370bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71380bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71390bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_NE(0, 1); 71400bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_NE(1, 0); 71410bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure", 71420bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71430bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71440bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_LE(0, 0); 71450bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_LE(0, 1); 71460bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure", 71470bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71480bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71490bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_LT(0, 1); 71500bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure", 71510bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71520bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure", 71530bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71540bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71550bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_GE(0, 0); 71560bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_GE(1, 0); 71570bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure", 71580bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71590bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan 71600bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan GTEST_ASSERT_GT(1, 0); 71610bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure", 71620bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71630bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure", 71640bfb56317785c7960bedee9fda0bb879347e2121zhanyong.wan "An expected failure"); 71651618bb491b881bc39faa3317ee8778847646226dzhanyong.wan} 7166678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7167678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests for internal utilities necessary for implementation of the universal 7168678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// printing. 7169678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// TODO(vladl@google.com): Find a better home for them. 7170678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7171678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanclass ConversionHelperBase {}; 7172678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanclass ConversionHelperDerived : public ConversionHelperBase {}; 7173678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7174678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that IsAProtocolMessage<T>::value is a compile-time constant. 7175678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { 7176678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value, 7177678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const_true); 7178678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false); 7179678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7180678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7181678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that IsAProtocolMessage<T>::value is true when T is 71825d0c3dc09ece41c649deea59f975d0ff5548424azhanyong.wan// proto2::Message or a sub-class of it. 7183678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { 7184678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value); 7185678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value); 7186678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7187678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7188678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that IsAProtocolMessage<T>::value is false when T is neither 7189678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// ProtocolMessage nor a sub-class of it. 7190678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { 7191678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(IsAProtocolMessage<int>::value); 7192678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value); 7193678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7194678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7195678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that CompileAssertTypesEqual compiles when the type arguments are 7196678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// equal. 7197678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) { 7198678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<void, void>(); 7199678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int*, int*>(); 7200678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7201678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7202678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that RemoveReference does not affect non-reference types. 7203678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) { 7204678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int, RemoveReference<int>::type>(); 7205678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<const char, RemoveReference<const char>::type>(); 7206678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7207678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7208678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that RemoveReference removes reference from reference types. 7209678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveReferenceTest, RemovesReference) { 7210678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int, RemoveReference<int&>::type>(); 7211678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>(); 7212678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7213678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7214678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests GTEST_REMOVE_REFERENCE_. 7215678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7216678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wantemplate <typename T1, typename T2> 7217678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanvoid TestGTestRemoveReference() { 7218678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>(); 7219678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7220678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7221678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveReferenceTest, MacroVersion) { 7222678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestRemoveReference<int, int>(); 7223678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestRemoveReference<const char, const char&>(); 7224678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7225678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7226678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7227678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that RemoveConst does not affect non-const types. 7228678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveConstTest, DoesNotAffectNonConstType) { 7229678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int, RemoveConst<int>::type>(); 7230678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<char&, RemoveConst<char&>::type>(); 7231678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7232678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7233678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that RemoveConst removes const from const types. 7234678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveConstTest, RemovesConst) { 7235678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int, RemoveConst<const int>::type>(); 7236678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>(); 7237678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>(); 7238678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7239678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7240678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests GTEST_REMOVE_CONST_. 7241678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7242678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wantemplate <typename T1, typename T2> 7243678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanvoid TestGTestRemoveConst() { 7244678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>(); 7245678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7246678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7247678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(RemoveConstTest, MacroVersion) { 7248678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestRemoveConst<int, int>(); 7249678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestRemoveConst<double&, double&>(); 7250678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestRemoveConst<char, const char>(); 7251678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7252678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7253c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan// Tests GTEST_REMOVE_REFERENCE_AND_CONST_. 7254c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan 7255c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wantemplate <typename T1, typename T2> 7256c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wanvoid TestGTestRemoveReferenceAndConst() { 7257c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>(); 7258c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan} 7259c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan 7260c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wanTEST(RemoveReferenceToConstTest, Works) { 7261c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan TestGTestRemoveReferenceAndConst<int, int>(); 7262c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan TestGTestRemoveReferenceAndConst<double, double&>(); 7263c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan TestGTestRemoveReferenceAndConst<char, const char>(); 7264c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan TestGTestRemoveReferenceAndConst<char, const char&>(); 7265c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan TestGTestRemoveReferenceAndConst<const char*, const char*>(); 7266c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan} 7267c3ad69057c28427c2a000a462468b34883853c6ezhanyong.wan 7268678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that AddReference does not affect reference types. 7269678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(AddReferenceTest, DoesNotAffectReferenceType) { 7270678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int&, AddReference<int&>::type>(); 7271678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<const char&, AddReference<const char&>::type>(); 7272678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7273678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7274678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that AddReference adds reference to non-reference types. 7275678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(AddReferenceTest, AddsReference) { 7276678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<int&, AddReference<int>::type>(); 7277678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<const char&, AddReference<const char>::type>(); 7278678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7279678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7280678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests GTEST_ADD_REFERENCE_. 7281678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7282678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wantemplate <typename T1, typename T2> 7283678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanvoid TestGTestAddReference() { 7284678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>(); 7285678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7286678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7287678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(AddReferenceTest, MacroVersion) { 7288678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestAddReference<int&, int>(); 7289678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestAddReference<const char&, const char&>(); 7290678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7291678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7292678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests GTEST_REFERENCE_TO_CONST_. 7293678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7294678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wantemplate <typename T1, typename T2> 7295678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanvoid TestGTestReferenceToConst() { 7296678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>(); 7297678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7298678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7299678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(GTestReferenceToConstTest, Works) { 7300678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestReferenceToConst<const char&, char>(); 7301678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestReferenceToConst<const int&, const int>(); 7302678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan TestGTestReferenceToConst<const double&, double>(); 730303c314931649a999b0cf5deb0a434a1009157416jgm@google.com TestGTestReferenceToConst<const std::string&, const std::string&>(); 7304678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7305678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7306678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant. 7307678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) { 7308678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true); 7309678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value), 7310678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const_false); 7311678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7312678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7313678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can 7314678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// be implicitly converted to T2. 7315678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) { 7316678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<int, double>::value)); 7317678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<double, int>::value)); 7318678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value)); 7319678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value)); 7320678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&, 7321678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const ConversionHelperBase&>::value)); 7322678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase, 7323678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ConversionHelperBase>::value)); 7324678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7325678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7326678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1 7327678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// cannot be implicitly converted to T2. 7328678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) { 7329678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value)); 7330678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value)); 7331678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value)); 7332678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&, 7333678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ConversionHelperDerived&>::value)); 7334678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7335678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7336678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests IsContainerTest. 7337678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7338678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanclass NonContainer {}; 7339678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7340678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(IsContainerTestTest, WorksForNonContainer) { 7341678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0))); 7342678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0))); 7343678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0))); 7344678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7345678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7346678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(IsContainerTestTest, WorksForContainer) { 7347678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(sizeof(IsContainer), 7348678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan sizeof(IsContainerTest<std::vector<bool> >(0))); 7349678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(sizeof(IsContainer), 7350678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan sizeof(IsContainerTest<std::map<int, double> >(0))); 7351678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7352678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7353678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests ArrayEq(). 7354678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7355678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ArrayEqTest, WorksForDegeneratedArrays) { 7356678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(5, 5L)); 7357678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(ArrayEq('a', 0)); 7358678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7359678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7360678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ArrayEqTest, WorksForOneDimensionalArrays) { 736193fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev // Note that a and b are distinct but compatible types. 7362678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int a[] = { 0, 1 }; 7363678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan long b[] = { 0, 1 }; 7364678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, b)); 7365678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, 2, b)); 7366678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7367678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan b[0] = 2; 7368678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(ArrayEq(a, b)); 7369678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(ArrayEq(a, 1, b)); 7370678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7371678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7372678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ArrayEqTest, WorksForTwoDimensionalArrays) { 7373678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char a[][3] = { "hi", "lo" }; 7374678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char b[][3] = { "hi", "lo" }; 7375678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char c[][3] = { "hi", "li" }; 7376678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7377678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, b)); 7378678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, 2, b)); 7379678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7380678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(ArrayEq(a, c)); 7381678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_FALSE(ArrayEq(a, 2, c)); 7382678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7383678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7384678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests ArrayAwareFind(). 7385678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7386678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ArrayAwareFindTest, WorksForOneDimensionalArray) { 7387678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char a[] = "hello"; 7388678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o')); 7389678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x')); 7390678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7391678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7392678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) { 7393678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; 7394678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int b[2] = { 2, 3 }; 7395678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b)); 7396678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7397678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int c[2] = { 6, 7 }; 7398678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c)); 7399678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7400678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7401678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests CopyArray(). 7402678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7403678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(CopyArrayTest, WorksForDegeneratedArrays) { 7404678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int n = 0; 7405678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CopyArray('a', &n); 7406678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ('a', n); 7407678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7408678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7409678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(CopyArrayTest, WorksForOneDimensionalArrays) { 7410678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char a[3] = "hi"; 7411678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int b[3]; 7412ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 7413678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CopyArray(a, &b); 7414678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, b)); 7415ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#endif 7416678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7417678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int c[3]; 7418678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CopyArray(a, 3, c); 7419678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, c)); 7420678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7421678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7422678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(CopyArrayTest, WorksForTwoDimensionalArrays) { 7423678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } }; 7424678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int b[2][3]; 7425ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 7426678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CopyArray(a, &b); 7427678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, b)); 7428ed1042b09b7d6f7857ff3a4ad33acef08a016960zhanyong.wan#endif 7429678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7430678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan int c[2][3]; 7431678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan CopyArray(a, 2, c); 7432678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(ArrayEq(a, c)); 7433678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7434678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7435678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan// Tests NativeArray. 7436678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7437678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(NativeArrayTest, ConstructorFromArrayWorks) { 7438678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int a[3] = { 0, 1, 2 }; 7439f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com NativeArray<int> na(a, 3, RelationToSourceReference()); 7440678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(3U, na.size()); 7441678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a, na.begin()); 7442678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7443678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7444678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { 7445678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan typedef int Array[2]; 7446678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan Array* a = new Array[1]; 7447678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan (*a)[0] = 0; 7448678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan (*a)[1] = 1; 7449f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com NativeArray<int> na(*a, 2, RelationToSourceCopy()); 7450678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_NE(*a, na.begin()); 7451678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan delete[] a; 7452678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(0, na.begin()[0]); 7453678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(1, na.begin()[1]); 7454678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7455678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan // We rely on the heap checker to verify that na deletes the copy of 7456678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan // array. 7457678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7458678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7459678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(NativeArrayTest, TypeMembersAreCorrect) { 7460678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan StaticAssertTypeEq<char, NativeArray<char>::value_type>(); 7461678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>(); 7462678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7463678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>(); 7464678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>(); 7465678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7466678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7467678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(NativeArrayTest, MethodsWork) { 7468678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int a[3] = { 0, 1, 2 }; 7469f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com NativeArray<int> na(a, 3, RelationToSourceCopy()); 7470678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ASSERT_EQ(3U, na.size()); 7471678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(3, na.end() - na.begin()); 7472678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7473678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan NativeArray<int>::const_iterator it = na.begin(); 7474678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(0, *it); 7475678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ++it; 7476678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(1, *it); 7477678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan it++; 7478678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(2, *it); 7479678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ++it; 7480678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(na.end(), it); 7481678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7482678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(na == na); 7483678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7484f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com NativeArray<int> na2(a, 3, RelationToSourceReference()); 7485678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_TRUE(na == na2); 7486678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7487678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int b1[3] = { 0, 1, 1 }; 7488678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const int b2[4] = { 0, 1, 2, 3 }; 7489f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com EXPECT_FALSE(na == NativeArray<int>(b1, 3, RelationToSourceReference())); 7490f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com EXPECT_FALSE(na == NativeArray<int>(b2, 4, RelationToSourceCopy())); 7491678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 7492678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan 7493678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wanTEST(NativeArrayTest, WorksForTwoDimensionalArray) { 7494678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan const char a[2][3] = { "hi", "lo" }; 7495f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com NativeArray<char[3]> na(a, 2, RelationToSourceReference()); 7496678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan ASSERT_EQ(2U, na.size()); 7497678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan EXPECT_EQ(a, na.begin()); 7498678f92b8f17c8edf1a21efb401c91b355fe7bb2bzhanyong.wan} 74999748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75009748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan// Tests SkipPrefix(). 75019748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75029748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wanTEST(SkipPrefixTest, SkipsWhenPrefixMatches) { 75039748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan const char* const str = "hello"; 75049748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75059748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan const char* p = str; 75069748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_TRUE(SkipPrefix("", &p)); 75079748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_EQ(str, p); 75089748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75099748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan p = str; 75109748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_TRUE(SkipPrefix("hell", &p)); 75119748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_EQ(str + 4, p); 75129748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan} 75139748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75149748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wanTEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) { 75159748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan const char* const str = "world"; 75169748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75179748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan const char* p = str; 75189748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_FALSE(SkipPrefix("W", &p)); 75199748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_EQ(str, p); 75209748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan 75219748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan p = str; 75229748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_FALSE(SkipPrefix("world!", &p)); 75239748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan EXPECT_EQ(str, p); 75249748de060f19f81fd9dd7ccabf2be4bb624237b5zhanyong.wan} 7525f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com 7526