11be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Copyright 2005, Google Inc. 21be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// All rights reserved. 31be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 41be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Redistribution and use in source and binary forms, with or without 51be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// modification, are permitted provided that the following conditions are 61be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// met: 71be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 81be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions of source code must retain the above copyright 91be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// notice, this list of conditions and the following disclaimer. 101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions in binary form must reproduce the above 111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// copyright notice, this list of conditions and the following disclaimer 121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in the documentation and/or other materials provided with the 131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// distribution. 141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Neither the name of Google Inc. nor the names of its 151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// contributors may be used to endorse or promote products derived from 161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this software without specific prior written permission. 171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Author: wan@google.com (Zhanyong Wan) 311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for Google Test itself. This verifies that the basic constructs of 331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Google Test work. 341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest.h" 361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that the command line flag variables can be accessed 381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in code once <gtest/gtest.h> has been #included. 391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Do not move it after other #includes. 401be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) { 411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool dummy = testing::GTEST_FLAG(also_run_disabled_tests) 421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(break_on_failure) 431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(catch_exceptions) 441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(color) != "unknown" 451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(filter) != "unknown" 461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(list_tests) 471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(output) != "unknown" 481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(print_time) 4941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot || testing::GTEST_FLAG(random_seed) 501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(repeat) > 0 511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(show_internal_stack_frames) 5241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot || testing::GTEST_FLAG(shuffle) 531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(stack_trace_depth) > 0 5441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot || testing::GTEST_FLAG(stream_result_to) != "unknown" 551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania || testing::GTEST_FLAG(throw_on_failure); 561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused. 571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <limits.h> // For INT_MAX. 60fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <stdlib.h> 61fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <string.h> 62fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <time.h> 63fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 64fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <map> 65fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <vector> 66fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#include <ostream> 67fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 6841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest-spi.h" 691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Indicates that this translation unit is part of Google Test's 711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// implementation. It must come before gtest-internal-inl.h is 721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// included, or there will be a compiler error. This trick is to 731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// prevent a user from accidentally including gtest-internal-inl.h in 741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// his code. 751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_IMPLEMENTATION_ 1 761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include "src/gtest-internal-inl.h" 771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#undef GTEST_IMPLEMENTATION_ 781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace testing { 801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace internal { 811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 82fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#if GTEST_CAN_STREAM_RESULTS_ 83fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 84fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesclass StreamingListenerTest : public Test { 85fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public: 86fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes class FakeSocketWriter : public StreamingListener::AbstractSocketWriter { 87fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public: 88fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // Sends a string to the socket. 89fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes virtual void Send(const string& message) { output_ += message; } 90fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 91fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes string output_; 92fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }; 93fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 94fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes StreamingListenerTest() 95fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes : fake_sock_writer_(new FakeSocketWriter), 96fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_(fake_sock_writer_), 97fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes test_info_obj_("FooTest", "Bar", NULL, NULL, 0, NULL) {} 98fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 99fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes protected: 100fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes string* output() { return &(fake_sock_writer_->output_); } 101fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 102fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes FakeSocketWriter* const fake_sock_writer_; 103fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes StreamingListener streamer_; 104fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTest unit_test_; 105fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestInfo test_info_obj_; // The name test_info_ was taken by testing::Test. 106fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes}; 107fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 108fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestProgramEnd) { 109fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 110fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestProgramEnd(unit_test_); 111fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestProgramEnd&passed=1\n", *output()); 112fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 113fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 114fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestIterationEnd) { 115fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 116fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestIterationEnd(unit_test_, 42); 117fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output()); 118fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 119fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 120fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestCaseStart) { 121fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 122fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL)); 123fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestCaseStart&name=FooTest\n", *output()); 124fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 125fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 126fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestCaseEnd) { 127fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 128fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL)); 129fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output()); 130fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 131fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 132fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestStart) { 133fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 134fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestStart(test_info_obj_); 135fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestStart&name=Bar\n", *output()); 136fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 137fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 138fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestEnd) { 139fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 140fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestEnd(test_info_obj_); 141fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("event=TestEnd&passed=1&elapsed_time=0ms\n", *output()); 142fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 143fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 144fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(StreamingListenerTest, OnTestPartResult) { 145fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output() = ""; 146fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes streamer_.OnTestPartResult(TestPartResult( 147fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestPartResult::kFatalFailure, "foo.cc", 42, "failed=\n&%")); 148fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 149fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // Meta characters in the failure message should be properly escaped. 150fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ( 151fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", 152fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes *output()); 153fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 154fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 155fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#endif // GTEST_CAN_STREAM_RESULTS_ 156fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 15741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Provides access to otherwise private parts of the TestEventListeners class 15841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// that are needed to test it. 15941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass TestEventListenersAccessor { 16041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 16141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static TestEventListener* GetRepeater(TestEventListeners* listeners) { 16241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return listeners->repeater(); 16341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 1641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SetDefaultResultPrinter(TestEventListeners* listeners, 16641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListener* listener) { 16741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners->SetDefaultResultPrinter(listener); 16841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 16941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SetDefaultXmlGenerator(TestEventListeners* listeners, 17041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListener* listener) { 17141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners->SetDefaultXmlGenerator(listener); 17241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 1731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool EventForwardingEnabled(const TestEventListeners& listeners) { 17541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return listeners.EventForwardingEnabled(); 17641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 17741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 17841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SuppressEventForwarding(TestEventListeners* listeners) { 17941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners->SuppressEventForwarding(); 18041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 18141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 1821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 183fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesclass UnitTestRecordPropertyTestHelper : public Test { 184fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes protected: 185fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordPropertyTestHelper() {} 186fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 187fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // Forwards to UnitTest::RecordProperty() to bypass access controls. 188fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes void UnitTestRecordProperty(const char* key, const std::string& value) { 189fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.RecordProperty(key, value); 190fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 191fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 192fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTest unit_test_; 193fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes}; 194fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace internal 1961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace testing 1971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::AssertionFailure; 1991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::AssertionResult; 2001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::AssertionSuccess; 2011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::DoubleLE; 20241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::EmptyTestEventListener; 203fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesusing testing::Environment; 2041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::FloatLE; 2051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(also_run_disabled_tests); 2061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(break_on_failure); 2071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(catch_exceptions); 2081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(color); 20941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::GTEST_FLAG(death_test_use_fork); 2101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(filter); 2111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(list_tests); 2121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(output); 2131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(print_time); 21441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::GTEST_FLAG(random_seed); 2151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(repeat); 2161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(show_internal_stack_frames); 21741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::GTEST_FLAG(shuffle); 2181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(stack_trace_depth); 21941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::GTEST_FLAG(stream_result_to); 2201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::GTEST_FLAG(throw_on_failure); 2211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::IsNotSubstring; 2221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::IsSubstring; 2231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::Message; 2241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::ScopedFakeTestPartResultReporter; 2251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::StaticAssertTypeEq; 2261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::Test; 22741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::TestCase; 22841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::TestEventListeners; 229fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesusing testing::TestInfo; 2301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::TestPartResult; 2311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::TestPartResultArray; 23241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::TestProperty; 23341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::TestResult; 234fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesusing testing::TimeInMillis; 2351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::UnitTest; 23641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::kMaxStackTraceDepth; 23741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::AddReference; 23841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::AlwaysFalse; 23941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::AlwaysTrue; 2401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::AppendUserMessage; 24141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ArrayAwareFind; 24241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ArrayEq; 2431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::CodePointToUtf8; 24441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::CompileAssertTypesEqual; 24541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::CopyArray; 24641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::CountIf; 2471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::EqFailure; 2481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::FloatingPoint; 24941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ForEach; 250fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesusing testing::internal::FormatEpochTimeInMillisAsIso8601; 25141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::FormatTimeInMillisAsSeconds; 25241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GTestFlagSaver; 2531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::GetCurrentOsStackTraceExceptTop; 25441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GetElementOr; 25541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GetNextRandomSeed; 25641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GetRandomSeedFromFlag; 2571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::GetTestTypeId; 258fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesusing testing::internal::GetTimeInMillis; 2591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::GetTypeId; 26041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GetUnitTestImpl; 26141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ImplicitlyConvertible; 2621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::Int32; 2631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::Int32FromEnvOrDie; 26441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::IsAProtocolMessage; 26541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::IsContainer; 26641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::IsContainerTest; 26741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::IsNotContainer; 26841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::NativeArray; 26941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ParseInt32Flag; 27041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::RemoveConst; 27141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::RemoveReference; 2721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::ShouldRunTestOnShard; 2731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::ShouldShard; 2741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::ShouldUseColor; 27541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::Shuffle; 27641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ShuffleRange; 27741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::SkipPrefix; 2781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::StreamableToString; 2791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::String; 28041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::TestEventListenersAccessor; 28141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::TestResultAccessor; 28241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::UInt32; 2831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::WideStringToUtf8; 28441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::kCopy; 28541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::kMaxRandomSeed; 28641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::kReference; 28741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::kTestTypeIdInGoogleTest; 28841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::scoped_ptr; 28941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 29041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_STREAM_REDIRECTION 29141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::CaptureStdout; 29241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::GetCapturedStdout; 29341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 29441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 29541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_IS_THREADSAFE 29641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::internal::ThreadWithParam; 29741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 29841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 29941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass TestingVector : public std::vector<int> { 30041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 30141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 30241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot::std::ostream& operator<<(::std::ostream& os, 30341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestingVector& vector) { 30441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot os << "{ "; 30541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (size_t i = 0; i < vector.size(); i++) { 30641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot os << vector[i] << " "; 30741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 30841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot os << "}"; 30941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return os; 31041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 3111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This line tests that we can define tests in an unnamed namespace. 3131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace { 3141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GetRandomSeedFromFlagTest, HandlesZero) { 31641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int seed = GetRandomSeedFromFlag(0); 31741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(1, seed); 31841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed)); 31941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 32041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 32141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GetRandomSeedFromFlagTest, PreservesValidSeed) { 32241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, GetRandomSeedFromFlag(1)); 32341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(2, GetRandomSeedFromFlag(2)); 32441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1)); 32541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 32641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GetRandomSeedFromFlag(kMaxRandomSeed)); 32741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 32841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 32941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) { 33041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int seed1 = GetRandomSeedFromFlag(-1); 33141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(1, seed1); 33241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed)); 33341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 33441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1); 33541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(1, seed2); 33641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed)); 33741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 33841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 33941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GetNextRandomSeedTest, WorksForValidInput) { 34041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(2, GetNextRandomSeed(1)); 34141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(3, GetNextRandomSeed(2)); 34241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 34341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GetNextRandomSeed(kMaxRandomSeed - 1)); 34441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed)); 34541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 34641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We deliberately don't test GetNextRandomSeed() with invalid 34741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // inputs, as that requires death tests, which are expensive. This 34841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // is fine as GetNextRandomSeed() is internal and has a 34941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // straightforward definition. 35041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 35141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 35241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic void ClearCurrentTestPartResults() { 35341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestResultAccessor::ClearTestPartResults( 35441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GetUnitTestImpl()->current_test_result()); 35541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 35641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 3571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests GetTypeId. 3581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(GetTypeIdTest, ReturnsSameValueForSameType) { 3601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>()); 3611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>()); 3621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass SubClassOfTest : public Test {}; 3651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass AnotherSubClassOfTest : public Test {}; 3661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) { 3681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>()); 3691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<int>(), GetTypeId<char>()); 3701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<int>(), GetTestTypeId()); 3711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId()); 3721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId()); 3731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>()); 3741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that GetTestTypeId() returns the same value, no matter it 3771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is called from inside Google Test or outside of it. 3781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) { 3791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId()); 3801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests FormatTimeInMillisAsSeconds(). 3831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { 38541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); 3861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { 38941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3)); 39041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); 39141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); 39241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); 39341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); 3941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { 39741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3)); 39841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); 39941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); 40041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); 40141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); 4021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 4031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 404fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests FormatEpochTimeInMillisAsIso8601(). The correctness of conversion 405fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// for particular dates below was verified in Python using 406fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// datetime.datetime.fromutctimestamp(<timetamp>/1000). 407fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 408fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we 409fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// have to set up a particular timezone to obtain predictable results. 410fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesclass FormatEpochTimeInMillisAsIso8601Test : public Test { 411fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public: 412fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // On Cygwin, GCC doesn't allow unqualified integer literals to exceed 413fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // 32 bits, even when 64-bit integer types are available. We have to 414fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // force the constants to have a 64-bit type here. 415fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes static const TimeInMillis kMillisPerSec = 1000; 416fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 417fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes private: 418fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes virtual void SetUp() { 419fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes saved_tz_ = NULL; 420fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#if _MSC_VER 421fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(push) // Saves the current warning state. 422fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(disable:4996) // Temporarily disables warning 4996 423fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // (function or variable may be unsafe 424fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // for getenv, function is deprecated for 425fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // strdup). 426fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes if (getenv("TZ")) 427fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes saved_tz_ = strdup(getenv("TZ")); 428fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(pop) // Restores the warning state again. 429fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#else 430fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes if (getenv("TZ")) 431fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes saved_tz_ = strdup(getenv("TZ")); 432fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#endif 433fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 434fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use. We 435fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // cannot use the local time zone because the function's output depends 436fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // on the time zone. 437fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes SetTimeZone("UTC+00"); 438fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 439fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 440fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes virtual void TearDown() { 441fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes SetTimeZone(saved_tz_); 442fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes free(const_cast<char*>(saved_tz_)); 443fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes saved_tz_ = NULL; 444fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 445fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 446fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes static void SetTimeZone(const char* time_zone) { 447fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // tzset() distinguishes between the TZ variable being present and empty 448fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // and not being present, so we have to consider the case of time_zone 449fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // being NULL. 450fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#if _MSC_VER 451fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // ...Unless it's MSVC, whose standard library's _putenv doesn't 452fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // distinguish between an empty and a missing variable. 453fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string env_var = 454fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string("TZ=") + (time_zone ? time_zone : ""); 455fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes _putenv(env_var.c_str()); 456fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(push) // Saves the current warning state. 457fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(disable:4996) // Temporarily disables warning 4996 458fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // (function is deprecated). 459fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes tzset(); 460fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes# pragma warning(pop) // Restores the warning state again. 461fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#else 462fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes if (time_zone) { 463fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes setenv(("TZ"), time_zone, 1); 464fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } else { 465fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unsetenv("TZ"); 466fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 467fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes tzset(); 468fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#endif 469fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 470fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 471fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const char* saved_tz_; 472fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes}; 473fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 474fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesconst TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec; 475fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 476fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) { 477fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("2011-10-31T18:52:42", 478fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec)); 479fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 480fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 481fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) { 482fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ( 483fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "2011-10-31T18:52:42", 484fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234)); 485fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 486fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 487fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) { 488fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("2011-09-03T05:07:02", 489fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec)); 490fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 491fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 492fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) { 493fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("2011-09-28T17:08:22", 494fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec)); 495fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 496fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 497fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) { 498fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("1970-01-01T00:00:00", FormatEpochTimeInMillisAsIso8601(0)); 499fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 500fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 50141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_CAN_COMPARE_NULL 50241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 50341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifdef __BORLANDC__ 50441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Silences warnings: "Condition is always true", "Unreachable code" 50541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option push -w-ccc -w-rch 50641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 5071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null 5091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// pointer literal. 5101be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NullLiteralTest, IsTrueForNullLiterals) { 5111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); 5121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); 5131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U)); 5141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L)); 5151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null 5181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// pointer literal. 5191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NullLiteralTest, IsFalseForNonNullLiterals) { 5201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1)); 5211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0)); 5221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a')); 5231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL))); 5241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifdef __BORLANDC__ 52741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Restores warnings after previous "#pragma option push" suppressed them. 52841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option pop 52941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 53041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 53141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_CAN_COMPARE_NULL 5321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 5331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests CodePointToUtf8(). 5341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the NUL character L'\0' is encoded correctly. 5361be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncodeNul) { 537fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("", CodePointToUtf8(L'\0')); 5381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ASCII characters are encoded correctly. 5411be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncodeAscii) { 542fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("a", CodePointToUtf8(L'a')); 543fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("Z", CodePointToUtf8(L'Z')); 544fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("&", CodePointToUtf8(L'&')); 545fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\x7F", CodePointToUtf8(L'\x7F')); 5461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 8 to 11 bits are encoded 5491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 110xxxxx 10xxxxxx. 5501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncode8To11Bits) { 5511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 000 1101 0011 => 110-00011 10-010011 552fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xC3\x93", CodePointToUtf8(L'\xD3')); 5531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 101 0111 0110 => 110-10101 10-110110 55541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints 55641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // in wide strings and wide chars. In order to accomodate them, we have to 55741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // introduce such character constants as integers. 558fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xD5\xB6", 559fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes CodePointToUtf8(static_cast<wchar_t>(0x576))); 5601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 12 to 16 bits are encoded 5631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 1110xxxx 10xxxxxx 10xxxxxx. 5641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncode12To16Bits) { 5651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 566fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xE0\xA3\x93", 567fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes CodePointToUtf8(static_cast<wchar_t>(0x8D3))); 5681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 570fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xEC\x9D\x8D", 571fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes CodePointToUtf8(static_cast<wchar_t>(0xC74D))); 5721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_WIDE_STRING_USES_UTF16_ 5751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests in this group require a wchar_t to hold > 16 bits, and thus 5761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is 5771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 16-bit wide. This code may not compile on those systems. 5781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 17 to 21 bits are encoded 5801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. 5811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncode17To21Bits) { 5821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 583fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3')); 5841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000 586fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400')); 5871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 589fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634')); 5901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that encoding an invalid code-point generates the expected result. 5931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) { 594fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ("(Invalid Unicode 0x1234ABCD)", CodePointToUtf8(L'\x1234ABCD')); 5951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 5961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_WIDE_STRING_USES_UTF16_ 5981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests WideStringToUtf8(). 6001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the NUL character L'\0' is encoded correctly. 6021be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncodeNul) { 6031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str()); 6041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str()); 6051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ASCII strings are encoded correctly. 6081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncodeAscii) { 6091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str()); 6101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str()); 6111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str()); 6121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str()); 6131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 8 to 11 bits are encoded 6161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 110xxxxx 10xxxxxx. 6171be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncode8To11Bits) { 6181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 000 1101 0011 => 110-00011 10-010011 6191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str()); 6201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str()); 6211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 101 0111 0110 => 110-10101 10-110110 62341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s[] = { 0x576, '\0' }; 62441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str()); 62541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str()); 6261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 12 to 16 bits are encoded 6291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 1110xxxx 10xxxxxx 10xxxxxx. 6301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncode12To16Bits) { 6311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 63241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s1[] = { 0x8D3, '\0' }; 63341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str()); 63441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str()); 6351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 63741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s2[] = { 0xC74D, '\0' }; 63841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str()); 63941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str()); 6401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the conversion stops when the function encounters \0 character. 6431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, StopsOnNulCharacter) { 6441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str()); 6451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the conversion stops when the function reaches the limit 6481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// specified by the 'length' parameter. 6491be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) { 6501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str()); 6511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_WIDE_STRING_USES_UTF16_ 6541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Unicode code-points that have 17 to 21 bits are encoded 6551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile 6561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// on the systems using UTF-16 encoding. 6571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncode17To21Bits) { 6581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 6591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str()); 6601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str()); 6611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 6631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str()); 6641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str()); 6651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that encoding an invalid code-point generates the expected result. 6681be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) { 6691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(Invalid Unicode 0xABCDFF)", 6701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania WideStringToUtf8(L"\xABCDFF", -1).c_str()); 6711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else // !GTEST_WIDE_STRING_USES_UTF16_ 6731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that surrogate pairs are encoded correctly on the systems using 6741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// UTF-16 encoding in the wide strings. 6751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) { 67641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s[] = { 0xD801, 0xDC00, '\0' }; 67741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str()); 6781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that encoding an invalid UTF-16 surrogate pair 6811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// generates the expected result. 6821be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) { 6831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Leading surrogate is at the end of the string. 68441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s1[] = { 0xD800, '\0' }; 68541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str()); 6861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Leading surrogate is not followed by the trailing surrogate. 68741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s2[] = { 0xD800, 'M', '\0' }; 68841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str()); 6891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Trailing surrogate appearas without a leading surrogate. 69041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' }; 69141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str()); 6921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 6931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_WIDE_STRING_USES_UTF16_ 6941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that codepoint concatenation works correctly. 6961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_WIDE_STRING_USES_UTF16_ 6971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 69841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'}; 6991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 7001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xF4\x88\x98\xB4" 7011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xEC\x9D\x8D" 7021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\n" 7031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xD5\xB6" 7041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xE0\xA3\x93" 7051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xF4\x88\x98\xB4", 70641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot WideStringToUtf8(s, -1).c_str()); 7071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 7081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 7091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 71041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'}; 7111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 7121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93", 71341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot WideStringToUtf8(s, -1).c_str()); 7141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 7151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_WIDE_STRING_USES_UTF16_ 7161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 71741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests the Random class. 71841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 71941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) { 72041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random(42); 72141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 72241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random.Generate(0), 72341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Cannot generate a number in the range \\[0, 0\\)"); 72441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 72541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random.Generate(testing::internal::Random::kMaxRange + 1), 72641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Generation of a number in \\[0, 2147483649\\) was requested, " 72741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "but this can only generate numbers in \\[0, 2147483648\\)"); 72841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 72941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 73041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RandomTest, GeneratesNumbersWithinRange) { 73141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const UInt32 kRange = 10000; 73241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random(12345); 73341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < 10; i++) { 73441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i; 73541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 73641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 73741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random2(testing::internal::Random::kMaxRange); 73841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < 10; i++) { 73941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i; 74041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 74141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 74241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 74341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RandomTest, RepeatsWhenReseeded) { 74441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int kSeed = 123; 74541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int kArraySize = 10; 74641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const UInt32 kRange = 10000; 74741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot UInt32 values[kArraySize]; 74841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 74941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random(kSeed); 75041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < kArraySize; i++) { 75141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values[i] = random.Generate(kRange); 75241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 75341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 75441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random.Reseed(kSeed); 75541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < kArraySize; i++) { 75641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i; 75741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 75841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 75941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 76041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests STL container utilities. 76141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 76241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests CountIf(). 76341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 76441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic bool IsPositive(int n) { return n > 0; } 76541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 76641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ContainerUtilityTest, CountIf) { 76741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot std::vector<int> v; 76841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, CountIf(v, IsPositive)); // Works for an empty container. 76941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 77041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(-1); 77141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(0); 77241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, CountIf(v, IsPositive)); // Works when no value satisfies. 77341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 77441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(2); 77541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(-10); 77641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(10); 77741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(2, CountIf(v, IsPositive)); 77841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 77941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 78041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ForEach(). 78141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 78241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic int g_sum = 0; 78341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic void Accumulate(int n) { g_sum += n; } 78441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 78541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ContainerUtilityTest, ForEach) { 78641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot std::vector<int> v; 78741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_sum = 0; 78841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ForEach(v, Accumulate); 78941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, g_sum); // Works for an empty container; 79041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 79141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_sum = 0; 79241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(1); 79341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ForEach(v, Accumulate); 79441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, g_sum); // Works for a container with one element. 79541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 79641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_sum = 0; 79741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(20); 79841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.push_back(300); 79941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ForEach(v, Accumulate); 80041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(321, g_sum); 80141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 80241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 80341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GetElementOr(). 80441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ContainerUtilityTest, GetElementOr) { 80541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot std::vector<char> a; 80641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('x', GetElementOr(a, 0, 'x')); 80741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 80841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a.push_back('a'); 80941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a.push_back('b'); 81041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('a', GetElementOr(a, 0, 'x')); 81141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('b', GetElementOr(a, 1, 'x')); 81241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('x', GetElementOr(a, -2, 'x')); 81341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('x', GetElementOr(a, 2, 'x')); 81441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 81541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 81641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ContainerUtilityDeathTest, ShuffleRange) { 81741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot std::vector<int> a; 81841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a.push_back(0); 81941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a.push_back(1); 82041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a.push_back(2); 82141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random(1); 82241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 82341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 82441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random, -1, 1, &a), 82541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Invalid shuffle range start -1: must be in range \\[0, 3\\]"); 82641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 82741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random, 4, 4, &a), 82841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Invalid shuffle range start 4: must be in range \\[0, 3\\]"); 82941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 83041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random, 3, 2, &a), 83141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Invalid shuffle range finish 2: must be in range \\[3, 3\\]"); 83241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 83341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random, 3, 4, &a), 83441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Invalid shuffle range finish 4: must be in range \\[3, 3\\]"); 83541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 83641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 83741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass VectorShuffleTest : public Test { 83841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 83941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const int kVectorSize = 20; 84041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 84141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot VectorShuffleTest() : random_(1) { 84241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < kVectorSize; i++) { 84341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector_.push_back(i); 84441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 84541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 84641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 84741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool VectorIsCorrupt(const TestingVector& vector) { 84841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (kVectorSize != static_cast<int>(vector.size())) { 84941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return true; 85041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 85141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 85241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool found_in_vector[kVectorSize] = { false }; 85341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (size_t i = 0; i < vector.size(); i++) { 85441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int e = vector[i]; 85541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (e < 0 || e >= kVectorSize || found_in_vector[e]) { 85641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return true; 85741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 85841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot found_in_vector[e] = true; 85941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 86041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 86141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Vector size is correct, elements' range is correct, no 86241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // duplicate elements. Therefore no corruption has occurred. 86341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return false; 86441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 86541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 86641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool VectorIsNotCorrupt(const TestingVector& vector) { 86741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return !VectorIsCorrupt(vector); 86841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 86941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 87041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) { 87141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = begin; i < end; i++) { 87241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (i != vector[i]) { 87341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return true; 87441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 87541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 87641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return false; 87741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 87841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 87941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool RangeIsUnshuffled( 88041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestingVector& vector, int begin, int end) { 88141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return !RangeIsShuffled(vector, begin, end); 88241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 88341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 88441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool VectorIsShuffled(const TestingVector& vector) { 88541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return RangeIsShuffled(vector, 0, static_cast<int>(vector.size())); 88641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 88741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 88841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static bool VectorIsUnshuffled(const TestingVector& vector) { 88941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return !VectorIsShuffled(vector); 89041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 89141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 89241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::internal::Random random_; 89341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestingVector vector_; 89441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; // class VectorShuffleTest 89541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 89641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotconst int VectorShuffleTest::kVectorSize; 89741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 89841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, HandlesEmptyRange) { 89941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Tests an empty range at the beginning... 90041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, 0, 0, &vector_); 90141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 90241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 90341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 90441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ...in the middle... 90541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_); 90641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 90741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 90841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 90941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ...at the end... 91041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_); 91141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 91241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 91341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 91441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ...and past the end. 91541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_); 91641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 91741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 91841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 91941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 92041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) { 92141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Tests a size one range at the beginning... 92241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, 0, 1, &vector_); 92341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 92441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 92541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 92641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ...in the middle... 92741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_); 92841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 92941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 93041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 93141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ...and at the end. 93241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_); 93341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 93441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsUnshuffled, vector_); 93541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 93641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 93741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Because we use our own random number generator and a fixed seed, 93841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// we can guarantee that the following "random" tests will succeed. 93941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 94041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, ShufflesEntireVector) { 94141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Shuffle(&random_, &vector_); 94241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 94341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_; 94441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 94541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Tests the first and last elements in particular to ensure that 94641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // there are no off-by-one problems in our shuffle algorithm. 94741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NE(0, vector_[0]); 94841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]); 94941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 95041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 95141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, ShufflesStartOfVector) { 95241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int kRangeSize = kVectorSize/2; 95341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 95441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, 0, kRangeSize, &vector_); 95541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 95641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 95741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize); 95841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize); 95941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 96041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 96141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, ShufflesEndOfVector) { 96241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int kRangeSize = kVectorSize / 2; 96341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_); 96441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 96541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 96641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 96741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize); 96841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 96941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 97041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, ShufflesMiddleOfVector) { 97141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int kRangeSize = kVectorSize/3; 97241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_); 97341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 97441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 97541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 97641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize); 97741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize); 97841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 97941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 98041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(VectorShuffleTest, ShufflesRepeatably) { 98141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestingVector vector2; 98241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < kVectorSize; i++) { 98341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector2.push_back(i); 98441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 98541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 98641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random_.Reseed(1234); 98741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Shuffle(&random_, &vector_); 98841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random_.Reseed(1234); 98941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Shuffle(&random_, &vector2); 99041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 99141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector_); 99241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1(VectorIsNotCorrupt, vector2); 99341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 99441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < kVectorSize; i++) { 99541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i; 99641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 9971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 9981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 99941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests the size of the AssertHelper class. 100041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 100141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertHelperTest, AssertHelperIsSmall) { 100241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // To avoid breaking clients that use lots of assertions in one 100341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // function, we cannot grow the size of AssertHelper. 100441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*)); 100541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 10061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests String::EndsWithCaseInsensitive(). 10081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, EndsWithCaseInsensitive) { 1009fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "BAR")); 1010fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(String::EndsWithCaseInsensitive("foobaR", "bar")); 1011fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "")); 1012fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(String::EndsWithCaseInsensitive("", "")); 10131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1014fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FALSE(String::EndsWithCaseInsensitive("Foobar", "foo")); 1015fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FALSE(String::EndsWithCaseInsensitive("foobar", "Foo")); 1016fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FALSE(String::EndsWithCaseInsensitive("", "foo")); 10171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 101941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// C++Builder's preprocessor is buggy; it fails to expand macros that 102041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// appear in macro parameters after wide char literals. Provide an alias 102141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// for NULL as a workaround. 102241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic const wchar_t* const kNull = NULL; 102341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests String::CaseInsensitiveWideCStringEquals 10251be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, CaseInsensitiveWideCStringEquals) { 10261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL)); 102741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"")); 102841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull)); 102941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar")); 103041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull)); 10311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar")); 10321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR")); 10331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar")); 10341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 10371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests String::ShowWideCString(). 10391be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, ShowWideCString) { 10401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(null)", 10411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania String::ShowWideCString(NULL).c_str()); 10421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", String::ShowWideCString(L"").c_str()); 10431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str()); 10441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 104641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# if GTEST_OS_WINDOWS_MOBILE 10471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, AnsiAndUtf16Null) { 10481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(NULL, String::AnsiToUtf16(NULL)); 10491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL)); 10501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10521be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, AnsiAndUtf16ConvertBasic) { 10531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* ansi = String::Utf16ToAnsi(L"str"); 10541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("str", ansi); 10551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete [] ansi; 10561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const WCHAR* utf16 = String::AnsiToUtf16("str"); 105741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, wcsncmp(L"str", utf16, 3)); 10581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete [] utf16; 10591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10611be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringTest, AnsiAndUtf16ConvertPathChars) { 10621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?"); 10631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ(".:\\ \"*?", ansi); 10641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete [] ansi; 10651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?"); 106641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3)); 10671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete [] utf16; 10681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 106941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif // GTEST_OS_WINDOWS_MOBILE 10701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 10721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests TestProperty construction. 10741be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestPropertyTest, StringValue) { 10751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property("key", "1"); 10761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key", property.key()); 10771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1", property.value()); 10781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 10801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests TestProperty replacing a value. 10811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestPropertyTest, ReplaceStringValue) { 10821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property("key", "1"); 10831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1", property.value()); 10841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania property.SetValue("2"); 10851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("2", property.value()); 10861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 10871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 108841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// AddFatalFailure() and AddNonfatalFailure() must be stand-alone 108941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// functions (i.e. their definitions cannot be inlined at the call 109041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// sites), or C++Builder won't compile the code. 109141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic void AddFatalFailure() { 109241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FAIL() << "Expected fatal failure."; 109341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 109441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 109541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic void AddNonfatalFailure() { 109641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "Expected non-fatal failure."; 109741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 109841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass ScopedFakeTestPartResultReporterTest : public Test { 110041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: // Must be public and not protected due to a bug in g++ 3.4.2. 11011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania enum FailureMode { 11021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FATAL_FAILURE, 11031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NONFATAL_FAILURE 11041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 11051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void AddFailure(FailureMode failure) { 11061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (failure == FATAL_FAILURE) { 110741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddFatalFailure(); 11081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } else { 110941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddNonfatalFailure(); 11101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 11131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ScopedFakeTestPartResultReporter intercepts test 11151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// failures. 11161be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) { 11171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray results; 11181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 11191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter reporter( 11201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, 11211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania &results); 11221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailure(NONFATAL_FAILURE); 11231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailure(FATAL_FAILURE); 11241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(2, results.size()); 11271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 11281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 11291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 11301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) { 11321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray results; 11331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 11341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Tests, that the deprecated constructor still works. 11351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter reporter(&results); 11361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailure(NONFATAL_FAILURE); 11371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, results.size()); 11391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 11401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 114141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_IS_THREADSAFE 11421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass ScopedFakeTestPartResultReporterWithThreadsTest 11441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania : public ScopedFakeTestPartResultReporterTest { 11451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 11461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void AddFailureInOtherThread(FailureMode failure) { 114741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL); 114841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot thread.Join(); 11491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 11511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11521be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ScopedFakeTestPartResultReporterWithThreadsTest, 11531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania InterceptsTestFailuresInAllThreads) { 11541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray results; 11551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 11561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter reporter( 11571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results); 11581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailure(NONFATAL_FAILURE); 11591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailure(FATAL_FAILURE); 11601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailureInOtherThread(NONFATAL_FAILURE); 11611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailureInOtherThread(FATAL_FAILURE); 11621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 11631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(4, results.size()); 11651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 11661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 11671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed()); 11681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed()); 11691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 11701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 117141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_IS_THREADSAFE 11721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 117341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}. Makes sure that they 117441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// work even if the failure is generated in a called function rather than 117541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// the current context. 11761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest; 11781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11791be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) { 118041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure."); 118141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 118241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 118341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_GLOBAL_STRING 118441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ExpectFatalFailureTest, AcceptsStringObject) { 118541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure.")); 118641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 118741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 118841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 118941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) { 119041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(AddFatalFailure(), 119141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::std::string("Expected fatal failure.")); 11921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 11931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 11941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) { 11951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We have another test below to verify that the macro catches fatal 11961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failures generated on another thread. 119741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(), 11981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected fatal failure."); 11991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 120141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 120241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Silences warnings: "Condition is always true" 120341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option push -w-ccc 120441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 120541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void 12071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function even when the statement in it contains ASSERT_*. 12081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint NonVoidFunction() { 12101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 12111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 12121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return 0; 12131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) { 12161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NonVoidFunction(); 12171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the 12201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// current function even though 'statement' generates a fatal failure. 12211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid DoesNotAbortHelper(bool* aborted) { 12231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 12241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 12251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania *aborted = false; 12271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 122941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 123041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Restores warnings after previous "#pragma option push" suppressed them. 123141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option pop 123241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 123341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12341be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFatalFailureTest, DoesNotAbort) { 12351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool aborted = true; 12361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania DoesNotAbortHelper(&aborted); 12371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(aborted); 12381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a 12411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// statement that contains a macro which expands to code containing an 12421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// unprotected comma. 12431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastatic int global_var = 0; 12451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++ 12461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 124841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ 124941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder. 12501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ 12511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_USE_UNPROTECTED_COMMA_; 125241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddFatalFailure(); 12531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 125441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 12551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE_ON_ALL_THREADS({ 12571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_USE_UNPROTECTED_COMMA_; 125841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddFatalFailure(); 12591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 12601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}. 12631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest; 12651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12661be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) { 126741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 12681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected non-fatal failure."); 12691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 127141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_GLOBAL_STRING 127241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) { 127341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 127441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::string("Expected non-fatal failure.")); 127541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 127641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 127741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 127841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) { 127941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 128041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::std::string("Expected non-fatal failure.")); 128141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 128241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) { 12841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We have another test below to verify that the macro catches 12851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // non-fatal failures generated on another thread. 128641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(), 12871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected non-fatal failure."); 12881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 12891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a 12911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// statement that contains a macro which expands to code containing an 12921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// unprotected comma. 12931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 12941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ 12951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_USE_UNPROTECTED_COMMA_; 129641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddNonfatalFailure(); 12971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 12981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 12991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({ 13001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_USE_UNPROTECTED_COMMA_; 130141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddNonfatalFailure(); 13021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 13031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 13041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 130541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_IS_THREADSAFE 13061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef ScopedFakeTestPartResultReporterWithThreadsTest 13081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ExpectFailureWithThreadsTest; 13091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13101be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) { 13111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE), 13121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected fatal failure."); 13131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 13141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) { 13161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( 13171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); 13181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 13191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 132041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_IS_THREADSAFE 132141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 132241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests the TestProperty class. 132341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 132441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestPropertyTest, ConstructorWorks) { 132541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty property("key", "value"); 132641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key", property.key()); 132741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("value", property.value()); 132841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 132941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 133041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestPropertyTest, SetValue) { 133141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestProperty property("key", "value_1"); 133241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key", property.key()); 133341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot property.SetValue("value_2"); 133441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key", property.key()); 133541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("value_2", property.value()); 133641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 13371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the TestResult class 13391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The test fixture for testing TestResult. 13411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TestResultTest : public Test { 13421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 134341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot typedef std::vector<TestPartResult> TPRVector; 13441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We make use of 2 TestPartResult objects, 13461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResult * pr1, * pr2; 13471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // ... and 3 TestResult objects. 13491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestResult * r0, * r1, * r2; 13501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 13521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // pr1 is for success. 135341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot pr1 = new TestPartResult(TestPartResult::kSuccess, 135441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo/bar.cc", 135541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10, 135641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Success!"); 13571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // pr2 is for fatal failure. 135941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot pr2 = new TestPartResult(TestPartResult::kFatalFailure, 136041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo/bar.cc", 13611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania -1, // This line number means "unknown" 13621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Failure!"); 13631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates the TestResult objects. 13651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania r0 = new TestResult(); 13661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania r1 = new TestResult(); 13671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania r2 = new TestResult(); 13681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // In order to test TestResult, we need to modify its internal 137041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // state, in particular the TestPartResult vector it holds. 137141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // test_part_results() returns a const reference to this vector. 13721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We cast it to a non-const object s.t. it can be modified (yes, 13731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // this is a hack). 137441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TPRVector* results1 = const_cast<TPRVector*>( 137541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot &TestResultAccessor::test_part_results(*r1)); 137641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TPRVector* results2 = const_cast<TPRVector*>( 137741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot &TestResultAccessor::test_part_results(*r2)); 13781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // r0 is an empty TestResult. 13801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // r1 contains a single SUCCESS TestPartResult. 138241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot results1->push_back(*pr1); 13831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // r2 contains a SUCCESS, and a FAILURE. 138541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot results2->push_back(*pr1); 138641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot results2->push_back(*pr2); 13871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 13881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void TearDown() { 13901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete pr1; 13911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete pr2; 13921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete r0; 13941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete r1; 13951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete r2; 13961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 13971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 139841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Helper that compares two two TestPartResults. 139941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void CompareTestPartResult(const TestPartResult& expected, 140041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestPartResult& actual) { 140141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.type(), actual.type()); 140241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ(expected.file_name(), actual.file_name()); 140341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.line_number(), actual.line_number()); 140441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ(expected.summary(), actual.summary()); 140541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ(expected.message(), actual.message()); 140641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.passed(), actual.passed()); 140741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.failed(), actual.failed()); 140841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed()); 140941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed()); 141041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 141141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 14121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 141341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::total_part_count(). 14141be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestResultTest, total_part_count) { 141541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(0, r0->total_part_count()); 141641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(1, r1->total_part_count()); 141741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(2, r2->total_part_count()); 14181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 142041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::Passed(). 14211be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestResultTest, Passed) { 14221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(r0->Passed()); 14231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(r1->Passed()); 14241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FALSE(r2->Passed()); 14251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 142741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::Failed(). 14281be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestResultTest, Failed) { 14291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FALSE(r0->Failed()); 14301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FALSE(r1->Failed()); 14311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(r2->Failed()); 14321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 143441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::GetTestPartResult(). 143541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 143641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottypedef TestResultTest TestResultDeathTest; 143741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 143841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(TestResultDeathTest, GetTestPartResult) { 143941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompareTestPartResult(*pr1, r2->GetTestPartResult(0)); 144041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompareTestPartResult(*pr2, r2->GetTestPartResult(1)); 144141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), ""); 144241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), ""); 144341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 144441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 144541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult has no properties when none are added. 14461be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) { 14471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestResult test_result; 144841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(0, test_result.test_property_count()); 14491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 145141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult has the expected property when added. 14521be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) { 14531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestResult test_result; 14541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property("key_1", "1"); 1455fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property); 145641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(1, test_result.test_property_count()); 145741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& actual_property = test_result.GetTestProperty(0); 14581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key_1", actual_property.key()); 14591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1", actual_property.value()); 14601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 146241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult has multiple properties when added. 14631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) { 14641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestResult test_result; 14651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_1("key_1", "1"); 14661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_2("key_2", "2"); 1467fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1468fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 146941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(2, test_result.test_property_count()); 147041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 14711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key_1", actual_property_1.key()); 14721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1", actual_property_1.value()); 14731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 147441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 14751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key_2", actual_property_2.key()); 14761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("2", actual_property_2.value()); 14771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 147941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::RecordProperty() overrides values for duplicate keys. 14801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) { 14811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestResult test_result; 14821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_1_1("key_1", "1"); 14831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_2_1("key_2", "2"); 14841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_1_2("key_1", "12"); 14851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestProperty property_2_2("key_2", "22"); 1486fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_1); 1487fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_1); 1488fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_2); 1489fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_2); 149041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 149141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(2, test_result.test_property_count()); 149241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 14931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key_1", actual_property_1.key()); 14941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("12", actual_property_1.value()); 14951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 149641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 14971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("key_2", actual_property_2.key()); 14981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("22", actual_property_2.value()); 14991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 15001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 150141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests TestResult::GetTestProperty(). 1502fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(TestResultPropertyTest, GetTestProperty) { 150341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestResult test_result; 150441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestProperty property_1("key_1", "1"); 150541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestProperty property_2("key_2", "2"); 150641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestProperty property_3("key_3", "3"); 1507fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1508fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 1509fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestResultAccessor::RecordProperty(&test_result, "testcase", property_3); 151041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 151141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& fetched_property_1 = test_result.GetTestProperty(0); 151241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& fetched_property_2 = test_result.GetTestProperty(1); 151341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestProperty& fetched_property_3 = test_result.GetTestProperty(2); 151441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 151541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key_1", fetched_property_1.key()); 151641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("1", fetched_property_1.value()); 151741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 151841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key_2", fetched_property_2.key()); 151941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("2", fetched_property_2.value()); 152041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 152141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("key_3", fetched_property_3.key()); 152241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("3", fetched_property_3.value()); 152341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 152441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), ""); 152541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), ""); 152641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 152741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that GTestFlagSaver works on Windows and Mac. 15291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 15301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass GTestFlagSaverTest : public Test { 15311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 15321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Saves the Google Test flags such that we can restore them later, and 15331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // then sets them to their default values. This will be called 15341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // before the first test in this test case is run. 15351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void SetUpTestCase() { 15361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania saver_ = new GTestFlagSaver; 15371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 15381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(also_run_disabled_tests) = false; 15391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(break_on_failure) = false; 15401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(catch_exceptions) = false; 15411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(death_test_use_fork) = false; 15421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "auto"; 15431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(filter) = ""; 15441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(list_tests) = false; 15451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(output) = ""; 154641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(print_time) = true; 154741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(random_seed) = 0; 15481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(repeat) = 1; 154941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(shuffle) = false; 155041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 155141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stream_result_to) = ""; 15521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(throw_on_failure) = false; 15531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 15541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 15551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Restores the Google Test flags that the tests have modified. This will 15561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // be called after the last test in this test case is run. 15571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void TearDownTestCase() { 15581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete saver_; 15591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania saver_ = NULL; 15601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 15611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 15621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Verifies that the Google Test flags have their default values, and then 15631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // modifies each of them. 15641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void VerifyAndModifyFlags() { 15651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests)); 15661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(break_on_failure)); 15671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(catch_exceptions)); 15681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("auto", GTEST_FLAG(color).c_str()); 15691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(death_test_use_fork)); 15701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", GTEST_FLAG(filter).c_str()); 15711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(list_tests)); 15721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", GTEST_FLAG(output).c_str()); 157341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(GTEST_FLAG(print_time)); 157441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, GTEST_FLAG(random_seed)); 15751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, GTEST_FLAG(repeat)); 157641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(GTEST_FLAG(shuffle)); 157741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth)); 157841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str()); 15791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(GTEST_FLAG(throw_on_failure)); 15801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 15811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(also_run_disabled_tests) = true; 15821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(break_on_failure) = true; 15831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(catch_exceptions) = true; 15841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "no"; 15851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(death_test_use_fork) = true; 15861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(filter) = "abc"; 15871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(list_tests) = true; 15881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(output) = "xml:foo.xml"; 158941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(print_time) = false; 159041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(random_seed) = 1; 15911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(repeat) = 100; 159241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(shuffle) = true; 159341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stack_trace_depth) = 1; 159441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stream_result_to) = "localhost:1234"; 15951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(throw_on_failure) = true; 15961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 1597fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 15981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 15991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // For saving Google Test flags during this test case. 16001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static GTestFlagSaver* saver_; 16011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 16021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaGTestFlagSaver* GTestFlagSaverTest::saver_ = NULL; 16041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Google Test doesn't guarantee the order of tests. The following two 16061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// tests are designed to work regardless of their order. 16071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Modifies the Google Test flags in the test body. 16091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(GTestFlagSaverTest, ModifyGTestFlags) { 16101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania VerifyAndModifyFlags(); 16111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that the Google Test flags in the body of the previous test were 16141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// restored to their original values. 16151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(GTestFlagSaverTest, VerifyGTestFlags) { 16161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania VerifyAndModifyFlags(); 16171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sets an environment variable with the given name to the given 16201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// value. If the value argument is "", unsets the environment 16211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// variable. The caller must ensure that both arguments are not NULL. 16221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastatic void SetEnv(const char* name, const char* value) { 162341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_OS_WINDOWS_MOBILE 16241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Environment variables are not supported on Windows CE. 16251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return; 162641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 162741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // C++Builder's putenv only stores a pointer to its parameter; we have to 162841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ensure that the string remains valid as long as it might be needed. 162941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We use an std::map to do so. 1630fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes static std::map<std::string, std::string*> added_env; 163141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 163241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Because putenv stores a pointer to the string buffer, we can't delete the 163341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // previous string (if present) until after it's replaced. 1634fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string *prev_env = NULL; 163541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (added_env.find(name) != added_env.end()) { 163641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot prev_env = added_env[name]; 163741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 1638fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes added_env[name] = new std::string( 1639fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes (Message() << name << "=" << value).GetString()); 164041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 164141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // The standard signature of putenv accepts a 'char*' argument. Other 164241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // implementations, like C++Builder's, accept a 'const char*'. 164341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We cast away the 'const' since that would work for both variants. 164441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot putenv(const_cast<char*>(added_env[name]->c_str())); 164541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete prev_env; 16461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif GTEST_OS_WINDOWS // If we are on Windows proper. 16471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania _putenv((Message() << name << "=" << value).GetString().c_str()); 16481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 16491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (*value == '\0') { 16501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania unsetenv(name); 16511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } else { 16521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania setenv(name, value, 1); 16531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 165441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_OS_WINDOWS_MOBILE 16551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 165741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_WINDOWS_MOBILE 16581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Environment variables are not supported on Windows CE. 16591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniausing testing::internal::Int32FromGTestEnv; 16611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests Int32FromGTestEnv(). 16631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromGTestEnv() returns the default value when the 16651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// environment variable is not set. 16661be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) { 16671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", ""); 16681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(10, Int32FromGTestEnv("temp", 10)); 16691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromGTestEnv() returns the default value when the 16721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// environment variable overflows as an Int32. 16731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) { 16741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("(expecting 2 warnings)\n"); 16751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321"); 16771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(20, Int32FromGTestEnv("temp", 20)); 16781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321"); 16801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(30, Int32FromGTestEnv("temp", 30)); 16811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromGTestEnv() returns the default value when the 16841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// environment variable does not represent a valid decimal integer. 16851be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) { 16861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("(expecting 2 warnings)\n"); 16871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1"); 16891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(40, Int32FromGTestEnv("temp", 40)); 16901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X"); 16921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(50, Int32FromGTestEnv("temp", 50)); 16931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 16941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 16951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromGTestEnv() parses and returns the value of the 16961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// environment variable when it represents a valid decimal integer in 16971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the range of an Int32. 16981be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) { 16991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123"); 17001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, Int32FromGTestEnv("temp", 0)); 17011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321"); 17031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0)); 17041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 170541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_WINDOWS_MOBILE 17061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ParseInt32Flag(). 17081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ParseInt32Flag() returns false and doesn't change the 17101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// output value when the flag has wrong format 17111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) { 17121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Int32 value = 123; 17131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value)); 17141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value)); 17171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ParseInt32Flag() returns false and doesn't change the 17211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// output value when the flag overflows as an Int32. 17221be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { 17231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("(expecting 2 warnings)\n"); 17241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Int32 value = 123; 17261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value)); 17271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value)); 17301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ParseInt32Flag() returns false and doesn't change the 17341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// output value when the flag does not represent a valid decimal 17351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// integer. 17361be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { 17371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("(expecting 2 warnings)\n"); 17381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Int32 value = 123; 17401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value)); 17411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value)); 17441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, value); 17451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ParseInt32Flag() parses the value of the flag and 17481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// returns true when the flag represents a valid decimal integer in 17491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the range of an Int32. 17501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) { 17511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Int32 value = 123; 17521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value)); 17531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(456, value); 17541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 175541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", 175641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "abc", &value)); 17571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(-789, value); 17581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromEnvOrDie() parses the value of the var or 17611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// returns the correct default. 176241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Environment variables are not supported on Windows CE. 176341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_WINDOWS_MOBILE 17641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) { 17651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 17661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123"); 17671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 17681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123"); 17691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 17701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 177141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_WINDOWS_MOBILE 17721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromEnvOrDie() aborts with an error message 17741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// if the variable is not an Int32. 17751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) { 17761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx"); 177741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 177841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 177941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ".*"); 17801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Int32FromEnvOrDie() aborts with an error message 17831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// if the variable cannot be represnted by an Int32. 17841be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) { 17851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234"); 178641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED( 178741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 178841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ".*"); 17891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 17901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 17911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ShouldRunTestOnShard() selects all tests 17921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// where there is 1 shard. 17931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) { 17941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0)); 17951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1)); 17961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2)); 17971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3)); 17981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4)); 17991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 18001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass ShouldShardTest : public testing::Test { 18021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 18031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 18041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX"; 18051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL"; 18061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 18071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void TearDown() { 18091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, ""); 18101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, ""); 18111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 18121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* index_var_; 18141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* total_var_; 18151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 18161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that sharding is disabled if neither of the environment variables 18181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// are set. 18191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) { 18201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, ""); 18211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, ""); 18221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 18241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 18251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 18261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that sharding is not enabled if total_shards == 1. 18281be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) { 18291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "0"); 18301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "1"); 18311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 18321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 18331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 18341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that sharding is enabled if total_shards > 1 and 18361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// we are not in a death test subprocess. 183741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Environment variables are not supported on Windows CE. 183841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_WINDOWS_MOBILE 18391be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) { 18401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "4"); 18411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "22"); 18421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 18431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 18441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "8"); 18461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "9"); 18471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 18481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 18491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "0"); 18511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "9"); 18521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 18531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 18541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 185541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_WINDOWS_MOBILE 18561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that we exit in error if the sharding values are not valid. 185841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 185941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottypedef ShouldShardTest ShouldShardDeathTest; 186041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 186141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) { 18621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "4"); 18631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "4"); 186441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 18651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "4"); 18671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "-2"); 186841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 18691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, "5"); 18711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, ""); 187241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 18731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(index_var_, ""); 18751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv(total_var_, "5"); 187641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 18771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 18781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that ShouldRunTestOnShard is a partition when 5 18801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// shards are used. 18811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) { 18821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Choose an arbitrary number of tests and shards. 18831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int num_tests = 17; 18841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int num_shards = 5; 18851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Check partitioning: each test should be on exactly 1 shard. 18871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania for (int test_id = 0; test_id < num_tests; test_id++) { 18881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int prev_selected_shard_index = -1; 18891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania for (int shard_index = 0; shard_index < num_shards; shard_index++) { 18901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) { 18911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (prev_selected_shard_index < 0) { 18921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania prev_selected_shard_index = shard_index; 18931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } else { 18941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and " 18951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << shard_index << " are both selected to run test " << test_id; 18961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 18971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 18981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 18991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 19001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 19011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Check balance: This is not required by the sharding protocol, but is a 19021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // desirable property for performance. 19031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania for (int shard_index = 0; shard_index < num_shards; shard_index++) { 19041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int num_tests_on_shard = 0; 19051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania for (int test_id = 0; test_id < num_tests; test_id++) { 19061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania num_tests_on_shard += 19071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ShouldRunTestOnShard(num_shards, shard_index, test_id); 19081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 19091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GE(num_tests_on_shard, num_tests / num_shards); 19101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 19111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 19121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 19131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// For the same reason we are not explicitly testing everything in the 19141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Test class, there are no separate tests for the following classes 19151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (except for some trivial cases): 19161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 19171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TestCase, UnitTest, UnitTestResultPrinter. 19181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 19191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Similarly, there are no separate tests for the following macros: 19201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 19211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TEST, TEST_F, RUN_ALL_TESTS 19221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 19231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(UnitTestTest, CanGetOriginalWorkingDir) { 19241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL); 19251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), ""); 19261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 19271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1928fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(UnitTestTest, ReturnsPlausibleTimestamp) { 1929fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp()); 1930fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis()); 1931fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 1932fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1933fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// When a property using a reserved key is supplied to this function, it 1934fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// tests that a non-fatal failure is added, a fatal failure is not added, 1935fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// and that the property is not recorded. 1936fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesvoid ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1937fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const TestResult& test_result, const char* key) { 1938fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, "1"), "Reserved key"); 1939fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(0, test_result.test_property_count()) << "Property for key '" << key 1940fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes << "' recorded unexpectedly."; 1941fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 1942fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1943fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 1944fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const char* key) { 1945fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); 1946fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(test_info != NULL); 1947fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(), 1948fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes key); 1949fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 1950fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1951fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1952fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const char* key) { 1953fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1954fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(test_case != NULL); 1955fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1956fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes test_case->ad_hoc_test_result(), key); 1957fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 1958fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1959fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 1960fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const char* key) { 1961fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1962fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTest::GetInstance()->ad_hoc_test_result(), key); 1963fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 1964fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1965fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests that property recording functions in UnitTest outside of tests 1966fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// functions correcly. Creating a separate instance of UnitTest ensures it 1967fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// is in a state similar to the UnitTest's singleton's between tests. 1968fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesclass UnitTestRecordPropertyTest : 1969fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public testing::internal::UnitTestRecordPropertyTestHelper { 1970fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public: 1971fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes static void SetUpTestCase() { 1972fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1973fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "disabled"); 1974fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1975fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "errors"); 1976fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1977fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "failures"); 1978fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1979fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "name"); 1980fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1981fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "tests"); 1982fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1983fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "time"); 1984fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1985fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes Test::RecordProperty("test_case_key_1", "1"); 1986fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1987fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(test_case != NULL); 1988fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1989fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count()); 1990fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("test_case_key_1", 1991fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes test_case->ad_hoc_test_result().GetTestProperty(0).key()); 1992fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("1", 1993fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes test_case->ad_hoc_test_result().GetTestProperty(0).value()); 1994fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 1995fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes}; 1996fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 1997fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests TestResult has the expected property when added. 1998fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) { 1999fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_1", "1"); 2000fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2001fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count()); 2002fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2003fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("key_1", 2004fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2005fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("1", 2006fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2007fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 2008fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2009fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests TestResult has multiple properties when added. 2010fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) { 2011fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_1", "1"); 2012fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_2", "2"); 2013fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2014fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2015fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2016fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("key_1", 2017fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2018fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2019fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2020fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("key_2", 2021fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2022fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("2", unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2023fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 2024fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2025fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests TestResult::RecordProperty() overrides values for duplicate keys. 2026fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) { 2027fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_1", "1"); 2028fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_2", "2"); 2029fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_1", "12"); 2030fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes UnitTestRecordProperty("key_2", "22"); 2031fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2032fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2033fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2034fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("key_1", 2035fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2036fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("12", 2037fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2038fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2039fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("key_2", 2040fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2041fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("22", 2042fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2043fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 2044fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2045fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(UnitTestRecordPropertyTest, 2046fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes AddFailureInsideTestsWhenUsingTestCaseReservedKeys) { 2047fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2048fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "name"); 2049fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2050fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "value_param"); 2051fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2052fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "type_param"); 2053fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2054fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "status"); 2055fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2056fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "time"); 2057fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2058fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "classname"); 2059fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 2060fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2061fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST_F(UnitTestRecordPropertyTest, 2062fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes AddRecordWithReservedKeysGeneratesCorrectPropertyList) { 2063fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE( 2064fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes Test::RecordProperty("name", "1"), 2065fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "'classname', 'name', 'status', 'time', 'type_param', and 'value_param'" 2066fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes " are reserved"); 2067fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 2068fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2069fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesclass UnitTestRecordPropertyTestEnvironment : public Environment { 2070fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes public: 2071fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes virtual void TearDown() { 2072fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2073fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "tests"); 2074fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2075fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "failures"); 2076fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2077fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "disabled"); 2078fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2079fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "errors"); 2080fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2081fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "name"); 2082fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2083fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "timestamp"); 2084fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2085fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "time"); 2086fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2087fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "random_seed"); 2088fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes } 2089fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes}; 2090fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2091fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// This will test property recording outside of any test or test case. 2092fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstatic Environment* record_property_env = 2093fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); 2094fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 20951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This group of tests is for predicate assertions (ASSERT_PRED*, etc) 20961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// of various arities. They do not attempt to be exhaustive. Rather, 20971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// view them as smoke tests that can be easily reviewed and verified. 20981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A more complete set of tests for predicate assertions can be found 20991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in gtest_pred_impl_unittest.cc. 21001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// First, some predicates and predicate-formatters needed by the tests. 21021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Returns true iff the argument is an even number. 21041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool IsEven(int n) { 21051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return (n % 2) == 0; 21061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 21071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A functor that returns true iff the argument is an even number. 21091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct IsEvenFunctor { 21101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool operator()(int n) { return IsEven(n); } 21111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 21121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A predicate-formatter function that asserts the argument is an even 21141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// number. 21151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertIsEven(const char* expr, int n) { 21161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (IsEven(n)) { 21171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionSuccess(); 21181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 21191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 21211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << expr << " evaluates to " << n << ", which is not even."; 21221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionFailure(msg); 21231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 21241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 212541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A predicate function that returns AssertionResult for use in 212641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// EXPECT/ASSERT_TRUE/FALSE. 212741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotAssertionResult ResultIsEven(int n) { 212841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (IsEven(n)) 212941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionSuccess() << n << " is even"; 213041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot else 213141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << n << " is odd"; 213241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 213341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 213441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A predicate function that returns AssertionResult but gives no 213541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// explanation why it succeeds. Needed for testing that 213641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// EXPECT/ASSERT_FALSE handles such functions correctly. 213741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotAssertionResult ResultIsEvenNoExplanation(int n) { 213841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (IsEven(n)) 213941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionSuccess(); 214041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot else 214141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << n << " is odd"; 214241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 214341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A predicate-formatter functor that asserts the argument is an even 21451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// number. 21461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct AssertIsEvenFunctor { 21471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionResult operator()(const char* expr, int n) { 21481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertIsEven(expr, n); 21491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 21501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 21511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Returns true iff the sum of the arguments is an even number. 21531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool SumIsEven2(int n1, int n2) { 21541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return IsEven(n1 + n2); 21551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 21561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A functor that returns true iff the sum of the arguments is an even 21581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// number. 21591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct SumIsEven3Functor { 21601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool operator()(int n1, int n2, int n3) { 21611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return IsEven(n1 + n2 + n3); 21621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 21631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 21641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A predicate-formatter function that asserts the sum of the 21661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// arguments is an even number. 21671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertSumIsEven4( 21681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, const char* e2, const char* e3, const char* e4, 21691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n1, int n2, int n3, int n4) { 21701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int sum = n1 + n2 + n3 + n4; 21711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (IsEven(sum)) { 21721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionSuccess(); 21731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 21741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 21761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 21771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 21781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << ") evaluates to " << sum << ", which is not even."; 21791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionFailure(msg); 21801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 21811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A predicate-formatter functor that asserts the sum of the arguments 21831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is an even number. 21841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct AssertSumIsEven5Functor { 21851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionResult operator()( 21861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, const char* e2, const char* e3, const char* e4, 21871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e5, int n1, int n2, int n3, int n4, int n5) { 21881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int sum = n1 + n2 + n3 + n4 + n5; 21891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (IsEven(sum)) { 21901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionSuccess(); 21911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 21921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 21931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 21941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 21951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << " (" 21961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5 21971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << ") evaluates to " << sum << ", which is not even."; 21981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return AssertionFailure(msg); 21991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 22001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 22011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests unary predicate assertions. 22041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests unary predicate assertions that don't use a custom formatter. 22061be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Pred1Test, WithoutFormat) { 22071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Success cases. 22081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!"; 22091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED1(IsEven, 4); 22101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Failure cases. 22121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 22131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED1(IsEven, 5) << "This failure is expected."; 22141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 22151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5), 22161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "evaluates to false"); 22171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 22181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests unary predicate assertions that use a custom formatter. 22201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Pred1Test, WithFormat) { 22211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Success cases. 22221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT1(AssertIsEven, 2); 22231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4) 22241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "This failure is UNEXPECTED!"; 22251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Failure cases. 22271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n = 5; 22281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n), 22291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "n evaluates to 5, which is not even."); 22301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 22311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected."; 22321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 22331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 22341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that unary predicate assertions evaluates their arguments 22361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// exactly once. 22371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(Pred1Test, SingleEvaluationOnFailure) { 22381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success case. 22391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int n = 0; 22401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED1(IsEven, n++); 22411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n) << "The argument is not evaluated exactly once."; 22421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure case. 22441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 22451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++) 22461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "This failure is expected."; 22471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 22481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(2, n) << "The argument is not evaluated exactly once."; 22491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 22501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests predicate assertions whose arity is >= 2. 22531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests predicate assertions that don't use a custom formatter. 22551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredTest, WithoutFormat) { 22561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Success cases. 22571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!"; 22581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8); 22591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Failure cases. 22611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n1 = 1; 22621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n2 = 2; 22631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 22641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected."; 22651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 22661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 22671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4); 22681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "evaluates to false"); 22691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 22701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests predicate assertions that use a custom formatter. 22721be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredTest, WithFormat) { 22731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Success cases. 22741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) << 22751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "This failure is UNEXPECTED!"; 22761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10); 22771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Failure cases. 22791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n1 = 1; 22801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n2 = 2; 22811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n3 = 4; 22821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const int n4 = 6; 22831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 22841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4); 22851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "evaluates to 13, which is not even."); 22861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 22871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8) 22881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "This failure is expected."; 22891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 22901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 22911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 22921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that predicate assertions evaluates their arguments 22931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// exactly once. 22941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredTest, SingleEvaluationOnFailure) { 22951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success case. 22961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n1 = 0; 22971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n2 = 0; 22981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED2(SumIsEven2, n1++, n2++); 22991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Another success case. 23031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania n1 = n2 = 0; 23041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n3 = 0; 23051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n4 = 0; 23061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n5 = 0; 23071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 23081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania n1++, n2++, n3++, n4++, n5++) 23091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "This failure is UNEXPECTED!"; 23101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 23141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once."; 23151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure case. 23171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania n1 = n2 = n3 = 0; 23181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 23191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++) 23201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "This failure is expected."; 23211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "This failure is expected."); 23221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Another failure case. 23271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania n1 = n2 = n3 = n4 = 0; 23281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 23291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++); 23301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "evaluates to 1, which is not even."); 23311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 23321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 23331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 23341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 23351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Some helper functions for testing using overloaded/template 23391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// functions with ASSERT_PREDn and EXPECT_PREDn. 23401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool IsPositive(double x) { 23421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x > 0; 23431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 23461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool IsNegative(T x) { 23471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x < 0; 23481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2> 23511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool GreaterThan(T1 x1, T2 x2) { 23521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x1 > x2; 23531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that overloaded functions can be used in *_PRED* as long as 23561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// their types are explicitly specified. 23571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredicateAssertionTest, AcceptsOverloadedFunction) { 235841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // C++Builder requires C-style casts rather than static_cast. 235941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED1((bool (*)(int))(IsPositive), 5); // NOLINT 236041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0); // NOLINT 23611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that template functions can be used in *_PRED* as long as 23641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// their types are explicitly specified. 23651be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredicateAssertionTest, AcceptsTemplateFunction) { 23661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED1(IsNegative<int>, -5); 23671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Makes sure that we can handle templates with more than one 23681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // parameter. 23691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED2((GreaterThan<int, int>), 5, 0); 23701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Some helper functions for testing using overloaded/template 23741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn. 23751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23761be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult IsPositiveFormat(const char* /* expr */, int n) { 23771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return n > 0 ? AssertionSuccess() : 23781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionFailure(Message() << "Failure"); 23791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult IsPositiveFormat(const char* /* expr */, double x) { 23821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x > 0 ? AssertionSuccess() : 23831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionFailure(Message() << "Failure"); 23841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 23871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult IsNegativeFormat(const char* /* expr */, T x) { 23881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x < 0 ? AssertionSuccess() : 23891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionFailure(Message() << "Failure"); 23901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2> 23931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */, 23941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& x1, const T2& x2) { 23951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x1 == x2 ? AssertionSuccess() : 23961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertionFailure(Message() << "Failure"); 23971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 23981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 23991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that overloaded functions can be used in *_PRED_FORMAT* 24001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// without explicitly specifying their types. 24011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) { 24021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT1(IsPositiveFormat, 5); 24031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0); 24041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that template functions can be used in *_PRED_FORMAT* without 24071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// explicitly specifying their types. 24081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) { 24091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT1(IsNegativeFormat, -5); 24101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3); 24111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests string assertions. 24151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STREQ with non-NULL arguments. 24171be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STREQ) { 24181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char * const p1 = "good"; 24191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(p1, p1); 24201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Let p2 have the same content as p1, but be at a different address. 24221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char p2[] = "good"; 24231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(p1, p2); 24241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"), 24261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: \"bad\""); 24271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STREQ with NULL arguments. 24301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STREQ_Null) { 24311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(static_cast<const char *>(NULL), NULL); 24321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"), 24331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "non-null"); 24341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STREQ with NULL arguments. 24371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STREQ_Null2) { 24381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL), 24391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "non-null"); 24401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STRNE. 24431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STRNE) { 24441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("hi", "Hi"); 24451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("Hi", NULL); 24461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE(NULL, "Hi"); 24471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("", NULL); 24481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE(NULL, ""); 24491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("", "Hi"); 24501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("Hi", ""); 24511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"), 24521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\"Hi\" vs \"Hi\""); 24531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STRCASEEQ. 24561be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STRCASEEQ) { 24571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASEEQ("hi", "Hi"); 24581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL); 24591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASEEQ("", ""); 24611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"), 24621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(ignoring case)"); 24631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_STRCASENE. 24661be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, ASSERT_STRCASENE) { 24671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("hi1", "Hi2"); 24681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("Hi", NULL); 24691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE(NULL, "Hi"); 24701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("", NULL); 24711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE(NULL, ""); 24721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("", "Hi"); 24731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("Hi", ""); 24741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"), 24751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(ignoring case)"); 24761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 24771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests *_STREQ on wide strings. 24791be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, STREQ_Wide) { 24801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // NULL strings. 24811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL); 24821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Empty strings. 24841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(L"", L""); 24851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Non-null vs NULL. 24871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL), 24881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "non-null"); 24891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Equal strings. 24911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ(L"Hi", L"Hi"); 24921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Unequal strings. 24941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"), 24951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Abc"); 24961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Strings containing wide characters. 24981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"), 24991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "abc"); 2500fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2501fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // The streaming variation. 2502fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE({ // NOLINT 2503fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ(L"abc\x8119", L"abc\x8121") << "Expected failure"; 2504fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }, "Expected failure"); 25051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests *_STRNE on wide strings. 25081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StringAssertionTest, STRNE_Wide) { 25091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // NULL strings. 25101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 25111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL); 25121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 25131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Empty strings. 25151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""), 25161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "L\"\""); 25171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Non-null vs NULL. 25191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE(L"non-null", NULL); 25201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Equal strings. 25221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"), 25231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "L\"Hi\""); 25241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Unequal strings. 25261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE(L"abc", L"Abc"); 25271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Strings containing wide characters. 25291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"), 25301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "abc"); 2531fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 2532fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // The streaming variation. 2533fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_STRNE(L"abc\x8119", L"abc\x8120") << "This shouldn't happen"; 25341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for ::testing::IsSubstring(). 25371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring() returns the correct result when the input 25391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const char*. 25401be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, ReturnsCorrectResultForCString) { 25411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", NULL, "a")); 25421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", "b", NULL)); 25431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", "needle", "haystack")); 25441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL)); 25461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", "needle", "two needles")); 25471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring() returns the correct result when the input 25501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const wchar_t*. 25511be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, ReturnsCorrectResultForWideCString) { 255241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(IsSubstring("", "", kNull, L"a")); 255341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(IsSubstring("", "", L"b", kNull)); 25541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack")); 25551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL)); 25571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles")); 25581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring() generates the correct message when the input 25611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const char*. 25621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, GeneratesCorrectMessageForCString) { 25631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("Value of: needle_expr\n" 25641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: \"needle\"\n" 25651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: a substring of haystack_expr\n" 25661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: \"haystack\"", 25671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania IsSubstring("needle_expr", "haystack_expr", 25681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "needle", "haystack").failure_message()); 25691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring returns the correct result when the input 25721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::string. 25731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, ReturnsCorrectResultsForStdString) { 25741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob")); 25751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world"))); 25761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_WSTRING 25791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring returns the correct result when the input 25801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::wstring. 25811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) { 25821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 25831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 25841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsSubstring() generates the correct message when the input 25871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::wstring. 25881be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsSubstringTest, GeneratesCorrectMessageForWstring) { 25891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("Value of: needle_expr\n" 25901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: L\"needle\"\n" 25911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: a substring of haystack_expr\n" 25921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: L\"haystack\"", 25931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania IsSubstring( 25941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "needle_expr", "haystack_expr", 25951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::wstring(L"needle"), L"haystack").failure_message()); 25961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 25971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 25981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_WSTRING 25991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for ::testing::IsNotSubstring(). 26011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring() returns the correct result when the input 26031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const char*. 26041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, ReturnsCorrectResultForCString) { 26051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack")); 26061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles")); 26071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring() returns the correct result when the input 26101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const wchar_t*. 26111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) { 26121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack")); 26131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles")); 26141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring() generates the correct message when the input 26171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is const wchar_t*. 26181be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) { 26191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("Value of: needle_expr\n" 26201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: L\"needle\"\n" 26211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: not a substring of haystack_expr\n" 26221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: L\"two needles\"", 26231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania IsNotSubstring( 26241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "needle_expr", "haystack_expr", 26251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"needle", L"two needles").failure_message()); 26261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring returns the correct result when the input 26291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::string. 26301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) { 26311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob")); 26321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world"))); 26331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring() generates the correct message when the input 26361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::string. 26371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) { 26381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("Value of: needle_expr\n" 26391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: \"needle\"\n" 26401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: not a substring of haystack_expr\n" 26411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: \"two needles\"", 26421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania IsNotSubstring( 26431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "needle_expr", "haystack_expr", 26441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::string("needle"), "two needles").failure_message()); 26451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_WSTRING 26481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that IsNotSubstring returns the correct result when the input 26501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// argument type is ::std::wstring. 26511be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) { 26521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE( 26531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 26541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 26551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 26561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_WSTRING 26581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests floating-point assertions. 26601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename RawType> 26621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass FloatingPointTest : public Test { 26631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 266441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Pre-calculated numbers to be used by the tests. 266541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot struct TestValues { 266641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType close_to_positive_zero; 266741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType close_to_negative_zero; 266841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType further_from_negative_zero; 266941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 267041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType close_to_one; 267141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType further_from_one; 267241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 267341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType infinity; 267441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType close_to_infinity; 267541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType further_from_infinity; 267641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 267741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType nan1; 267841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RawType nan2; 267941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 268041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 26811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef typename testing::internal::FloatingPoint<RawType> Floating; 26821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef typename Floating::Bits Bits; 26831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 26851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const size_t max_ulps = Floating::kMaxUlps; 26861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // The bits that represent 0.0. 26881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const Bits zero_bits = Floating(0).bits(); 26891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Makes some numbers close to 0.0. 269141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.close_to_positive_zero = Floating::ReinterpretBits( 269241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot zero_bits + max_ulps/2); 269341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.close_to_negative_zero = -Floating::ReinterpretBits( 26941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania zero_bits + max_ulps - max_ulps/2); 269541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.further_from_negative_zero = -Floating::ReinterpretBits( 26961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania zero_bits + max_ulps + 1 - max_ulps/2); 26971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 26981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // The bits that represent 1.0. 26991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const Bits one_bits = Floating(1).bits(); 27001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Makes some numbers close to 1.0. 270241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps); 270341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.further_from_one = Floating::ReinterpretBits( 270441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot one_bits + max_ulps + 1); 27051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // +infinity. 270741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.infinity = Floating::Infinity(); 27081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // The bits that represent +infinity. 271041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const Bits infinity_bits = Floating(values_.infinity).bits(); 27111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Makes some numbers close to infinity. 271341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.close_to_infinity = Floating::ReinterpretBits( 271441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot infinity_bits - max_ulps); 271541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.further_from_infinity = Floating::ReinterpretBits( 27161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania infinity_bits - max_ulps - 1); 27171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 271841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Makes some NAN's. Sets the most significant bit of the fraction so that 271941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // our NaN's are quiet; trying to process a signaling NaN would raise an 272041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // exception if our environment enables floating point exceptions. 272141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask 272241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1); 272341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask 272441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200); 27251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 27261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void TestSize() { 27281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(sizeof(RawType), sizeof(Bits)); 27291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 27301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 273141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static TestValues values_; 27321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 27331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename RawType> 273541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottypename FloatingPointTest<RawType>::TestValues 273641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FloatingPointTest<RawType>::values_; 27371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Instantiates FloatingPointTest for testing *_FLOAT_EQ. 27391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef FloatingPointTest<float> FloatTest; 27401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the size of Float::Bits matches the size of float. 27421be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, Size) { 27431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestSize(); 27441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 27451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing with +0 and -0. 27471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, Zeros) { 27481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FLOAT_EQ(0.0, -0.0); 27491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0), 27501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1.0"); 27511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5), 27521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1.5"); 27531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 27541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers close to 0. 27561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 27571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This ensures that *_FLOAT_EQ handles the sign correctly and no 27581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// overflow occurs when comparing numbers whose absolute value is very 27591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// small. 27601be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, AlmostZeros) { 276141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // In C++Builder, names within local classes (such as used by 276241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 276341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // scoping class. Use a static local alias as a workaround. 276441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We use the assignment syntax since some compilers, like Sun Studio, 276541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // don't allow initializing references using construction syntax 276641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // (parentheses). 276741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const FloatTest::TestValues& v = this->values_; 276841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 276941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero); 277041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero); 277141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 27721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 277441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_FLOAT_EQ(v.close_to_positive_zero, 277541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.further_from_negative_zero); 277641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "v.further_from_negative_zero"); 27771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 27781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers close to each other. 27801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, SmallDiff) { 278141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(1.0, values_.close_to_one); 278241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one), 278341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "values_.further_from_one"); 27841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 27851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers far apart. 27871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, LargeDiff) { 27881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0), 27891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "3.0"); 27901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 27911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 27921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing with infinity. 27931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 27941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This ensures that no overflow occurs when comparing numbers whose 27951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// absolute value is very large. 27961be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, Infinity) { 279741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity); 279841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity); 27991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_OS_SYMBIAN 28001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 280141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity), 280241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "-values_.infinity"); 28031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 280441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // This is interesting as the representations of infinity and nan1 28051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // are only 1 DLP apart. 280641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1), 280741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "values_.nan1"); 28081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_OS_SYMBIAN 28091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that comparing with NAN always returns false. 28121be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, NaN) { 28131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_OS_SYMBIAN 28141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Nokia's STLport crashes if we try to output infinity or NaN. 281541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 281641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // In C++Builder, names within local classes (such as used by 281741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 281841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // scoping class. Use a static local alias as a workaround. 281941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We use the assignment syntax since some compilers, like Sun Studio, 282041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // don't allow initializing references using construction syntax 282141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // (parentheses). 282241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const FloatTest::TestValues& v = this->values_; 282341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 282441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1), 282541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.nan1"); 282641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2), 282741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.nan2"); 282841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1), 282941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.nan1"); 283041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 283141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity), 283241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.infinity"); 28331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_OS_SYMBIAN 28341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that *_FLOAT_EQ are reflexive. 28371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, Reflexive) { 28381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FLOAT_EQ(0.0, 0.0); 28391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FLOAT_EQ(1.0, 1.0); 284041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_FLOAT_EQ(values_.infinity, values_.infinity); 28411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that *_FLOAT_EQ are commutative. 28441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, Commutative) { 284541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one). 284641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FLOAT_EQ(values_.close_to_one, 1.0); 28471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 284841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one). 284941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0), 28501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1.0"); 28511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_NEAR. 285441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(FloatTest, EXPECT_NEAR) { 28551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NEAR(-1.0f, -1.1f, 0.2f); 28561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NEAR(2.0f, 3.0f, 1.0f); 285741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 285841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "The difference between 1.0f and 1.5f is 0.5, " 285941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "which exceeds 0.25f"); 28601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // To work around a bug in gcc 2.95.0, there is intentionally no 28611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // space after the first comma in the previous line. 28621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_NEAR. 286541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(FloatTest, ASSERT_NEAR) { 28661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NEAR(-1.0f, -1.1f, 0.2f); 28671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NEAR(2.0f, 3.0f, 1.0f); 286841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 286941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "The difference between 1.0f and 1.5f is 0.5, " 287041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "which exceeds 0.25f"); 28711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // To work around a bug in gcc 2.95.0, there is intentionally no 28721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // space after the first comma in the previous line. 28731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the cases where FloatLE() should succeed. 28761be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, FloatLESucceeds) { 28771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2, 28781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2, 28791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // or when val1 is greater than, but almost equals to, val2. 288141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f); 28821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 28831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the cases where FloatLE() should fail. 28851be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FloatTest, FloatLEFails) { 28861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // When val1 is greater than val2 by a large margin, 28871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f), 28881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(2.0f) <= (1.0f)"); 28891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 28901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // or by a small yet non-negligible margin, 28911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 289241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f); 289341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.further_from_one) <= (1.0f)"); 28941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 289541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 28961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 289741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // C++Builder gives bad results for ordered comparisons involving NaNs 289841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // due to compiler bugs. 28991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 290041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity); 290141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.nan1) <= (values_.infinity)"); 29021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 290341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1); 290441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(-values_.infinity) <= (values_.nan1)"); 29051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 290641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1); 290741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.nan1) <= (values_.nan1)"); 290841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 29091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Instantiates FloatingPointTest for testing *_DOUBLE_EQ. 29121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef FloatingPointTest<double> DoubleTest; 29131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the size of Double::Bits matches the size of double. 29151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, Size) { 29161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestSize(); 29171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing with +0 and -0. 29201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, Zeros) { 29211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_DOUBLE_EQ(0.0, -0.0); 29221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0), 29231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1.0"); 29241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0), 29251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1.0"); 29261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers close to 0. 29291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 29301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This ensures that *_DOUBLE_EQ handles the sign correctly and no 29311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// overflow occurs when comparing numbers whose absolute value is very 29321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// small. 29331be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, AlmostZeros) { 293441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // In C++Builder, names within local classes (such as used by 293541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 293641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // scoping class. Use a static local alias as a workaround. 293741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We use the assignment syntax since some compilers, like Sun Studio, 293841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // don't allow initializing references using construction syntax 293941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // (parentheses). 294041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const DoubleTest::TestValues& v = this->values_; 294141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 294241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero); 294341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero); 294441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 29451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 294741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_DOUBLE_EQ(v.close_to_positive_zero, 294841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot v.further_from_negative_zero); 294941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "v.further_from_negative_zero"); 29501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers close to each other. 29531be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, SmallDiff) { 295441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(1.0, values_.close_to_one); 295541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one), 295641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "values_.further_from_one"); 29571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing numbers far apart. 29601be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, LargeDiff) { 29611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0), 29621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "3.0"); 29631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests comparing with infinity. 29661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 29671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This ensures that no overflow occurs when comparing numbers whose 29681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// absolute value is very large. 29691be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, Infinity) { 297041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity); 297141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity); 29721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_OS_SYMBIAN 29731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 297441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity), 297541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "-values_.infinity"); 29761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This is interesting as the representations of infinity_ and nan1_ 29781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // are only 1 DLP apart. 297941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1), 298041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "values_.nan1"); 29811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_OS_SYMBIAN 29821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 29831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 29841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that comparing with NAN always returns false. 29851be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, NaN) { 29861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_OS_SYMBIAN 298741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // In C++Builder, names within local classes (such as used by 298841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 298941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // scoping class. Use a static local alias as a workaround. 299041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We use the assignment syntax since some compilers, like Sun Studio, 299141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // don't allow initializing references using construction syntax 299241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // (parentheses). 299341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const DoubleTest::TestValues& v = this->values_; 299441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 29951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 299641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1), 299741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.nan1"); 299841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2"); 299941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1"); 300041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity), 300141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "v.infinity"); 30021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_OS_SYMBIAN 30031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that *_DOUBLE_EQ are reflexive. 30061be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, Reflexive) { 30071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_DOUBLE_EQ(0.0, 0.0); 30081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_DOUBLE_EQ(1.0, 1.0); 30091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if !GTEST_OS_SYMBIAN 30101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 301141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity); 30121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // !GTEST_OS_SYMBIAN 30131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that *_DOUBLE_EQ are commutative. 30161be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, Commutative) { 301741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one). 301841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0); 30191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 302041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one). 302141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0), 302241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1.0"); 30231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_NEAR. 302641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(DoubleTest, EXPECT_NEAR) { 30271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NEAR(-1.0, -1.1, 0.2); 30281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NEAR(2.0, 3.0, 1.0); 302941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25), // NOLINT 303041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "The difference between 1.0 and 1.5 is 0.5, " 303141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "which exceeds 0.25"); 30321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // To work around a bug in gcc 2.95.0, there is intentionally no 30331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // space after the first comma in the previous statement. 30341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_NEAR. 303741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(DoubleTest, ASSERT_NEAR) { 30381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NEAR(-1.0, -1.1, 0.2); 30391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NEAR(2.0, 3.0, 1.0); 304041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25), // NOLINT 304141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "The difference between 1.0 and 1.5 is 0.5, " 304241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "which exceeds 0.25"); 30431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // To work around a bug in gcc 2.95.0, there is intentionally no 30441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // space after the first comma in the previous statement. 30451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the cases where DoubleLE() should succeed. 30481be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, DoubleLESucceeds) { 30491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2, 30501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2, 30511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // or when val1 is greater than, but almost equals to, val2. 305341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0); 30541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the cases where DoubleLE() should fail. 30571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DoubleTest, DoubleLEFails) { 30581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // When val1 is greater than val2 by a large margin, 30591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0), 30601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(2.0) <= (1.0)"); 30611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // or by a small yet non-negligible margin, 30631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 306441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0); 306541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.further_from_one) <= (1.0)"); 30661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 306741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 30681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Nokia's STLport crashes if we try to output infinity or NaN. 306941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // C++Builder gives bad results for ordered comparisons involving NaNs 307041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // due to compiler bugs. 30711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 307241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity); 307341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.nan1) <= (values_.infinity)"); 30741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 307541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1); 307641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, " (-values_.infinity) <= (values_.nan1)"); 30771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 307841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1); 307941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "(values_.nan1) <= (values_.nan1)"); 308041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 30811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that a test or test case whose name starts with DISABLED_ is 30851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// not run. 30861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A test whose name starts with DISABLED_. 30881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Should not run. 30891be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(DisabledTest, DISABLED_TestShouldNotRun) { 30901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled test should not be run."; 30911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A test whose name does not start with DISABLED_. 30941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Should run. 30951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(DisabledTest, NotDISABLED_TestShouldRun) { 30961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, 1); 30971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 30981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A test case whose name starts with DISABLED_. 31001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Should not run. 31011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(DISABLED_TestCase, TestShouldNotRun) { 31021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 31031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A test case and test whose names start with DISABLED_. 31061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Should not run. 31071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) { 31081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 31091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Check that when all tests in a test case are disabled, SetupTestCase() and 31121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TearDownTestCase() are not called. 31131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass DisabledTestsTest : public Test { 31141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 31151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void SetUpTestCase() { 31161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: All tests disabled in test case. " 31171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "SetupTestCase() should not be called."; 31181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 31191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void TearDownTestCase() { 31211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: All tests disabled in test case. " 31221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "TearDownTestCase() should not be called."; 31231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 31241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 31251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31261be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) { 31271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled test should not be run."; 31281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) { 31311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled test should not be run."; 31321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that disabled typed tests aren't run. 31351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_TYPED_TEST 31371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 31391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TypedTest : public Test { 31401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 31411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef testing::Types<int, double> NumericTypes; 31431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_CASE(TypedTest, NumericTypes); 31441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31451be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST(TypedTest, DISABLED_ShouldNotRun) { 31461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled typed test should not run."; 31471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 31501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass DISABLED_TypedTest : public Test { 31511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 31521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31531be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes); 31541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST(DISABLED_TypedTest, ShouldNotRun) { 31561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled typed test should not run."; 31571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_TYPED_TEST 31601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that disabled type-parameterized tests aren't run. 31621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_TYPED_TEST_P 31641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 31661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TypedTestP : public Test { 31671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 31681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31691be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_CASE_P(TypedTestP); 31701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) { 31721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: " 31731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Disabled type-parameterized test should not run."; 31741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31761be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaREGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun); 31771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaINSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes); 31791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 31811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass DISABLED_TypedTestP : public Test { 31821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 31831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31841be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_CASE_P(DISABLED_TypedTestP); 31851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31861be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) { 31871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: " 31881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Disabled type-parameterized test should not run."; 31891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 31901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaREGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun); 31921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaINSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes); 31941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_TYPED_TEST_P 31961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that assertion macros evaluate their arguments exactly once. 31981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass SingleEvaluationTest : public Test { 320041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: // Must be public and not protected due to a bug in g++ 3.4.2. 32011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This helper function is needed by the FailedASSERT_STREQ test 320241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // below. It's public to work around C++Builder's bug with scoping local 320341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // classes. 32041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void CompareAndIncrementCharPtrs() { 32051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(p1_++, p2_++); 32061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 32071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 320841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // This helper function is needed by the FailedASSERT_NE test below. It's 320941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // public to work around C++Builder's bug with scoping local classes. 32101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void CompareAndIncrementInts() { 32111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NE(a_++, b_++); 32121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 32131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 321441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 321541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SingleEvaluationTest() { 321641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot p1_ = s1_; 321741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot p2_ = s2_; 321841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot a_ = 0; 321941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot b_ = 0; 322041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 322141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 32221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char* const s1_; 32231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char* const s2_; 32241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char* p1_; 32251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char* p2_; 32261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int a_; 32281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int b_; 32291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 32301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* const SingleEvaluationTest::s1_ = "01234"; 32321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* const SingleEvaluationTest::s2_ = "abcde"; 32331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* SingleEvaluationTest::p1_; 32341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* SingleEvaluationTest::p2_; 32351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint SingleEvaluationTest::a_; 32361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint SingleEvaluationTest::b_; 32371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that when ASSERT_STREQ fails, it evaluates its arguments 32391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// exactly once. 32401be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SingleEvaluationTest, FailedASSERT_STREQ) { 324141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(), 32421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p2_++"); 32431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s1_ + 1, p1_); 32441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s2_ + 1, p2_); 32451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 32461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that string assertion arguments are evaluated exactly once. 32481be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SingleEvaluationTest, ASSERT_STR) { 32491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_STRNE 32501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE(p1_++, p2_++); 32511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s1_ + 1, p1_); 32521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s2_ + 1, p2_); 32531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_STRCASEEQ 32551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++), 32561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "ignoring case"); 32571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s1_ + 2, p1_); 32581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(s2_ + 2, p2_); 32591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 32601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that when ASSERT_NE fails, it evaluates its arguments exactly 32621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// once. 32631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SingleEvaluationTest, FailedASSERT_NE) { 326441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(), 326541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "(a_++) != (b_++)"); 32661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, a_); 32671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, b_); 32681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 32691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that assertion arguments are evaluated exactly once. 32711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SingleEvaluationTest, OtherCases) { 32721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_TRUE 32731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(0 == a_++); // NOLINT 32741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, a_); 32751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_TRUE 32771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++"); 32781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(2, a_); 32791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_GT 32811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GT(a_++, b_++); 32821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(3, a_); 32831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, b_); 32841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_LT 32861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)"); 32871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(4, a_); 32881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(2, b_); 32891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful ASSERT_TRUE 32911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(0 < a_++); // NOLINT 32921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(5, a_); 32931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 32941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful ASSERT_GT 32951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_GT(a_++, b_++); 32961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(6, a_); 32971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(3, b_); 32981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 32991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 33011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid ThrowAnInteger() { 33031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania throw 1; 33041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 33051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that assertion arguments are evaluated exactly once. 33071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SingleEvaluationTest, ExceptionTests) { 33081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_THROW 33091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW({ // NOLINT 33101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania a_++; 33111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ThrowAnInteger(); 33121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, int); 33131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, a_); 33141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_THROW, throws different 33161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT 33171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania a_++; 33181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ThrowAnInteger(); 33191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, bool), "throws a different type"); 33201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(2, a_); 33211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_THROW, throws nothing 33231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing"); 33241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(3, a_); 33251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_NO_THROW 33271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(a_++); 33281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(4, a_); 33291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_NO_THROW 33311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT 33321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania a_++; 33331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ThrowAnInteger(); 33341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }), "it throws"); 33351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(5, a_); 33361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // successful EXPECT_ANY_THROW 33381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW({ // NOLINT 33391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania a_++; 33401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ThrowAnInteger(); 33411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }); 33421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(6, a_); 33431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // failed EXPECT_ANY_THROW 33451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't"); 33461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(7, a_); 33471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 33481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 33501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE. 33521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass NoFatalFailureTest : public Test { 33531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 33541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void Succeeds() {} 33551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void FailsNonFatal() { 33561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ADD_FAILURE() << "some non-fatal failure"; 33571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 33581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void Fails() { 33591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "some fatal failure"; 33601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 33611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void DoAssertNoFatalFailureOnFails() { 33631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_FATAL_FAILURE(Fails()); 33641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ADD_FAILURE() << "shold not reach here."; 33651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 33661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void DoExpectNoFatalFailureOnFails() { 33681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(Fails()); 33691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ADD_FAILURE() << "other failure"; 33701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 33711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 33721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(NoFatalFailureTest, NoFailure) { 33741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(Succeeds()); 33751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_FATAL_FAILURE(Succeeds()); 33761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 33771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(NoFatalFailureTest, NonFatalIsNoFailure) { 33791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 33801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(FailsNonFatal()), 33811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "some non-fatal failure"); 33821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 33831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_FATAL_FAILURE(FailsNonFatal()), 33841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "some non-fatal failure"); 33851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 33861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 33871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) { 33881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray gtest_failures; 33891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 33901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 33911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania DoAssertNoFatalFailureOnFails(); 33921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 33931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(2, gtest_failures.size()); 339441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kFatalFailure, 33951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).type()); 339641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kFatalFailure, 33971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).type()); 33981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 33991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).message()); 34001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 34011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).message()); 34021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 34031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) { 34051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray gtest_failures; 34061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 34071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 34081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania DoExpectNoFatalFailureOnFails(); 34091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 34101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(3, gtest_failures.size()); 341141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kFatalFailure, 34121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).type()); 341341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kNonFatalFailure, 34141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).type()); 341541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kNonFatalFailure, 34161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(2).type()); 34171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 34181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).message()); 34191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 34201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).message()); 34211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure", 34221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(2).message()); 34231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 34241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34251be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(NoFatalFailureTest, MessageIsStreamable) { 34261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestPartResultArray gtest_failures; 34271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania { 34281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 34291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message"; 34301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 34311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(2, gtest_failures.size()); 343241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kNonFatalFailure, 34331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).type()); 343441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(TestPartResult::kNonFatalFailure, 34351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).type()); 34361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo", 34371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(0).message()); 34381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message", 34391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania gtest_failures.GetTestPartResult(1).message()); 34401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 34411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests non-string assertions. 34431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EqFailure(), used for implementing *EQ* assertions. 34451be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, EqFailure) { 3446fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string foo_val("5"), bar_val("6"); 3447fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string msg1( 34481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EqFailure("foo", "bar", foo_val, bar_val, false) 34491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania .failure_message()); 34501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 34511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: bar\n" 34521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 6\n" 34531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: foo\n" 34541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: 5", 34551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg1.c_str()); 34561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3457fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string msg2( 34581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EqFailure("foo", "6", foo_val, bar_val, false) 34591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania .failure_message()); 34601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 34611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 6\n" 34621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: foo\n" 34631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: 5", 34641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg2.c_str()); 34651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3466fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string msg3( 34671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EqFailure("5", "bar", foo_val, bar_val, false) 34681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania .failure_message()); 34691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 34701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: bar\n" 34711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 6\n" 34721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 5", 34731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg3.c_str()); 34741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3475fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string msg4( 34761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EqFailure("5", "6", foo_val, bar_val, false).failure_message()); 34771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 34781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 6\n" 34791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 5", 34801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg4.c_str()); 34811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3482fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string msg5( 34831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EqFailure("foo", "bar", 3484fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string("\"x\""), std::string("\"y\""), 34851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania true).failure_message()); 34861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ( 34871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: bar\n" 34881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: \"y\"\n" 34891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: foo (ignoring case)\n" 34901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: \"x\"", 34911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg5.c_str()); 34921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 34931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests AppendUserMessage(), used for implementing the *EQ* macros. 34951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, AppendUserMessage) { 3496fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string foo("foo"); 34971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 34981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 34991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("foo", 35001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AppendUserMessage(foo, msg).c_str()); 35011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 35021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << "bar"; 35031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("foo\nbar", 35041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AppendUserMessage(foo, msg).c_str()); 35051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 35061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 350741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 350841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Silences warnings: "Condition is always true", "Unreachable code" 350941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option push -w-ccc -w-rch 351041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 351141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 35121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_TRUE. 35131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_TRUE) { 35141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(2 > 1); // NOLINT 35151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1), 35161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "2 < 1"); 35171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 35181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 351941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult. 352041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionTest, AssertTrueWithAssertionResult) { 352141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_TRUE(ResultIsEven(2)); 352241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ 352341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder. 352441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)), 352541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEven(3)\n" 352641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: false (3 is odd)\n" 352741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: true"); 352841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 352941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_TRUE(ResultIsEvenNoExplanation(2)); 353041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)), 353141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEvenNoExplanation(3)\n" 353241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: false (3 is odd)\n" 353341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: true"); 353441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 353541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 35361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_FALSE. 35371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_FALSE) { 35381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FALSE(2 < 1); // NOLINT 35391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1), 35401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 2 > 1\n" 35411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: true\n" 35421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: false"); 35431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 35441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 354541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult. 354641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionTest, AssertFalseWithAssertionResult) { 354741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_FALSE(ResultIsEven(3)); 354841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ 354941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder. 355041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)), 355141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEven(2)\n" 355241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: true (2 is even)\n" 355341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: false"); 355441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 355541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_FALSE(ResultIsEvenNoExplanation(3)); 355641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)), 355741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEvenNoExplanation(2)\n" 355841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: true\n" 355941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: false"); 356041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 356141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 356241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 356341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Restores warnings after previous "#pragma option push" supressed them 356441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option pop 356541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 356641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 35671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using ASSERT_EQ on double values. The purpose is to make 35681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// sure that the specialization we did for integer and anonymous enums 35691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// isn't used for double arguments. 35701be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, ASSERT_EQ_Double) { 35711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 35721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(5.6, 5.6); 35731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 35741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 35751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2), 35761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "5.1"); 35771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 35781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 35791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_EQ. 35801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_EQ) { 35811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(5, 2 + 3); 35821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3), 35831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 2*3\n" 35841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 6\n" 35851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 5"); 35861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 35871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 35881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_EQ(NULL, pointer). 358941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_CAN_COMPARE_NULL 35901be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_EQ_NULL) { 35911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 35921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* p = NULL; 359341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Some older GCC versions may issue a spurious waring in this or the next 359441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // assertion statement. This warning should not be suppressed with 359541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // static_cast since the test verifies the ability to use bare NULL as the 359641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // expected parameter to the macro. 35971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(NULL, p); 35981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 35991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 36001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int n = 0; 36011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n), 36021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: &n\n"); 36031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 360441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_CAN_COMPARE_NULL 36051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be 36071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// treated as a null pointer by the compiler, we need to make sure 36081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as 36091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_EQ(static_cast<void*>(NULL), non_pointer). 36101be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, ASSERT_EQ_0) { 36111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n = 0; 36121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 36141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(0, n); 36151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 36171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6), 36181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 0"); 36191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_NE. 36221be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_NE) { 36231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NE(6, 7); 36241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'), 36251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ('a') != ('a'), " 36261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 36271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_LE. 36301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_LE) { 36311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_LE(2, 3); 36321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_LE(2, 2); 36331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0), 36341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) <= (0), actual: 2 vs 0"); 36351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_LT. 36381be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_LT) { 36391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_LT(2, 3); 36401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2), 36411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) < (2), actual: 2 vs 2"); 36421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_GE. 36451be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_GE) { 36461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_GE(2, 1); 36471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_GE(2, 2); 36481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3), 36491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) >= (3), actual: 2 vs 3"); 36501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_GT. 36531be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_GT) { 36541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_GT(2, 1); 36551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2), 36561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) > (2), actual: 2 vs 2"); 36571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 36601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid ThrowNothing() {} 36621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_THROW. 36641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_THROW) { 36651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_THROW(ThrowAnInteger(), int); 366641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 366741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifndef __BORLANDC__ 366841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 366941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder 2007 and 2009. 36701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE( 36711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_THROW(ThrowAnInteger(), bool), 36721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowAnInteger() throws an exception of type bool.\n" 36731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: it throws a different type."); 367441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 367541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 36761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE( 36771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_THROW(ThrowNothing(), bool), 36781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowNothing() throws an exception of type bool.\n" 36791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: it throws nothing."); 36801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_NO_THROW. 36831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_NO_THROW) { 36841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_THROW(ThrowNothing()); 36851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()), 36861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowAnInteger() doesn't throw an exception." 36871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "\n Actual: it throws."); 36881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ASSERT_ANY_THROW. 36911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ASSERT_ANY_THROW) { 36921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_ANY_THROW(ThrowAnInteger()); 36931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE( 36941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_ANY_THROW(ThrowNothing()), 36951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowNothing() throws an exception.\n" 36961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: it doesn't."); 36971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 36981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 36991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 37001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Makes sure we deal with the precedence of <<. This test should 37021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// compile. 37031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, AssertPrecedence) { 37041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1 < 2, true); 370541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool false_value = false; 370641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(true && false_value, false); 37071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A subroutine used by the following test. 37101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid TestEq1(int x) { 37111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, x); 37121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests calling a test subroutine that's not part of a fixture. 37151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, NonFixtureSubroutine) { 37161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(TestEq1(2), 37171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: x"); 37181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// An uncopyable class. 37211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Uncopyable { 37221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 372341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit Uncopyable(int a_value) : value_(a_value) {} 37241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int value() const { return value_; } 37261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool operator==(const Uncopyable& rhs) const { 37271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return value() == rhs.value(); 37281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 37291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 37301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This constructor deliberately has no implementation, as we don't 37311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // want this class to be copyable. 37321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable(const Uncopyable&); // NOLINT 37331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int value_; 37351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 37361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) { 37381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << value.value(); 37391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool IsPositiveUncopyable(const Uncopyable& x) { 37431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return x.value() > 0; 37441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A subroutine used by the following test. 37471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid TestAssertNonPositive() { 37481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable y(-1); 37491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED1(IsPositiveUncopyable, y); 37501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A subroutine used by the following test. 37521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid TestAssertEqualsUncopyable() { 37531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable x(5); 37541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable y(-1); 37551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(x, y); 37561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that uncopyable objects can be used in assertions. 37591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, AssertWorksWithUncopyableObject) { 37601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable x(5); 37611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_PRED1(IsPositiveUncopyable, x); 37621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(x, x); 37631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(TestAssertNonPositive(), 37641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 37651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(), 37661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 37671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that uncopyable objects can be used in expects. 37701be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, ExpectWorksWithUncopyableObject) { 37711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable x(5); 37721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_PRED1(IsPositiveUncopyable, x); 37731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Uncopyable y(-1); 37741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y), 37751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 37761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(x, x); 37771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), 37781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 37791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 37801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 378141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotenum NamedEnum { 378241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kE1 = 0, 378341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kE2 = 1 378441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 378541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 378641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionTest, NamedEnum) { 378741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(kE1, kE1); 378841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LT(kE1, kE2); 378941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0"); 379041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1"); 379141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 37921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The version of gcc used in XCode 2.2 has a bug and doesn't allow 379441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// anonymous enums in assertions. Therefore the following test is not 379541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// done on Mac. 379641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Sun Studio and HP aCC also reject this code. 379741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC) 37981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 37991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using assertions with anonymous enums. 38001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaenum { 380141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kCaseA = -1, 380241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 380341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# if GTEST_OS_LINUX 380441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 38051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We want to test the case where the size of the anonymous enum is 38061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // larger than sizeof(int), to make sure our implementation of the 38071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // assertions doesn't truncate the enums. However, MSVC 38081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // (incorrectly) doesn't allow an enum value to exceed the range of 38091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // an int, so this has to be conditionally compiled. 38101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 381141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // On Linux, kCaseB and kCaseA have the same value when truncated to 38121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // int size. We want to test whether this will confuse the 38131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // assertions. 381441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kCaseB = testing::internal::kMaxBiggestInt, 381541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 381641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# else 381741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 381841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kCaseB = INT_MAX, 381941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 382041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif // GTEST_OS_LINUX 382141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 382241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot kCaseC = 42 38231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 38241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38251be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionTest, AnonymousEnum) { 382641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# if GTEST_OS_LINUX 382741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 382841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB)); 382941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 383041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif // GTEST_OS_LINUX 383141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 383241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(kCaseA, kCaseA); 383341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NE(kCaseA, kCaseB); 383441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LT(kCaseA, kCaseB); 383541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(kCaseA, kCaseB); 383641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_GT(kCaseB, kCaseA); 383741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_GE(kCaseA, kCaseA); 383841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB), 383941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "(kCaseA) >= (kCaseB)"); 384041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC), 384141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "-1 vs 42"); 384241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 384341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(kCaseA, kCaseA); 384441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_NE(kCaseA, kCaseB); 384541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_LT(kCaseA, kCaseB); 384641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_LE(kCaseA, kCaseB); 384741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_GT(kCaseB, kCaseA); 384841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_GE(kCaseA, kCaseA); 384941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 385041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifndef __BORLANDC__ 385141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 385241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder. 385341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB), 385441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: kCaseB"); 385541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 385641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Actual: 42"); 385741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 385841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 385941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 386041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Which is: -1"); 386141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 386241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 386341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // !GTEST_OS_MAC && !defined(__SUNPRO_CC) 38641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 38661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastatic HRESULT UnexpectedHRESULTFailure() { 38681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return E_UNEXPECTED; 38691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 38701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastatic HRESULT OkHRESULTSuccess() { 38721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return S_OK; 38731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 38741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastatic HRESULT FalseHRESULTSuccess() { 38761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return S_FALSE; 38771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 38781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// HRESULT assertion tests test both zero and non-zero 38801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// success codes as well as failure message for each. 38811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 38821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Windows CE doesn't support message texts. 38831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) { 38841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_SUCCEEDED(S_OK); 38851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_SUCCEEDED(S_FALSE); 38861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 38881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 38891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 0x8000FFFF"); 38901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 38911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38921be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) { 38931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_SUCCEEDED(S_OK); 38941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_SUCCEEDED(S_FALSE); 38951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 38961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 38971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 38981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 0x8000FFFF"); 38991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) { 39021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_FAILED(E_UNEXPECTED); 39031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()), 39051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (OkHRESULTSuccess()) fails.\n" 3906fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes " Actual: 0x0"); 39071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()), 39081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (FalseHRESULTSuccess()) fails.\n" 3909fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes " Actual: 0x1"); 39101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39121be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) { 39131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_FAILED(E_UNEXPECTED); 39141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 391541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifndef __BORLANDC__ 391641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 391741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder 2007 and 2009. 39181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()), 39191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (OkHRESULTSuccess()) fails.\n" 3920fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes " Actual: 0x0"); 392141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 392241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 39231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()), 39241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (FalseHRESULTSuccess()) fails.\n" 3925fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes " Actual: 0x1"); 39261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that streaming to the HRESULT macros works. 39291be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(HRESULTAssertionTest, Streaming) { 39301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 39311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 39321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 39331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 39341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 39361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 39371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 39381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 393941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# ifndef __BORLANDC__ 394041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 394141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder 2007 and 2009. 39421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE( 39431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 39441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 394541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# endif 39461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 39481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_HRESULT_FAILED(S_OK) << "expected failure", 39491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 39501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE( 39521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_HRESULT_FAILED(S_OK) << "expected failure", 39531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 39541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 39571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 395841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 395941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Silences warnings: "Condition is always true", "Unreachable code" 396041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option push -w-ccc -w-rch 396141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 396241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 39631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the assertion macros behave like single statements. 39641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) { 396541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 39661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(false) << "This should never be executed; " 39671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "It's a compilation test only."; 39681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 396941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysTrue()) 39701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(false); 39711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 397241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 39731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 397441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 39751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_LT(1, 3); 39761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 397741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 397841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 39791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 39801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GT(3, 2) << ""; 39811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 39841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the compiler will not complain about unreachable code in the 39851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros. 39861be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) { 39871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n = 0; 39881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(throw 1, int); 39901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), ""); 39911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), ""); 39921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(n++); 39931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), ""); 39941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(throw 1); 39951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), ""); 39961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 39971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 39981be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) { 399941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 40001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowNothing(), bool); 40011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 400241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysTrue()) 40031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowAnInteger(), int); 40041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 400541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 400741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 40081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(ThrowAnInteger()); 40091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 401041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysTrue()) 40111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(ThrowNothing()); 40121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 401341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 401541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 40161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(ThrowNothing()); 40171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 401841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysTrue()) 40191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(ThrowAnInteger()); 40201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 402141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 40231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 40241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40251be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) { 402641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 40271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. " 40281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "It's a compilation test only."; 40291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 403041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 403241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 40331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_FATAL_FAILURE(FAIL()) << ""; 40341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 403541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 403741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysTrue()) 40381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_FATAL_FAILURE(SUCCEED()); 40391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 404041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 404241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (AlwaysFalse()) 404341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ; // NOLINT 40441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else 40451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_FATAL_FAILURE(SUCCEED()); 40461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 40471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the assertion macros work well with switch statements. 40491be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionSyntaxTest, WorksWithSwitch) { 40501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania switch (0) { 40511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania case 1: 40521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania break; 40531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania default: 40541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(true); 40551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 40561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania switch (0) 40581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania case 0: 40591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case"; 40601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Binary assertions are implemented using a different code path 40621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // than the Boolean assertions. Hence we test them separately. 40631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania switch (0) { 40641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania case 1: 40651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania default: 40661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler"; 40671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 40681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania switch (0) 40701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania case 0: 40711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(1, 2); 40721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 40731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 40751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid ThrowAString() { 4077fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes throw "std::string"; 40781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 40791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Test that the exception assertion macros compile and work with const 40811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// type qualifier. 40821be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(AssertionSyntaxTest, WorksWithConst) { 40831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_THROW(ThrowAString(), const char*); 40841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowAString(), const char*); 40861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 40871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 40891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace 40911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace testing { 40931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 40941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test tracks SUCCEED*. 40951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(SuccessfulAssertionTest, SUCCEED) { 40961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED(); 40971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED() << "OK"; 409841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count()); 40991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 41001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test doesn't track successful EXPECT_*. 41021be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(SuccessfulAssertionTest, EXPECT) { 41031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(true); 410441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 41061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test doesn't track successful EXPECT_STR*. 41081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(SuccessfulAssertionTest, EXPECT_STR) { 41091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("", ""); 411041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 41121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test doesn't track successful ASSERT_*. 41141be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(SuccessfulAssertionTest, ASSERT) { 41151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(true); 411641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 41181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test doesn't track successful ASSERT_STR*. 41201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(SuccessfulAssertionTest, ASSERT_STR) { 41211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ("", ""); 412241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 41231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 41241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace testing 41261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 41271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace { 41281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4129fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests the message streaming variation of assertions. 4130fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4131fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, EXPECT) { 4132fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_EQ(1, 1) << "This should succeed."; 4133fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << "Expected failure #1.", 4134fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #1"); 4135fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_LE(1, 2) << "This should succeed."; 4136fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << "Expected failure #2.", 4137fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #2."); 4138fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_GE(1, 0) << "This should succeed."; 4139fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << "Expected failure #3.", 4140fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #3."); 4141fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4142fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STREQ("1", "1") << "This should succeed."; 4143fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("1", "1") << "Expected failure #4.", 4144fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #4."); 4145fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_STRCASEEQ("a", "A") << "This should succeed."; 4146fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("a", "A") << "Expected failure #5.", 4147fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #5."); 4148fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4149fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FLOAT_EQ(1, 1) << "This should succeed."; 4150fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << "Expected failure #6.", 4151fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure #6."); 4152fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NEAR(1, 1.1, 0.2) << "This should succeed."; 4153fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4154fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4155fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, ASSERT) { 4156fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(1, 1) << "This should succeed."; 4157fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_NE(1, 2) << "This should succeed."; 4158fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_LE(1, 2) << "This should succeed."; 4159fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_LT(1, 2) << "This should succeed."; 4160fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_GE(1, 0) << "This should succeed."; 4161fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << "Expected failure.", 4162fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure."); 4163fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4164fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4165fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, ASSERT_STR) { 4166fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_STREQ("1", "1") << "This should succeed."; 4167fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_STRNE("1", "2") << "This should succeed."; 4168fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_STRCASEEQ("a", "A") << "This should succeed."; 4169fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("a", "A") << "Expected failure.", 4170fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expected failure."); 4171fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4172fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4173fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, ASSERT_FLOATING) { 4174fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_FLOAT_EQ(1, 1) << "This should succeed."; 4175fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_DOUBLE_EQ(1, 1) << "This should succeed."; 4176fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << "Expect failure.", // NOLINT 4177fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Expect failure."); 4178fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // To work around a bug in gcc 2.95.0, there is intentionally no 4179fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // space after the first comma in the previous statement. 4180fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4181fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4182fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests using ASSERT_FALSE with a streamed message. 4183fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, ASSERT_FALSE) { 4184fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_FALSE(false) << "This shouldn't fail."; 4185fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE({ // NOLINT 4186fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_FALSE(true) << "Expected failure: " << 2 << " > " << 1 4187fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes << " evaluates to " << true; 4188fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }, "Expected failure"); 4189fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4190fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4191fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests using FAIL with a streamed message. 4192fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, FAIL) { 4193fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE(FAIL() << 0, 4194fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "0"); 4195fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4196fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4197fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests using SUCCEED with a streamed message. 4198fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, SUCCEED) { 4199fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes SUCCEED() << "Success == " << 1; 4200fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4201fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4202fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests using ASSERT_TRUE with a streamed message. 4203fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, ASSERT_TRUE) { 4204fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(true) << "This should succeed."; 4205fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(true) << true; 4206fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE({ // NOLINT 4207fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_TRUE(false) << static_cast<const char *>(NULL) 4208fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes << static_cast<char *>(NULL); 4209fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }, "(null)(null)"); 4210fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4211fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 4212fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#if GTEST_OS_WINDOWS 4213fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests using wide strings in assertion messages. 4214fc2de66453b0669c09eaca643b07d34443858b6fElliott HughesTEST(AssertionWithMessageTest, WideStringMessage) { 4215fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE({ // NOLINT 4216fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(false) << L"This failure is expected.\x8119"; 4217fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }, "This failure is expected."); 4218fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FATAL_FAILURE({ // NOLINT 4219fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ASSERT_EQ(1, 2) << "This failure is " 4220fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes << L"expected too.\x8120"; 4221fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes }, "This failure is expected too."); 4222fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes} 4223fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes#endif // GTEST_OS_WINDOWS 4224fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 42251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_TRUE. 42261be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_TRUE) { 4227fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(true) << "Intentional success"; 4228fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #1.", 4229fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Intentional failure #1."); 4230fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #2.", 4231fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Intentional failure #2."); 42321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(2 > 1); // NOLINT 42331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1), 42341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 2 < 1\n" 42351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: false\n" 42361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: true"); 42371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3), 42381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "2 > 3"); 42391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 42401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 424141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult. 424241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ExpectTest, ExpectTrueWithAssertionResult) { 424341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ResultIsEven(2)); 424441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)), 424541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEven(3)\n" 424641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: false (3 is odd)\n" 424741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: true"); 424841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ResultIsEvenNoExplanation(2)); 424941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)), 425041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEvenNoExplanation(3)\n" 425141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: false (3 is odd)\n" 425241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: true"); 425341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 425441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 4255fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// Tests EXPECT_FALSE with a streamed message. 42561be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_FALSE) { 42571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(2 < 1); // NOLINT 4258fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_FALSE(false) << "Intentional success"; 4259fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #1.", 4260fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Intentional failure #1."); 4261fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #2.", 4262fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Intentional failure #2."); 42631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1), 42641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 2 > 1\n" 42651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: true\n" 42661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: false"); 42671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3), 42681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "2 < 3"); 42691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 42701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 427141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult. 427241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ExpectTest, ExpectFalseWithAssertionResult) { 427341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ResultIsEven(3)); 427441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)), 427541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEven(2)\n" 427641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: true (2 is even)\n" 427741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: false"); 427841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ResultIsEvenNoExplanation(3)); 427941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)), 428041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Value of: ResultIsEvenNoExplanation(2)\n" 428141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot " Actual: true\n" 428241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Expected: false"); 428341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 428441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 428541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 428641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Restores warnings after previous "#pragma option push" supressed them 428741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option pop 428841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 428941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 42901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_EQ. 42911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_EQ) { 42921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(5, 2 + 3); 42931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3), 42941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: 2*3\n" 42951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: 6\n" 42961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 5"); 42971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3), 42981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "2 - 3"); 42991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using EXPECT_EQ on double values. The purpose is to make 43021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// sure that the specialization we did for integer and anonymous enums 43031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// isn't used for double arguments. 43041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_EQ_Double) { 43051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 43061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(5.6, 5.6); 43071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 43091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2), 43101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "5.1"); 43111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 431341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_CAN_COMPARE_NULL 43141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_EQ(NULL, pointer). 43151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_EQ_NULL) { 43161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 43171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* p = NULL; 431841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Some older GCC versions may issue a spurious warning in this or the next 431941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // assertion statement. This warning should not be suppressed with 432041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // static_cast since the test verifies the ability to use bare NULL as the 432141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // expected parameter to the macro. 43221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(NULL, p); 43231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 43251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n = 0; 43261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n), 43271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: &n\n"); 43281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 432941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_CAN_COMPARE_NULL 43301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be 43321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// treated as a null pointer by the compiler, we need to make sure 43331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as 43341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// EXPECT_EQ(static_cast<void*>(NULL), non_pointer). 43351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_EQ_0) { 43361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n = 0; 43371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A success. 43391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(0, n); 43401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // A failure. 43421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6), 43431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: 0"); 43441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_NE. 43471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_NE) { 43481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NE(6, 7); 43491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'), 43511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ('a') != ('a'), " 43521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 43531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2), 43541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "2"); 43551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p0 = NULL; 43561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0), 43571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p0"); 43581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Only way to get the Nokia compiler to compile the cast 43591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // is to have a separate void* variable first. Putting 43601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the two casts on the same line doesn't work, neither does 43611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // a direct C-style to char*. 43621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv1 = (void*)0x1234; // NOLINT 43631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p1 = reinterpret_cast<char*>(pv1); 43641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1), 43651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p1"); 43661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_LE. 43691be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_LE) { 43701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_LE(2, 3); 43711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_LE(2, 2); 43721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0), 43731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) <= (0), actual: 2 vs 0"); 43741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9), 43751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(1.1) <= (0.9)"); 43761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_LT. 43791be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_LT) { 43801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_LT(2, 3); 43811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2), 43821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) < (2), actual: 2 vs 2"); 43831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1), 43841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(2) < (1)"); 43851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_GE. 43881be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_GE) { 43891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GE(2, 1); 43901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GE(2, 2); 43911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3), 43921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) >= (3), actual: 2 vs 3"); 43931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1), 43941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(0.9) >= (1.1)"); 43951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 43961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 43971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_GT. 43981be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_GT) { 43991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_GT(2, 1); 44001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2), 44011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: (2) > (2), actual: 2 vs 2"); 44021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3), 44031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(2) > (3)"); 44041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 44071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_THROW. 44091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_THROW) { 44101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowAnInteger(), int); 44111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool), 44121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowAnInteger() throws an exception of " 44131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "type bool.\n Actual: it throws a different type."); 44141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 44151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowNothing(), bool), 44161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowNothing() throws an exception of type bool.\n" 44171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: it throws nothing."); 44181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_NO_THROW. 44211be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_NO_THROW) { 44221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(ThrowNothing()); 44231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()), 44241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowAnInteger() doesn't throw an " 44251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "exception.\n Actual: it throws."); 44261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests EXPECT_ANY_THROW. 44291be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, EXPECT_ANY_THROW) { 44301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(ThrowAnInteger()); 44311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE( 44321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(ThrowNothing()), 44331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: ThrowNothing() throws an exception.\n" 44341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: it doesn't."); 44351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 44381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Make sure we deal with the precedence of <<. 44401be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ExpectTest, ExpectPrecedence) { 44411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1 < 2, true); 44421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false), 44431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: true && false"); 44441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the StreamableToString() function. 44481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using StreamableToString() on a scalar. 44501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableToStringTest, Scalar) { 44511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("5", StreamableToString(5).c_str()); 44521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using StreamableToString() on a non-char pointer. 44551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableToStringTest, Pointer) { 44561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int n = 0; 44571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int* p = &n; 44581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE("(null)", StreamableToString(p).c_str()); 44591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using StreamableToString() on a NULL non-char pointer. 44621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableToStringTest, NullPointer) { 44631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int* p = NULL; 44641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 44651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using StreamableToString() on a C string. 44681be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableToStringTest, CString) { 44691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("Foo", StreamableToString("Foo").c_str()); 44701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using StreamableToString() on a NULL C string. 44731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableToStringTest, NullCString) { 44741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* p = NULL; 44751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 44761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using streamable values as assertion messages. 44791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using std::string as an assertion message. 44811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, string) { 44821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const std::string str( 44831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "This failure message is a std::string, and is expected."); 44841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << str, 44851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania str.c_str()); 44861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 44881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that we can output strings containing embedded NULs. 44891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Limited to Linux because we can only do this with std::string's. 44901be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, stringWithEmbeddedNUL) { 44911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char char_array_with_nul[] = 44921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Here's a NUL\0 and some more string"; 44931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const std::string string_with_nul(char_array_with_nul, 44941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania sizeof(char_array_with_nul) 44951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania - 1); // drops the trailing NUL 44961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << string_with_nul, 44971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Here's a NUL\\0 and some more string"); 44981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 44991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that we can output a NUL char. 45011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, NULChar) { 45021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 45031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "A NUL" << '\0' << " and some more string"; 45041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "A NUL\\0 and some more string"); 45051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using int as an assertion message. 45081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, int) { 45091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << 900913, 45101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "900913"); 45111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using NULL char pointer as an assertion message. 45141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 45151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// In MSVC, streaming a NULL char * causes access violation. Google Test 45161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// implemented a workaround (substituting "(null)" for NULL). This 45171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// tests whether the workaround works. 45181be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, NullCharPtr) { 45191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL), 45201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "(null)"); 45211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that basic IO manipulators (endl, ends, and flush) can be 45241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// streamed to testing::Message. 45251be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamableTest, BasicIoManip) { 45261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 45271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Line 1." << std::endl 45281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "A NUL char " << std::ends << std::flush << " in line 2."; 45291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "Line 1.\nA NUL char \\0 in line 2."); 45301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the macros that haven't been covered so far. 45331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid AddFailureHelper(bool* aborted) { 45351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania *aborted = true; 4536fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes ADD_FAILURE() << "Intentional failure."; 45371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania *aborted = false; 45381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests ADD_FAILURE. 45411be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MacroTest, ADD_FAILURE) { 45421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool aborted = true; 45431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted), 4544fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "Intentional failure."); 45451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(aborted); 45461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 454841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ADD_FAILURE_AT. 454941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(MacroTest, ADD_FAILURE_AT) { 455041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and 455141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the failure message contains the user-streamed part. 455241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!"); 455341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 455441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Verifies that the user-streamed part is optional. 455541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed"); 455641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 455741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Unfortunately, we cannot verify that the failure message contains 455841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the right file path and line number the same way, as 455941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and 456041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // line number. Instead, we do that in gtest_output_test_.cc. 456141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 456241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 45631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests FAIL. 45641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MacroTest, FAIL) { 45651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL(), 45661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Failed"); 45671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.", 45681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Intentional failure."); 45691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests SUCCEED 45721be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MacroTest, SUCCEED) { 45731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED(); 45741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED() << "Explicit success."; 45751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for EXPECT_EQ() and ASSERT_EQ(). 45781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 45791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// These tests fail *intentionally*, s.t. the failure messages can be 45801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// generated and tested. 45811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 45821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// We have different tests for different argument types. 45831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using bool values in {EXPECT|ASSERT}_EQ. 45851be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, Bool) { 45861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(true, true); 458741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE({ 458841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool false_value = false; 458941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(false_value, true); 459041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "Value of: true"); 45911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 45931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using int values in {EXPECT|ASSERT}_EQ. 45941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, Int) { 45951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(32, 32); 45961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33), 45971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "33"); 45981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 45991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using time_t values in {EXPECT|ASSERT}_EQ. 46011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, Time_T) { 46021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(static_cast<time_t>(0), 46031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static_cast<time_t>(0)); 46041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0), 46051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static_cast<time_t>(1234)), 46061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "1234"); 46071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 46081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using char values in {EXPECT|ASSERT}_EQ. 46101be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, Char) { 46111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ('z', 'z'); 46121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char ch = 'b'; 46131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch), 46141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "ch"); 46151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch), 46161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "ch"); 46171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 46181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using wchar_t values in {EXPECT|ASSERT}_EQ. 46201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, WideChar) { 46211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(L'b', L'b'); 46221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'), 46241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: L'x'\n" 46251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: L'x' (120, 0x78)\n" 46261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Expected: L'\0'\n" 46271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Which is: L'\0' (0, 0x0)"); 46281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static wchar_t wchar; 46301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar = L'b'; 46311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar), 46321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "wchar"); 463341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot wchar = 0x8119; 463441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar), 46351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: wchar"); 46361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 46371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using ::std::string values in {EXPECT|ASSERT}_EQ. 46391be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, StdString) { 46401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a const char* to an std::string that has identical 46411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // content. 46421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ("Test", ::std::string("Test")); 46431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two identical std::strings. 46451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const ::std::string str1("A * in the middle"); 46461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const ::std::string str2(str1); 46471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(str1, str2); 46481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a const char* to an std::string that has different 46501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // content 46511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")), 4652fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes "\"test\""); 46531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares an std::string to a char* that has different content. 46551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p1 = const_cast<char*>("foo"); 46561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1), 46571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p1"); 46581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two std::strings that have different contents, one of 46601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // which having a NUL character in the middle. This should fail. 46611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static ::std::string str3(str1); 46621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania str3.at(2) = '\0'; 46631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3), 46641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: str3\n" 46651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania " Actual: \"A \\0 in the middle\""); 46661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 46671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_WSTRING 46691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ. 46711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, StdWideString) { 46721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two identical std::wstrings. 46731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const ::std::wstring wstr1(L"A * in the middle"); 46741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const ::std::wstring wstr2(wstr1); 46751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(wstr1, wstr2); 46761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 467741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Compares an std::wstring to a const wchar_t* that has identical 467841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // content. 467941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 468041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119); 468141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 46821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares an std::wstring to a const wchar_t* that has different 46831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // content. 468441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 46851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 468641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120); 468741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }, "kTestX8120"); 46881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two std::wstrings that have different contents, one of 46901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // which having a NUL character in the middle. 46911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::wstring wstr3(wstr1); 46921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wstr3.at(2) = L'\0'; 46931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3), 46941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "wstr3"); 46951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 46961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a wchar_t* to an std::wstring that has different 46971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // content. 46981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 46991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar")); 47001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 47011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 47021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_WSTRING 47041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_GLOBAL_STRING 47061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using ::string values in {EXPECT|ASSERT}_EQ. 47071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, GlobalString) { 47081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a const char* to a ::string that has identical content. 47091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ("Test", ::string("Test")); 47101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two identical ::strings. 47121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const ::string str1("A * in the middle"); 47131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const ::string str2(str1); 47141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(str1, str2); 47151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a ::string to a const char* that has different content. 47171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"), 47181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "test"); 47191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two ::strings that have different contents, one of which 47211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // having a NUL character in the middle. 47221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::string str3(str1); 47231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania str3.at(2) = '\0'; 47241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3), 47251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "str3"); 47261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a ::string to a char* that has different content. 47281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE({ // NOLINT 47291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(::string("bar"), const_cast<char*>("foo")); 47301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, ""); 47311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 47321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_STRING 47341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_GLOBAL_WSTRING 47361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using ::wstring values in {EXPECT|ASSERT}_EQ. 47381be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, GlobalWideString) { 47391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two identical ::wstrings. 47401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const ::wstring wstr1(L"A * in the middle"); 47411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const ::wstring wstr2(wstr1); 47421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(wstr1, wstr2); 47431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 474441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Compares a const wchar_t* to a ::wstring that has identical content. 474541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 474641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(kTestX8119, ::wstring(kTestX8119)); 474741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 47481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a const wchar_t* to a ::wstring that has different 47491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // content. 475041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 47511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE({ // NOLINT 475241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(kTestX8120, ::wstring(kTestX8119)); 47531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }, "Test\\x8119"); 47541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares a wchar_t* to a ::wstring that has different content. 47561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar_t* const p1 = const_cast<wchar_t*>(L"foo"); 47571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")), 47581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "bar"); 47591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Compares two ::wstrings that have different contents, one of which 47611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // having a NUL character in the middle. 47621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static ::wstring wstr3; 47631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wstr3 = wstr1; 47641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wstr3.at(2) = L'\0'; 47651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3), 47661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "wstr3"); 47671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 47681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_WSTRING 47701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using char pointers in {EXPECT|ASSERT}_EQ. 47721be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, CharPointer) { 47731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p0 = NULL; 47741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Only way to get the Nokia compiler to compile the cast 47751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // is to have a separate void* variable first. Putting 47761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the two casts on the same line doesn't work, neither does 47771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // a direct C-style to char*. 47781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv1 = (void*)0x1234; // NOLINT 47791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv2 = (void*)0xABC0; // NOLINT 47801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p1 = reinterpret_cast<char*>(pv1); 47811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p2 = reinterpret_cast<char*>(pv2); 47821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(p1, p1); 47831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 47851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: p2"); 47861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 47871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p2"); 47881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234), 47891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania reinterpret_cast<char*>(0xABC0)), 47901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "ABC0"); 47911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 47921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 47931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ. 47941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, WideCharPointer) { 47951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar_t* const p0 = NULL; 47961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Only way to get the Nokia compiler to compile the cast 47971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // is to have a separate void* variable first. Putting 47981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the two casts on the same line doesn't work, neither does 47991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // a direct C-style to char*. 48001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv1 = (void*)0x1234; // NOLINT 48011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv2 = (void*)0xABC0; // NOLINT 48021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1); 48031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2); 48041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(p0, p0); 48051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 48061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 48071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "Value of: p2"); 48081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 48091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p2"); 48101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv3 = (void*)0x1234; // NOLINT 48111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void* pv4 = (void*)0xABC0; // NOLINT 48121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3); 48131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4); 48141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4), 48151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "p4"); 48161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 48171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 48181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests using other types of pointers in {EXPECT|ASSERT}_EQ. 48191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(EqAssertionTest, OtherPointer) { 48201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(static_cast<const int*>(NULL), 48211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static_cast<const int*>(NULL)); 48221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL), 48231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania reinterpret_cast<const int*>(0x1234)), 48241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "0x1234"); 48251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 48261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 482741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A class that supports binary comparison operators but not streaming. 482841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass UnprintableChar { 482941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 483041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit UnprintableChar(char ch) : char_(ch) {} 483141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 483241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator==(const UnprintableChar& rhs) const { 483341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ == rhs.char_; 483441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 483541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator!=(const UnprintableChar& rhs) const { 483641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ != rhs.char_; 483741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 483841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator<(const UnprintableChar& rhs) const { 483941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ < rhs.char_; 484041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 484141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator<=(const UnprintableChar& rhs) const { 484241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ <= rhs.char_; 484341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 484441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator>(const UnprintableChar& rhs) const { 484541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ > rhs.char_; 484641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 484741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool operator>=(const UnprintableChar& rhs) const { 484841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return char_ >= rhs.char_; 484941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 485041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 485141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot private: 485241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot char char_; 485341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 485441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 485541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that ASSERT_EQ() and friends don't require the arguments to 485641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// be printable. 485741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ComparisonAssertionTest, AcceptsUnprintableArgs) { 485841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const UnprintableChar x('x'), y('y'); 485941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(x, x); 486041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NE(x, y); 486141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_LT(x, y); 486241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_LE(x, y); 486341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_GT(y, x); 486441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_GE(x, x); 486541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 486641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>"); 486741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>"); 486841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>"); 486941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>"); 487041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>"); 487141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 487241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Code tested by EXPECT_FATAL_FAILURE cannot reference local 487341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // variables, so we have to write UnprintableChar('x') instead of x. 487441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ 487541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ICE's in C++Builder. 487641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')), 487741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1-byte object <78>"); 487841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 487941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1-byte object <78>"); 488041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 488141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 488241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1-byte object <79>"); 488341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 488441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1-byte object <78>"); 488541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 488641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1-byte object <79>"); 488741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 488841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 48891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the FRIEND_TEST macro. 48901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 48911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This class has a private member we want to test. We will test it 48921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// both in a TEST and in a TEST_F. 48931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Foo { 48941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 48951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Foo() {} 48961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 48971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 48981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int Bar() const { return 1; } 48991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Declares the friend tests that can access the private member 49011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Bar(). 49021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FRIEND_TEST(FRIEND_TEST_Test, TEST); 49031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FRIEND_TEST(FRIEND_TEST_Test2, TEST_F); 49041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 49051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the FRIEND_TEST declaration allows a TEST to access a 49071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// class's private members. This should compile. 49081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(FRIEND_TEST_Test, TEST) { 49091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, Foo().Bar()); 49101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 49111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The fixture needed to test using FRIEND_TEST with TEST_F. 49131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass FRIEND_TEST_Test2 : public Test { 49141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 49151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Foo foo; 49161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 49171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that the FRIEND_TEST declaration allows a TEST_F to access a 49191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// class's private members. This should compile. 49201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FRIEND_TEST_Test2, TEST_F) { 49211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, foo.Bar()); 49221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 49231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the life cycle of Test objects. 49251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The test fixture for testing the life cycle of Test objects. 49271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 49281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This class counts the number of live test objects that uses this 49291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// fixture. 49301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TestLifeCycleTest : public Test { 49311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 49321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Constructor. Increments the number of test objects that uses 49331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // this fixture. 49341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestLifeCycleTest() { count_++; } 49351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Destructor. Decrements the number of test objects that uses this 49371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // fixture. 49381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ~TestLifeCycleTest() { count_--; } 49391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Returns the number of live test objects that uses this fixture. 49411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int count() const { return count_; } 49421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 49441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int count_; 49451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 49461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint TestLifeCycleTest::count_ = 0; 49481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the life cycle of test objects. 49501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestLifeCycleTest, Test1) { 49511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // There should be only one test object in this test case that's 49521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // currently alive. 49531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, count()); 49541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 49551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the life cycle of test objects. 49571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestLifeCycleTest, Test2) { 49581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // After Test1 is done and Test2 is started, there should still be 49591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // only one live test object, as the object for Test1 should've been 49601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // deleted. 49611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, count()); 49621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 49631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 49641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace 49651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 496641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that the copy constructor works when it is NOT optimized away by 496741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// the compiler. 496841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) { 496941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Checks that the copy constructor doesn't try to dereference NULL pointers 497041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // in the source object. 497141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r1 = AssertionSuccess(); 497241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r2 = r1; 497341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // The following line is added to prevent the compiler from optimizing 497441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // away the constructor call. 497541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot r1 << "abc"; 497641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 497741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r3 = r1; 497841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1)); 497941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("abc", r1.message()); 498041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 498141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 498241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that AssertionSuccess and AssertionFailure construct 498341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// AssertionResult objects as expected. 498441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionResultTest, ConstructionWorks) { 498541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r1 = AssertionSuccess(); 498641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(r1); 498741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("", r1.message()); 498841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 498941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r2 = AssertionSuccess() << "abc"; 499041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(r2); 499141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("abc", r2.message()); 499241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 499341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r3 = AssertionFailure(); 499441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(r3); 499541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("", r3.message()); 499641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 499741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r4 = AssertionFailure() << "def"; 499841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(r4); 499941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("def", r4.message()); 500041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 500141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r5 = AssertionFailure(Message() << "ghi"); 500241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(r5); 500341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("ghi", r5.message()); 500441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 500541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 500641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that the negation flips the predicate result but keeps the message. 500741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionResultTest, NegationWorks) { 500841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r1 = AssertionSuccess() << "abc"; 500941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(!r1); 501041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("abc", (!r1).message()); 501141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 501241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r2 = AssertionFailure() << "def"; 501341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(!r2); 501441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("def", (!r2).message()); 501541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 501641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 501741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionResultTest, StreamingWorks) { 501841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r = AssertionSuccess(); 501941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot r << "abc" << 'd' << 0 << true; 502041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("abcd0true", r.message()); 502141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 502241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 502341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AssertionResultTest, CanStreamOstreamManipulators) { 502441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AssertionResult r = AssertionSuccess(); 502541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot r << "Data" << std::endl << std::flush << std::ends << "Will be visible"; 502641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("Data\n\\0Will be visible", r.message()); 502741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 502841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 50291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming a user type whose definition and operator << are 50301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// both in the global namespace. 50311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Base { 50321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 503341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit Base(int an_x) : x_(an_x) {} 50341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int x() const { return x_; } 50351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 50361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int x_; 50371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 50381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const Base& val) { 50401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << val.x(); 50411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const Base* pointer) { 50441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << "(" << pointer->x() << ")"; 50451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) { 50481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 50491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Base a(1); 50501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << a << &a; // Uses ::operator<<. 50521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1(1)", msg.GetString().c_str()); 50531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming a user type whose definition and operator<< are 50561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// both in an unnamed namespace. 50571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace { 50581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass MyTypeInUnnamedNameSpace : public Base { 50591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 506041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {} 50611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 50621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const MyTypeInUnnamedNameSpace& val) { 50641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << val.x(); 50651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const MyTypeInUnnamedNameSpace* pointer) { 50681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << "(" << pointer->x() << ")"; 50691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace 50711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50721be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) { 50731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 50741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania MyTypeInUnnamedNameSpace a(1); 50751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << a << &a; // Uses <unnamed_namespace>::operator<<. 50771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1(1)", msg.GetString().c_str()); 50781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming a user type whose definition and operator<< are 50811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// both in a user namespace. 50821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace namespace1 { 50831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass MyTypeInNameSpace1 : public Base { 50841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 508541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit MyTypeInNameSpace1(int an_x): Base(an_x) {} 50861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 50871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const MyTypeInNameSpace1& val) { 50891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << val.x(); 50901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 50921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const MyTypeInNameSpace1* pointer) { 50931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << "(" << pointer->x() << ")"; 50941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 50951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace namespace1 50961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 50971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, CanStreamUserTypeInUserNameSpace) { 50981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 50991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania namespace1::MyTypeInNameSpace1 a(1); 51001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << a << &a; // Uses namespace1::operator<<. 51021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1(1)", msg.GetString().c_str()); 51031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 51041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming a user type whose definition is in a user namespace 51061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// but whose operator<< is in the global namespace. 51071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace namespace2 { 51081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass MyTypeInNameSpace2 : public ::Base { 51091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 511041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot explicit MyTypeInNameSpace2(int an_x): Base(an_x) {} 51111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 51121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace namespace2 51131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 51141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const namespace2::MyTypeInNameSpace2& val) { 51151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << val.x(); 51161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 51171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, 51181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const namespace2::MyTypeInNameSpace2* pointer) { 51191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return os << "(" << pointer->x() << ")"; 51201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 51211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51221be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) { 51231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 51241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania namespace2::MyTypeInNameSpace2 a(1); 51251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << a << &a; // Uses ::operator<<. 51271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("1(1)", msg.GetString().c_str()); 51281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 51291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming NULL pointers to testing::Message. 51311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, NullPointers) { 51321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message msg; 51331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania char* const p1 = NULL; 51341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania unsigned char* const p2 = NULL; 51351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int* p3 = NULL; 51361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania double* p4 = NULL; 51371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool* p5 = NULL; 51381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Message* p6 = NULL; 51391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg << p1 << p2 << p3 << p4 << p5 << p6; 51411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ("(null)(null)(null)(null)(null)(null)", 51421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania msg.GetString().c_str()); 51431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 51441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests streaming wide strings to testing::Message. 51461be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MessageTest, WideStrings) { 51471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Streams a NULL of type const wchar_t*. 51481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const wchar_t* const_wstr = NULL; 51491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(null)", 51501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (Message() << const_wstr).GetString().c_str()); 51511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Streams a NULL of type wchar_t*. 51531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wchar_t* wstr = NULL; 51541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("(null)", 51551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (Message() << wstr).GetString().c_str()); 51561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Streams a non-NULL of type const wchar_t*. 51581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const_wstr = L"abc\x8119"; 51591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("abc\xe8\x84\x99", 51601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (Message() << const_wstr).GetString().c_str()); 51611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Streams a non-NULL of type wchar_t*. 51631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania wstr = const_cast<wchar_t*>(const_wstr); 51641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("abc\xe8\x84\x99", 51651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (Message() << wstr).GetString().c_str()); 51661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 516741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 51681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This line tests that we can define tests in the testing namespace. 51701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace testing { 51711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests the TestInfo class. 51731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TestInfoTest : public Test { 51751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 517641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static const TestInfo* GetTestInfo(const char* test_name) { 517741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestCase* const test_case = GetUnitTestImpl()-> 517841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GetTestCase("TestInfoTest", "", NULL, NULL); 517941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 518041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (int i = 0; i < test_case->total_test_count(); ++i) { 518141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestInfo* const test_info = test_case->GetTestInfo(i); 518241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (strcmp(test_name, test_info->name()) == 0) 518341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return test_info; 518441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 518541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return NULL; 51861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 51871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const TestResult* GetTestResult( 51891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const TestInfo* test_info) { 51901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return test_info->result(); 51911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 51921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 51931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests TestInfo::test_case_name() and TestInfo::name(). 51951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestInfoTest, Names) { 519641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestInfo* const test_info = GetTestInfo("Names"); 51971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 51981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ("TestInfoTest", test_info->test_case_name()); 51991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ("Names", test_info->name()); 52001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 52011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests TestInfo::result(). 52031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(TestInfoTest, result) { 520441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const TestInfo* const test_info = GetTestInfo("result"); 52051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Initially, there is no TestPartResult for this test. 520741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 52081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // After the previous assertion, there is still none. 521041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 52111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 52121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests setting up and tearing down a test case. 52141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass SetUpTestCaseTest : public Test { 52161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 52171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This will be called once before the first test in this test case 52181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // is run. 52191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void SetUpTestCase() { 52201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("Setting up the test case . . .\n"); 52211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Initializes some shared resource. In this simple example, we 52231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // just create a C string. More complex stuff can be done if 52241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // desired. 52251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania shared_resource_ = "123"; 52261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Increments the number of test cases that have been set up. 52281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania counter_++; 52291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // SetUpTestCase() should be called only once. 52311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, counter_); 52321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 52331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This will be called once after the last test in this test case is 52351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // run. 52361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void TearDownTestCase() { 52371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania printf("Tearing down the test case . . .\n"); 52381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Decrements the number of test cases that have been set up. 52401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania counter_--; 52411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // TearDownTestCase() should be called only once. 52431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(0, counter_); 52441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Cleans up the shared resource. 52461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania shared_resource_ = NULL; 52471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 52481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This will be called before each test in this test case. 52501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 52511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // SetUpTestCase() should be called only once, so counter_ should 52521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // always be 1. 52531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, counter_); 52541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 52551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Number of test cases that have been set up. 52571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static int counter_; 52581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Some resource to be shared by all tests in this test case. 52601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const char* shared_resource_; 52611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 52621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint SetUpTestCaseTest::counter_ = 0; 52641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* SetUpTestCaseTest::shared_resource_ = NULL; 52651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A test that uses the shared resource. 52671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SetUpTestCaseTest, Test1) { 52681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE(NULL, shared_resource_); 52691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 52701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Another test that uses the shared resource. 52721be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SetUpTestCaseTest, Test2) { 52731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("123", shared_resource_); 52741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 52751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The InitGoogleTestTest test case tests testing::InitGoogleTest(). 52771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The Flags struct stores a copy of all Google Test flags. 52791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct Flags { 52801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Constructs a Flags struct where each flag has its default value. 52811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags() : also_run_disabled_tests(false), 52821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania break_on_failure(false), 52831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania catch_exceptions(false), 52841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania death_test_use_fork(false), 52851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania filter(""), 52861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania list_tests(false), 52871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania output(""), 528841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot print_time(true), 528941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot random_seed(0), 52901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania repeat(1), 529141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot shuffle(false), 529241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot stack_trace_depth(kMaxStackTraceDepth), 529341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot stream_result_to(""), 52941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania throw_on_failure(false) {} 52951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Factory methods. 52971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 52981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_also_run_disabled_tests flag has 52991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the given value. 53001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) { 53011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.also_run_disabled_tests = also_run_disabled_tests; 53031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_break_on_failure flag has 53071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the given value. 53081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags BreakOnFailure(bool break_on_failure) { 53091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.break_on_failure = break_on_failure; 53111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_catch_exceptions flag has 53151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the given value. 53161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags CatchExceptions(bool catch_exceptions) { 53171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.catch_exceptions = catch_exceptions; 53191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_death_test_use_fork flag has 53231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the given value. 53241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags DeathTestUseFork(bool death_test_use_fork) { 53251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.death_test_use_fork = death_test_use_fork; 53271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_filter flag has the given 53311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // value. 53321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags Filter(const char* filter) { 53331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.filter = filter; 53351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_list_tests flag has the 53391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // given value. 53401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags ListTests(bool list_tests) { 53411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.list_tests = list_tests; 53431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_output flag has the given 53471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // value. 53481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags Output(const char* output) { 53491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.output = output; 53511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 53541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_print_time flag has the given 53551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // value. 53561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags PrintTime(bool print_time) { 53571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.print_time = print_time; 53591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 536241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Creates a Flags struct where the gtest_random_seed flag has 536341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the given value. 536441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static Flags RandomSeed(Int32 random_seed) { 536541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags flags; 536641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot flags.random_seed = random_seed; 536741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return flags; 536841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 536941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 53701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_repeat flag has the given 53711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // value. 53721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags Repeat(Int32 repeat) { 53731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 53741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.repeat = repeat; 53751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 53761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 53771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 537841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Creates a Flags struct where the gtest_shuffle flag has 537941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the given value. 538041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static Flags Shuffle(bool shuffle) { 538141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags flags; 538241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot flags.shuffle = shuffle; 538341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return flags; 538441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 538541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 538641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has 538741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the given value. 538841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static Flags StackTraceDepth(Int32 stack_trace_depth) { 538941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags flags; 539041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot flags.stack_trace_depth = stack_trace_depth; 539141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return flags; 539241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 539341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 539441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has 539541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the given value. 539641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static Flags StreamResultTo(const char* stream_result_to) { 539741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags flags; 539841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot flags.stream_result_to = stream_result_to; 539941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return flags; 540041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 540141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 54021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Creates a Flags struct where the gtest_throw_on_failure flag has 54031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the given value. 54041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static Flags ThrowOnFailure(bool throw_on_failure) { 54051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 54061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.throw_on_failure = throw_on_failure; 54071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return flags; 54081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 54091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // These fields store the flag values. 54111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool also_run_disabled_tests; 54121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool break_on_failure; 54131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool catch_exceptions; 54141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool death_test_use_fork; 54151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* filter; 54161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool list_tests; 54171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* output; 54181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool print_time; 541941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Int32 random_seed; 54201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Int32 repeat; 542141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool shuffle; 542241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Int32 stack_trace_depth; 542341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* stream_result_to; 54241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool throw_on_failure; 54251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 54261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Fixture for testing InitGoogleTest(). 54281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass InitGoogleTestTest : public Test { 54291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 54301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Clears the flags before each test. 54311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 54321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(also_run_disabled_tests) = false; 54331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(break_on_failure) = false; 54341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(catch_exceptions) = false; 54351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(death_test_use_fork) = false; 54361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(filter) = ""; 54371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(list_tests) = false; 54381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(output) = ""; 543941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(print_time) = true; 544041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(random_seed) = 0; 54411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(repeat) = 1; 544241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(shuffle) = false; 544341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 544441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stream_result_to) = ""; 54451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(throw_on_failure) = false; 54461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 54471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Asserts that two narrow or wide string arrays are equal. 54491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania template <typename CharType> 54501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void AssertStringArrayEq(size_t size1, CharType** array1, 54511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania size_t size2, CharType** array2) { 54521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(size1, size2) << " Array sizes different."; 54531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania for (size_t i = 0; i != size1; i++) { 54551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i; 54561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 54571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 54581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Verifies that the flag values match the expected values. 54601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void CheckFlags(const Flags& expected) { 54611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.also_run_disabled_tests, 54621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(also_run_disabled_tests)); 54631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure)); 54641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions)); 54651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork)); 54661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str()); 54671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests)); 54681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str()); 54691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time)); 547041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed)); 54711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat)); 547241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle)); 547341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth)); 547441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ(expected.stream_result_to, 547541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_FLAG(stream_result_to).c_str()); 54761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure)); 54771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 54781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 54791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Parses a command line (specified by argc1 and argv1), then 54801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // verifies that the flag values are expected and that the 54811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // recognized flags are removed from the command line. 54821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania template <typename CharType> 54831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void TestParsingFlags(int argc1, const CharType** argv1, 54841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int argc2, const CharType** argv2, 548541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const Flags& expected, bool should_print_help) { 548641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool saved_help_flag = ::testing::internal::g_help_flag; 548741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::testing::internal::g_help_flag = false; 548841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 548941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_STREAM_REDIRECTION 549041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CaptureStdout(); 549141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 549241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 54931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Parses the command line. 54941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1)); 54951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 549641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_STREAM_REDIRECTION 5497fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes const std::string captured_stdout = GetCapturedStdout(); 549841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 549941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 55001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Verifies the flag values. 55011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania CheckFlags(expected); 55021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Verifies that the recognized flags are removed from the command 55041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // line. 55051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2); 550641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 550741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the 550841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // help message for the flags it recognizes. 550941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag); 551041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 551141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_STREAM_REDIRECTION 551241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const expected_help_fragment = 551341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "This program contains tests written using"; 551441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (should_print_help) { 551541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout); 551641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } else { 551741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_PRED_FORMAT2(IsNotSubstring, 551841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot expected_help_fragment, captured_stdout); 551941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 552041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_HAS_STREAM_REDIRECTION 552141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 552241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::testing::internal::g_help_flag = saved_help_flag; 55231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 55241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This macro wraps TestParsingFlags s.t. the user doesn't need 55261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // to specify the array sizes. 552741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 552841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \ 55291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \ 553041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot sizeof(argv2)/sizeof(*argv2) - 1, argv2, \ 553141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot expected, should_print_help) 55321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 55331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing an empty command line. 55351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, Empty) { 55361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 55371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 55411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 554441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 55451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 55461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing a command line that has no flag. 55481be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, NoFlag) { 55491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 55501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 55551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 555941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 55601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 55611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing a bad --gtest_filter flag. 55631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, FilterBad) { 55641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 55651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter", 55671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 55711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter", 55731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 557641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true); 55771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 55781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing an empty --gtest_filter flag. 55801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, FilterEmpty) { 55811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 55821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter=", 55841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 55881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 55901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 55911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 559241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false); 55931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 55941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 55951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing a non-empty --gtest_filter flag. 55961be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, FilterNonEmpty) { 55971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 55981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 55991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter=abc", 56001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 560841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false); 56091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_break_on_failure. 561241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) { 56131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure", 56161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 56181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 562441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 56251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_break_on_failure=0. 56281be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) { 56291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure=0", 56321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 564041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 56411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_break_on_failure=f. 56441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) { 56451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure=f", 56481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 565641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 56571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_break_on_failure=F. 56601be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) { 56611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure=F", 56641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 567241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 56731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing a --gtest_break_on_failure flag that has a "true" 56761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// definition. 56771be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, BreakOnFailureTrue) { 56781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure=1", 56811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 56851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 568941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 56901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 56911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 56921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_catch_exceptions. 56931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, CatchExceptions) { 56941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 56951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 56961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_catch_exceptions", 56971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 56981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 56991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 570541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false); 57061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_death_test_use_fork. 57091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, DeathTestUseFork) { 57101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_death_test_use_fork", 57131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 572141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false); 57221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having the same flag twice with different values. The 57251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// expected behavior is that the one coming last takes precedence. 57261be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, DuplicatedFlags) { 57271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter=a", 57301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter=b", 57311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 573941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false); 57401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having an unrecognized flag on the command line. 57431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, UnrecognizedFlag) { 57441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_break_on_failure", 57471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "bar", // Unrecognized by Google Test. 57481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_filter=b", 57491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "bar", 57551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags flags; 57591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.break_on_failure = true; 57601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania flags.filter = "b"; 576141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false); 57621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_list_tests flag 57651be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, ListTestsFlag) { 57661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_list_tests", 57691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 577741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 57781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_list_tests flag with a "true" value 57811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, ListTestsTrue) { 57821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_list_tests=1", 57851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 57891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 57901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 57911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 57921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 579341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 57941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 57951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 57961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_list_tests flag with a "false" value 57971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, ListTestsFalse) { 57981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 57991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_list_tests=0", 58011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 580941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 58101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_list_tests=f. 58131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, ListTestsFalse_f) { 58141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_list_tests=f", 58171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 582541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 58261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 582841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_list_tests=F. 58291be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, ListTestsFalse_F) { 58301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_list_tests=F", 58331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 584141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 58421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_output (invalid). 58451be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, OutputEmpty) { 58461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_output", 58491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_output", 58551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 585841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true); 58591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_output=xml 58621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, OutputXml) { 58631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_output=xml", 58661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 587441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false); 58751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_output=xml:file 58781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, OutputXmlFile) { 58791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_output=xml:file", 58821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 58861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 58891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 589041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false); 58911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 58921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 58931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_output=xml:directory/path/ 58941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, OutputXmlDirectory) { 58951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 58961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 58971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_output=xml:directory/path/", 58981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 58991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 590641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, 590741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags::Output("xml:directory/path/"), false); 59081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 59091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_print_time flag 59111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, PrintTimeFlag) { 59121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 59131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_print_time", 59151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 592341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 59241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 59251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_print_time flag with a "true" value 59271be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, PrintTimeTrue) { 59281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 59291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_print_time=1", 59311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 593941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 59401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 59411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_print_time flag with a "false" value 59431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, PrintTimeFalse) { 59441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 59451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_print_time=0", 59471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 595541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 59561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 59571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_print_time=f. 59591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, PrintTimeFalse_f) { 59601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 59611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_print_time=f", 59631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 597141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 59721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 59731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_print_time=F. 59751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, PrintTimeFalse_F) { 59761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 59771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_print_time=F", 59791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 59821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 59831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 59841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 59851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 59861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 598741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 598841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 598941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 599041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_random_seed=number 599141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, RandomSeed) { 599241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 599341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 599441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_random_seed=1000", 599541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 599641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 599741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 599841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 599941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 600041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 600141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 600241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 600341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false); 60041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing --gtest_repeat=number 60071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, Repeat) { 60081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_repeat=1000", 60111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 601941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false); 60201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_also_run_disabled_tests flag 60231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) { 60241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_also_run_disabled_tests", 60271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 603541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, 603641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags::AlsoRunDisabledTests(true), false); 60371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_also_run_disabled_tests flag with a "true" value 60401be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) { 60411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_also_run_disabled_tests=1", 60441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 605241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, 605341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags::AlsoRunDisabledTests(true), false); 60541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests having a --gtest_also_run_disabled_tests flag with a "false" value 60571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) { 60581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "--gtest_also_run_disabled_tests=0", 60611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 606941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, 607041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Flags::AlsoRunDisabledTests(false), false); 60711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 607341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_shuffle. 607441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ShuffleWithoutValue) { 60751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 607741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_shuffle", 60781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 60801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 608641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 60871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 60881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 608941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_shuffle=0. 609041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ShuffleFalse_0) { 60911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 60921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 609341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_shuffle=0", 60941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 60951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 60961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 60971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 60981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 60991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 61001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 61011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 610241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false); 61031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 61041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 610541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing a --gtest_shuffle flag that has a "true" 61061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// definition. 610741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ShuffleTrue) { 61081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv[] = { 61091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 611041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_shuffle=1", 61111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 61121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 61131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 61141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* argv2[] = { 61151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "foo.exe", 61161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 61171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 61181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 611941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 612041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 612141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 612241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_stack_trace_depth=number. 612341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, StackTraceDepth) { 612441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 612541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 612641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_stack_trace_depth=5", 612741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 612841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 612941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 613041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 613141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 613241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 613341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 613441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 613541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false); 613641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 613741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 613841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, StreamResultTo) { 613941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 614041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 614141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_stream_result_to=localhost:1234", 614241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 614341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 614441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 614541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 614641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 614741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 614841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 614941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 615041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_( 615141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot argv, argv2, Flags::StreamResultTo("localhost:1234"), false); 615241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 615341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 615441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_throw_on_failure. 615541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) { 615641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 615741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 615841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_throw_on_failure", 615941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 616041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 616141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 616241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 616341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 616441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 616541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 616641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 616741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 616841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 616941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 617041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing --gtest_throw_on_failure=0. 617141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) { 617241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 617341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 617441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_throw_on_failure=0", 617541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 617641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 617741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 617841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 617941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 618041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 618141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 618241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 618341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false); 618441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 618541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 618641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests parsing a --gtest_throw_on_failure flag that has a "true" 618741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// definition. 618841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(InitGoogleTestTest, ThrowOnFailureTrue) { 618941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv[] = { 619041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 619141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "--gtest_throw_on_failure=1", 619241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 619341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 619441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 619541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* argv2[] = { 619641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "foo.exe", 619741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL 619841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 619941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 620041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 62011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 62021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 62041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests parsing wide strings. 62051be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(InitGoogleTestTest, WideStrings) { 62061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const wchar_t* argv[] = { 62071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"foo.exe", 62081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"--gtest_filter=Foo*", 62091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"--gtest_list_tests=1", 62101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"--gtest_break_on_failure", 62111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"--non_gtest_flag", 62121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 62131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 62141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const wchar_t* argv2[] = { 62161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"foo.exe", 62171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania L"--non_gtest_flag", 62181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania NULL 62191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania }; 62201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Flags expected_flags; 62221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania expected_flags.break_on_failure = true; 62231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania expected_flags.filter = "Foo*"; 62241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania expected_flags.list_tests = true; 62251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 622641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false); 62271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 62281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 62291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests current_test_info() in UnitTest. 62311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass CurrentTestInfoTest : public Test { 62321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 62331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Tests that current_test_info() returns NULL before the first test in 62341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the test case is run. 62351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void SetUpTestCase() { 62361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // There should be no tests running at this point. 62371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const TestInfo* test_info = 62381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania UnitTest::GetInstance()->current_test_info(); 623941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(test_info == NULL) 62401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "There should be no tests running at this point."; 62411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 62421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Tests that current_test_info() returns NULL after the last test in 62441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the test case has run. 62451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static void TearDownTestCase() { 62461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const TestInfo* test_info = 62471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania UnitTest::GetInstance()->current_test_info(); 624841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(test_info == NULL) 62491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "There should be no tests running at this point."; 62501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 62511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 62521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that current_test_info() returns TestInfo for currently running 62541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// test by checking the expected test name against the actual one. 62551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) { 62561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const TestInfo* test_info = 62571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania UnitTest::GetInstance()->current_test_info(); 62581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(NULL != test_info) 62591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "There is a test running so we should have a valid TestInfo."; 62601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 62611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Expected the name of the currently running test case."; 62621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name()) 62631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Expected the name of the currently running test."; 62641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 62651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that current_test_info() returns TestInfo for currently running 62671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// test by checking the expected test name against the actual one. We 62681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// use this test to see that the TestInfo object actually changed from 62691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the previous invocation. 62701be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) { 62711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const TestInfo* test_info = 62721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania UnitTest::GetInstance()->current_test_info(); 62731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(NULL != test_info) 62741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "There is a test running so we should have a valid TestInfo."; 62751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 62761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Expected the name of the currently running test case."; 62771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name()) 62781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania << "Expected the name of the currently running test."; 62791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 62801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace testing 62821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// These two lines test that we can define tests in a namespace that 62841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// has the name "testing" and is nested in another namespace. 62851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace my_namespace { 62861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace testing { 62871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Makes sure that TEST knows to use ::testing::Test instead of 62891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::my_namespace::testing::Test. 62901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Test {}; 62911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Makes sure that an assertion knows to use ::testing::Message instead of 62931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::my_namespace::testing::Message. 62941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Message {}; 62951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 62961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Makes sure that an assertion knows to use 62971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::testing::AssertionResult instead of 62981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::my_namespace::testing::AssertionResult. 62991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass AssertionResult {}; 63001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that an assertion that should succeed works as expected. 63021be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NestedTestingNamespaceTest, Success) { 63031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, 1) << "This shouldn't fail."; 63041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that an assertion that should fail works as expected. 63071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NestedTestingNamespaceTest, Failure) { 63081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.", 63091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "This failure is expected."); 63101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace testing 63131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace my_namespace 63141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that one can call superclass SetUp and TearDown methods-- 63161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// that is, that they are not private. 63171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// No tests are based on this fixture; the test "passes" if it compiles 63181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// successfully. 63191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass ProtectedFixtureMethodsTest : public Test { 63201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected: 63211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void SetUp() { 63221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Test::SetUp(); 63231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 63241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania virtual void TearDown() { 63251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Test::TearDown(); 63261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 63271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 63281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// StreamingAssertionsTest tests the streaming versions of a representative 63301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// sample of assertions. 63311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, Unconditional) { 63321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED() << "expected success"; 63331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure", 63341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(FAIL() << "expected failure", 63361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 633941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 634041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Silences warnings: "Condition is always true", "Unreachable code" 634141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option push -w-ccc -w-rch 634241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 634341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 63441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, Truth) { 63451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(true) << "unexpected failure"; 63461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_TRUE(true) << "unexpected failure"; 63471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure", 63481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure", 63501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63531be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, Truth2) { 63541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(false) << "unexpected failure"; 63551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FALSE(false) << "unexpected failure"; 63561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure", 63571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure", 63591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 636241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifdef __BORLANDC__ 636341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Restores warnings after previous "#pragma option push" supressed them 636441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# pragma option pop 636541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 636641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 63671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, IntegerEquals) { 63681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, 1) << "unexpected failure"; 63691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, 1) << "unexpected failure"; 63701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure", 63711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure", 63731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63761be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, IntegerLessThan) { 63771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_LT(1, 2) << "unexpected failure"; 63781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_LT(1, 2) << "unexpected failure"; 63791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure", 63801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure", 63821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63851be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, StringsEqual) { 63861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STREQ("foo", "foo") << "unexpected failure"; 63871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STREQ("foo", "foo") << "unexpected failure"; 63881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure", 63891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure", 63911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 63931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 63941be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, StringsNotEqual) { 63951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRNE("foo", "bar") << "unexpected failure"; 63961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRNE("foo", "bar") << "unexpected failure"; 63971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure", 63981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 63991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure", 64001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, StringsEqualIgnoringCase) { 64041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 64051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 64061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure", 64071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure", 64091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64121be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) { 64131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_STRCASENE("foo", "bar") << "unexpected failure"; 64141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_STRCASENE("foo", "bar") << "unexpected failure"; 64151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure", 64161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure", 64181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64211be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, FloatingPointEquals) { 64221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 64231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 64241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure", 64251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure", 64271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure"); 64281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_EXCEPTIONS 64311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64321be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, Throw) { 64331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 64341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 64351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) << 64361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) << 64381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64411be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, NoThrow) { 64421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure"; 64431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure"; 64441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) << 64451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) << 64471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StreamingAssertionsTest, AnyThrow) { 64511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 64521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 64531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) << 64541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) << 64561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania "expected failure", "expected failure"); 64571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_EXCEPTIONS 64601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests that Google Test correctly decides whether to use colors in the output. 64621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) { 64641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "yes"; 64651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); // TERM supports colors. 64671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 64681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 64691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "dumb"); // TERM doesn't support colors. 64711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 64721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 64731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) { 64761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "dumb"); // TERM doesn't support colors. 64771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "True"; 64791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 64801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "t"; 64821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 64831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "1"; 64851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 64861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64881be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) { 64891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "no"; 64901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); // TERM supports colors. 64921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 64931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 64941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 64951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "dumb"); // TERM doesn't support colors. 64961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 64971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 64981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 64991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65001be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) { 65011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); // TERM supports colors. 65021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "F"; 65041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "0"; 65071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "unknown"; 65101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 65121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) { 65141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "auto"; 65151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); // TERM supports colors. 65171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 65181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 65201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65211be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) { 65221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FLAG(color) = "auto"; 65231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 65251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // On Windows, we ignore the TERM variable as it's usually not set. 65261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "dumb"); 65281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", ""); 65311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); 65341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 65361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // On non-Windows platforms, we rely on TERM to determine if the 65371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // terminal supports colors. 65381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "dumb"); // TERM doesn't support colors. 65401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "emacs"); // TERM doesn't support colors. 65431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "vt100"); // TERM doesn't support colors. 65461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors. 65491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 65501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm"); // TERM supports colors. 65521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SetEnv("TERM", "xterm-color"); // TERM supports colors. 65551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 655641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 655741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SetEnv("TERM", "xterm-256color"); // TERM supports colors. 655841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 655941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 656041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SetEnv("TERM", "screen"); // TERM supports colors. 656141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 656241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6563fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes SetEnv("TERM", "screen-256color"); // TERM supports colors. 6564fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6565fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes 656641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SetEnv("TERM", "linux"); // TERM supports colors. 656741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 656841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 656941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SetEnv("TERM", "cygwin"); // TERM supports colors. 657041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 65711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 65721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 65731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that StaticAssertTypeEq works in a namespace scope. 65751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 657641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>(); 657741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic bool dummy2 GTEST_ATTRIBUTE_UNUSED_ = 657841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot StaticAssertTypeEq<const int, const int>(); 65791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that StaticAssertTypeEq works in a class. 65811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 65831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass StaticAssertTypeEqTestHelper { 65841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 65851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); } 65861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 65871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65881be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StaticAssertTypeEqTest, WorksInClass) { 65891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania StaticAssertTypeEqTestHelper<bool>(); 65901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 65911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Verifies that StaticAssertTypeEq works inside a function. 65931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef int IntAlias; 65951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 65961be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(StaticAssertTypeEqTest, CompilesForEqualTypes) { 65971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania StaticAssertTypeEq<int, IntAlias>(); 65981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania StaticAssertTypeEq<int*, IntAlias*>(); 65991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 66001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 660141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) { 660241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::UnitTest* const unit_test = testing::UnitTest::GetInstance(); 660341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 660441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We don't have a stack walker in Google Test yet. 660541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str()); 660641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str()); 660741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 66081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 660941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) { 661041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(HasNonfatalFailure()); 66111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 66121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 661341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic void FailFatally() { FAIL(); } 66141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 661541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) { 661641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FailFatally(); 661741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_nonfatal_failure = HasNonfatalFailure(); 661841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 661941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(has_nonfatal_failure); 66201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 66211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 662241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 662341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 662441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_nonfatal_failure = HasNonfatalFailure(); 662541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 662641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_nonfatal_failure); 662741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 66281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 662941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 663041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FailFatally(); 663141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 663241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_nonfatal_failure = HasNonfatalFailure(); 663341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 663441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_nonfatal_failure); 663541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 663641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 663741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A wrapper for calling HasNonfatalFailure outside of a test body. 663841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic bool HasNonfatalFailureHelper() { 663941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return testing::Test::HasNonfatalFailure(); 664041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 664141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 664241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) { 664341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(HasNonfatalFailureHelper()); 664441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 664541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 664641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) { 664741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 664841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_nonfatal_failure = HasNonfatalFailureHelper(); 664941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 665041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_nonfatal_failure); 665141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 665241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 665341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) { 665441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(HasFailure()); 665541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 665641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 665741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) { 665841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FailFatally(); 665941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_failure = HasFailure(); 666041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 666141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_failure); 666241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 666341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 666441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 666541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 666641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_failure = HasFailure(); 666741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 666841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_failure); 666941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 667041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 667141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 667241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FailFatally(); 667341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 667441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_failure = HasFailure(); 667541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 667641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_failure); 667741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 667841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 667941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A wrapper for calling HasFailure outside of a test body. 668041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstatic bool HasFailureHelper() { return testing::Test::HasFailure(); } 668141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 668241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, WorksOutsideOfTestBody) { 668341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(HasFailureHelper()); 668441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 668541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 668641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(HasFailureTest, WorksOutsideOfTestBody2) { 668741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE(); 668841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const bool has_failure = HasFailureHelper(); 668941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ClearCurrentTestPartResults(); 669041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(has_failure); 669141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 669241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 669341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass TestListener : public EmptyTestEventListener { 669441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 669541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {} 669641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener(int* on_start_counter, bool* is_destroyed) 669741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot : on_start_counter_(on_start_counter), 669841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot is_destroyed_(is_destroyed) {} 669941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 670041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual ~TestListener() { 670141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (is_destroyed_) 670241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *is_destroyed_ = true; 670341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 670441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 670541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 670641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 670741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (on_start_counter_ != NULL) 670841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot (*on_start_counter_)++; 670941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 671041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 671141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot private: 671241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int* on_start_counter_; 671341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool* is_destroyed_; 671441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 671541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 671641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests the constructor. 671741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestEventListenersTest, ConstructionWorks) { 671841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 671941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 672041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL); 672141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_result_printer() == NULL); 672241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_xml_generator() == NULL); 672341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 672441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 672541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that the TestEventListeners destructor deletes all the listeners it 672641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// owns. 672741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestEventListenersTest, DestructionWorks) { 672841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool default_result_printer_is_destroyed = false; 672941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool default_xml_printer_is_destroyed = false; 673041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool extra_listener_is_destroyed = false; 673141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* default_result_printer = new TestListener( 673241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL, &default_result_printer_is_destroyed); 673341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* default_xml_printer = new TestListener( 673441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL, &default_xml_printer_is_destroyed); 673541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* extra_listener = new TestListener( 673641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NULL, &extra_listener_is_destroyed); 673741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 673841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot { 673941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 674041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, 674141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot default_result_printer); 674241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, 674341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot default_xml_printer); 674441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(extra_listener); 674541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 674641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(default_result_printer_is_destroyed); 674741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(default_xml_printer_is_destroyed); 674841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(extra_listener_is_destroyed); 674941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 675041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 675141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that a listener Append'ed to a TestEventListeners list starts 675241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// receiving events. 675341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestEventListenersTest, Append) { 675441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 675541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 675641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 675741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot { 675841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 675941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(listener); 676041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 676141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 676241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, on_start_counter); 676341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 676441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(is_destroyed); 676541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 676641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 676741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that listeners receive events in the order they were appended to 676841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// the list, except for *End requests, which must be received in the reverse 676941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// order. 677041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SequenceTestingListener : public EmptyTestEventListener { 677141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 6772fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes SequenceTestingListener(std::vector<std::string>* vector, const char* id) 677341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot : vector_(vector), id_(id) {} 677441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 677541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 677641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 677741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector_->push_back(GetEventDescription("OnTestProgramStart")); 677841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 677941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 678041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 678141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector_->push_back(GetEventDescription("OnTestProgramEnd")); 678241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 678341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 678441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 678541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int /*iteration*/) { 678641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector_->push_back(GetEventDescription("OnTestIterationStart")); 678741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 678841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 678941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 679041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int /*iteration*/) { 679141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vector_->push_back(GetEventDescription("OnTestIterationEnd")); 679241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 679341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 679441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot private: 6795fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string GetEventDescription(const char* method) { 679641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Message message; 679741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot message << id_ << "." << method; 679841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return message.GetString(); 679941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 680041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6801fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::vector<std::string>* vector_; 680241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const id_; 680341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 680441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener); 680541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 680641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 680741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, AppendKeepsOrder) { 6808fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::vector<std::string> vec; 680941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 681041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(new SequenceTestingListener(&vec, "1st")); 681141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(new SequenceTestingListener(&vec, "2nd")); 681241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(new SequenceTestingListener(&vec, "3rd")); 681341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 681441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 681541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 681641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(3U, vec.size()); 681741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str()); 681841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str()); 681941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str()); 682041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 682141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vec.clear(); 682241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd( 682341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 682441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(3U, vec.size()); 682541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str()); 682641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str()); 682741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str()); 682841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 682941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vec.clear(); 683041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart( 683141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance(), 0); 683241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(3U, vec.size()); 683341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str()); 683441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str()); 683541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str()); 683641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 683741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot vec.clear(); 683841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd( 683941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance(), 0); 684041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(3U, vec.size()); 684141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str()); 684241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str()); 684341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str()); 684441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 684541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 684641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that a listener removed from a TestEventListeners list stops receiving 684741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// events and is not deleted when the list is destroyed. 684841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(TestEventListenersTest, Release) { 684941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 685041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 685141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Although Append passes the ownership of this object to the list, 685241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the following calls release it, and we need to delete it before the 685341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // test ends. 685441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 685541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot { 685641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 685741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(listener); 685841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(listener, listeners.Release(listener)); 685941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 686041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 686141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.Release(listener) == NULL); 686241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 686341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, on_start_counter); 686441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(is_destroyed); 686541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete listener; 686641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 686741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 686841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that no events are forwarded when event forwarding is disabled. 686941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, SuppressEventForwarding) { 687041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 687141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, NULL); 687241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 687341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 687441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot listeners.Append(listener); 687541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 687641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SuppressEventForwarding(&listeners); 687741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 687841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 687941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 688041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, on_start_counter); 688141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 688241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 688341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that events generated by Google Test are not forwarded in 688441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// death test subprocesses. 688541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) { 688641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_DEATH_IF_SUPPORTED({ 688741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled( 688841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *GetUnitTestImpl()->listeners())) << "expected failure";}, 688941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "expected failure"); 689041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 689141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 689241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that a listener installed via SetDefaultResultPrinter() starts 689341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// receiving events and is returned via default_result_printer() and that 689441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// the previous default_result_printer is removed from the list and deleted. 689541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, default_result_printer) { 689641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 689741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 689841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 689941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 690041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 690141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 690241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 690341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(listener, listeners.default_result_printer()); 690441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 690541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 690641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 690741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 690841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, on_start_counter); 690941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 691041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Replacing default_result_printer with something else should remove it 691141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // from the list and destroy it. 691241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL); 691341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 691441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_result_printer() == NULL); 691541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(is_destroyed); 691641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 691741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // After broadcasting an event the counter is still the same, indicating 691841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the listener is not in the list anymore. 691941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 692041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 692141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, on_start_counter); 692241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 692341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 692441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that the default_result_printer listener stops receiving events 692541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// when removed via Release and that is not owned by the list anymore. 692641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, RemovingDefaultResultPrinterWorks) { 692741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 692841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 692941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Although Append passes the ownership of this object to the list, 693041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the following calls release it, and we need to delete it before the 693141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // test ends. 693241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 693341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot { 693441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 693541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 693641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 693741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(listener, listeners.Release(listener)); 693841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_result_printer() == NULL); 693941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(is_destroyed); 694041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 694141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Broadcasting events now should not affect default_result_printer. 694241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 694341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 694441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, on_start_counter); 694541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 694641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Destroying the list should not affect the listener now, too. 694741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(is_destroyed); 694841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete listener; 694941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 695041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 695141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that a listener installed via SetDefaultXmlGenerator() starts 695241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// receiving events and is returned via default_xml_generator() and that 695341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// the previous default_xml_generator is removed from the list and deleted. 695441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, default_xml_generator) { 695541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 695641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 695741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 695841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 695941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 696041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 696141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 696241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(listener, listeners.default_xml_generator()); 696341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 696441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 696541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 696641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 696741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, on_start_counter); 696841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 696941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Replacing default_xml_generator with something else should remove it 697041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // from the list and destroy it. 697141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL); 697241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 697341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_xml_generator() == NULL); 697441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(is_destroyed); 697541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 697641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // After broadcasting an event the counter is still the same, indicating 697741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the listener is not in the list anymore. 697841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 697941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 698041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, on_start_counter); 698141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 698241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 698341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that the default_xml_generator listener stops receiving events 698441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// when removed via Release and that is not owned by the list anymore. 698541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) { 698641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int on_start_counter = 0; 698741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot bool is_destroyed = false; 698841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Although Append passes the ownership of this object to the list, 698941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the following calls release it, and we need to delete it before the 699041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // test ends. 699141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 699241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot { 699341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners listeners; 699441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 699541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 699641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(listener, listeners.Release(listener)); 699741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(listeners.default_xml_generator() == NULL); 699841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(is_destroyed); 699941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 700041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Broadcasting events now should not affect default_xml_generator. 700141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 700241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot *UnitTest::GetInstance()); 700341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, on_start_counter); 700441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 700541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Destroying the list should not affect the listener now, too. 700641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(is_destroyed); 700741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete listener; 700841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 700941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 701041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Sanity tests to ensure that the alternative, verbose spellings of 701141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// some of the macros work. We don't test them thoroughly as that 701241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// would be quite involved. Since their implementations are 701341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// straightforward, and they are rarely used, we'll just rely on the 701441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// users to tell us when they are broken. 701541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotGTEST_TEST(AlternativeNameTest, Works) { // GTEST_TEST is the same as TEST. 701641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_SUCCEED() << "OK"; // GTEST_SUCCEED is the same as SUCCEED. 701741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 701841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // GTEST_FAIL is the same as FAIL. 701941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure", 702041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 702141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 702241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // GTEST_ASSERT_XY is the same as ASSERT_XY. 702341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 702441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_EQ(0, 0); 702541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure", 702641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 702741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure", 702841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 702941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 703041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_NE(0, 1); 703141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_NE(1, 0); 703241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure", 703341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 703441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 703541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_LE(0, 0); 703641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_LE(0, 1); 703741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure", 703841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 703941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 704041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_LT(0, 1); 704141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure", 704241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 704341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure", 704441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 704541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 704641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_GE(0, 0); 704741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_GE(1, 0); 704841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure", 704941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 705041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 705141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_ASSERT_GT(1, 0); 705241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure", 705341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 705441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure", 705541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "An expected failure"); 705641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 705741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 705841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests for internal utilities necessary for implementation of the universal 705941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// printing. 706041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// TODO(vladl@google.com): Find a better home for them. 706141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 706241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass ConversionHelperBase {}; 706341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass ConversionHelperDerived : public ConversionHelperBase {}; 706441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 706541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that IsAProtocolMessage<T>::value is a compile-time constant. 706641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { 706741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value, 706841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const_true); 706941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false); 707041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 707141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 707241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that IsAProtocolMessage<T>::value is true when T is 707341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// proto2::Message or a sub-class of it. 707441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { 707541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value); 707641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value); 707741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 707841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 707941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that IsAProtocolMessage<T>::value is false when T is neither 708041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// ProtocolMessage nor a sub-class of it. 708141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { 708241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(IsAProtocolMessage<int>::value); 708341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value); 708441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 708541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 708641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that CompileAssertTypesEqual compiles when the type arguments are 708741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// equal. 708841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) { 708941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<void, void>(); 709041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int*, int*>(); 709141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 709241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 709341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that RemoveReference does not affect non-reference types. 709441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) { 709541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int, RemoveReference<int>::type>(); 709641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<const char, RemoveReference<const char>::type>(); 709741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 709841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 709941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that RemoveReference removes reference from reference types. 710041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveReferenceTest, RemovesReference) { 710141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int, RemoveReference<int&>::type>(); 710241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>(); 710341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 710441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 710541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GTEST_REMOVE_REFERENCE_. 710641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 710741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T1, typename T2> 710841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TestGTestRemoveReference() { 710941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>(); 711041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 711141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 711241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveReferenceTest, MacroVersion) { 711341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReference<int, int>(); 711441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReference<const char, const char&>(); 711541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 711641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 711741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 711841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that RemoveConst does not affect non-const types. 711941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveConstTest, DoesNotAffectNonConstType) { 712041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int, RemoveConst<int>::type>(); 712141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<char&, RemoveConst<char&>::type>(); 712241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 712341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 712441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that RemoveConst removes const from const types. 712541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveConstTest, RemovesConst) { 712641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int, RemoveConst<const int>::type>(); 712741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>(); 712841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>(); 712941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 713041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 713141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GTEST_REMOVE_CONST_. 713241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 713341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T1, typename T2> 713441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TestGTestRemoveConst() { 713541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>(); 713641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 713741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 713841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveConstTest, MacroVersion) { 713941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveConst<int, int>(); 714041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveConst<double&, double&>(); 714141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveConst<char, const char>(); 714241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 714341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 714441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GTEST_REMOVE_REFERENCE_AND_CONST_. 714541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 714641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T1, typename T2> 714741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TestGTestRemoveReferenceAndConst() { 714841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>(); 714941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 715041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 715141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(RemoveReferenceToConstTest, Works) { 715241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReferenceAndConst<int, int>(); 715341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReferenceAndConst<double, double&>(); 715441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReferenceAndConst<char, const char>(); 715541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReferenceAndConst<char, const char&>(); 715641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestRemoveReferenceAndConst<const char*, const char*>(); 715741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 715841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 715941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that AddReference does not affect reference types. 716041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AddReferenceTest, DoesNotAffectReferenceType) { 716141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int&, AddReference<int&>::type>(); 716241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<const char&, AddReference<const char&>::type>(); 716341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 716441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 716541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that AddReference adds reference to non-reference types. 716641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AddReferenceTest, AddsReference) { 716741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<int&, AddReference<int>::type>(); 716841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<const char&, AddReference<const char>::type>(); 716941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 717041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 717141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GTEST_ADD_REFERENCE_. 717241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 717341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T1, typename T2> 717441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TestGTestAddReference() { 717541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>(); 717641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 717741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 717841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(AddReferenceTest, MacroVersion) { 717941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestAddReference<int&, int>(); 718041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestAddReference<const char&, const char&>(); 718141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 718241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 718341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests GTEST_REFERENCE_TO_CONST_. 718441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 718541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T1, typename T2> 718641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TestGTestReferenceToConst() { 718741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>(); 718841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 718941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 719041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(GTestReferenceToConstTest, Works) { 719141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestReferenceToConst<const char&, char>(); 719241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestReferenceToConst<const int&, const int>(); 719341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestGTestReferenceToConst<const double&, double>(); 7194fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes TestGTestReferenceToConst<const std::string&, const std::string&>(); 719541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 719641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 719741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant. 719841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) { 719941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true); 720041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value), 720141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const_false); 720241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 720341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 720441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can 720541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// be implicitly converted to T2. 720641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) { 720741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<int, double>::value)); 720841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<double, int>::value)); 720941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value)); 721041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value)); 721141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&, 721241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const ConversionHelperBase&>::value)); 721341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase, 721441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ConversionHelperBase>::value)); 721541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 721641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 721741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1 721841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// cannot be implicitly converted to T2. 721941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) { 722041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value)); 722141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value)); 722241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value)); 722341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&, 722441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ConversionHelperDerived&>::value)); 722541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 722641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 722741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests IsContainerTest. 722841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 722941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass NonContainer {}; 723041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 723141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(IsContainerTestTest, WorksForNonContainer) { 723241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0))); 723341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0))); 723441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0))); 723541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 723641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 723741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(IsContainerTestTest, WorksForContainer) { 723841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(sizeof(IsContainer), 723941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot sizeof(IsContainerTest<std::vector<bool> >(0))); 724041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(sizeof(IsContainer), 724141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot sizeof(IsContainerTest<std::map<int, double> >(0))); 724241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 724341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 724441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ArrayEq(). 724541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 724641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ArrayEqTest, WorksForDegeneratedArrays) { 724741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(5, 5L)); 724841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ArrayEq('a', 0)); 724941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 725041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 725141d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ArrayEqTest, WorksForOneDimensionalArrays) { 7252fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes // Note that a and b are distinct but compatible types. 725341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int a[] = { 0, 1 }; 725441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot long b[] = { 0, 1 }; 725541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, b)); 725641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, 2, b)); 725741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 725841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot b[0] = 2; 725941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ArrayEq(a, b)); 726041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ArrayEq(a, 1, b)); 726141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 726241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 726341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ArrayEqTest, WorksForTwoDimensionalArrays) { 726441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char a[][3] = { "hi", "lo" }; 726541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char b[][3] = { "hi", "lo" }; 726641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char c[][3] = { "hi", "li" }; 726741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 726841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, b)); 726941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, 2, b)); 727041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 727141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ArrayEq(a, c)); 727241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(ArrayEq(a, 2, c)); 727341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 727441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 727541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests ArrayAwareFind(). 727641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 727741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ArrayAwareFindTest, WorksForOneDimensionalArray) { 727841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char a[] = "hello"; 727941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o')); 728041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x')); 728141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 728241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 728341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) { 728441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; 728541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int b[2] = { 2, 3 }; 728641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b)); 728741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 728841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int c[2] = { 6, 7 }; 728941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c)); 729041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 729141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 729241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests CopyArray(). 729341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 729441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(CopyArrayTest, WorksForDegeneratedArrays) { 729541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int n = 0; 729641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CopyArray('a', &n); 729741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ('a', n); 729841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 729941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 730041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(CopyArrayTest, WorksForOneDimensionalArrays) { 730141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char a[3] = "hi"; 730241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int b[3]; 730341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 730441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CopyArray(a, &b); 730541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, b)); 730641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 730741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 730841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int c[3]; 730941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CopyArray(a, 3, c); 731041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, c)); 731141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 731241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 731341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(CopyArrayTest, WorksForTwoDimensionalArrays) { 731441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } }; 731541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int b[2][3]; 731641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 731741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CopyArray(a, &b); 731841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, b)); 731941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 732041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 732141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int c[2][3]; 732241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CopyArray(a, 2, c); 732341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(ArrayEq(a, c)); 732441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 732541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 732641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests NativeArray. 732741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 732841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(NativeArrayTest, ConstructorFromArrayWorks) { 732941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int a[3] = { 0, 1, 2 }; 733041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<int> na(a, 3, kReference); 733141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(3U, na.size()); 733241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a, na.begin()); 733341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 733441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 733541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { 733641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot typedef int Array[2]; 733741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Array* a = new Array[1]; 733841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot (*a)[0] = 0; 733941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot (*a)[1] = 1; 734041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<int> na(*a, 2, kCopy); 734141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_NE(*a, na.begin()); 734241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete[] a; 734341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, na.begin()[0]); 734441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, na.begin()[1]); 734541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 734641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We rely on the heap checker to verify that na deletes the copy of 734741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // array. 734841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 734941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 735041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(NativeArrayTest, TypeMembersAreCorrect) { 735141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot StaticAssertTypeEq<char, NativeArray<char>::value_type>(); 735241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>(); 735341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 735441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>(); 735541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>(); 735641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 735741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 735841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(NativeArrayTest, MethodsWork) { 735941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int a[3] = { 0, 1, 2 }; 736041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<int> na(a, 3, kCopy); 736141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(3U, na.size()); 736241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(3, na.end() - na.begin()); 736341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 736441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<int>::const_iterator it = na.begin(); 736541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(0, *it); 736641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ++it; 736741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(1, *it); 736841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot it++; 736941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(2, *it); 737041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ++it; 737141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(na.end(), it); 737241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 737341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(na == na); 737441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 737541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<int> na2(a, 3, kReference); 737641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(na == na2); 737741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 737841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int b1[3] = { 0, 1, 1 }; 737941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int b2[4] = { 0, 1, 2, 3 }; 738041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(na == NativeArray<int>(b1, 3, kReference)); 738141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(na == NativeArray<int>(b2, 4, kCopy)); 738241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 738341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 738441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(NativeArrayTest, WorksForTwoDimensionalArray) { 738541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char a[2][3] = { "hi", "lo" }; 738641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot NativeArray<char[3]> na(a, 2, kReference); 738741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_EQ(2U, na.size()); 738841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(a, na.begin()); 738941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 739041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 739141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests SkipPrefix(). 739241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 739341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(SkipPrefixTest, SkipsWhenPrefixMatches) { 739441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const str = "hello"; 739541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 739641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* p = str; 739741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(SkipPrefix("", &p)); 739841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(str, p); 739941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 740041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot p = str; 740141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_TRUE(SkipPrefix("hell", &p)); 740241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(str + 4, p); 740341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 740441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 740541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) { 740641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const str = "world"; 740741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 740841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* p = str; 740941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(SkipPrefix("W", &p)); 741041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(str, p); 741141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 741241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot p = str; 741341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_FALSE(SkipPrefix("world!", &p)); 741441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(str, p); 74151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 7416