1aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Copyright 2005, Google Inc. 2aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// All rights reserved. 3aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 4aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Redistribution and use in source and binary forms, with or without 5aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// modification, are permitted provided that the following conditions are 6aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// met: 7aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 8aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// * Redistributions of source code must retain the above copyright 9aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// notice, this list of conditions and the following disclaimer. 10aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// * Redistributions in binary form must reproduce the above 11aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// copyright notice, this list of conditions and the following disclaimer 12aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// in the documentation and/or other materials provided with the 13aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// distribution. 14aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// * Neither the name of Google Inc. nor the names of its 15aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// contributors may be used to endorse or promote products derived from 16aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// this software without specific prior written permission. 17aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 18aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 30aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Author: wan@google.com (Zhanyong Wan) 31aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 32aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests for Google Test itself. This verifies that the basic constructs of 33aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Google Test work. 34aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 35aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include "gtest/gtest.h" 36aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 37aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that the command line flag variables can be accessed 38aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// in code once <gtest/gtest.h> has been #included. 39aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Do not move it after other #includes. 40aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) { 41aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool dummy = testing::GTEST_FLAG(also_run_disabled_tests) 42aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(break_on_failure) 43aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(catch_exceptions) 44aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(color) != "unknown" 45aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(filter) != "unknown" 46aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(list_tests) 47aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(output) != "unknown" 48aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(print_time) 49aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(random_seed) 50aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(repeat) > 0 51aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(show_internal_stack_frames) 52aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(shuffle) 53aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(stack_trace_depth) > 0 54aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(stream_result_to) != "unknown" 55aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter || testing::GTEST_FLAG(throw_on_failure); 56aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused. 57aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 58aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 59aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <limits.h> // For INT_MAX. 60aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <stdlib.h> 61aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <string.h> 62aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <time.h> 63aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 64aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <map> 65aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <vector> 66aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <ostream> 67aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 68aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include "gtest/gtest-spi.h" 69aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 70aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Indicates that this translation unit is part of Google Test's 71aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// implementation. It must come before gtest-internal-inl.h is 72aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// included, or there will be a compiler error. This trick is to 73aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// prevent a user from accidentally including gtest-internal-inl.h in 74aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// his code. 75aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#define GTEST_IMPLEMENTATION_ 1 76aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include "src/gtest-internal-inl.h" 77aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#undef GTEST_IMPLEMENTATION_ 78aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 79aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace testing { 80aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace internal { 81aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 82aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_CAN_STREAM_RESULTS_ 83aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 84aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass StreamingListenerTest : public Test { 85aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 86aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter class FakeSocketWriter : public StreamingListener::AbstractSocketWriter { 87aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 88aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Sends a string to the socket. 89aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void Send(const string& message) { output_ += message; } 90aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 91aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter string output_; 92aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 93aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 94aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StreamingListenerTest() 95aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter : fake_sock_writer_(new FakeSocketWriter), 96aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_(fake_sock_writer_), 97aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter test_info_obj_("FooTest", "Bar", NULL, NULL, 0, NULL) {} 98aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 99aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter string* output() { return &(fake_sock_writer_->output_); } 101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FakeSocketWriter* const fake_sock_writer_; 103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StreamingListener streamer_; 104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest unit_test_; 105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestInfo test_info_obj_; // The name test_info_ was taken by testing::Test. 106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestProgramEnd) { 109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestProgramEnd(unit_test_); 111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestProgramEnd&passed=1\n", *output()); 112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestIterationEnd) { 115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestIterationEnd(unit_test_, 42); 117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output()); 118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestCaseStart) { 121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL)); 123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestCaseStart&name=FooTest\n", *output()); 124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestCaseEnd) { 127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL)); 129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output()); 130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestStart) { 133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestStart(test_info_obj_); 135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestStart&name=Bar\n", *output()); 136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestEnd) { 139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestEnd(test_info_obj_); 141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("event=TestEnd&passed=1&elapsed_time=0ms\n", *output()); 142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(StreamingListenerTest, OnTestPartResult) { 145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output() = ""; 146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter streamer_.OnTestPartResult(TestPartResult( 147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResult::kFatalFailure, "foo.cc", 42, "failed=\n&%")); 148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Meta characters in the failure message should be properly escaped. 150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ( 151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", 152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *output()); 153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_CAN_STREAM_RESULTS_ 156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Provides access to otherwise private parts of the TestEventListeners class 158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// that are needed to test it. 159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestEventListenersAccessor { 160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static TestEventListener* GetRepeater(TestEventListeners* listeners) { 162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return listeners->repeater(); 163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetDefaultResultPrinter(TestEventListeners* listeners, 166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListener* listener) { 167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners->SetDefaultResultPrinter(listener); 168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetDefaultXmlGenerator(TestEventListeners* listeners, 170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListener* listener) { 171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners->SetDefaultXmlGenerator(listener); 172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool EventForwardingEnabled(const TestEventListeners& listeners) { 175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return listeners.EventForwardingEnabled(); 176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SuppressEventForwarding(TestEventListeners* listeners) { 179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners->SuppressEventForwarding(); 180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass UnitTestRecordPropertyTestHelper : public Test { 184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordPropertyTestHelper() {} 186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Forwards to UnitTest::RecordProperty() to bypass access controls. 188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void UnitTestRecordProperty(const char* key, const std::string& value) { 189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.RecordProperty(key, value); 190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest unit_test_; 193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace internal 196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace testing 197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::AssertionFailure; 199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::AssertionResult; 200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::AssertionSuccess; 201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::DoubleLE; 202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::EmptyTestEventListener; 203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::Environment; 204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::FloatLE; 205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(also_run_disabled_tests); 206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(break_on_failure); 207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(catch_exceptions); 208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(color); 209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(death_test_use_fork); 210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(filter); 211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(list_tests); 212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(output); 213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(print_time); 214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(random_seed); 215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(repeat); 216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(show_internal_stack_frames); 217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(shuffle); 218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(stack_trace_depth); 219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(stream_result_to); 220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::GTEST_FLAG(throw_on_failure); 221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::IsNotSubstring; 222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::IsSubstring; 223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::Message; 224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::ScopedFakeTestPartResultReporter; 225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::StaticAssertTypeEq; 226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::Test; 227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestCase; 228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestEventListeners; 229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestInfo; 230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestPartResult; 231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestPartResultArray; 232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestProperty; 233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TestResult; 234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::TimeInMillis; 235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::UnitTest; 236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::kMaxStackTraceDepth; 237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::AddReference; 238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::AlwaysFalse; 239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::AlwaysTrue; 240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::AppendUserMessage; 241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ArrayAwareFind; 242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ArrayEq; 243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::CodePointToUtf8; 244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::CompileAssertTypesEqual; 245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::CopyArray; 246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::CountIf; 247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::EqFailure; 248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::FloatingPoint; 249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ForEach; 250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::FormatEpochTimeInMillisAsIso8601; 251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::FormatTimeInMillisAsSeconds; 252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GTestFlagSaver; 253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetCurrentOsStackTraceExceptTop; 254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetElementOr; 255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetNextRandomSeed; 256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetRandomSeedFromFlag; 257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetTestTypeId; 258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetTimeInMillis; 259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetTypeId; 260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetUnitTestImpl; 261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ImplicitlyConvertible; 262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::Int32; 263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::Int32FromEnvOrDie; 264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::IsAProtocolMessage; 265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::IsContainer; 266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::IsContainerTest; 267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::IsNotContainer; 268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::NativeArray; 269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ParseInt32Flag; 270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::RemoveConst; 271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::RemoveReference; 272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ShouldRunTestOnShard; 273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ShouldShard; 274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ShouldUseColor; 275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::Shuffle; 276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ShuffleRange; 277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::SkipPrefix; 278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::StreamableToString; 279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::String; 280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::TestEventListenersAccessor; 281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::TestResultAccessor; 282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::UInt32; 283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::WideStringToUtf8; 284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::kCopy; 285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::kMaxRandomSeed; 286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::kReference; 287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::kTestTypeIdInGoogleTest; 288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::scoped_ptr; 289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STREAM_REDIRECTION 291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::CaptureStdout; 292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::GetCapturedStdout; 293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_IS_THREADSAFE 296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::ThreadWithParam; 297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestingVector : public std::vector<int> { 300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter::std::ostream& operator<<(::std::ostream& os, 303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestingVector& vector) { 304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter os << "{ "; 305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (size_t i = 0; i < vector.size(); i++) { 306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter os << vector[i] << " "; 307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter os << "}"; 309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os; 310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This line tests that we can define tests in an unnamed namespace. 313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace { 314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetRandomSeedFromFlagTest, HandlesZero) { 316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int seed = GetRandomSeedFromFlag(0); 317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(1, seed); 318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed)); 319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetRandomSeedFromFlagTest, PreservesValidSeed) { 322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, GetRandomSeedFromFlag(1)); 323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, GetRandomSeedFromFlag(2)); 324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1)); 325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GetRandomSeedFromFlag(kMaxRandomSeed)); 327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) { 330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int seed1 = GetRandomSeedFromFlag(-1); 331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(1, seed1); 332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed)); 333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1); 335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(1, seed2); 336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed)); 337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetNextRandomSeedTest, WorksForValidInput) { 340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, GetNextRandomSeed(1)); 341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3, GetNextRandomSeed(2)); 342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(static_cast<int>(kMaxRandomSeed), 343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GetNextRandomSeed(kMaxRandomSeed - 1)); 344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed)); 345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We deliberately don't test GetNextRandomSeed() with invalid 347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // inputs, as that requires death tests, which are expensive. This 348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // is fine as GetNextRandomSeed() is internal and has a 349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // straightforward definition. 350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void ClearCurrentTestPartResults() { 353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::ClearTestPartResults( 354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GetUnitTestImpl()->current_test_result()); 355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GetTypeId. 358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetTypeIdTest, ReturnsSameValueForSameType) { 360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>()); 361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>()); 362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass SubClassOfTest : public Test {}; 365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass AnotherSubClassOfTest : public Test {}; 366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) { 368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>()); 369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<int>(), GetTypeId<char>()); 370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<int>(), GetTestTypeId()); 371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId()); 372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId()); 373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>()); 374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that GetTestTypeId() returns the same value, no matter it 377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// is called from inside Google Test or outside of it. 378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) { 379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId()); 380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests FormatTimeInMillisAsSeconds(). 383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { 385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); 386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { 389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3)); 390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); 391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); 392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); 393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); 394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { 397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3)); 398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); 399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); 400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); 401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); 402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests FormatEpochTimeInMillisAsIso8601(). The correctness of conversion 405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// for particular dates below was verified in Python using 406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// datetime.datetime.fromutctimestamp(<timetamp>/1000). 407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we 409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// have to set up a particular timezone to obtain predictable results. 410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass FormatEpochTimeInMillisAsIso8601Test : public Test { 411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // On Cygwin, GCC doesn't allow unqualified integer literals to exceed 413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 32 bits, even when 64-bit integer types are available. We have to 414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // force the constants to have a 64-bit type here. 415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const TimeInMillis kMillisPerSec = 1000; 416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saved_tz_ = NULL; 420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if _MSC_VER 421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(push) // Saves the current warning state. 422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(disable:4996) // Temporarily disables warning 4996 423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (function or variable may be unsafe 424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // for getenv, function is deprecated for 425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // strdup). 426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (getenv("TZ")) 427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saved_tz_ = strdup(getenv("TZ")); 428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(pop) // Restores the warning state again. 429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else 430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (getenv("TZ")) 431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saved_tz_ = strdup(getenv("TZ")); 432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use. We 435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // cannot use the local time zone because the function's output depends 436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // on the time zone. 437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetTimeZone("UTC+00"); 438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void TearDown() { 441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetTimeZone(saved_tz_); 442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter free(const_cast<char*>(saved_tz_)); 443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saved_tz_ = NULL; 444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetTimeZone(const char* time_zone) { 447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // tzset() distinguishes between the TZ variable being present and empty 448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // and not being present, so we have to consider the case of time_zone 449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // being NULL. 450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if _MSC_VER 451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...Unless it's MSVC, whose standard library's _putenv doesn't 452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // distinguish between an empty and a missing variable. 453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string env_var = 454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::string("TZ=") + (time_zone ? time_zone : ""); 455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter _putenv(env_var.c_str()); 456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(push) // Saves the current warning state. 457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(disable:4996) // Temporarily disables warning 4996 458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (function is deprecated). 459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter tzset(); 460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma warning(pop) // Restores the warning state again. 461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else 462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (time_zone) { 463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter setenv(("TZ"), time_zone, 1); 464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } else { 465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unsetenv("TZ"); 466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter tzset(); 468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* saved_tz_; 472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec; 475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) { 477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("2011-10-31T18:52:42", 478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec)); 479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) { 482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ( 483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2011-10-31T18:52:42", 484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234)); 485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) { 488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("2011-09-03T05:07:02", 489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec)); 490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) { 493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("2011-09-28T17:08:22", 494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec)); 495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) { 498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("1970-01-01T00:00:00", FormatEpochTimeInMillisAsIso8601(0)); 499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_CAN_COMPARE_NULL 502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifdef __BORLANDC__ 504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Silences warnings: "Condition is always true", "Unreachable code" 505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option push -w-ccc -w-rch 506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null 509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// pointer literal. 510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NullLiteralTest, IsTrueForNullLiterals) { 511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); 512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); 513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U)); 514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L)); 515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null 518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// pointer literal. 519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NullLiteralTest, IsFalseForNonNullLiterals) { 520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1)); 521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0)); 522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a')); 523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL))); 524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifdef __BORLANDC__ 527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Restores warnings after previous "#pragma option push" suppressed them. 528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option pop 529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_CAN_COMPARE_NULL 532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests CodePointToUtf8(). 534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the NUL character L'\0' is encoded correctly. 536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncodeNul) { 537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("", CodePointToUtf8(L'\0')); 538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ASCII characters are encoded correctly. 541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncodeAscii) { 542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("a", CodePointToUtf8(L'a')); 543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("Z", CodePointToUtf8(L'Z')); 544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("&", CodePointToUtf8(L'&')); 545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\x7F", CodePointToUtf8(L'\x7F')); 546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 8 to 11 bits are encoded 549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 110xxxxx 10xxxxxx. 550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncode8To11Bits) { 551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 000 1101 0011 => 110-00011 10-010011 552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xC3\x93", CodePointToUtf8(L'\xD3')); 553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 101 0111 0110 => 110-10101 10-110110 555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints 556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // in wide strings and wide chars. In order to accomodate them, we have to 557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // introduce such character constants as integers. 558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xD5\xB6", 559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CodePointToUtf8(static_cast<wchar_t>(0x576))); 560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 12 to 16 bits are encoded 563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 1110xxxx 10xxxxxx 10xxxxxx. 564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncode12To16Bits) { 565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xE0\xA3\x93", 567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CodePointToUtf8(static_cast<wchar_t>(0x8D3))); 568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xEC\x9D\x8D", 571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CodePointToUtf8(static_cast<wchar_t>(0xC74D))); 572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_WIDE_STRING_USES_UTF16_ 575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests in this group require a wchar_t to hold > 16 bits, and thus 576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is 577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 16-bit wide. This code may not compile on those systems. 578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 17 to 21 bits are encoded 580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. 581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncode17To21Bits) { 582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3')); 584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000 586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400')); 587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634')); 590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that encoding an invalid code-point generates the expected result. 593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) { 594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("(Invalid Unicode 0x1234ABCD)", CodePointToUtf8(L'\x1234ABCD')); 595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_WIDE_STRING_USES_UTF16_ 598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests WideStringToUtf8(). 600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the NUL character L'\0' is encoded correctly. 602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncodeNul) { 603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str()); 604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str()); 605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ASCII strings are encoded correctly. 608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncodeAscii) { 609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str()); 610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str()); 611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str()); 612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str()); 613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 8 to 11 bits are encoded 616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 110xxxxx 10xxxxxx. 617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncode8To11Bits) { 618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 000 1101 0011 => 110-00011 10-010011 619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str()); 620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str()); 621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 101 0111 0110 => 110-10101 10-110110 623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s[] = { 0x576, '\0' }; 624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str()); 625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str()); 626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 12 to 16 bits are encoded 629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 1110xxxx 10xxxxxx 10xxxxxx. 630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncode12To16Bits) { 631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s1[] = { 0x8D3, '\0' }; 633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str()); 634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str()); 635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s2[] = { 0xC74D, '\0' }; 638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str()); 639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str()); 640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the conversion stops when the function encounters \0 character. 643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, StopsOnNulCharacter) { 644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str()); 645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the conversion stops when the function reaches the limit 648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// specified by the 'length' parameter. 649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) { 650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str()); 651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_WIDE_STRING_USES_UTF16_ 654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Unicode code-points that have 17 to 21 bits are encoded 655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile 656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// on the systems using UTF-16 encoding. 657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncode17To21Bits) { 658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str()); 660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str()); 661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str()); 664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str()); 665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that encoding an invalid code-point generates the expected result. 668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) { 669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(Invalid Unicode 0xABCDFF)", 670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter WideStringToUtf8(L"\xABCDFF", -1).c_str()); 671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else // !GTEST_WIDE_STRING_USES_UTF16_ 673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that surrogate pairs are encoded correctly on the systems using 674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// UTF-16 encoding in the wide strings. 675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) { 676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s[] = { 0xD801, 0xDC00, '\0' }; 677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str()); 678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that encoding an invalid UTF-16 surrogate pair 681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// generates the expected result. 682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) { 683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Leading surrogate is at the end of the string. 684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s1[] = { 0xD800, '\0' }; 685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str()); 686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Leading surrogate is not followed by the trailing surrogate. 687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s2[] = { 0xD800, 'M', '\0' }; 688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str()); 689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Trailing surrogate appearas without a leading surrogate. 690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' }; 691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str()); 692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_WIDE_STRING_USES_UTF16_ 694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that codepoint concatenation works correctly. 696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_WIDE_STRING_USES_UTF16_ 697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'}; 699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xF4\x88\x98\xB4" 701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xEC\x9D\x8D" 702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\n" 703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xD5\xB6" 704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xE0\xA3\x93" 705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xF4\x88\x98\xB4", 706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter WideStringToUtf8(s, -1).c_str()); 707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else 709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { 710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'}; 711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93", 713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter WideStringToUtf8(s, -1).c_str()); 714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_WIDE_STRING_USES_UTF16_ 716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the Random class. 718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) { 720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random(42); 721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random.Generate(0), 723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Cannot generate a number in the range \\[0, 0\\)"); 724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random.Generate(testing::internal::Random::kMaxRange + 1), 726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Generation of a number in \\[0, 2147483649\\) was requested, " 727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "but this can only generate numbers in \\[0, 2147483648\\)"); 728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RandomTest, GeneratesNumbersWithinRange) { 731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const UInt32 kRange = 10000; 732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random(12345); 733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < 10; i++) { 734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i; 735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random2(testing::internal::Random::kMaxRange); 738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < 10; i++) { 739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i; 740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RandomTest, RepeatsWhenReseeded) { 744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int kSeed = 123; 745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int kArraySize = 10; 746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const UInt32 kRange = 10000; 747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UInt32 values[kArraySize]; 748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random(kSeed); 750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < kArraySize; i++) { 751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values[i] = random.Generate(kRange); 752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random.Reseed(kSeed); 755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < kArraySize; i++) { 756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i; 757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests STL container utilities. 761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests CountIf(). 763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic bool IsPositive(int n) { return n > 0; } 765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ContainerUtilityTest, CountIf) { 767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<int> v; 768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, CountIf(v, IsPositive)); // Works for an empty container. 769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(-1); 771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(0); 772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, CountIf(v, IsPositive)); // Works when no value satisfies. 773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(2); 775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(-10); 776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(10); 777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, CountIf(v, IsPositive)); 778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ForEach(). 781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic int g_sum = 0; 783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void Accumulate(int n) { g_sum += n; } 784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ContainerUtilityTest, ForEach) { 786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<int> v; 787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter g_sum = 0; 788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ForEach(v, Accumulate); 789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, g_sum); // Works for an empty container; 790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter g_sum = 0; 792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(1); 793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ForEach(v, Accumulate); 794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, g_sum); // Works for a container with one element. 795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter g_sum = 0; 797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(20); 798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.push_back(300); 799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ForEach(v, Accumulate); 800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(321, g_sum); 801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GetElementOr(). 804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ContainerUtilityTest, GetElementOr) { 805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<char> a; 806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('x', GetElementOr(a, 0, 'x')); 807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a.push_back('a'); 809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a.push_back('b'); 810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('a', GetElementOr(a, 0, 'x')); 811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('b', GetElementOr(a, 1, 'x')); 812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('x', GetElementOr(a, -2, 'x')); 813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('x', GetElementOr(a, 2, 'x')); 814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ContainerUtilityDeathTest, ShuffleRange) { 817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<int> a; 818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a.push_back(0); 819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a.push_back(1); 820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a.push_back(2); 821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random(1); 822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random, -1, 1, &a), 825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Invalid shuffle range start -1: must be in range \\[0, 3\\]"); 826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random, 4, 4, &a), 828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Invalid shuffle range start 4: must be in range \\[0, 3\\]"); 829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random, 3, 2, &a), 831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Invalid shuffle range finish 2: must be in range \\[3, 3\\]"); 832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random, 3, 4, &a), 834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Invalid shuffle range finish 4: must be in range \\[3, 3\\]"); 835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass VectorShuffleTest : public Test { 838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const int kVectorSize = 20; 840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter VectorShuffleTest() : random_(1) { 842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < kVectorSize; i++) { 843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector_.push_back(i); 844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool VectorIsCorrupt(const TestingVector& vector) { 848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (kVectorSize != static_cast<int>(vector.size())) { 849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return true; 850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool found_in_vector[kVectorSize] = { false }; 853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (size_t i = 0; i < vector.size(); i++) { 854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int e = vector[i]; 855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (e < 0 || e >= kVectorSize || found_in_vector[e]) { 856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return true; 857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter found_in_vector[e] = true; 859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Vector size is correct, elements' range is correct, no 862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // duplicate elements. Therefore no corruption has occurred. 863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return false; 864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool VectorIsNotCorrupt(const TestingVector& vector) { 867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return !VectorIsCorrupt(vector); 868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) { 871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = begin; i < end; i++) { 872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (i != vector[i]) { 873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return true; 874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return false; 877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool RangeIsUnshuffled( 880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestingVector& vector, int begin, int end) { 881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return !RangeIsShuffled(vector, begin, end); 882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool VectorIsShuffled(const TestingVector& vector) { 885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return RangeIsShuffled(vector, 0, static_cast<int>(vector.size())); 886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static bool VectorIsUnshuffled(const TestingVector& vector) { 889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return !VectorIsShuffled(vector); 890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::internal::Random random_; 893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestingVector vector_; 894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; // class VectorShuffleTest 895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst int VectorShuffleTest::kVectorSize; 897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, HandlesEmptyRange) { 899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests an empty range at the beginning... 900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, 0, 0, &vector_); 901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...in the middle... 905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_); 906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...at the end... 910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_); 911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...and past the end. 915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_); 916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) { 921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests a size one range at the beginning... 922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, 0, 1, &vector_); 923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...in the middle... 927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_); 928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ...and at the end. 932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_); 933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsUnshuffled, vector_); 935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Because we use our own random number generator and a fixed seed, 938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// we can guarantee that the following "random" tests will succeed. 939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, ShufflesEntireVector) { 941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Shuffle(&random_, &vector_); 942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_; 944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests the first and last elements in particular to ensure that 946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // there are no off-by-one problems in our shuffle algorithm. 947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(0, vector_[0]); 948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]); 949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, ShufflesStartOfVector) { 952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int kRangeSize = kVectorSize/2; 953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, 0, kRangeSize, &vector_); 955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize); 958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize); 959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, ShufflesEndOfVector) { 962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int kRangeSize = kVectorSize / 2; 963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_); 964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize); 968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, ShufflesMiddleOfVector) { 971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int kRangeSize = kVectorSize/3; 972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_); 973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); 976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize); 977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize); 978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(VectorShuffleTest, ShufflesRepeatably) { 981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestingVector vector2; 982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < kVectorSize; i++) { 983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector2.push_back(i); 984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random_.Reseed(1234); 987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Shuffle(&random_, &vector_); 988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random_.Reseed(1234); 989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Shuffle(&random_, &vector2); 990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector_); 992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(VectorIsNotCorrupt, vector2); 993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < kVectorSize; i++) { 995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i; 996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the size of the AssertHelper class. 1000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertHelperTest, AssertHelperIsSmall) { 1002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To avoid breaking clients that use lots of assertions in one 1003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // function, we cannot grow the size of AssertHelper. 1004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*)); 1005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests String::EndsWithCaseInsensitive(). 1008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, EndsWithCaseInsensitive) { 1009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "BAR")); 1010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::EndsWithCaseInsensitive("foobaR", "bar")); 1011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "")); 1012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::EndsWithCaseInsensitive("", "")); 1013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::EndsWithCaseInsensitive("Foobar", "foo")); 1015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::EndsWithCaseInsensitive("foobar", "Foo")); 1016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::EndsWithCaseInsensitive("", "foo")); 1017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// C++Builder's preprocessor is buggy; it fails to expand macros that 1020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// appear in macro parameters after wide char literals. Provide an alias 1021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// for NULL as a workaround. 1022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic const wchar_t* const kNull = NULL; 1023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests String::CaseInsensitiveWideCStringEquals 1025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, CaseInsensitiveWideCStringEquals) { 1026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL)); 1027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"")); 1028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull)); 1029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar")); 1030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull)); 1031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar")); 1032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR")); 1033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar")); 1034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS 1037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests String::ShowWideCString(). 1039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, ShowWideCString) { 1040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(null)", 1041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter String::ShowWideCString(NULL).c_str()); 1042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", String::ShowWideCString(L"").c_str()); 1043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str()); 1044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# if GTEST_OS_WINDOWS_MOBILE 1047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, AnsiAndUtf16Null) { 1048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(NULL, String::AnsiToUtf16(NULL)); 1049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL)); 1050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, AnsiAndUtf16ConvertBasic) { 1053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* ansi = String::Utf16ToAnsi(L"str"); 1054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("str", ansi); 1055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete [] ansi; 1056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const WCHAR* utf16 = String::AnsiToUtf16("str"); 1057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, wcsncmp(L"str", utf16, 3)); 1058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete [] utf16; 1059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringTest, AnsiAndUtf16ConvertPathChars) { 1062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?"); 1063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(".:\\ \"*?", ansi); 1064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete [] ansi; 1065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?"); 1066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3)); 1067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete [] utf16; 1068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif // GTEST_OS_WINDOWS_MOBILE 1070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS 1072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestProperty construction. 1074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestPropertyTest, StringValue) { 1075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property("key", "1"); 1076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key", property.key()); 1077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", property.value()); 1078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestProperty replacing a value. 1081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestPropertyTest, ReplaceStringValue) { 1082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property("key", "1"); 1083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", property.value()); 1084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter property.SetValue("2"); 1085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2", property.value()); 1086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// AddFatalFailure() and AddNonfatalFailure() must be stand-alone 1089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// functions (i.e. their definitions cannot be inlined at the call 1090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// sites), or C++Builder won't compile the code. 1091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void AddFatalFailure() { 1092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Expected fatal failure."; 1093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void AddNonfatalFailure() { 1096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "Expected non-fatal failure."; 1097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ScopedFakeTestPartResultReporterTest : public Test { 1100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: // Must be public and not protected due to a bug in g++ 3.4.2. 1101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter enum FailureMode { 1102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FATAL_FAILURE, 1103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NONFATAL_FAILURE 1104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 1105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void AddFailure(FailureMode failure) { 1106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (failure == FATAL_FAILURE) { 1107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFatalFailure(); 1108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } else { 1109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddNonfatalFailure(); 1110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ScopedFakeTestPartResultReporter intercepts test 1115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// failures. 1116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) { 1117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray results; 1118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 1119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter reporter( 1120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, 1121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter &results); 1122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailure(NONFATAL_FAILURE); 1123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailure(FATAL_FAILURE); 1124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, results.size()); 1127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 1128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 1129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) { 1132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray results; 1133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 1134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests, that the deprecated constructor still works. 1135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter reporter(&results); 1136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailure(NONFATAL_FAILURE); 1137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, results.size()); 1139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_IS_THREADSAFE 1142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ScopedFakeTestPartResultReporterWithThreadsTest 1144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter : public ScopedFakeTestPartResultReporterTest { 1145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 1146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void AddFailureInOtherThread(FailureMode failure) { 1147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL); 1148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter thread.Join(); 1149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ScopedFakeTestPartResultReporterWithThreadsTest, 1153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter InterceptsTestFailuresInAllThreads) { 1154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray results; 1155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 1156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter reporter( 1157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results); 1158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailure(NONFATAL_FAILURE); 1159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailure(FATAL_FAILURE); 1160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailureInOtherThread(NONFATAL_FAILURE); 1161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailureInOtherThread(FATAL_FAILURE); 1162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(4, results.size()); 1165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); 1166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); 1167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed()); 1168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed()); 1169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_IS_THREADSAFE 1172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}. Makes sure that they 1174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// work even if the failure is generated in a called function rather than 1175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the current context. 1176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest; 1178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) { 1180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure."); 1181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_GLOBAL_STRING 1184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, AcceptsStringObject) { 1185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure.")); 1186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 1188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) { 1190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(AddFatalFailure(), 1191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::std::string("Expected fatal failure.")); 1192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) { 1195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We have another test below to verify that the macro catches fatal 1196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failures generated on another thread. 1197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(), 1198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected fatal failure."); 1199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 1202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Silences warnings: "Condition is always true" 1203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option push -w-ccc 1204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 1205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void 1207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// function even when the statement in it contains ASSERT_*. 1208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterint NonVoidFunction() { 1210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 1211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 1212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return 0; 1213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) { 1216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NonVoidFunction(); 1217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the 1220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// current function even though 'statement' generates a fatal failure. 1221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid DoesNotAbortHelper(bool* aborted) { 1223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); 1224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); 1225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *aborted = false; 1227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 1230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Restores warnings after previous "#pragma option push" suppressed them. 1231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option pop 1232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 1233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, DoesNotAbort) { 1235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool aborted = true; 1236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter DoesNotAbortHelper(&aborted); 1237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(aborted); 1238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a 1241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// statement that contains a macro which expands to code containing an 1242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// unprotected comma. 1243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic int global_var = 0; 1245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++ 1246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 1248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ 1249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder. 1250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ 1251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_USE_UNPROTECTED_COMMA_; 1252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFatalFailure(); 1253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 1254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 1255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE_ON_ALL_THREADS({ 1257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_USE_UNPROTECTED_COMMA_; 1258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFatalFailure(); 1259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 1260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}. 1263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest; 1265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) { 1267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected non-fatal failure."); 1269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_GLOBAL_STRING 1272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) { 1273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::string("Expected non-fatal failure.")); 1275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 1277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) { 1279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), 1280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::std::string("Expected non-fatal failure.")); 1281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) { 1284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We have another test below to verify that the macro catches 1285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // non-fatal failures generated on another thread. 1286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(), 1287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected non-fatal failure."); 1288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a 1291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// statement that contains a macro which expands to code containing an 1292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// unprotected comma. 1293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { 1294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ 1295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_USE_UNPROTECTED_COMMA_; 1296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddNonfatalFailure(); 1297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 1298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({ 1300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_USE_UNPROTECTED_COMMA_; 1301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddNonfatalFailure(); 1302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 1303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_IS_THREADSAFE 1306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef ScopedFakeTestPartResultReporterWithThreadsTest 1308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectFailureWithThreadsTest; 1309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) { 1311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE), 1312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected fatal failure."); 1313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) { 1316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( 1317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); 1318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_IS_THREADSAFE 1321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the TestProperty class. 1323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestPropertyTest, ConstructorWorks) { 1325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty property("key", "value"); 1326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key", property.key()); 1327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("value", property.value()); 1328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestPropertyTest, SetValue) { 1331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property("key", "value_1"); 1332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key", property.key()); 1333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter property.SetValue("value_2"); 1334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key", property.key()); 1335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("value_2", property.value()); 1336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the TestResult class 1339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The test fixture for testing TestResult. 1341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestResultTest : public Test { 1342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 1343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter typedef std::vector<TestPartResult> TPRVector; 1344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We make use of 2 TestPartResult objects, 1346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResult * pr1, * pr2; 1347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ... and 3 TestResult objects. 1349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult * r0, * r1, * r2; 1350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 1352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // pr1 is for success. 1353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter pr1 = new TestPartResult(TestPartResult::kSuccess, 1354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo/bar.cc", 1355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 10, 1356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Success!"); 1357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // pr2 is for fatal failure. 1359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter pr2 = new TestPartResult(TestPartResult::kFatalFailure, 1360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo/bar.cc", 1361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter -1, // This line number means "unknown" 1362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Failure!"); 1363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates the TestResult objects. 1365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r0 = new TestResult(); 1366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r1 = new TestResult(); 1367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r2 = new TestResult(); 1368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // In order to test TestResult, we need to modify its internal 1370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // state, in particular the TestPartResult vector it holds. 1371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // test_part_results() returns a const reference to this vector. 1372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We cast it to a non-const object s.t. it can be modified (yes, 1373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // this is a hack). 1374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TPRVector* results1 = const_cast<TPRVector*>( 1375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter &TestResultAccessor::test_part_results(*r1)); 1376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TPRVector* results2 = const_cast<TPRVector*>( 1377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter &TestResultAccessor::test_part_results(*r2)); 1378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // r0 is an empty TestResult. 1380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // r1 contains a single SUCCESS TestPartResult. 1382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter results1->push_back(*pr1); 1383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // r2 contains a SUCCESS, and a FAILURE. 1385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter results2->push_back(*pr1); 1386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter results2->push_back(*pr2); 1387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void TearDown() { 1390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete pr1; 1391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete pr2; 1392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete r0; 1394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete r1; 1395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete r2; 1396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Helper that compares two two TestPartResults. 1399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void CompareTestPartResult(const TestPartResult& expected, 1400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestPartResult& actual) { 1401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.type(), actual.type()); 1402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.file_name(), actual.file_name()); 1403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.line_number(), actual.line_number()); 1404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.summary(), actual.summary()); 1405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.message(), actual.message()); 1406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.passed(), actual.passed()); 1407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.failed(), actual.failed()); 1408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed()); 1409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed()); 1410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::total_part_count(). 1414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestResultTest, total_part_count) { 1415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, r0->total_part_count()); 1416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, r1->total_part_count()); 1417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, r2->total_part_count()); 1418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::Passed(). 1421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestResultTest, Passed) { 1422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(r0->Passed()); 1423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(r1->Passed()); 1424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(r2->Passed()); 1425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::Failed(). 1428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestResultTest, Failed) { 1429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(r0->Failed()); 1430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(r1->Failed()); 1431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(r2->Failed()); 1432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::GetTestPartResult(). 1435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef TestResultTest TestResultDeathTest; 1437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestResultDeathTest, GetTestPartResult) { 1439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompareTestPartResult(*pr1, r2->GetTestPartResult(0)); 1440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompareTestPartResult(*pr2, r2->GetTestPartResult(1)); 1441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), ""); 1442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), ""); 1443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult has no properties when none are added. 1446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) { 1447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult test_result; 1448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, test_result.test_property_count()); 1449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult has the expected property when added. 1452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) { 1453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult test_result; 1454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property("key_1", "1"); 1455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property); 1456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, test_result.test_property_count()); 1457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& actual_property = test_result.GetTestProperty(0); 1458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", actual_property.key()); 1459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", actual_property.value()); 1460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult has multiple properties when added. 1463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) { 1464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult test_result; 1465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_1("key_1", "1"); 1466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_2("key_2", "2"); 1467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 1469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, test_result.test_property_count()); 1470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 1471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", actual_property_1.key()); 1472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", actual_property_1.value()); 1473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 1475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_2", actual_property_2.key()); 1476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2", actual_property_2.value()); 1477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::RecordProperty() overrides values for duplicate keys. 1480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) { 1481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult test_result; 1482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_1_1("key_1", "1"); 1483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_2_1("key_2", "2"); 1484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_1_2("key_1", "12"); 1485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_2_2("key_2", "22"); 1486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_1); 1487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_1); 1488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_2); 1489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_2); 1490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, test_result.test_property_count()); 1492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& actual_property_1 = test_result.GetTestProperty(0); 1493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", actual_property_1.key()); 1494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("12", actual_property_1.value()); 1495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& actual_property_2 = test_result.GetTestProperty(1); 1497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_2", actual_property_2.key()); 1498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("22", actual_property_2.value()); 1499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::GetTestProperty(). 1502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestResultPropertyTest, GetTestProperty) { 1503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResult test_result; 1504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_1("key_1", "1"); 1505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_2("key_2", "2"); 1506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestProperty property_3("key_3", "3"); 1507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); 1508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); 1509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestResultAccessor::RecordProperty(&test_result, "testcase", property_3); 1510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& fetched_property_1 = test_result.GetTestProperty(0); 1512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& fetched_property_2 = test_result.GetTestProperty(1); 1513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestProperty& fetched_property_3 = test_result.GetTestProperty(2); 1514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", fetched_property_1.key()); 1516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", fetched_property_1.value()); 1517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_2", fetched_property_2.key()); 1519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2", fetched_property_2.value()); 1520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_3", fetched_property_3.key()); 1522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("3", fetched_property_3.value()); 1523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), ""); 1525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), ""); 1526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that GTestFlagSaver works on Windows and Mac. 1529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass GTestFlagSaverTest : public Test { 1531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 1532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Saves the Google Test flags such that we can restore them later, and 1533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // then sets them to their default values. This will be called 1534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // before the first test in this test case is run. 1535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetUpTestCase() { 1536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saver_ = new GTestFlagSaver; 1537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(also_run_disabled_tests) = false; 1539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(break_on_failure) = false; 1540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(catch_exceptions) = false; 1541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(death_test_use_fork) = false; 1542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "auto"; 1543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(filter) = ""; 1544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(list_tests) = false; 1545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(output) = ""; 1546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(print_time) = true; 1547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(random_seed) = 0; 1548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(repeat) = 1; 1549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(shuffle) = false; 1550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 1551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stream_result_to) = ""; 1552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(throw_on_failure) = false; 1553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Restores the Google Test flags that the tests have modified. This will 1556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // be called after the last test in this test case is run. 1557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void TearDownTestCase() { 1558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete saver_; 1559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter saver_ = NULL; 1560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies that the Google Test flags have their default values, and then 1563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // modifies each of them. 1564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void VerifyAndModifyFlags() { 1565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests)); 1566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(break_on_failure)); 1567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(catch_exceptions)); 1568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("auto", GTEST_FLAG(color).c_str()); 1569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(death_test_use_fork)); 1570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", GTEST_FLAG(filter).c_str()); 1571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(list_tests)); 1572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", GTEST_FLAG(output).c_str()); 1573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(GTEST_FLAG(print_time)); 1574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, GTEST_FLAG(random_seed)); 1575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, GTEST_FLAG(repeat)); 1576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(shuffle)); 1577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth)); 1578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str()); 1579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(GTEST_FLAG(throw_on_failure)); 1580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(also_run_disabled_tests) = true; 1582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(break_on_failure) = true; 1583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(catch_exceptions) = true; 1584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "no"; 1585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(death_test_use_fork) = true; 1586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(filter) = "abc"; 1587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(list_tests) = true; 1588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(output) = "xml:foo.xml"; 1589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(print_time) = false; 1590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(random_seed) = 1; 1591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(repeat) = 100; 1592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(shuffle) = true; 1593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stack_trace_depth) = 1; 1594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stream_result_to) = "localhost:1234"; 1595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(throw_on_failure) = true; 1596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 1599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // For saving Google Test flags during this test case. 1600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static GTestFlagSaver* saver_; 1601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterGTestFlagSaver* GTestFlagSaverTest::saver_ = NULL; 1604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Google Test doesn't guarantee the order of tests. The following two 1606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// tests are designed to work regardless of their order. 1607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Modifies the Google Test flags in the test body. 1609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(GTestFlagSaverTest, ModifyGTestFlags) { 1610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter VerifyAndModifyFlags(); 1611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that the Google Test flags in the body of the previous test were 1614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// restored to their original values. 1615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(GTestFlagSaverTest, VerifyGTestFlags) { 1616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter VerifyAndModifyFlags(); 1617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Sets an environment variable with the given name to the given 1620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// value. If the value argument is "", unsets the environment 1621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// variable. The caller must ensure that both arguments are not NULL. 1622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void SetEnv(const char* name, const char* value) { 1623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS_MOBILE 1624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Environment variables are not supported on Windows CE. 1625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return; 1626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 1627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // C++Builder's putenv only stores a pointer to its parameter; we have to 1628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ensure that the string remains valid as long as it might be needed. 1629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We use an std::map to do so. 1630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static std::map<std::string, std::string*> added_env; 1631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Because putenv stores a pointer to the string buffer, we can't delete the 1633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // previous string (if present) until after it's replaced. 1634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::string *prev_env = NULL; 1635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (added_env.find(name) != added_env.end()) { 1636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter prev_env = added_env[name]; 1637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter added_env[name] = new std::string( 1639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (Message() << name << "=" << value).GetString()); 1640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The standard signature of putenv accepts a 'char*' argument. Other 1642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // implementations, like C++Builder's, accept a 'const char*'. 1643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We cast away the 'const' since that would work for both variants. 1644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter putenv(const_cast<char*>(added_env[name]->c_str())); 1645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete prev_env; 1646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#elif GTEST_OS_WINDOWS // If we are on Windows proper. 1647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter _putenv((Message() << name << "=" << value).GetString().c_str()); 1648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else 1649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (*value == '\0') { 1650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unsetenv(name); 1651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } else { 1652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter setenv(name, value, 1); 1653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS_MOBILE 1655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_WINDOWS_MOBILE 1658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Environment variables are not supported on Windows CE. 1659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterusing testing::internal::Int32FromGTestEnv; 1661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests Int32FromGTestEnv(). 1663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromGTestEnv() returns the default value when the 1665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// environment variable is not set. 1666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) { 1667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", ""); 1668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(10, Int32FromGTestEnv("temp", 10)); 1669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromGTestEnv() returns the default value when the 1672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// environment variable overflows as an Int32. 1673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) { 1674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("(expecting 2 warnings)\n"); 1675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321"); 1677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(20, Int32FromGTestEnv("temp", 20)); 1678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321"); 1680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(30, Int32FromGTestEnv("temp", 30)); 1681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromGTestEnv() returns the default value when the 1684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// environment variable does not represent a valid decimal integer. 1685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) { 1686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("(expecting 2 warnings)\n"); 1687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1"); 1689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(40, Int32FromGTestEnv("temp", 40)); 1690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X"); 1692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(50, Int32FromGTestEnv("temp", 50)); 1693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromGTestEnv() parses and returns the value of the 1696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// environment variable when it represents a valid decimal integer in 1697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the range of an Int32. 1698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) { 1699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123"); 1700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, Int32FromGTestEnv("temp", 0)); 1701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321"); 1703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0)); 1704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_WINDOWS_MOBILE 1706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ParseInt32Flag(). 1708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ParseInt32Flag() returns false and doesn't change the 1710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// output value when the flag has wrong format 1711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) { 1712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 value = 123; 1713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value)); 1714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value)); 1717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ParseInt32Flag() returns false and doesn't change the 1721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// output value when the flag overflows as an Int32. 1722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { 1723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("(expecting 2 warnings)\n"); 1724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 value = 123; 1726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value)); 1727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value)); 1730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ParseInt32Flag() returns false and doesn't change the 1734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// output value when the flag does not represent a valid decimal 1735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// integer. 1736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { 1737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("(expecting 2 warnings)\n"); 1738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 value = 123; 1740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value)); 1741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value)); 1744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, value); 1745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ParseInt32Flag() parses the value of the flag and 1748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// returns true when the flag represents a valid decimal integer in 1749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the range of an Int32. 1750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) { 1751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 value = 123; 1752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value)); 1753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(456, value); 1754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", 1756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "abc", &value)); 1757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(-789, value); 1758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromEnvOrDie() parses the value of the var or 1761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// returns the correct default. 1762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Environment variables are not supported on Windows CE. 1763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_WINDOWS_MOBILE 1764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) { 1765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 1766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123"); 1767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 1768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123"); 1769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); 1770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_WINDOWS_MOBILE 1772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromEnvOrDie() aborts with an error message 1774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// if the variable is not an Int32. 1775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) { 1776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx"); 1777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 1778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 1779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ".*"); 1780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Int32FromEnvOrDie() aborts with an error message 1783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// if the variable cannot be represnted by an Int32. 1784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) { 1785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234"); 1786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED( 1787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), 1788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ".*"); 1789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ShouldRunTestOnShard() selects all tests 1792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// where there is 1 shard. 1793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) { 1794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0)); 1795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1)); 1796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2)); 1797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3)); 1798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4)); 1799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ShouldShardTest : public testing::Test { 1802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 1803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 1804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX"; 1805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL"; 1806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void TearDown() { 1809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, ""); 1810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, ""); 1811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* index_var_; 1814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* total_var_; 1815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that sharding is disabled if neither of the environment variables 1818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// are set. 1819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) { 1820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, ""); 1821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, ""); 1822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 1824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that sharding is not enabled if total_shards == 1. 1828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) { 1829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "0"); 1830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "1"); 1831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); 1832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that sharding is enabled if total_shards > 1 and 1836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// we are not in a death test subprocess. 1837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Environment variables are not supported on Windows CE. 1838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_WINDOWS_MOBILE 1839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) { 1840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "4"); 1841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "22"); 1842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "8"); 1846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "9"); 1847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "0"); 1851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "9"); 1852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); 1853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); 1854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_WINDOWS_MOBILE 1856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that we exit in error if the sharding values are not valid. 1858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef ShouldShardTest ShouldShardDeathTest; 1860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) { 1862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "4"); 1863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "4"); 1864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "4"); 1867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "-2"); 1868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, "5"); 1871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, ""); 1872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(index_var_, ""); 1875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv(total_var_, "5"); 1876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); 1877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ShouldRunTestOnShard is a partition when 5 1880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// shards are used. 1881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) { 1882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Choose an arbitrary number of tests and shards. 1883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int num_tests = 17; 1884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int num_shards = 5; 1885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Check partitioning: each test should be on exactly 1 shard. 1887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int test_id = 0; test_id < num_tests; test_id++) { 1888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int prev_selected_shard_index = -1; 1889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int shard_index = 0; shard_index < num_shards; shard_index++) { 1890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) { 1891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (prev_selected_shard_index < 0) { 1892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter prev_selected_shard_index = shard_index; 1893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } else { 1894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and " 1895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << shard_index << " are both selected to run test " << test_id; 1896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Check balance: This is not required by the sharding protocol, but is a 1902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // desirable property for performance. 1903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int shard_index = 0; shard_index < num_shards; shard_index++) { 1904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int num_tests_on_shard = 0; 1905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int test_id = 0; test_id < num_tests; test_id++) { 1906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter num_tests_on_shard += 1907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ShouldRunTestOnShard(num_shards, shard_index, test_id); 1908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(num_tests_on_shard, num_tests / num_shards); 1910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// For the same reason we are not explicitly testing everything in the 1914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Test class, there are no separate tests for the following classes 1915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// (except for some trivial cases): 1916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 1917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// TestCase, UnitTest, UnitTestResultPrinter. 1918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 1919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Similarly, there are no separate tests for the following macros: 1920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 1921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// TEST, TEST_F, RUN_ALL_TESTS 1922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(UnitTestTest, CanGetOriginalWorkingDir) { 1924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL); 1925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), ""); 1926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(UnitTestTest, ReturnsPlausibleTimestamp) { 1929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp()); 1930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis()); 1931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// When a property using a reserved key is supplied to this function, it 1934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// tests that a non-fatal failure is added, a fatal failure is not added, 1935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// and that the property is not recorded. 1936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestResult& test_result, const char* key) { 1938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, "1"), "Reserved key"); 1939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, test_result.test_property_count()) << "Property for key '" << key 1940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "' recorded unexpectedly."; 1941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 1944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* key) { 1945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); 1946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(test_info != NULL); 1947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(), 1948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter key); 1949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* key) { 1953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(test_case != NULL); 1955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter test_case->ad_hoc_test_result(), key); 1957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 1960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* key) { 1961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKey( 1962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest::GetInstance()->ad_hoc_test_result(), key); 1963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 1964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that property recording functions in UnitTest outside of tests 1966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// functions correcly. Creating a separate instance of UnitTest ensures it 1967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// is in a state similar to the UnitTest's singleton's between tests. 1968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass UnitTestRecordPropertyTest : 1969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public testing::internal::UnitTestRecordPropertyTestHelper { 1970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 1971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetUpTestCase() { 1972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "disabled"); 1974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "errors"); 1976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "failures"); 1978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "name"); 1980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "tests"); 1982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( 1983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "time"); 1984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Test::RecordProperty("test_case_key_1", "1"); 1986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); 1987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(test_case != NULL); 1988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count()); 1990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("test_case_key_1", 1991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter test_case->ad_hoc_test_result().GetTestProperty(0).key()); 1992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", 1993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter test_case->ad_hoc_test_result().GetTestProperty(0).value()); 1994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 1995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 1996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 1997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult has the expected property when added. 1998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) { 1999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_1", "1"); 2000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count()); 2002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", 2004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", 2006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult has multiple properties when added. 2010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) { 2011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_1", "1"); 2012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_2", "2"); 2013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", 2017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_2", 2021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2", unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestResult::RecordProperty() overrides values for duplicate keys. 2026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) { 2027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_1", "1"); 2028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_2", "2"); 2029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_1", "12"); 2030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTestRecordProperty("key_2", "22"); 2031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); 2033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_1", 2035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); 2036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("12", 2037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); 2038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("key_2", 2040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); 2041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("22", 2042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); 2043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(UnitTestRecordPropertyTest, 2046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddFailureInsideTestsWhenUsingTestCaseReservedKeys) { 2047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "name"); 2049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "value_param"); 2051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "type_param"); 2053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "status"); 2055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "time"); 2057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( 2058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "classname"); 2059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(UnitTestRecordPropertyTest, 2062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddRecordWithReservedKeysGeneratesCorrectPropertyList) { 2063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 2064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Test::RecordProperty("name", "1"), 2065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "'classname', 'name', 'status', 'time', 'type_param', and 'value_param'" 2066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " are reserved"); 2067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass UnitTestRecordPropertyTestEnvironment : public Environment { 2070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 2071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void TearDown() { 2072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "tests"); 2074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "failures"); 2076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "disabled"); 2078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "errors"); 2080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "name"); 2082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "timestamp"); 2084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "time"); 2086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( 2087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "random_seed"); 2088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This will test property recording outside of any test or test case. 2092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic Environment* record_property_env = 2093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); 2094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This group of tests is for predicate assertions (ASSERT_PRED*, etc) 2096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// of various arities. They do not attempt to be exhaustive. Rather, 2097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// view them as smoke tests that can be easily reviewed and verified. 2098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A more complete set of tests for predicate assertions can be found 2099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// in gtest_pred_impl_unittest.cc. 2100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// First, some predicates and predicate-formatters needed by the tests. 2102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Returns true iff the argument is an even number. 2104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool IsEven(int n) { 2105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return (n % 2) == 0; 2106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A functor that returns true iff the argument is an even number. 2109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstruct IsEvenFunctor { 2110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator()(int n) { return IsEven(n); } 2111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate-formatter function that asserts the argument is an even 2114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// number. 2115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult AssertIsEven(const char* expr, int n) { 2116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (IsEven(n)) { 2117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionSuccess(); 2118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 2121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << expr << " evaluates to " << n << ", which is not even."; 2122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionFailure(msg); 2123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate function that returns AssertionResult for use in 2126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// EXPECT/ASSERT_TRUE/FALSE. 2127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult ResultIsEven(int n) { 2128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (IsEven(n)) 2129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionSuccess() << n << " is even"; 2130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 2131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionFailure() << n << " is odd"; 2132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate function that returns AssertionResult but gives no 2135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// explanation why it succeeds. Needed for testing that 2136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// EXPECT/ASSERT_FALSE handles such functions correctly. 2137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult ResultIsEvenNoExplanation(int n) { 2138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (IsEven(n)) 2139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionSuccess(); 2140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 2141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionFailure() << n << " is odd"; 2142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate-formatter functor that asserts the argument is an even 2145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// number. 2146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstruct AssertIsEvenFunctor { 2147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult operator()(const char* expr, int n) { 2148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertIsEven(expr, n); 2149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Returns true iff the sum of the arguments is an even number. 2153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool SumIsEven2(int n1, int n2) { 2154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return IsEven(n1 + n2); 2155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A functor that returns true iff the sum of the arguments is an even 2158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// number. 2159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstruct SumIsEven3Functor { 2160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator()(int n1, int n2, int n3) { 2161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return IsEven(n1 + n2 + n3); 2162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate-formatter function that asserts the sum of the 2166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// arguments is an even number. 2167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult AssertSumIsEven4( 2168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* e1, const char* e2, const char* e3, const char* e4, 2169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n1, int n2, int n3, int n4) { 2170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int sum = n1 + n2 + n3 + n4; 2171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (IsEven(sum)) { 2172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionSuccess(); 2173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 2176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 2177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 2178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << ") evaluates to " << sum << ", which is not even."; 2179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionFailure(msg); 2180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A predicate-formatter functor that asserts the sum of the arguments 2183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// is an even number. 2184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstruct AssertSumIsEven5Functor { 2185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult operator()( 2186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* e1, const char* e2, const char* e3, const char* e4, 2187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* e5, int n1, int n2, int n3, int n4, int n5) { 2188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int sum = n1 + n2 + n3 + n4 + n5; 2189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (IsEven(sum)) { 2190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionSuccess(); 2191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 2194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 2195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << " (" 2196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5 2197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << ") evaluates to " << sum << ", which is not even."; 2198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return AssertionFailure(msg); 2199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests unary predicate assertions. 2204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests unary predicate assertions that don't use a custom formatter. 2206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Pred1Test, WithoutFormat) { 2207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Success cases. 2208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!"; 2209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(IsEven, 4); 2210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Failure cases. 2212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1(IsEven, 5) << "This failure is expected."; 2214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5), 2216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "evaluates to false"); 2217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests unary predicate assertions that use a custom formatter. 2220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Pred1Test, WithFormat) { 2221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Success cases. 2222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT1(AssertIsEven, 2); 2223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4) 2224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "This failure is UNEXPECTED!"; 2225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Failure cases. 2227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n = 5; 2228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n), 2229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "n evaluates to 5, which is not even."); 2230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected."; 2232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that unary predicate assertions evaluates their arguments 2236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// exactly once. 2237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(Pred1Test, SingleEvaluationOnFailure) { 2238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success case. 2239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int n = 0; 2240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1(IsEven, n++); 2241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n) << "The argument is not evaluated exactly once."; 2242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure case. 2244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++) 2246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "This failure is expected."; 2247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, n) << "The argument is not evaluated exactly once."; 2249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests predicate assertions whose arity is >= 2. 2253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests predicate assertions that don't use a custom formatter. 2255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredTest, WithoutFormat) { 2256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Success cases. 2257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!"; 2258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8); 2259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Failure cases. 2261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n1 = 1; 2262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n2 = 2; 2263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected."; 2265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4); 2268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "evaluates to false"); 2269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests predicate assertions that use a custom formatter. 2272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredTest, WithFormat) { 2273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Success cases. 2274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) << 2275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "This failure is UNEXPECTED!"; 2276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10); 2277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Failure cases. 2279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n1 = 1; 2280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n2 = 2; 2281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n3 = 4; 2282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int n4 = 6; 2283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4); 2285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "evaluates to 13, which is not even."); 2286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8) 2288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "This failure is expected."; 2289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that predicate assertions evaluates their arguments 2293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// exactly once. 2294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredTest, SingleEvaluationOnFailure) { 2295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success case. 2296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n1 = 0; 2297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n2 = 0; 2298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED2(SumIsEven2, n1++, n2++); 2299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 2300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 2301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Another success case. 2303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter n1 = n2 = 0; 2304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n3 = 0; 2305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n4 = 0; 2306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n5 = 0; 2307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter n1++, n2++, n3++, n4++, n5++) 2309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "This failure is UNEXPECTED!"; 2310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 2311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 2312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 2313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 2314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once."; 2315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure case. 2317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter n1 = n2 = n3 = 0; 2318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++) 2320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "This failure is expected."; 2321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 2322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 2323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 2324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 2325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Another failure case. 2327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter n1 = n2 = n3 = n4 = 0; 2328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++); 2330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "evaluates to 1, which is not even."); 2331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; 2332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; 2333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; 2334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; 2335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Some helper functions for testing using overloaded/template 2339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// functions with ASSERT_PREDn and EXPECT_PREDn. 2340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool IsPositive(double x) { 2342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x > 0; 2343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 2346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool IsNegative(T x) { 2347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x < 0; 2348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 2351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool GreaterThan(T1 x1, T2 x2) { 2352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x1 > x2; 2353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that overloaded functions can be used in *_PRED* as long as 2356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// their types are explicitly specified. 2357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredicateAssertionTest, AcceptsOverloadedFunction) { 2358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // C++Builder requires C-style casts rather than static_cast. 2359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1((bool (*)(int))(IsPositive), 5); // NOLINT 2360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0); // NOLINT 2361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that template functions can be used in *_PRED* as long as 2364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// their types are explicitly specified. 2365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredicateAssertionTest, AcceptsTemplateFunction) { 2366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1(IsNegative<int>, -5); 2367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Makes sure that we can handle templates with more than one 2368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // parameter. 2369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED2((GreaterThan<int, int>), 5, 0); 2370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Some helper functions for testing using overloaded/template 2374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn. 2375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult IsPositiveFormat(const char* /* expr */, int n) { 2377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return n > 0 ? AssertionSuccess() : 2378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionFailure(Message() << "Failure"); 2379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult IsPositiveFormat(const char* /* expr */, double x) { 2382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x > 0 ? AssertionSuccess() : 2383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionFailure(Message() << "Failure"); 2384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 2387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult IsNegativeFormat(const char* /* expr */, T x) { 2388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x < 0 ? AssertionSuccess() : 2389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionFailure(Message() << "Failure"); 2390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 2393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterAssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */, 2394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const T1& x1, const T2& x2) { 2395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x1 == x2 ? AssertionSuccess() : 2396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionFailure(Message() << "Failure"); 2397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that overloaded functions can be used in *_PRED_FORMAT* 2400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// without explicitly specifying their types. 2401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) { 2402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT1(IsPositiveFormat, 5); 2403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0); 2404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that template functions can be used in *_PRED_FORMAT* without 2407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// explicitly specifying their types. 2408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) { 2409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT1(IsNegativeFormat, -5); 2410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3); 2411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests string assertions. 2415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STREQ with non-NULL arguments. 2417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STREQ) { 2418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char * const p1 = "good"; 2419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(p1, p1); 2420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Let p2 have the same content as p1, but be at a different address. 2422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char p2[] = "good"; 2423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(p1, p2); 2424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"), 2426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: \"bad\""); 2427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STREQ with NULL arguments. 2430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STREQ_Null) { 2431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(static_cast<const char *>(NULL), NULL); 2432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"), 2433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "non-null"); 2434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STREQ with NULL arguments. 2437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STREQ_Null2) { 2438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL), 2439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "non-null"); 2440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STRNE. 2443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STRNE) { 2444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("hi", "Hi"); 2445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("Hi", NULL); 2446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE(NULL, "Hi"); 2447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("", NULL); 2448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE(NULL, ""); 2449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("", "Hi"); 2450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("Hi", ""); 2451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"), 2452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\"Hi\" vs \"Hi\""); 2453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STRCASEEQ. 2456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STRCASEEQ) { 2457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASEEQ("hi", "Hi"); 2458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL); 2459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASEEQ("", ""); 2461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"), 2462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(ignoring case)"); 2463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_STRCASENE. 2466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, ASSERT_STRCASENE) { 2467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("hi1", "Hi2"); 2468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("Hi", NULL); 2469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE(NULL, "Hi"); 2470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("", NULL); 2471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE(NULL, ""); 2472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("", "Hi"); 2473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("Hi", ""); 2474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"), 2475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(ignoring case)"); 2476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests *_STREQ on wide strings. 2479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, STREQ_Wide) { 2480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // NULL strings. 2481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL); 2482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Empty strings. 2484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(L"", L""); 2485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Non-null vs NULL. 2487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL), 2488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "non-null"); 2489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Equal strings. 2491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(L"Hi", L"Hi"); 2492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Unequal strings. 2494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"), 2495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Abc"); 2496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Strings containing wide characters. 2498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"), 2499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "abc"); 2500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The streaming variation. 2502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(L"abc\x8119", L"abc\x8121") << "Expected failure"; 2504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "Expected failure"); 2505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests *_STRNE on wide strings. 2508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StringAssertionTest, STRNE_Wide) { 2509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // NULL strings. 2510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL); 2512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 2513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Empty strings. 2515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""), 2516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "L\"\""); 2517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Non-null vs NULL. 2519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE(L"non-null", NULL); 2520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Equal strings. 2522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"), 2523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "L\"Hi\""); 2524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Unequal strings. 2526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE(L"abc", L"Abc"); 2527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Strings containing wide characters. 2529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"), 2530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "abc"); 2531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The streaming variation. 2533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE(L"abc\x8119", L"abc\x8120") << "This shouldn't happen"; 2534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests for ::testing::IsSubstring(). 2537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring() returns the correct result when the input 2539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const char*. 2540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, ReturnsCorrectResultForCString) { 2541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", NULL, "a")); 2542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", "b", NULL)); 2543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", "needle", "haystack")); 2544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL)); 2546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", "needle", "two needles")); 2547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring() returns the correct result when the input 2550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const wchar_t*. 2551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, ReturnsCorrectResultForWideCString) { 2552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", kNull, L"a")); 2553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", L"b", kNull)); 2554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack")); 2555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL)); 2557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles")); 2558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring() generates the correct message when the input 2561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const char*. 2562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, GeneratesCorrectMessageForCString) { 2563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Value of: needle_expr\n" 2564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: \"needle\"\n" 2565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: a substring of haystack_expr\n" 2566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: \"haystack\"", 2567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter IsSubstring("needle_expr", "haystack_expr", 2568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "needle", "haystack").failure_message()); 2569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring returns the correct result when the input 2572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::string. 2573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, ReturnsCorrectResultsForStdString) { 2574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob")); 2575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world"))); 2576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STD_WSTRING 2579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring returns the correct result when the input 2580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::wstring. 2581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) { 2582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 2583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 2584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsSubstring() generates the correct message when the input 2587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::wstring. 2588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsSubstringTest, GeneratesCorrectMessageForWstring) { 2589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Value of: needle_expr\n" 2590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: L\"needle\"\n" 2591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: a substring of haystack_expr\n" 2592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: L\"haystack\"", 2593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter IsSubstring( 2594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "needle_expr", "haystack_expr", 2595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::std::wstring(L"needle"), L"haystack").failure_message()); 2596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_STD_WSTRING 2599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests for ::testing::IsNotSubstring(). 2601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring() returns the correct result when the input 2603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const char*. 2604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, ReturnsCorrectResultForCString) { 2605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack")); 2606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles")); 2607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring() returns the correct result when the input 2610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const wchar_t*. 2611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) { 2612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack")); 2613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles")); 2614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring() generates the correct message when the input 2617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is const wchar_t*. 2618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) { 2619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Value of: needle_expr\n" 2620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: L\"needle\"\n" 2621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: not a substring of haystack_expr\n" 2622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: L\"two needles\"", 2623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter IsNotSubstring( 2624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "needle_expr", "haystack_expr", 2625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"needle", L"two needles").failure_message()); 2626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring returns the correct result when the input 2629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::string. 2630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) { 2631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob")); 2632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world"))); 2633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring() generates the correct message when the input 2636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::string. 2637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) { 2638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Value of: needle_expr\n" 2639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: \"needle\"\n" 2640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: not a substring of haystack_expr\n" 2641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: \"two needles\"", 2642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter IsNotSubstring( 2643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "needle_expr", "haystack_expr", 2644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::std::string("needle"), "two needles").failure_message()); 2645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STD_WSTRING 2648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsNotSubstring returns the correct result when the input 2650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// argument type is ::std::wstring. 2651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) { 2652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE( 2653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles")); 2654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack"))); 2655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_STD_WSTRING 2658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests floating-point assertions. 2660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename RawType> 2662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass FloatingPointTest : public Test { 2663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 2664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Pre-calculated numbers to be used by the tests. 2665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter struct TestValues { 2666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType close_to_positive_zero; 2667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType close_to_negative_zero; 2668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType further_from_negative_zero; 2669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType close_to_one; 2671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType further_from_one; 2672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType infinity; 2674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType close_to_infinity; 2675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType further_from_infinity; 2676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType nan1; 2678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter RawType nan2; 2679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 2680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter typedef typename testing::internal::FloatingPoint<RawType> Floating; 2682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter typedef typename Floating::Bits Bits; 2683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 2685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const size_t max_ulps = Floating::kMaxUlps; 2686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The bits that represent 0.0. 2688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Bits zero_bits = Floating(0).bits(); 2689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Makes some numbers close to 0.0. 2691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.close_to_positive_zero = Floating::ReinterpretBits( 2692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter zero_bits + max_ulps/2); 2693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.close_to_negative_zero = -Floating::ReinterpretBits( 2694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter zero_bits + max_ulps - max_ulps/2); 2695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.further_from_negative_zero = -Floating::ReinterpretBits( 2696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter zero_bits + max_ulps + 1 - max_ulps/2); 2697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The bits that represent 1.0. 2699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Bits one_bits = Floating(1).bits(); 2700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Makes some numbers close to 1.0. 2702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps); 2703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.further_from_one = Floating::ReinterpretBits( 2704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter one_bits + max_ulps + 1); 2705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // +infinity. 2707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.infinity = Floating::Infinity(); 2708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The bits that represent +infinity. 2710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Bits infinity_bits = Floating(values_.infinity).bits(); 2711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Makes some numbers close to infinity. 2713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.close_to_infinity = Floating::ReinterpretBits( 2714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter infinity_bits - max_ulps); 2715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.further_from_infinity = Floating::ReinterpretBits( 2716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter infinity_bits - max_ulps - 1); 2717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Makes some NAN's. Sets the most significant bit of the fraction so that 2719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // our NaN's are quiet; trying to process a signaling NaN would raise an 2720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // exception if our environment enables floating point exceptions. 2721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask 2722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1); 2723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask 2724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200); 2725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void TestSize() { 2728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(RawType), sizeof(Bits)); 2729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 2730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static TestValues values_; 2732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 2733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename RawType> 2735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypename FloatingPointTest<RawType>::TestValues 2736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FloatingPointTest<RawType>::values_; 2737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Instantiates FloatingPointTest for testing *_FLOAT_EQ. 2739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef FloatingPointTest<float> FloatTest; 2740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the size of Float::Bits matches the size of float. 2742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, Size) { 2743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestSize(); 2744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing with +0 and -0. 2747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, Zeros) { 2748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(0.0, -0.0); 2749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0), 2750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.0"); 2751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5), 2752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.5"); 2753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers close to 0. 2756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 2757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This ensures that *_FLOAT_EQ handles the sign correctly and no 2758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// overflow occurs when comparing numbers whose absolute value is very 2759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// small. 2760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, AlmostZeros) { 2761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // In C++Builder, names within local classes (such as used by 2762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 2763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // scoping class. Use a static local alias as a workaround. 2764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We use the assignment syntax since some compilers, like Sun Studio, 2765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // don't allow initializing references using construction syntax 2766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (parentheses). 2767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const FloatTest::TestValues& v = this->values_; 2768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero); 2770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero); 2771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 2772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FLOAT_EQ(v.close_to_positive_zero, 2775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.further_from_negative_zero); 2776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "v.further_from_negative_zero"); 2777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers close to each other. 2780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, SmallDiff) { 2781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(1.0, values_.close_to_one); 2782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one), 2783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "values_.further_from_one"); 2784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers far apart. 2787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, LargeDiff) { 2788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0), 2789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "3.0"); 2790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing with infinity. 2793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 2794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This ensures that no overflow occurs when comparing numbers whose 2795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// absolute value is very large. 2796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, Infinity) { 2797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity); 2798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity); 2799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN 2800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 2801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity), 2802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "-values_.infinity"); 2803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This is interesting as the representations of infinity and nan1 2805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // are only 1 DLP apart. 2806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1), 2807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "values_.nan1"); 2808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN 2809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that comparing with NAN always returns false. 2812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, NaN) { 2813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN 2814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Nokia's STLport crashes if we try to output infinity or NaN. 2815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // In C++Builder, names within local classes (such as used by 2817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 2818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // scoping class. Use a static local alias as a workaround. 2819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We use the assignment syntax since some compilers, like Sun Studio, 2820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // don't allow initializing references using construction syntax 2821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (parentheses). 2822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const FloatTest::TestValues& v = this->values_; 2823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1), 2825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.nan1"); 2826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2), 2827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.nan2"); 2828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1), 2829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.nan1"); 2830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity), 2832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.infinity"); 2833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN 2834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that *_FLOAT_EQ are reflexive. 2837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, Reflexive) { 2838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(0.0, 0.0); 2839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(1.0, 1.0); 2840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FLOAT_EQ(values_.infinity, values_.infinity); 2841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that *_FLOAT_EQ are commutative. 2844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, Commutative) { 2845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one). 2846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(values_.close_to_one, 1.0); 2847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one). 2849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0), 2850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.0"); 2851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_NEAR. 2854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, EXPECT_NEAR) { 2855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NEAR(-1.0f, -1.1f, 0.2f); 2856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NEAR(2.0f, 3.0f, 1.0f); 2857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 2858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "The difference between 1.0f and 1.5f is 0.5, " 2859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "which exceeds 0.25f"); 2860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To work around a bug in gcc 2.95.0, there is intentionally no 2861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // space after the first comma in the previous line. 2862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_NEAR. 2865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, ASSERT_NEAR) { 2866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NEAR(-1.0f, -1.1f, 0.2f); 2867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NEAR(2.0f, 3.0f, 1.0f); 2868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f), // NOLINT 2869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "The difference between 1.0f and 1.5f is 0.5, " 2870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "which exceeds 0.25f"); 2871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To work around a bug in gcc 2.95.0, there is intentionally no 2872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // space after the first comma in the previous line. 2873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the cases where FloatLE() should succeed. 2876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, FloatLESucceeds) { 2877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2, 2878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2, 2879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // or when val1 is greater than, but almost equals to, val2. 2881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f); 2882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the cases where FloatLE() should fail. 2885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FloatTest, FloatLEFails) { 2886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // When val1 is greater than val2 by a large margin, 2887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f), 2888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(2.0f) <= (1.0f)"); 2889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // or by a small yet non-negligible margin, 2891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f); 2893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.further_from_one) <= (1.0f)"); 2894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 2896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 2897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // C++Builder gives bad results for ordered comparisons involving NaNs 2898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // due to compiler bugs. 2899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity); 2901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.nan1) <= (values_.infinity)"); 2902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 2903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1); 2904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(-values_.infinity) <= (values_.nan1)"); 2905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1); 2907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.nan1) <= (values_.nan1)"); 2908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 2909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Instantiates FloatingPointTest for testing *_DOUBLE_EQ. 2912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef FloatingPointTest<double> DoubleTest; 2913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the size of Double::Bits matches the size of double. 2915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, Size) { 2916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestSize(); 2917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing with +0 and -0. 2920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, Zeros) { 2921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(0.0, -0.0); 2922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0), 2923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.0"); 2924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0), 2925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.0"); 2926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers close to 0. 2929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 2930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This ensures that *_DOUBLE_EQ handles the sign correctly and no 2931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// overflow occurs when comparing numbers whose absolute value is very 2932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// small. 2933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, AlmostZeros) { 2934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // In C++Builder, names within local classes (such as used by 2935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 2936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // scoping class. Use a static local alias as a workaround. 2937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We use the assignment syntax since some compilers, like Sun Studio, 2938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // don't allow initializing references using construction syntax 2939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (parentheses). 2940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const DoubleTest::TestValues& v = this->values_; 2941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero); 2943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero); 2944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero); 2945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 2947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_DOUBLE_EQ(v.close_to_positive_zero, 2948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter v.further_from_negative_zero); 2949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "v.further_from_negative_zero"); 2950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers close to each other. 2953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, SmallDiff) { 2954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(1.0, values_.close_to_one); 2955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one), 2956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "values_.further_from_one"); 2957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing numbers far apart. 2960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, LargeDiff) { 2961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0), 2962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "3.0"); 2963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests comparing with infinity. 2966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 2967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This ensures that no overflow occurs when comparing numbers whose 2968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// absolute value is very large. 2969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, Infinity) { 2970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity); 2971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity); 2972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN 2973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 2974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity), 2975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "-values_.infinity"); 2976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This is interesting as the representations of infinity_ and nan1_ 2978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // are only 1 DLP apart. 2979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1), 2980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "values_.nan1"); 2981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN 2982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 2983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that comparing with NAN always returns false. 2985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, NaN) { 2986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN 2987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // In C++Builder, names within local classes (such as used by 2988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the 2989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // scoping class. Use a static local alias as a workaround. 2990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We use the assignment syntax since some compilers, like Sun Studio, 2991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // don't allow initializing references using construction syntax 2992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (parentheses). 2993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const DoubleTest::TestValues& v = this->values_; 2994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 2995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 2996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1), 2997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.nan1"); 2998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2"); 2999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1"); 3000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity), 3001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "v.infinity"); 3002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN 3003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that *_DOUBLE_EQ are reflexive. 3006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, Reflexive) { 3007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(0.0, 0.0); 3008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(1.0, 1.0); 3009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN 3010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 3011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity); 3012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN 3013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that *_DOUBLE_EQ are commutative. 3016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, Commutative) { 3017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one). 3018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0); 3019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one). 3021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0), 3022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1.0"); 3023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_NEAR. 3026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, EXPECT_NEAR) { 3027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NEAR(-1.0, -1.1, 0.2); 3028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NEAR(2.0, 3.0, 1.0); 3029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25), // NOLINT 3030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "The difference between 1.0 and 1.5 is 0.5, " 3031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "which exceeds 0.25"); 3032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To work around a bug in gcc 2.95.0, there is intentionally no 3033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // space after the first comma in the previous statement. 3034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_NEAR. 3037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, ASSERT_NEAR) { 3038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NEAR(-1.0, -1.1, 0.2); 3039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NEAR(2.0, 3.0, 1.0); 3040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25), // NOLINT 3041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "The difference between 1.0 and 1.5 is 0.5, " 3042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "which exceeds 0.25"); 3043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To work around a bug in gcc 2.95.0, there is intentionally no 3044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // space after the first comma in the previous statement. 3045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the cases where DoubleLE() should succeed. 3048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, DoubleLESucceeds) { 3049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2, 3050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2, 3051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // or when val1 is greater than, but almost equals to, val2. 3053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0); 3054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the cases where DoubleLE() should fail. 3057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DoubleTest, DoubleLEFails) { 3058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // When val1 is greater than val2 by a large margin, 3059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0), 3060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(2.0) <= (1.0)"); 3061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // or by a small yet non-negligible margin, 3063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 3064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0); 3065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.further_from_one) <= (1.0)"); 3066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 3068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Nokia's STLport crashes if we try to output infinity or NaN. 3069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // C++Builder gives bad results for ordered comparisons involving NaNs 3070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // due to compiler bugs. 3071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 3072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity); 3073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.nan1) <= (values_.infinity)"); 3074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 3075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1); 3076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, " (-values_.infinity) <= (values_.nan1)"); 3077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 3078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1); 3079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(values_.nan1) <= (values_.nan1)"); 3080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) 3081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that a test or test case whose name starts with DISABLED_ is 3085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// not run. 3086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A test whose name starts with DISABLED_. 3088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Should not run. 3089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(DisabledTest, DISABLED_TestShouldNotRun) { 3090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Disabled test should not be run."; 3091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A test whose name does not start with DISABLED_. 3094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Should run. 3095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(DisabledTest, NotDISABLED_TestShouldRun) { 3096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, 1); 3097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A test case whose name starts with DISABLED_. 3100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Should not run. 3101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(DISABLED_TestCase, TestShouldNotRun) { 3102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 3103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A test case and test whose names start with DISABLED_. 3106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Should not run. 3107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) { 3108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Test in disabled test case should not be run."; 3109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Check that when all tests in a test case are disabled, SetupTestCase() and 3112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// TearDownTestCase() are not called. 3113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass DisabledTestsTest : public Test { 3114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 3115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetUpTestCase() { 3116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: All tests disabled in test case. " 3117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "SetupTestCase() should not be called."; 3118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void TearDownTestCase() { 3121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: All tests disabled in test case. " 3122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "TearDownTestCase() should not be called."; 3123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) { 3127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Disabled test should not be run."; 3128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) { 3131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Disabled test should not be run."; 3132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that disabled typed tests aren't run. 3135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_TYPED_TEST 3137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 3139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TypedTest : public Test { 3140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef testing::Types<int, double> NumericTypes; 3143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_CASE(TypedTest, NumericTypes); 3144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST(TypedTest, DISABLED_ShouldNotRun) { 3146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Disabled typed test should not run."; 3147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 3150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass DISABLED_TypedTest : public Test { 3151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes); 3154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST(DISABLED_TypedTest, ShouldNotRun) { 3156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: Disabled typed test should not run."; 3157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_TYPED_TEST 3160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that disabled type-parameterized tests aren't run. 3162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_TYPED_TEST_P 3164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 3166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TypedTestP : public Test { 3167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_CASE_P(TypedTestP); 3170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) { 3172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: " 3173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Disabled type-parameterized test should not run."; 3174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterREGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun); 3177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterINSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes); 3179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 3181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass DISABLED_TypedTestP : public Test { 3182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_CASE_P(DISABLED_TypedTestP); 3185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) { 3187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Unexpected failure: " 3188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Disabled type-parameterized test should not run."; 3189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterREGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun); 3192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterINSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes); 3194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_TYPED_TEST_P 3196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that assertion macros evaluate their arguments exactly once. 3198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass SingleEvaluationTest : public Test { 3200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: // Must be public and not protected due to a bug in g++ 3.4.2. 3201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This helper function is needed by the FailedASSERT_STREQ test 3202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // below. It's public to work around C++Builder's bug with scoping local 3203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // classes. 3204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void CompareAndIncrementCharPtrs() { 3205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(p1_++, p2_++); 3206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This helper function is needed by the FailedASSERT_NE test below. It's 3209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // public to work around C++Builder's bug with scoping local classes. 3210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void CompareAndIncrementInts() { 3211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NE(a_++, b_++); 3212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 3215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SingleEvaluationTest() { 3216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter p1_ = s1_; 3217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter p2_ = s2_; 3218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a_ = 0; 3219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter b_ = 0; 3220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char* const s1_; 3223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char* const s2_; 3224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char* p1_; 3225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char* p2_; 3226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int a_; 3228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int b_; 3229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst char* const SingleEvaluationTest::s1_ = "01234"; 3232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst char* const SingleEvaluationTest::s2_ = "abcde"; 3233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst char* SingleEvaluationTest::p1_; 3234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst char* SingleEvaluationTest::p2_; 3235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterint SingleEvaluationTest::a_; 3236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterint SingleEvaluationTest::b_; 3237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that when ASSERT_STREQ fails, it evaluates its arguments 3239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// exactly once. 3240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SingleEvaluationTest, FailedASSERT_STREQ) { 3241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(), 3242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p2_++"); 3243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s1_ + 1, p1_); 3244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s2_ + 1, p2_); 3245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that string assertion arguments are evaluated exactly once. 3248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SingleEvaluationTest, ASSERT_STR) { 3249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_STRNE 3250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE(p1_++, p2_++); 3251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s1_ + 1, p1_); 3252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s2_ + 1, p2_); 3253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_STRCASEEQ 3255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++), 3256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "ignoring case"); 3257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s1_ + 2, p1_); 3258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(s2_ + 2, p2_); 3259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that when ASSERT_NE fails, it evaluates its arguments exactly 3262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// once. 3263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SingleEvaluationTest, FailedASSERT_NE) { 3264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(), 3265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(a_++) != (b_++)"); 3266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, a_); 3267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, b_); 3268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that assertion arguments are evaluated exactly once. 3271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SingleEvaluationTest, OtherCases) { 3272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_TRUE 3273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(0 == a_++); // NOLINT 3274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, a_); 3275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_TRUE 3277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++"); 3278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, a_); 3279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_GT 3281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GT(a_++, b_++); 3282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3, a_); 3283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, b_); 3284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_LT 3286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)"); 3287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(4, a_); 3288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, b_); 3289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful ASSERT_TRUE 3291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(0 < a_++); // NOLINT 3292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(5, a_); 3293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful ASSERT_GT 3295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GT(a_++, b_++); 3296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(6, a_); 3297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3, b_); 3298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 3301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ThrowAnInteger() { 3303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter throw 1; 3304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that assertion arguments are evaluated exactly once. 3307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SingleEvaluationTest, ExceptionTests) { 3308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_THROW 3309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW({ // NOLINT 3310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a_++; 3311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ThrowAnInteger(); 3312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, int); 3313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, a_); 3314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_THROW, throws different 3316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT 3317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a_++; 3318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ThrowAnInteger(); 3319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, bool), "throws a different type"); 3320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, a_); 3321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_THROW, throws nothing 3323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing"); 3324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3, a_); 3325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_NO_THROW 3327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(a_++); 3328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(4, a_); 3329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_NO_THROW 3331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT 3332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a_++; 3333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ThrowAnInteger(); 3334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }), "it throws"); 3335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(5, a_); 3336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // successful EXPECT_ANY_THROW 3338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW({ // NOLINT 3339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter a_++; 3340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ThrowAnInteger(); 3341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }); 3342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(6, a_); 3343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // failed EXPECT_ANY_THROW 3345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't"); 3346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(7, a_); 3347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 3350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE. 3352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass NoFatalFailureTest : public Test { 3353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 3354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void Succeeds() {} 3355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void FailsNonFatal() { 3356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "some non-fatal failure"; 3357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void Fails() { 3359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "some fatal failure"; 3360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void DoAssertNoFatalFailureOnFails() { 3363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_FATAL_FAILURE(Fails()); 3364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "shold not reach here."; 3365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void DoExpectNoFatalFailureOnFails() { 3368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(Fails()); 3369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "other failure"; 3370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(NoFatalFailureTest, NoFailure) { 3374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(Succeeds()); 3375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_FATAL_FAILURE(Succeeds()); 3376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(NoFatalFailureTest, NonFatalIsNoFailure) { 3379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 3380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(FailsNonFatal()), 3381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "some non-fatal failure"); 3382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 3383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_FATAL_FAILURE(FailsNonFatal()), 3384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "some non-fatal failure"); 3385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) { 3388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray gtest_failures; 3389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 3390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter DoAssertNoFatalFailureOnFails(); 3392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, gtest_failures.size()); 3394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kFatalFailure, 3395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).type()); 3396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kFatalFailure, 3397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).type()); 3398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 3399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).message()); 3400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 3401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).message()); 3402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) { 3405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray gtest_failures; 3406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 3407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter DoExpectNoFatalFailureOnFails(); 3409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3, gtest_failures.size()); 3411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kFatalFailure, 3412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).type()); 3413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kNonFatalFailure, 3414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).type()); 3415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kNonFatalFailure, 3416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(2).type()); 3417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", 3418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).message()); 3419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", 3420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).message()); 3421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure", 3422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(2).message()); 3423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(NoFatalFailureTest, MessageIsStreamable) { 3426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestPartResultArray gtest_failures; 3427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 3428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); 3429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message"; 3430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2, gtest_failures.size()); 3432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kNonFatalFailure, 3433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).type()); 3434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(TestPartResult::kNonFatalFailure, 3435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).type()); 3436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo", 3437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(0).message()); 3438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message", 3439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter gtest_failures.GetTestPartResult(1).message()); 3440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests non-string assertions. 3443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EqFailure(), used for implementing *EQ* assertions. 3445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, EqFailure) { 3446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string foo_val("5"), bar_val("6"); 3447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string msg1( 3448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EqFailure("foo", "bar", foo_val, bar_val, false) 3449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter .failure_message()); 3450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 3451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: bar\n" 3452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 6\n" 3453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: foo\n" 3454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: 5", 3455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg1.c_str()); 3456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string msg2( 3458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EqFailure("foo", "6", foo_val, bar_val, false) 3459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter .failure_message()); 3460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 3461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 6\n" 3462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: foo\n" 3463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: 5", 3464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg2.c_str()); 3465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string msg3( 3467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EqFailure("5", "bar", foo_val, bar_val, false) 3468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter .failure_message()); 3469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 3470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: bar\n" 3471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 6\n" 3472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 5", 3473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg3.c_str()); 3474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string msg4( 3476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EqFailure("5", "6", foo_val, bar_val, false).failure_message()); 3477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 3478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 6\n" 3479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 5", 3480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg4.c_str()); 3481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string msg5( 3483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EqFailure("foo", "bar", 3484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::string("\"x\""), std::string("\"y\""), 3485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter true).failure_message()); 3486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ( 3487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: bar\n" 3488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: \"y\"\n" 3489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: foo (ignoring case)\n" 3490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: \"x\"", 3491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg5.c_str()); 3492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests AppendUserMessage(), used for implementing the *EQ* macros. 3495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AppendUserMessage) { 3496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string foo("foo"); 3497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 3499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("foo", 3500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AppendUserMessage(foo, msg).c_str()); 3501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << "bar"; 3503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("foo\nbar", 3504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AppendUserMessage(foo, msg).c_str()); 3505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 3508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Silences warnings: "Condition is always true", "Unreachable code" 3509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option push -w-ccc -w-rch 3510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 3511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_TRUE. 3513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_TRUE) { 3514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(2 > 1); // NOLINT 3515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1), 3516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2 < 1"); 3517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult. 3520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AssertTrueWithAssertionResult) { 3521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(ResultIsEven(2)); 3522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ 3523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder. 3524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)), 3525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEven(3)\n" 3526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: false (3 is odd)\n" 3527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: true"); 3528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 3529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(ResultIsEvenNoExplanation(2)); 3530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)), 3531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEvenNoExplanation(3)\n" 3532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: false (3 is odd)\n" 3533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: true"); 3534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_FALSE. 3537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_FALSE) { 3538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(2 < 1); // NOLINT 3539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1), 3540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 2 > 1\n" 3541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true\n" 3542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 3543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult. 3546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AssertFalseWithAssertionResult) { 3547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(ResultIsEven(3)); 3548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ 3549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder. 3550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)), 3551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEven(2)\n" 3552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true (2 is even)\n" 3553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 3554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 3555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(ResultIsEvenNoExplanation(3)); 3556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)), 3557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEvenNoExplanation(2)\n" 3558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true\n" 3559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 3560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 3563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Restores warnings after previous "#pragma option push" supressed them 3564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option pop 3565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 3566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ASSERT_EQ on double values. The purpose is to make 3568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// sure that the specialization we did for integer and anonymous enums 3569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// isn't used for double arguments. 3570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, ASSERT_EQ_Double) { 3571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 3572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(5.6, 5.6); 3573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 3575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2), 3576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "5.1"); 3577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_EQ. 3580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_EQ) { 3581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(5, 2 + 3); 3582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3), 3583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 2*3\n" 3584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 6\n" 3585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 5"); 3586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_EQ(NULL, pointer). 3589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_CAN_COMPARE_NULL 3590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_EQ_NULL) { 3591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 3592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* p = NULL; 3593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Some older GCC versions may issue a spurious waring in this or the next 3594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // assertion statement. This warning should not be suppressed with 3595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // static_cast since the test verifies the ability to use bare NULL as the 3596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // expected parameter to the macro. 3597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(NULL, p); 3598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 3600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int n = 0; 3601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n), 3602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: &n\n"); 3603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_CAN_COMPARE_NULL 3605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be 3607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// treated as a null pointer by the compiler, we need to make sure 3608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as 3609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ASSERT_EQ(static_cast<void*>(NULL), non_pointer). 3610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, ASSERT_EQ_0) { 3611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 3612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 3614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, n); 3615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 3617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6), 3618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 0"); 3619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_NE. 3622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_NE) { 3623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NE(6, 7); 3624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'), 3625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ('a') != ('a'), " 3626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 3627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_LE. 3630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_LE) { 3631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LE(2, 3); 3632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LE(2, 2); 3633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0), 3634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) <= (0), actual: 2 vs 0"); 3635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_LT. 3638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_LT) { 3639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(2, 3); 3640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2), 3641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) < (2), actual: 2 vs 2"); 3642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_GE. 3645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_GE) { 3646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GE(2, 1); 3647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GE(2, 2); 3648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3), 3649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) >= (3), actual: 2 vs 3"); 3650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_GT. 3653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_GT) { 3654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GT(2, 1); 3655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2), 3656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) > (2), actual: 2 vs 2"); 3657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 3660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ThrowNothing() {} 3662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_THROW. 3664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_THROW) { 3665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_THROW(ThrowAnInteger(), int); 3666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifndef __BORLANDC__ 3668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder 2007 and 2009. 3670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE( 3671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_THROW(ThrowAnInteger(), bool), 3672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowAnInteger() throws an exception of type bool.\n" 3673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: it throws a different type."); 3674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 3675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE( 3677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_THROW(ThrowNothing(), bool), 3678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowNothing() throws an exception of type bool.\n" 3679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: it throws nothing."); 3680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_NO_THROW. 3683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_NO_THROW) { 3684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_THROW(ThrowNothing()); 3685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()), 3686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowAnInteger() doesn't throw an exception." 3687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\n Actual: it throws."); 3688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ASSERT_ANY_THROW. 3691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ASSERT_ANY_THROW) { 3692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_ANY_THROW(ThrowAnInteger()); 3693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE( 3694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_ANY_THROW(ThrowNothing()), 3695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowNothing() throws an exception.\n" 3696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: it doesn't."); 3697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 3700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Makes sure we deal with the precedence of <<. This test should 3702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// compile. 3703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AssertPrecedence) { 3704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1 < 2, true); 3705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool false_value = false; 3706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(true && false_value, false); 3707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A subroutine used by the following test. 3710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestEq1(int x) { 3711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, x); 3712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests calling a test subroutine that's not part of a fixture. 3715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, NonFixtureSubroutine) { 3716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(TestEq1(2), 3717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: x"); 3718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// An uncopyable class. 3721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass Uncopyable { 3722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 3723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit Uncopyable(int a_value) : value_(a_value) {} 3724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int value() const { return value_; } 3726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator==(const Uncopyable& rhs) const { 3727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return value() == rhs.value(); 3728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 3729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 3730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This constructor deliberately has no implementation, as we don't 3731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // want this class to be copyable. 3732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable(const Uncopyable&); // NOLINT 3733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int value_; 3735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) { 3738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << value.value(); 3739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterbool IsPositiveUncopyable(const Uncopyable& x) { 3743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return x.value() > 0; 3744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A subroutine used by the following test. 3747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestAssertNonPositive() { 3748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable y(-1); 3749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(IsPositiveUncopyable, y); 3750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A subroutine used by the following test. 3752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestAssertEqualsUncopyable() { 3753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable x(5); 3754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable y(-1); 3755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(x, y); 3756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that uncopyable objects can be used in assertions. 3759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AssertWorksWithUncopyableObject) { 3760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable x(5); 3761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_PRED1(IsPositiveUncopyable, x); 3762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(x, x); 3763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(TestAssertNonPositive(), 3764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 3765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(), 3766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 3767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that uncopyable objects can be used in expects. 3770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, ExpectWorksWithUncopyableObject) { 3771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable x(5); 3772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED1(IsPositiveUncopyable, x); 3773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Uncopyable y(-1); 3774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y), 3775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); 3776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(x, x); 3777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), 3778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); 3779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterenum NamedEnum { 3782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kE1 = 0, 3783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kE2 = 1 3784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, NamedEnum) { 3787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kE1, kE1); 3788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(kE1, kE2); 3789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0"); 3790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1"); 3791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The version of gcc used in XCode 2.2 has a bug and doesn't allow 3794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// anonymous enums in assertions. Therefore the following test is not 3795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// done on Mac. 3796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Sun Studio and HP aCC also reject this code. 3797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC) 3798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using assertions with anonymous enums. 3800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterenum { 3801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kCaseA = -1, 3802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# if GTEST_OS_LINUX 3804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We want to test the case where the size of the anonymous enum is 3806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // larger than sizeof(int), to make sure our implementation of the 3807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // assertions doesn't truncate the enums. However, MSVC 3808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // (incorrectly) doesn't allow an enum value to exceed the range of 3809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // an int, so this has to be conditionally compiled. 3810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // 3811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // On Linux, kCaseB and kCaseA have the same value when truncated to 3812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // int size. We want to test whether this will confuse the 3813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // assertions. 3814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kCaseB = testing::internal::kMaxBiggestInt, 3815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# else 3817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kCaseB = INT_MAX, 3819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif // GTEST_OS_LINUX 3821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter kCaseC = 42 3823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 3824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionTest, AnonymousEnum) { 3826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# if GTEST_OS_LINUX 3827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB)); 3829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif // GTEST_OS_LINUX 3831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kCaseA, kCaseA); 3833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(kCaseA, kCaseB); 3834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(kCaseA, kCaseB); 3835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(kCaseA, kCaseB); 3836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GT(kCaseB, kCaseA); 3837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(kCaseA, kCaseA); 3838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB), 3839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(kCaseA) >= (kCaseB)"); 3840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC), 3841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "-1 vs 42"); 3842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(kCaseA, kCaseA); 3844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NE(kCaseA, kCaseB); 3845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(kCaseA, kCaseB); 3846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LE(kCaseA, kCaseB); 3847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GT(kCaseB, kCaseA); 3848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GE(kCaseA, kCaseA); 3849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifndef __BORLANDC__ 3851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder. 3853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB), 3854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: kCaseB"); 3855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 3856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Actual: 42"); 3857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 3858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), 3860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: -1"); 3861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // !GTEST_OS_MAC && !defined(__SUNPRO_CC) 3864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS 3866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic HRESULT UnexpectedHRESULTFailure() { 3868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return E_UNEXPECTED; 3869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic HRESULT OkHRESULTSuccess() { 3872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return S_OK; 3873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic HRESULT FalseHRESULTSuccess() { 3876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return S_FALSE; 3877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// HRESULT assertion tests test both zero and non-zero 3880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// success codes as well as failure message for each. 3881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 3882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Windows CE doesn't support message texts. 3883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) { 3884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_SUCCEEDED(S_OK); 3885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_SUCCEEDED(S_FALSE); 3886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 3888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 3889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x8000FFFF"); 3890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) { 3893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_SUCCEEDED(S_OK); 3894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_SUCCEEDED(S_FALSE); 3895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), 3897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" 3898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x8000FFFF"); 3899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) { 3902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_FAILED(E_UNEXPECTED); 3903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()), 3905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (OkHRESULTSuccess()) fails.\n" 3906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x0"); 3907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()), 3908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (FalseHRESULTSuccess()) fails.\n" 3909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x1"); 3910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) { 3913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_FAILED(E_UNEXPECTED); 3914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifndef __BORLANDC__ 3916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder 2007 and 2009. 3918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()), 3919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (OkHRESULTSuccess()) fails.\n" 3920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x0"); 3921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 3922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()), 3924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (FalseHRESULTSuccess()) fails.\n" 3925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 0x1"); 3926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that streaming to the HRESULT macros works. 3929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HRESULTAssertionTest, Streaming) { 3930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 3931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; 3932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 3933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; 3934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 3936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 3937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 3938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# ifndef __BORLANDC__ 3940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder 2007 and 2009. 3942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE( 3943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", 3944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 3945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif 3946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 3948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_HRESULT_FAILED(S_OK) << "expected failure", 3949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 3950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE( 3952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_HRESULT_FAILED(S_OK) << "expected failure", 3953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 3954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS 3957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 3959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Silences warnings: "Condition is always true", "Unreachable code" 3960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option push -w-ccc -w-rch 3961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 3962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the assertion macros behave like single statements. 3964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) { 3965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 3966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(false) << "This should never be executed; " 3967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "It's a compilation test only."; 3968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysTrue()) 3970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(false); 3971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 3972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 3973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 3975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(1, 3); 3976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 3978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 3979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 3980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GT(3, 2) << ""; 3981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 3984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the compiler will not complain about unreachable code in the 3985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros. 3986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) { 3987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 3988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(throw 1, int); 3990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), ""); 3991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), ""); 3992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(n++); 3993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), ""); 3994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(throw 1); 3995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), ""); 3996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 3997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 3998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) { 3999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowNothing(), bool); 4001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysTrue()) 4003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowAnInteger(), int); 4004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(ThrowAnInteger()); 4009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysTrue()) 4011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(ThrowNothing()); 4012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(ThrowNothing()); 4017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysTrue()) 4019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(ThrowAnInteger()); 4020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 4024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) { 4026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. " 4028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "It's a compilation test only."; 4029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_FATAL_FAILURE(FAIL()) << ""; 4034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysTrue()) 4038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_FATAL_FAILURE(SUCCEED()); 4039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (AlwaysFalse()) 4043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ; // NOLINT 4044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter else 4045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_FATAL_FAILURE(SUCCEED()); 4046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the assertion macros work well with switch statements. 4049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionSyntaxTest, WorksWithSwitch) { 4050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter switch (0) { 4051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter case 1: 4052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter break; 4053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter default: 4054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(true); 4055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter switch (0) 4058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter case 0: 4059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case"; 4060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Binary assertions are implemented using a different code path 4062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // than the Boolean assertions. Hence we test them separately. 4063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter switch (0) { 4064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter case 1: 4065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter default: 4066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler"; 4067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter switch (0) 4070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter case 0: 4071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(1, 2); 4072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 4075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid ThrowAString() { 4077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter throw "std::string"; 4078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Test that the exception assertion macros compile and work with const 4081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// type qualifier. 4082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionSyntaxTest, WorksWithConst) { 4083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_THROW(ThrowAString(), const char*); 4084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowAString(), const char*); 4086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 4089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace 4091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace testing { 4093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test tracks SUCCEED*. 4095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SuccessfulAssertionTest, SUCCEED) { 4096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED(); 4097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED() << "OK"; 4098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count()); 4099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test doesn't track successful EXPECT_*. 4102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SuccessfulAssertionTest, EXPECT) { 4103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(true); 4104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 4105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test doesn't track successful EXPECT_STR*. 4108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SuccessfulAssertionTest, EXPECT_STR) { 4109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", ""); 4110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 4111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test doesn't track successful ASSERT_*. 4114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SuccessfulAssertionTest, ASSERT) { 4115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(true); 4116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 4117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test doesn't track successful ASSERT_STR*. 4120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SuccessfulAssertionTest, ASSERT_STR) { 4121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("", ""); 4122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); 4123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace testing 4126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace { 4128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the message streaming variation of assertions. 4130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, EXPECT) { 4132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, 1) << "This should succeed."; 4133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << "Expected failure #1.", 4134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #1"); 4135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(1, 2) << "This should succeed."; 4136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << "Expected failure #2.", 4137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #2."); 4138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(1, 0) << "This should succeed."; 4139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << "Expected failure #3.", 4140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #3."); 4141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1", "1") << "This should succeed."; 4143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("1", "1") << "Expected failure #4.", 4144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #4."); 4145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRCASEEQ("a", "A") << "This should succeed."; 4146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("a", "A") << "Expected failure #5.", 4147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #5."); 4148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(1, 1) << "This should succeed."; 4150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << "Expected failure #6.", 4151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure #6."); 4152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NEAR(1, 1.1, 0.2) << "This should succeed."; 4153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, ASSERT) { 4156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, 1) << "This should succeed."; 4157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NE(1, 2) << "This should succeed."; 4158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LE(1, 2) << "This should succeed."; 4159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(1, 2) << "This should succeed."; 4160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GE(1, 0) << "This should succeed."; 4161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << "Expected failure.", 4162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure."); 4163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, ASSERT_STR) { 4166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("1", "1") << "This should succeed."; 4167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("1", "2") << "This should succeed."; 4168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASEEQ("a", "A") << "This should succeed."; 4169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("a", "A") << "Expected failure.", 4170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected failure."); 4171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, ASSERT_FLOATING) { 4174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FLOAT_EQ(1, 1) << "This should succeed."; 4175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_DOUBLE_EQ(1, 1) << "This should succeed."; 4176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << "Expect failure.", // NOLINT 4177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expect failure."); 4178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // To work around a bug in gcc 2.95.0, there is intentionally no 4179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // space after the first comma in the previous statement. 4180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ASSERT_FALSE with a streamed message. 4183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, ASSERT_FALSE) { 4184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(false) << "This shouldn't fail."; 4185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(true) << "Expected failure: " << 2 << " > " << 1 4187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << " evaluates to " << true; 4188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "Expected failure"); 4189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using FAIL with a streamed message. 4192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, FAIL) { 4193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << 0, 4194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "0"); 4195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using SUCCEED with a streamed message. 4198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, SUCCEED) { 4199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED() << "Success == " << 1; 4200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ASSERT_TRUE with a streamed message. 4203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, ASSERT_TRUE) { 4204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(true) << "This should succeed."; 4205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(true) << true; 4206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(false) << static_cast<const char *>(NULL) 4208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << static_cast<char *>(NULL); 4209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "(null)(null)"); 4210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS 4213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using wide strings in assertion messages. 4214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionWithMessageTest, WideStringMessage) { 4215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 4216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(false) << L"This failure is expected.\x8119"; 4217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected."); 4218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, 2) << "This failure is " 4220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << L"expected too.\x8120"; 4221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "This failure is expected too."); 4222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS 4224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_TRUE. 4226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_TRUE) { 4227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(true) << "Intentional success"; 4228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #1.", 4229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure #1."); 4230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #2.", 4231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure #2."); 4232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(2 > 1); // NOLINT 4233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1), 4234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 2 < 1\n" 4235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: false\n" 4236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: true"); 4237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3), 4238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2 > 3"); 4239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult. 4242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, ExpectTrueWithAssertionResult) { 4243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ResultIsEven(2)); 4244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)), 4245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEven(3)\n" 4246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: false (3 is odd)\n" 4247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: true"); 4248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ResultIsEvenNoExplanation(2)); 4249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)), 4250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEvenNoExplanation(3)\n" 4251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: false (3 is odd)\n" 4252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: true"); 4253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_FALSE with a streamed message. 4256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_FALSE) { 4257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(2 < 1); // NOLINT 4258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(false) << "Intentional success"; 4259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #1.", 4260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure #1."); 4261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #2.", 4262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure #2."); 4263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1), 4264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 2 > 1\n" 4265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true\n" 4266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 4267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3), 4268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2 < 3"); 4269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult. 4272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, ExpectFalseWithAssertionResult) { 4273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ResultIsEven(3)); 4274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)), 4275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEven(2)\n" 4276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true (2 is even)\n" 4277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 4278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ResultIsEvenNoExplanation(3)); 4279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)), 4280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: ResultIsEvenNoExplanation(2)\n" 4281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: true\n" 4282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: false"); 4283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 4286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Restores warnings after previous "#pragma option push" supressed them 4287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option pop 4288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 4289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_EQ. 4291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_EQ) { 4292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(5, 2 + 3); 4293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3), 4294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: 2*3\n" 4295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: 6\n" 4296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 5"); 4297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3), 4298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2 - 3"); 4299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using EXPECT_EQ on double values. The purpose is to make 4302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// sure that the specialization we did for integer and anonymous enums 4303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// isn't used for double arguments. 4304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_EQ_Double) { 4305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 4306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(5.6, 5.6); 4307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 4309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2), 4310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "5.1"); 4311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_CAN_COMPARE_NULL 4314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_EQ(NULL, pointer). 4315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_EQ_NULL) { 4316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 4317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* p = NULL; 4318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Some older GCC versions may issue a spurious warning in this or the next 4319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // assertion statement. This warning should not be suppressed with 4320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // static_cast since the test verifies the ability to use bare NULL as the 4321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // expected parameter to the macro. 4322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(NULL, p); 4323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 4325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 4326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n), 4327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: &n\n"); 4328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_CAN_COMPARE_NULL 4330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be 4332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// treated as a null pointer by the compiler, we need to make sure 4333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as 4334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// EXPECT_EQ(static_cast<void*>(NULL), non_pointer). 4335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_EQ_0) { 4336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 4337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A success. 4339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, n); 4340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // A failure. 4342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6), 4343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: 0"); 4344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_NE. 4347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_NE) { 4348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(6, 7); 4349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'), 4351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ('a') != ('a'), " 4352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); 4353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2), 4354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "2"); 4355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p0 = NULL; 4356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0), 4357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p0"); 4358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Only way to get the Nokia compiler to compile the cast 4359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // is to have a separate void* variable first. Putting 4360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the two casts on the same line doesn't work, neither does 4361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // a direct C-style to char*. 4362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv1 = (void*)0x1234; // NOLINT 4363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p1 = reinterpret_cast<char*>(pv1); 4364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1), 4365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p1"); 4366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_LE. 4369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_LE) { 4370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(2, 3); 4371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(2, 2); 4372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0), 4373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) <= (0), actual: 2 vs 0"); 4374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9), 4375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(1.1) <= (0.9)"); 4376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_LT. 4379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_LT) { 4380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(2, 3); 4381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2), 4382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) < (2), actual: 2 vs 2"); 4383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1), 4384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(2) < (1)"); 4385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_GE. 4388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_GE) { 4389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(2, 1); 4390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(2, 2); 4391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3), 4392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) >= (3), actual: 2 vs 3"); 4393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1), 4394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(0.9) >= (1.1)"); 4395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_GT. 4398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_GT) { 4399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GT(2, 1); 4400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2), 4401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: (2) > (2), actual: 2 vs 2"); 4402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3), 4403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(2) > (3)"); 4404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 4407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_THROW. 4409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_THROW) { 4410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowAnInteger(), int); 4411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool), 4412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowAnInteger() throws an exception of " 4413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "type bool.\n Actual: it throws a different type."); 4414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 4415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowNothing(), bool), 4416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowNothing() throws an exception of type bool.\n" 4417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: it throws nothing."); 4418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_NO_THROW. 4421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_NO_THROW) { 4422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(ThrowNothing()); 4423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()), 4424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowAnInteger() doesn't throw an " 4425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "exception.\n Actual: it throws."); 4426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests EXPECT_ANY_THROW. 4429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, EXPECT_ANY_THROW) { 4430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(ThrowAnInteger()); 4431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE( 4432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(ThrowNothing()), 4433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: ThrowNothing() throws an exception.\n" 4434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: it doesn't."); 4435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 4438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Make sure we deal with the precedence of <<. 4440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ExpectTest, ExpectPrecedence) { 4441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1 < 2, true); 4442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false), 4443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: true && false"); 4444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the StreamableToString() function. 4448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using StreamableToString() on a scalar. 4450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableToStringTest, Scalar) { 4451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("5", StreamableToString(5).c_str()); 4452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using StreamableToString() on a non-char pointer. 4455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableToStringTest, Pointer) { 4456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 4457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int* p = &n; 4458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE("(null)", StreamableToString(p).c_str()); 4459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using StreamableToString() on a NULL non-char pointer. 4462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableToStringTest, NullPointer) { 4463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int* p = NULL; 4464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 4465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using StreamableToString() on a C string. 4468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableToStringTest, CString) { 4469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Foo", StreamableToString("Foo").c_str()); 4470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using StreamableToString() on a NULL C string. 4473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableToStringTest, NullCString) { 4474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* p = NULL; 4475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(null)", StreamableToString(p).c_str()); 4476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using streamable values as assertion messages. 4479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using std::string as an assertion message. 4481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, string) { 4482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const std::string str( 4483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "This failure message is a std::string, and is expected."); 4484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << str, 4485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter str.c_str()); 4486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that we can output strings containing embedded NULs. 4489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Limited to Linux because we can only do this with std::string's. 4490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, stringWithEmbeddedNUL) { 4491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char char_array_with_nul[] = 4492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Here's a NUL\0 and some more string"; 4493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const std::string string_with_nul(char_array_with_nul, 4494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter sizeof(char_array_with_nul) 4495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter - 1); // drops the trailing NUL 4496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << string_with_nul, 4497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Here's a NUL\\0 and some more string"); 4498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that we can output a NUL char. 4501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, NULChar) { 4502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "A NUL" << '\0' << " and some more string"; 4504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "A NUL\\0 and some more string"); 4505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using int as an assertion message. 4508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, int) { 4509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << 900913, 4510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "900913"); 4511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using NULL char pointer as an assertion message. 4514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 4515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// In MSVC, streaming a NULL char * causes access violation. Google Test 4516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// implemented a workaround (substituting "(null)" for NULL). This 4517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// tests whether the workaround works. 4518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, NullCharPtr) { 4519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL), 4520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "(null)"); 4521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that basic IO manipulators (endl, ends, and flush) can be 4524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// streamed to testing::Message. 4525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamableTest, BasicIoManip) { 4526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FAIL() << "Line 1." << std::endl 4528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "A NUL char " << std::ends << std::flush << " in line 2."; 4529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "Line 1.\nA NUL char \\0 in line 2."); 4530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the macros that haven't been covered so far. 4533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid AddFailureHelper(bool* aborted) { 4535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *aborted = true; 4536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE() << "Intentional failure."; 4537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *aborted = false; 4538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ADD_FAILURE. 4541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MacroTest, ADD_FAILURE) { 4542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool aborted = true; 4543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted), 4544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure."); 4545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(aborted); 4546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ADD_FAILURE_AT. 4549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MacroTest, ADD_FAILURE_AT) { 4550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and 4551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the failure message contains the user-streamed part. 4552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!"); 4553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies that the user-streamed part is optional. 4555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed"); 4556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Unfortunately, we cannot verify that the failure message contains 4558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the right file path and line number the same way, as 4559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and 4560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // line number. Instead, we do that in gtest_output_test_.cc. 4561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests FAIL. 4564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MacroTest, FAIL) { 4565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL(), 4566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Failed"); 4567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.", 4568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Intentional failure."); 4569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests SUCCEED 4572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MacroTest, SUCCEED) { 4573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED(); 4574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED() << "Explicit success."; 4575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests for EXPECT_EQ() and ASSERT_EQ(). 4578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 4579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// These tests fail *intentionally*, s.t. the failure messages can be 4580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// generated and tested. 4581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 4582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// We have different tests for different argument types. 4583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using bool values in {EXPECT|ASSERT}_EQ. 4585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, Bool) { 4586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(true, true); 4587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ 4588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool false_value = false; 4589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(false_value, true); 4590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "Value of: true"); 4591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using int values in {EXPECT|ASSERT}_EQ. 4594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, Int) { 4595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(32, 32); 4596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33), 4597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "33"); 4598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using time_t values in {EXPECT|ASSERT}_EQ. 4601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, Time_T) { 4602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(static_cast<time_t>(0), 4603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static_cast<time_t>(0)); 4604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0), 4605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static_cast<time_t>(1234)), 4606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1234"); 4607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using char values in {EXPECT|ASSERT}_EQ. 4610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, Char) { 4611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ('z', 'z'); 4612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char ch = 'b'; 4613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch), 4614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "ch"); 4615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch), 4616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "ch"); 4617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using wchar_t values in {EXPECT|ASSERT}_EQ. 4620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, WideChar) { 4621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(L'b', L'b'); 4622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'), 4624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: L'x'\n" 4625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: L'x' (120, 0x78)\n" 4626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Expected: L'\0'\n" 4627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Which is: L'\0' (0, 0x0)"); 4628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static wchar_t wchar; 4630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar = L'b'; 4631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar), 4632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "wchar"); 4633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar = 0x8119; 4634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar), 4635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: wchar"); 4636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ::std::string values in {EXPECT|ASSERT}_EQ. 4639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, StdString) { 4640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a const char* to an std::string that has identical 4641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content. 4642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ("Test", ::std::string("Test")); 4643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two identical std::strings. 4645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const ::std::string str1("A * in the middle"); 4646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const ::std::string str2(str1); 4647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(str1, str2); 4648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a const char* to an std::string that has different 4650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content 4651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")), 4652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "\"test\""); 4653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares an std::string to a char* that has different content. 4655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p1 = const_cast<char*>("foo"); 4656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1), 4657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p1"); 4658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two std::strings that have different contents, one of 4660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // which having a NUL character in the middle. This should fail. 4661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static ::std::string str3(str1); 4662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter str3.at(2) = '\0'; 4663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3), 4664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: str3\n" 4665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter " Actual: \"A \\0 in the middle\""); 4666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STD_WSTRING 4669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ. 4671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, StdWideString) { 4672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two identical std::wstrings. 4673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const ::std::wstring wstr1(L"A * in the middle"); 4674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const ::std::wstring wstr2(wstr1); 4675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(wstr1, wstr2); 4676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares an std::wstring to a const wchar_t* that has identical 4678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content. 4679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 4680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119); 4681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares an std::wstring to a const wchar_t* that has different 4683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content. 4684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 4685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 4686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120); 4687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "kTestX8120"); 4688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two std::wstrings that have different contents, one of 4690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // which having a NUL character in the middle. 4691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::std::wstring wstr3(wstr1); 4692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wstr3.at(2) = L'\0'; 4693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3), 4694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "wstr3"); 4695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a wchar_t* to an std::wstring that has different 4697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content. 4698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar")); 4700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 4701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_STD_WSTRING 4704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_GLOBAL_STRING 4706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ::string values in {EXPECT|ASSERT}_EQ. 4707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, GlobalString) { 4708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a const char* to a ::string that has identical content. 4709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ("Test", ::string("Test")); 4710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two identical ::strings. 4712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const ::string str1("A * in the middle"); 4713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const ::string str2(str1); 4714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(str1, str2); 4715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a ::string to a const char* that has different content. 4717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"), 4718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "test"); 4719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two ::strings that have different contents, one of which 4721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // having a NUL character in the middle. 4722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::string str3(str1); 4723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter str3.at(2) = '\0'; 4724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3), 4725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "str3"); 4726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a ::string to a char* that has different content. 4728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE({ // NOLINT 4729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(::string("bar"), const_cast<char*>("foo")); 4730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, ""); 4731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_GLOBAL_STRING 4734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_GLOBAL_WSTRING 4736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using ::wstring values in {EXPECT|ASSERT}_EQ. 4738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, GlobalWideString) { 4739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two identical ::wstrings. 4740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const ::wstring wstr1(L"A * in the middle"); 4741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const ::wstring wstr2(wstr1); 4742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(wstr1, wstr2); 4743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a const wchar_t* to a ::wstring that has identical content. 4745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; 4746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(kTestX8119, ::wstring(kTestX8119)); 4747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a const wchar_t* to a ::wstring that has different 4749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // content. 4750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; 4751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE({ // NOLINT 4752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(kTestX8120, ::wstring(kTestX8119)); 4753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }, "Test\\x8119"); 4754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares a wchar_t* to a ::wstring that has different content. 4756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar_t* const p1 = const_cast<wchar_t*>(L"foo"); 4757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")), 4758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "bar"); 4759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Compares two ::wstrings that have different contents, one of which 4761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // having a NUL character in the middle. 4762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static ::wstring wstr3; 4763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wstr3 = wstr1; 4764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wstr3.at(2) = L'\0'; 4765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3), 4766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "wstr3"); 4767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_GLOBAL_WSTRING 4770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using char pointers in {EXPECT|ASSERT}_EQ. 4772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, CharPointer) { 4773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p0 = NULL; 4774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Only way to get the Nokia compiler to compile the cast 4775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // is to have a separate void* variable first. Putting 4776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the two casts on the same line doesn't work, neither does 4777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // a direct C-style to char*. 4778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv1 = (void*)0x1234; // NOLINT 4779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv2 = (void*)0xABC0; // NOLINT 4780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p1 = reinterpret_cast<char*>(pv1); 4781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p2 = reinterpret_cast<char*>(pv2); 4782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(p1, p1); 4783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 4785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: p2"); 4786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 4787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p2"); 4788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234), 4789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter reinterpret_cast<char*>(0xABC0)), 4790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "ABC0"); 4791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ. 4794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, WideCharPointer) { 4795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar_t* const p0 = NULL; 4796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Only way to get the Nokia compiler to compile the cast 4797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // is to have a separate void* variable first. Putting 4798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the two casts on the same line doesn't work, neither does 4799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // a direct C-style to char*. 4800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv1 = (void*)0x1234; // NOLINT 4801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv2 = (void*)0xABC0; // NOLINT 4802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1); 4803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2); 4804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(p0, p0); 4805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), 4807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "Value of: p2"); 4808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), 4809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p2"); 4810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv3 = (void*)0x1234; // NOLINT 4811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter void* pv4 = (void*)0xABC0; // NOLINT 4812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3); 4813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4); 4814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4), 4815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "p4"); 4816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests using other types of pointers in {EXPECT|ASSERT}_EQ. 4819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EqAssertionTest, OtherPointer) { 4820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(static_cast<const int*>(NULL), 4821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static_cast<const int*>(NULL)); 4822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL), 4823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter reinterpret_cast<const int*>(0x1234)), 4824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "0x1234"); 4825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A class that supports binary comparison operators but not streaming. 4828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass UnprintableChar { 4829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 4830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit UnprintableChar(char ch) : char_(ch) {} 4831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator==(const UnprintableChar& rhs) const { 4833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ == rhs.char_; 4834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator!=(const UnprintableChar& rhs) const { 4836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ != rhs.char_; 4837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator<(const UnprintableChar& rhs) const { 4839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ < rhs.char_; 4840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator<=(const UnprintableChar& rhs) const { 4842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ <= rhs.char_; 4843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator>(const UnprintableChar& rhs) const { 4845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ > rhs.char_; 4846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool operator>=(const UnprintableChar& rhs) const { 4848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return char_ >= rhs.char_; 4849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 4850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 4852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char char_; 4853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 4854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ASSERT_EQ() and friends don't require the arguments to 4856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// be printable. 4857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ComparisonAssertionTest, AcceptsUnprintableArgs) { 4858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const UnprintableChar x('x'), y('y'); 4859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(x, x); 4860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(x, y); 4861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(x, y); 4862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LE(x, y); 4863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_GT(y, x); 4864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_GE(x, x); 4865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>"); 4867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>"); 4868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>"); 4869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>"); 4870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>"); 4871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Code tested by EXPECT_FATAL_FAILURE cannot reference local 4873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // variables, so we have to write UnprintableChar('x') instead of x. 4874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ 4875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ICE's in C++Builder. 4876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')), 4877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1-byte object <78>"); 4878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 4879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1-byte object <78>"); 4880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 4881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), 4882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1-byte object <79>"); 4883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 4884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1-byte object <78>"); 4885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), 4886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "1-byte object <79>"); 4887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the FRIEND_TEST macro. 4890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This class has a private member we want to test. We will test it 4892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// both in a TEST and in a TEST_F. 4893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass Foo { 4894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 4895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Foo() {} 4896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 4898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int Bar() const { return 1; } 4899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Declares the friend tests that can access the private member 4901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Bar(). 4902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FRIEND_TEST(FRIEND_TEST_Test, TEST); 4903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FRIEND_TEST(FRIEND_TEST_Test2, TEST_F); 4904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 4905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the FRIEND_TEST declaration allows a TEST to access a 4907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// class's private members. This should compile. 4908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(FRIEND_TEST_Test, TEST) { 4909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, Foo().Bar()); 4910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The fixture needed to test using FRIEND_TEST with TEST_F. 4913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass FRIEND_TEST_Test2 : public Test { 4914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 4915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Foo foo; 4916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 4917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the FRIEND_TEST declaration allows a TEST_F to access a 4919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// class's private members. This should compile. 4920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(FRIEND_TEST_Test2, TEST_F) { 4921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, foo.Bar()); 4922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the life cycle of Test objects. 4925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The test fixture for testing the life cycle of Test objects. 4927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// 4928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This class counts the number of live test objects that uses this 4929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// fixture. 4930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestLifeCycleTest : public Test { 4931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 4932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Constructor. Increments the number of test objects that uses 4933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // this fixture. 4934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestLifeCycleTest() { count_++; } 4935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Destructor. Decrements the number of test objects that uses this 4937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // fixture. 4938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ~TestLifeCycleTest() { count_--; } 4939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Returns the number of live test objects that uses this fixture. 4941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int count() const { return count_; } 4942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 4944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int count_; 4945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 4946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterint TestLifeCycleTest::count_ = 0; 4948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the life cycle of test objects. 4950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestLifeCycleTest, Test1) { 4951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // There should be only one test object in this test case that's 4952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // currently alive. 4953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, count()); 4954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the life cycle of test objects. 4957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestLifeCycleTest, Test2) { 4958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // After Test1 is done and Test2 is started, there should still be 4959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // only one live test object, as the object for Test1 should've been 4960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // deleted. 4961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, count()); 4962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace 4965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the copy constructor works when it is NOT optimized away by 4967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the compiler. 4968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) { 4969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Checks that the copy constructor doesn't try to dereference NULL pointers 4970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // in the source object. 4971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r1 = AssertionSuccess(); 4972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r2 = r1; 4973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // The following line is added to prevent the compiler from optimizing 4974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // away the constructor call. 4975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r1 << "abc"; 4976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r3 = r1; 4978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1)); 4979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abc", r1.message()); 4980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 4981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that AssertionSuccess and AssertionFailure construct 4983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// AssertionResult objects as expected. 4984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionResultTest, ConstructionWorks) { 4985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r1 = AssertionSuccess(); 4986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(r1); 4987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", r1.message()); 4988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r2 = AssertionSuccess() << "abc"; 4990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(r2); 4991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abc", r2.message()); 4992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r3 = AssertionFailure(); 4994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(r3); 4995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", r3.message()); 4996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 4997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r4 = AssertionFailure() << "def"; 4998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(r4); 4999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("def", r4.message()); 5000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r5 = AssertionFailure(Message() << "ghi"); 5002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(r5); 5003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("ghi", r5.message()); 5004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the negation flips the predicate result but keeps the message. 5007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionResultTest, NegationWorks) { 5008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r1 = AssertionSuccess() << "abc"; 5009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(!r1); 5010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abc", (!r1).message()); 5011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r2 = AssertionFailure() << "def"; 5013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(!r2); 5014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("def", (!r2).message()); 5015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionResultTest, StreamingWorks) { 5018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r = AssertionSuccess(); 5019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r << "abc" << 'd' << 0 << true; 5020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abcd0true", r.message()); 5021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AssertionResultTest, CanStreamOstreamManipulators) { 5024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertionResult r = AssertionSuccess(); 5025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter r << "Data" << std::endl << std::flush << std::ends << "Will be visible"; 5026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("Data\n\\0Will be visible", r.message()); 5027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming a user type whose definition and operator << are 5030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// both in the global namespace. 5031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass Base { 5032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 5033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit Base(int an_x) : x_(an_x) {} 5034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int x() const { return x_; } 5035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 5036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int x_; 5037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Base& val) { 5040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << val.x(); 5041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Base* pointer) { 5044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << "(" << pointer->x() << ")"; 5045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) { 5048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 5049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Base a(1); 5050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << a << &a; // Uses ::operator<<. 5052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1(1)", msg.GetString().c_str()); 5053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming a user type whose definition and operator<< are 5056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// both in an unnamed namespace. 5057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace { 5058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass MyTypeInUnnamedNameSpace : public Base { 5059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 5060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {} 5061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const MyTypeInUnnamedNameSpace& val) { 5064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << val.x(); 5065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const MyTypeInUnnamedNameSpace* pointer) { 5068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << "(" << pointer->x() << ")"; 5069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace 5071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) { 5073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 5074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter MyTypeInUnnamedNameSpace a(1); 5075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << a << &a; // Uses <unnamed_namespace>::operator<<. 5077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1(1)", msg.GetString().c_str()); 5078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming a user type whose definition and operator<< are 5081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// both in a user namespace. 5082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace namespace1 { 5083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass MyTypeInNameSpace1 : public Base { 5084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 5085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit MyTypeInNameSpace1(int an_x): Base(an_x) {} 5086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const MyTypeInNameSpace1& val) { 5089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << val.x(); 5090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const MyTypeInNameSpace1* pointer) { 5093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << "(" << pointer->x() << ")"; 5094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace namespace1 5096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, CanStreamUserTypeInUserNameSpace) { 5098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 5099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter namespace1::MyTypeInNameSpace1 a(1); 5100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << a << &a; // Uses namespace1::operator<<. 5102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1(1)", msg.GetString().c_str()); 5103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming a user type whose definition is in a user namespace 5106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// but whose operator<< is in the global namespace. 5107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace namespace2 { 5108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass MyTypeInNameSpace2 : public ::Base { 5109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 5110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter explicit MyTypeInNameSpace2(int an_x): Base(an_x) {} 5111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace namespace2 5113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const namespace2::MyTypeInNameSpace2& val) { 5115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << val.x(); 5116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstd::ostream& operator<<(std::ostream& os, 5118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const namespace2::MyTypeInNameSpace2* pointer) { 5119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return os << "(" << pointer->x() << ")"; 5120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) { 5123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 5124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter namespace2::MyTypeInNameSpace2 a(1); 5125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << a << &a; // Uses ::operator<<. 5127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1(1)", msg.GetString().c_str()); 5128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming NULL pointers to testing::Message. 5131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, NullPointers) { 5132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message msg; 5133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter char* const p1 = NULL; 5134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter unsigned char* const p2 = NULL; 5135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int* p3 = NULL; 5136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter double* p4 = NULL; 5137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool* p5 = NULL; 5138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message* p6 = NULL; 5139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg << p1 << p2 << p3 << p4 << p5 << p6; 5141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("(null)(null)(null)(null)(null)(null)", 5142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter msg.GetString().c_str()); 5143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests streaming wide strings to testing::Message. 5146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(MessageTest, WideStrings) { 5147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Streams a NULL of type const wchar_t*. 5148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t* const_wstr = NULL; 5149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(null)", 5150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (Message() << const_wstr).GetString().c_str()); 5151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Streams a NULL of type wchar_t*. 5153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wchar_t* wstr = NULL; 5154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("(null)", 5155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (Message() << wstr).GetString().c_str()); 5156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Streams a non-NULL of type const wchar_t*. 5158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const_wstr = L"abc\x8119"; 5159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abc\xe8\x84\x99", 5160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (Message() << const_wstr).GetString().c_str()); 5161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Streams a non-NULL of type wchar_t*. 5163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter wstr = const_cast<wchar_t*>(const_wstr); 5164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("abc\xe8\x84\x99", 5165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (Message() << wstr).GetString().c_str()); 5166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This line tests that we can define tests in the testing namespace. 5170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace testing { 5171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the TestInfo class. 5173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestInfoTest : public Test { 5175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 5176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const TestInfo* GetTestInfo(const char* test_name) { 5177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestCase* const test_case = GetUnitTestImpl()-> 5178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GetTestCase("TestInfoTest", "", NULL, NULL); 5179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (int i = 0; i < test_case->total_test_count(); ++i) { 5181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* const test_info = test_case->GetTestInfo(i); 5182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (strcmp(test_name, test_info->name()) == 0) 5183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return test_info; 5184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return NULL; 5186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const TestResult* GetTestResult( 5189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info) { 5190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return test_info->result(); 5191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestInfo::test_case_name() and TestInfo::name(). 5195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestInfoTest, Names) { 5196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* const test_info = GetTestInfo("Names"); 5197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("TestInfoTest", test_info->test_case_name()); 5199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("Names", test_info->name()); 5200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests TestInfo::result(). 5203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(TestInfoTest, result) { 5204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* const test_info = GetTestInfo("result"); 5205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Initially, there is no TestPartResult for this test. 5207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 5208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // After the previous assertion, there is still none. 5210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); 5211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests setting up and tearing down a test case. 5214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass SetUpTestCaseTest : public Test { 5216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 5217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This will be called once before the first test in this test case 5218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // is run. 5219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetUpTestCase() { 5220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("Setting up the test case . . .\n"); 5221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Initializes some shared resource. In this simple example, we 5223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // just create a C string. More complex stuff can be done if 5224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // desired. 5225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter shared_resource_ = "123"; 5226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Increments the number of test cases that have been set up. 5228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter counter_++; 5229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // SetUpTestCase() should be called only once. 5231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, counter_); 5232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This will be called once after the last test in this test case is 5235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // run. 5236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void TearDownTestCase() { 5237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter printf("Tearing down the test case . . .\n"); 5238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Decrements the number of test cases that have been set up. 5240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter counter_--; 5241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // TearDownTestCase() should be called only once. 5243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, counter_); 5244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Cleans up the shared resource. 5246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter shared_resource_ = NULL; 5247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This will be called before each test in this test case. 5250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 5251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // SetUpTestCase() should be called only once, so counter_ should 5252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // always be 1. 5253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, counter_); 5254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Number of test cases that have been set up. 5257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static int counter_; 5258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Some resource to be shared by all tests in this test case. 5260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static const char* shared_resource_; 5261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterint SetUpTestCaseTest::counter_ = 0; 5264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterconst char* SetUpTestCaseTest::shared_resource_ = NULL; 5265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A test that uses the shared resource. 5267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SetUpTestCaseTest, Test1) { 5268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE(NULL, shared_resource_); 5269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Another test that uses the shared resource. 5272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(SetUpTestCaseTest, Test2) { 5273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("123", shared_resource_); 5274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The InitGoogleTestTest test case tests testing::InitGoogleTest(). 5277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// The Flags struct stores a copy of all Google Test flags. 5279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstruct Flags { 5280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Constructs a Flags struct where each flag has its default value. 5281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags() : also_run_disabled_tests(false), 5282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter break_on_failure(false), 5283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter catch_exceptions(false), 5284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter death_test_use_fork(false), 5285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter filter(""), 5286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter list_tests(false), 5287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter output(""), 5288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter print_time(true), 5289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter random_seed(0), 5290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter repeat(1), 5291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter shuffle(false), 5292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter stack_trace_depth(kMaxStackTraceDepth), 5293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter stream_result_to(""), 5294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter throw_on_failure(false) {} 5295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Factory methods. 5297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_also_run_disabled_tests flag has 5299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) { 5301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.also_run_disabled_tests = also_run_disabled_tests; 5303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_break_on_failure flag has 5307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags BreakOnFailure(bool break_on_failure) { 5309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.break_on_failure = break_on_failure; 5311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_catch_exceptions flag has 5315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags CatchExceptions(bool catch_exceptions) { 5317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.catch_exceptions = catch_exceptions; 5319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_death_test_use_fork flag has 5323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags DeathTestUseFork(bool death_test_use_fork) { 5325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.death_test_use_fork = death_test_use_fork; 5327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_filter flag has the given 5331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // value. 5332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags Filter(const char* filter) { 5333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.filter = filter; 5335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_list_tests flag has the 5339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // given value. 5340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags ListTests(bool list_tests) { 5341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.list_tests = list_tests; 5343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_output flag has the given 5347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // value. 5348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags Output(const char* output) { 5349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.output = output; 5351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_print_time flag has the given 5355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // value. 5356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags PrintTime(bool print_time) { 5357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.print_time = print_time; 5359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_random_seed flag has 5363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags RandomSeed(Int32 random_seed) { 5365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.random_seed = random_seed; 5367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_repeat flag has the given 5371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // value. 5372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags Repeat(Int32 repeat) { 5373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.repeat = repeat; 5375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_shuffle flag has 5379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags Shuffle(bool shuffle) { 5381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.shuffle = shuffle; 5383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has 5387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags StackTraceDepth(Int32 stack_trace_depth) { 5389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.stack_trace_depth = stack_trace_depth; 5391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has 5395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags StreamResultTo(const char* stream_result_to) { 5397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.stream_result_to = stream_result_to; 5399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Creates a Flags struct where the gtest_throw_on_failure flag has 5403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the given value. 5404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static Flags ThrowOnFailure(bool throw_on_failure) { 5405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.throw_on_failure = throw_on_failure; 5407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return flags; 5408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // These fields store the flag values. 5411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool also_run_disabled_tests; 5412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool break_on_failure; 5413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool catch_exceptions; 5414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool death_test_use_fork; 5415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* filter; 5416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool list_tests; 5417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* output; 5418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool print_time; 5419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 random_seed; 5420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 repeat; 5421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool shuffle; 5422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Int32 stack_trace_depth; 5423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* stream_result_to; 5424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool throw_on_failure; 5425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Fixture for testing InitGoogleTest(). 5428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass InitGoogleTestTest : public Test { 5429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 5430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Clears the flags before each test. 5431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 5432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(also_run_disabled_tests) = false; 5433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(break_on_failure) = false; 5434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(catch_exceptions) = false; 5435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(death_test_use_fork) = false; 5436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(filter) = ""; 5437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(list_tests) = false; 5438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(output) = ""; 5439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(print_time) = true; 5440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(random_seed) = 0; 5441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(repeat) = 1; 5442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(shuffle) = false; 5443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; 5444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stream_result_to) = ""; 5445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(throw_on_failure) = false; 5446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Asserts that two narrow or wide string arrays are equal. 5449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter template <typename CharType> 5450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void AssertStringArrayEq(size_t size1, CharType** array1, 5451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter size_t size2, CharType** array2) { 5452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(size1, size2) << " Array sizes different."; 5453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter for (size_t i = 0; i != size1; i++) { 5455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i; 5456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies that the flag values match the expected values. 5460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void CheckFlags(const Flags& expected) { 5461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.also_run_disabled_tests, 5462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(also_run_disabled_tests)); 5463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure)); 5464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions)); 5465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork)); 5466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str()); 5467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests)); 5468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str()); 5469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time)); 5470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed)); 5471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat)); 5472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle)); 5473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth)); 5474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ(expected.stream_result_to, 5475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(stream_result_to).c_str()); 5476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure)); 5477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Parses a command line (specified by argc1 and argv1), then 5480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // verifies that the flag values are expected and that the 5481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // recognized flags are removed from the command line. 5482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter template <typename CharType> 5483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void TestParsingFlags(int argc1, const CharType** argv1, 5484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int argc2, const CharType** argv2, 5485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const Flags& expected, bool should_print_help) { 5486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool saved_help_flag = ::testing::internal::g_help_flag; 5487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::testing::internal::g_help_flag = false; 5488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STREAM_REDIRECTION 5490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CaptureStdout(); 5491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 5492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Parses the command line. 5494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1)); 5495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STREAM_REDIRECTION 5497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const std::string captured_stdout = GetCapturedStdout(); 5498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 5499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies the flag values. 5501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CheckFlags(expected); 5502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Verifies that the recognized flags are removed from the command 5504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // line. 5505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2); 5506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the 5508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // help message for the flags it recognizes. 5509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag); 5510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_STREAM_REDIRECTION 5512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* const expected_help_fragment = 5513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "This program contains tests written using"; 5514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (should_print_help) { 5515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout); 5516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } else { 5517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_PRED_FORMAT2(IsNotSubstring, 5518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter expected_help_fragment, captured_stdout); 5519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_STREAM_REDIRECTION 5521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ::testing::internal::g_help_flag = saved_help_flag; 5523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 5524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // This macro wraps TestParsingFlags s.t. the user doesn't need 5526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // to specify the array sizes. 5527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \ 5529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \ 5530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter sizeof(argv2)/sizeof(*argv2) - 1, argv2, \ 5531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter expected, should_print_help) 5532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing an empty command line. 5535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, Empty) { 5536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 5545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a command line that has no flag. 5548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, NoFlag) { 5549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); 5560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a bad --gtest_filter flag. 5563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, FilterBad) { 5564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter", 5567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter", 5573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true); 5577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing an empty --gtest_filter flag. 5580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, FilterEmpty) { 5581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter=", 5584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false); 5593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a non-empty --gtest_filter flag. 5596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, FilterNonEmpty) { 5597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter=abc", 5600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false); 5609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_break_on_failure. 5612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) { 5613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure", 5616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 5618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 5625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_break_on_failure=0. 5628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) { 5629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure=0", 5632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 5641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_break_on_failure=f. 5644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) { 5645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure=f", 5648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 5657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_break_on_failure=F. 5660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) { 5661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure=F", 5664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); 5673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a --gtest_break_on_failure flag that has a "true" 5676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// definition. 5677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, BreakOnFailureTrue) { 5678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure=1", 5681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); 5690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_catch_exceptions. 5693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, CatchExceptions) { 5694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_catch_exceptions", 5697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false); 5706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_death_test_use_fork. 5709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, DeathTestUseFork) { 5710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_death_test_use_fork", 5713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false); 5722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having the same flag twice with different values. The 5725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// expected behavior is that the one coming last takes precedence. 5726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, DuplicatedFlags) { 5727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter=a", 5730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter=b", 5731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false); 5740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having an unrecognized flag on the command line. 5743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, UnrecognizedFlag) { 5744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_break_on_failure", 5747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "bar", // Unrecognized by Google Test. 5748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_filter=b", 5749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "bar", 5755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags flags; 5759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.break_on_failure = true; 5760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter flags.filter = "b"; 5761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false); 5762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_list_tests flag 5765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ListTestsFlag) { 5766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_list_tests", 5769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 5778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_list_tests flag with a "true" value 5781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ListTestsTrue) { 5782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_list_tests=1", 5785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); 5794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_list_tests flag with a "false" value 5797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ListTestsFalse) { 5798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_list_tests=0", 5801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 5810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_list_tests=f. 5813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ListTestsFalse_f) { 5814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_list_tests=f", 5817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 5826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_list_tests=F. 5829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ListTestsFalse_F) { 5830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_list_tests=F", 5833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); 5842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_output (invalid). 5845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, OutputEmpty) { 5846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_output", 5849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_output", 5855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true); 5859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_output=xml 5862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, OutputXml) { 5863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_output=xml", 5866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false); 5875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_output=xml:file 5878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, OutputXmlFile) { 5879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_output=xml:file", 5882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false); 5891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_output=xml:directory/path/ 5894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, OutputXmlDirectory) { 5895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_output=xml:directory/path/", 5898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, 5907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags::Output("xml:directory/path/"), false); 5908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_print_time flag 5911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, PrintTimeFlag) { 5912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_print_time", 5915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 5924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_print_time flag with a "true" value 5927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, PrintTimeTrue) { 5928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_print_time=1", 5931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); 5940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_print_time flag with a "false" value 5943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, PrintTimeFalse) { 5944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_print_time=0", 5947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 5956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_print_time=f. 5959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, PrintTimeFalse_f) { 5960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_print_time=f", 5963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 5972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_print_time=F. 5975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, PrintTimeFalse_F) { 5976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_print_time=F", 5979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); 5988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 5989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_random_seed=number 5991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, RandomSeed) { 5992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 5993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 5994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_random_seed=1000", 5995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 5996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 5997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 5998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 5999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false); 6004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_repeat=number 6007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, Repeat) { 6008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_repeat=1000", 6011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false); 6020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_also_run_disabled_tests flag 6023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) { 6024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_also_run_disabled_tests", 6027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags::AlsoRunDisabledTests(true), false); 6037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_also_run_disabled_tests flag with a "true" value 6040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) { 6041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_also_run_disabled_tests=1", 6044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags::AlsoRunDisabledTests(true), false); 6054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests having a --gtest_also_run_disabled_tests flag with a "false" value 6057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) { 6058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_also_run_disabled_tests=0", 6061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, 6070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags::AlsoRunDisabledTests(false), false); 6071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_shuffle. 6074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ShuffleWithoutValue) { 6075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_shuffle", 6078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 6087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_shuffle=0. 6090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ShuffleFalse_0) { 6091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_shuffle=0", 6094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false); 6103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a --gtest_shuffle flag that has a "true" 6106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// definition. 6107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ShuffleTrue) { 6108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_shuffle=1", 6111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); 6120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_stack_trace_depth=number. 6123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, StackTraceDepth) { 6124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_stack_trace_depth=5", 6127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false); 6136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, StreamResultTo) { 6139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_stream_result_to=localhost:1234", 6142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_( 6151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter argv, argv2, Flags::StreamResultTo("localhost:1234"), false); 6152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_throw_on_failure. 6155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) { 6156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_throw_on_failure", 6159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 6168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing --gtest_throw_on_failure=0. 6171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) { 6172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_throw_on_failure=0", 6175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false); 6184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing a --gtest_throw_on_failure flag that has a "true" 6187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// definition. 6188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, ThrowOnFailureTrue) { 6189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv[] = { 6190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "--gtest_throw_on_failure=1", 6192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* argv2[] = { 6196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "foo.exe", 6197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); 6201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS 6204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests parsing wide strings. 6205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(InitGoogleTestTest, WideStrings) { 6206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t* argv[] = { 6207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"foo.exe", 6208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"--gtest_filter=Foo*", 6209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"--gtest_list_tests=1", 6210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"--gtest_break_on_failure", 6211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"--non_gtest_flag", 6212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const wchar_t* argv2[] = { 6216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"foo.exe", 6217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter L"--non_gtest_flag", 6218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL 6219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter }; 6220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Flags expected_flags; 6222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter expected_flags.break_on_failure = true; 6223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter expected_flags.filter = "Foo*"; 6224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter expected_flags.list_tests = true; 6225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false); 6227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS 6229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests current_test_info() in UnitTest. 6231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CurrentTestInfoTest : public Test { 6232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 6233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests that current_test_info() returns NULL before the first test in 6234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the test case is run. 6235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void SetUpTestCase() { 6236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // There should be no tests running at this point. 6237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info = 6238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest::GetInstance()->current_test_info(); 6239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(test_info == NULL) 6240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "There should be no tests running at this point."; 6241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Tests that current_test_info() returns NULL after the last test in 6244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the test case has run. 6245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter static void TearDownTestCase() { 6246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info = 6247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest::GetInstance()->current_test_info(); 6248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(test_info == NULL) 6249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "There should be no tests running at this point."; 6250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that current_test_info() returns TestInfo for currently running 6254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// test by checking the expected test name against the actual one. 6255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) { 6256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info = 6257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest::GetInstance()->current_test_info(); 6258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(NULL != test_info) 6259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "There is a test running so we should have a valid TestInfo."; 6260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 6261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Expected the name of the currently running test case."; 6262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name()) 6263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Expected the name of the currently running test."; 6264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that current_test_info() returns TestInfo for currently running 6267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// test by checking the expected test name against the actual one. We 6268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// use this test to see that the TestInfo object actually changed from 6269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the previous invocation. 6270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) { 6271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const TestInfo* test_info = 6272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter UnitTest::GetInstance()->current_test_info(); 6273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(NULL != test_info) 6274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "There is a test running so we should have a valid TestInfo."; 6275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) 6276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Expected the name of the currently running test case."; 6277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name()) 6278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter << "Expected the name of the currently running test."; 6279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace testing 6282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// These two lines test that we can define tests in a namespace that 6284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// has the name "testing" and is nested in another namespace. 6285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace my_namespace { 6286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace testing { 6287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Makes sure that TEST knows to use ::testing::Test instead of 6289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ::my_namespace::testing::Test. 6290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass Test {}; 6291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Makes sure that an assertion knows to use ::testing::Message instead of 6293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ::my_namespace::testing::Message. 6294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass Message {}; 6295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Makes sure that an assertion knows to use 6297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ::testing::AssertionResult instead of 6298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ::my_namespace::testing::AssertionResult. 6299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass AssertionResult {}; 6300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that an assertion that should succeed works as expected. 6302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NestedTestingNamespaceTest, Success) { 6303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, 1) << "This shouldn't fail."; 6304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that an assertion that should fail works as expected. 6307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NestedTestingNamespaceTest, Failure) { 6308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.", 6309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "This failure is expected."); 6310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace testing 6313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} // namespace my_namespace 6314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that one can call superclass SetUp and TearDown methods-- 6316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// that is, that they are not private. 6317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// No tests are based on this fixture; the test "passes" if it compiles 6318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// successfully. 6319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ProtectedFixtureMethodsTest : public Test { 6320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 6321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void SetUp() { 6322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Test::SetUp(); 6323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void TearDown() { 6325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Test::TearDown(); 6326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// StreamingAssertionsTest tests the streaming versions of a representative 6330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// sample of assertions. 6331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, Unconditional) { 6332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SUCCEED() << "expected success"; 6333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure", 6334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(FAIL() << "expected failure", 6336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 6340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Silences warnings: "Condition is always true", "Unreachable code" 6341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option push -w-ccc -w-rch 6342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 6343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, Truth) { 6345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(true) << "unexpected failure"; 6346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(true) << "unexpected failure"; 6347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure", 6348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure", 6350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, Truth2) { 6354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(false) << "unexpected failure"; 6355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(false) << "unexpected failure"; 6356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure", 6357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure", 6359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifdef __BORLANDC__ 6363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Restores warnings after previous "#pragma option push" supressed them 6364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# pragma option pop 6365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 6366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, IntegerEquals) { 6368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, 1) << "unexpected failure"; 6369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(1, 1) << "unexpected failure"; 6370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure", 6371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure", 6373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, IntegerLessThan) { 6377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_LT(1, 2) << "unexpected failure"; 6378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_LT(1, 2) << "unexpected failure"; 6379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure", 6380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure", 6382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, StringsEqual) { 6386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("foo", "foo") << "unexpected failure"; 6387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STREQ("foo", "foo") << "unexpected failure"; 6388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure", 6389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure", 6391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, StringsNotEqual) { 6395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRNE("foo", "bar") << "unexpected failure"; 6396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRNE("foo", "bar") << "unexpected failure"; 6397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure", 6398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure", 6400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, StringsEqualIgnoringCase) { 6404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 6405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure"; 6406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure", 6407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure", 6409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) { 6413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STRCASENE("foo", "bar") << "unexpected failure"; 6414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_STRCASENE("foo", "bar") << "unexpected failure"; 6415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure", 6416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure", 6418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, FloatingPointEquals) { 6422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 6423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; 6424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure", 6425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure", 6427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_EXCEPTIONS 6431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, Throw) { 6433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 6434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure"; 6435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) << 6436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) << 6438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, NoThrow) { 6442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure"; 6443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure"; 6444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) << 6445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) << 6447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StreamingAssertionsTest, AnyThrow) { 6451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 6452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; 6453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) << 6454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) << 6456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure", "expected failure"); 6457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_HAS_EXCEPTIONS 6460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that Google Test correctly decides whether to use colors in the output. 6462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) { 6464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "yes"; 6465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); // TERM supports colors. 6467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 6469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "dumb"); // TERM doesn't support colors. 6471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 6473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) { 6476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "dumb"); // TERM doesn't support colors. 6477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "True"; 6479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 6480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "t"; 6482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 6483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "1"; 6485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. 6486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) { 6489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "no"; 6490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); // TERM supports colors. 6492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 6494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "dumb"); // TERM doesn't support colors. 6496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 6498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) { 6501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); // TERM supports colors. 6502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "F"; 6504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "0"; 6507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "unknown"; 6510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) { 6514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "auto"; 6515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); // TERM supports colors. 6517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. 6518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) { 6522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_FLAG(color) = "auto"; 6523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_OS_WINDOWS 6525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // On Windows, we ignore the TERM variable as it's usually not set. 6526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "dumb"); 6528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", ""); 6531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); 6534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#else 6536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // On non-Windows platforms, we rely on TERM to determine if the 6537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // terminal supports colors. 6538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "dumb"); // TERM doesn't support colors. 6540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "emacs"); // TERM doesn't support colors. 6543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "vt100"); // TERM doesn't support colors. 6546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors. 6549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. 6550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm"); // TERM supports colors. 6552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm-color"); // TERM supports colors. 6555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "xterm-256color"); // TERM supports colors. 6558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "screen"); // TERM supports colors. 6561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "screen-256color"); // TERM supports colors. 6564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "linux"); // TERM supports colors. 6567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SetEnv("TERM", "cygwin"); // TERM supports colors. 6570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. 6571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif // GTEST_OS_WINDOWS 6572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that StaticAssertTypeEq works in a namespace scope. 6575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>(); 6577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic bool dummy2 GTEST_ATTRIBUTE_UNUSED_ = 6578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<const int, const int>(); 6579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that StaticAssertTypeEq works in a class. 6581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T> 6583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass StaticAssertTypeEqTestHelper { 6584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 6585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); } 6586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StaticAssertTypeEqTest, WorksInClass) { 6589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEqTestHelper<bool>(); 6590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Verifies that StaticAssertTypeEq works inside a function. 6593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertypedef int IntAlias; 6595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(StaticAssertTypeEqTest, CompilesForEqualTypes) { 6597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<int, IntAlias>(); 6598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<int*, IntAlias*>(); 6599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) { 6602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter testing::UnitTest* const unit_test = testing::UnitTest::GetInstance(); 6603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We don't have a stack walker in Google Test yet. 6605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str()); 6606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str()); 6607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) { 6610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(HasNonfatalFailure()); 6611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic void FailFatally() { FAIL(); } 6614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) { 6616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FailFatally(); 6617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_nonfatal_failure = HasNonfatalFailure(); 6618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(has_nonfatal_failure); 6620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 6623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_nonfatal_failure = HasNonfatalFailure(); 6625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_nonfatal_failure); 6627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 6630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FailFatally(); 6631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_nonfatal_failure = HasNonfatalFailure(); 6633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_nonfatal_failure); 6635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A wrapper for calling HasNonfatalFailure outside of a test body. 6638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic bool HasNonfatalFailureHelper() { 6639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return testing::Test::HasNonfatalFailure(); 6640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) { 6643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(HasNonfatalFailureHelper()); 6644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) { 6647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_nonfatal_failure = HasNonfatalFailureHelper(); 6649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_nonfatal_failure); 6651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) { 6654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(HasFailure()); 6655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) { 6658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FailFatally(); 6659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_failure = HasFailure(); 6660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_failure); 6662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { 6665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_failure = HasFailure(); 6667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_failure); 6669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { 6672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter FailFatally(); 6673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_failure = HasFailure(); 6675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_failure); 6677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A wrapper for calling HasFailure outside of a test body. 6680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterstatic bool HasFailureHelper() { return testing::Test::HasFailure(); } 6681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, WorksOutsideOfTestBody) { 6683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(HasFailureHelper()); 6684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(HasFailureTest, WorksOutsideOfTestBody2) { 6687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ADD_FAILURE(); 6688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const bool has_failure = HasFailureHelper(); 6689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ClearCurrentTestPartResults(); 6690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(has_failure); 6691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass TestListener : public EmptyTestEventListener { 6694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 6695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {} 6696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener(int* on_start_counter, bool* is_destroyed) 6697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter : on_start_counter_(on_start_counter), 6698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter is_destroyed_(is_destroyed) {} 6699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual ~TestListener() { 6701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (is_destroyed_) 6702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *is_destroyed_ = true; 6703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 6706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 6707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter if (on_start_counter_ != NULL) 6708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (*on_start_counter_)++; 6709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 6712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int* on_start_counter_; 6713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool* is_destroyed_; 6714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests the constructor. 6717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestEventListenersTest, ConstructionWorks) { 6718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL); 6721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_result_printer() == NULL); 6722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_xml_generator() == NULL); 6723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the TestEventListeners destructor deletes all the listeners it 6726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// owns. 6727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestEventListenersTest, DestructionWorks) { 6728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool default_result_printer_is_destroyed = false; 6729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool default_xml_printer_is_destroyed = false; 6730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool extra_listener_is_destroyed = false; 6731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* default_result_printer = new TestListener( 6732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL, &default_result_printer_is_destroyed); 6733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* default_xml_printer = new TestListener( 6734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL, &default_xml_printer_is_destroyed); 6735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* extra_listener = new TestListener( 6736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NULL, &extra_listener_is_destroyed); 6737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 6739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, 6741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter default_result_printer); 6742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, 6743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter default_xml_printer); 6744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(extra_listener); 6745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(default_result_printer_is_destroyed); 6747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(default_xml_printer_is_destroyed); 6748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(extra_listener_is_destroyed); 6749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that a listener Append'ed to a TestEventListeners list starts 6752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// receiving events. 6753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestEventListenersTest, Append) { 6754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 6758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(listener); 6760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, on_start_counter); 6763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(is_destroyed); 6765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that listeners receive events in the order they were appended to 6768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the list, except for *End requests, which must be received in the reverse 6769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// order. 6770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass SequenceTestingListener : public EmptyTestEventListener { 6771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public: 6772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter SequenceTestingListener(std::vector<std::string>* vector, const char* id) 6773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter : vector_(vector), id_(id) {} 6774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter protected: 6776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 6777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector_->push_back(GetEventDescription("OnTestProgramStart")); 6778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 6781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector_->push_back(GetEventDescription("OnTestProgramEnd")); 6782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 6785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int /*iteration*/) { 6786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector_->push_back(GetEventDescription("OnTestIterationStart")); 6787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 6790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int /*iteration*/) { 6791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vector_->push_back(GetEventDescription("OnTestIterationEnd")); 6792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private: 6795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::string GetEventDescription(const char* method) { 6796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Message message; 6797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter message << id_ << "." << method; 6798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter return message.GetString(); 6799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<std::string>* vector_; 6802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* const id_; 6803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener); 6805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}; 6806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, AppendKeepsOrder) { 6808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter std::vector<std::string> vec; 6809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(new SequenceTestingListener(&vec, "1st")); 6811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(new SequenceTestingListener(&vec, "2nd")); 6812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(new SequenceTestingListener(&vec, "3rd")); 6813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3U, vec.size()); 6817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str()); 6818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str()); 6819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str()); 6820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vec.clear(); 6822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd( 6823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3U, vec.size()); 6825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str()); 6826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str()); 6827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str()); 6828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vec.clear(); 6830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart( 6831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance(), 0); 6832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3U, vec.size()); 6833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str()); 6834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str()); 6835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str()); 6836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter vec.clear(); 6838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd( 6839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance(), 0); 6840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3U, vec.size()); 6841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str()); 6842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str()); 6843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str()); 6844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that a listener removed from a TestEventListeners list stops receiving 6847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// events and is not deleted when the list is destroyed. 6848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(TestEventListenersTest, Release) { 6849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Although Append passes the ownership of this object to the list, 6852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the following calls release it, and we need to delete it before the 6853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // test ends. 6854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 6856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(listener); 6858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(listener, listeners.Release(listener)); 6859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.Release(listener) == NULL); 6862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, on_start_counter); 6864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(is_destroyed); 6865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete listener; 6866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that no events are forwarded when event forwarding is disabled. 6869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, SuppressEventForwarding) { 6870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, NULL); 6872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter listeners.Append(listener); 6875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 6876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SuppressEventForwarding(&listeners); 6877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); 6878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, on_start_counter); 6881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that events generated by Google Test are not forwarded in 6884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// death test subprocesses. 6885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) { 6886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_DEATH_IF_SUPPORTED({ 6887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled( 6888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *GetUnitTestImpl()->listeners())) << "expected failure";}, 6889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "expected failure"); 6890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that a listener installed via SetDefaultResultPrinter() starts 6893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// receiving events and is returned via default_result_printer() and that 6894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the previous default_result_printer is removed from the list and deleted. 6895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, default_result_printer) { 6896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 6902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(listener, listeners.default_result_printer()); 6904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, on_start_counter); 6909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Replacing default_result_printer with something else should remove it 6911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // from the list and destroy it. 6912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL); 6913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_result_printer() == NULL); 6915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(is_destroyed); 6916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // After broadcasting an event the counter is still the same, indicating 6918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the listener is not in the list anymore. 6919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, on_start_counter); 6922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the default_result_printer listener stops receiving events 6925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// when removed via Release and that is not owned by the list anymore. 6926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, RemovingDefaultResultPrinterWorks) { 6927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Although Append passes the ownership of this object to the list, 6930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the following calls release it, and we need to delete it before the 6931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // test ends. 6932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 6934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); 6936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(listener, listeners.Release(listener)); 6938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_result_printer() == NULL); 6939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(is_destroyed); 6940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Broadcasting events now should not affect default_result_printer. 6942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, on_start_counter); 6945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 6946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Destroying the list should not affect the listener now, too. 6947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(is_destroyed); 6948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete listener; 6949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that a listener installed via SetDefaultXmlGenerator() starts 6952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// receiving events and is returned via default_xml_generator() and that 6953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// the previous default_xml_generator is removed from the list and deleted. 6954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, default_xml_generator) { 6955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 6961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(listener, listeners.default_xml_generator()); 6963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, on_start_counter); 6968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Replacing default_xml_generator with something else should remove it 6970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // from the list and destroy it. 6971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL); 6972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_xml_generator() == NULL); 6974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(is_destroyed); 6975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // After broadcasting an event the counter is still the same, indicating 6977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the listener is not in the list anymore. 6978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 6979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 6980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, on_start_counter); 6981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 6982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that the default_xml_generator listener stops receiving events 6984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// when removed via Release and that is not owned by the list anymore. 6985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) { 6986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int on_start_counter = 0; 6987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter bool is_destroyed = false; 6988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Although Append passes the ownership of this object to the list, 6989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // the following calls release it, and we need to delete it before the 6990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // test ends. 6991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); 6992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter { 6993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListeners listeners; 6994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); 6995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 6996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(listener, listeners.Release(listener)); 6997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(listeners.default_xml_generator() == NULL); 6998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(is_destroyed); 6999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Broadcasting events now should not affect default_xml_generator. 7001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( 7002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter *UnitTest::GetInstance()); 7003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, on_start_counter); 7004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter } 7005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Destroying the list should not affect the listener now, too. 7006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(is_destroyed); 7007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete listener; 7008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Sanity tests to ensure that the alternative, verbose spellings of 7011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// some of the macros work. We don't test them thoroughly as that 7012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// would be quite involved. Since their implementations are 7013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// straightforward, and they are rarely used, we'll just rely on the 7014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// users to tell us when they are broken. 7015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterGTEST_TEST(AlternativeNameTest, Works) { // GTEST_TEST is the same as TEST. 7016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_SUCCEED() << "OK"; // GTEST_SUCCEED is the same as SUCCEED. 7017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // GTEST_FAIL is the same as FAIL. 7019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure", 7020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // GTEST_ASSERT_XY is the same as ASSERT_XY. 7023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_EQ(0, 0); 7025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure", 7026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure", 7028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_NE(0, 1); 7031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_NE(1, 0); 7032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure", 7033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_LE(0, 0); 7036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_LE(0, 1); 7037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure", 7038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_LT(0, 1); 7041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure", 7042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure", 7044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_GE(0, 0); 7047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_GE(1, 0); 7048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure", 7049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_ASSERT_GT(1, 0); 7052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure", 7053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure", 7055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter "An expected failure"); 7056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests for internal utilities necessary for implementation of the universal 7059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// printing. 7060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// TODO(vladl@google.com): Find a better home for them. 7061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ConversionHelperBase {}; 7063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ConversionHelperDerived : public ConversionHelperBase {}; 7064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsAProtocolMessage<T>::value is a compile-time constant. 7066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { 7067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value, 7068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const_true); 7069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false); 7070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsAProtocolMessage<T>::value is true when T is 7073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// proto2::Message or a sub-class of it. 7074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { 7075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value); 7076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value); 7077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that IsAProtocolMessage<T>::value is false when T is neither 7080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// ProtocolMessage nor a sub-class of it. 7081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { 7082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsAProtocolMessage<int>::value); 7083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value); 7084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that CompileAssertTypesEqual compiles when the type arguments are 7087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// equal. 7088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) { 7089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<void, void>(); 7090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int*, int*>(); 7091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that RemoveReference does not affect non-reference types. 7094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) { 7095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int, RemoveReference<int>::type>(); 7096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<const char, RemoveReference<const char>::type>(); 7097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that RemoveReference removes reference from reference types. 7100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveReferenceTest, RemovesReference) { 7101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int, RemoveReference<int&>::type>(); 7102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>(); 7103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GTEST_REMOVE_REFERENCE_. 7106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 7108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestGTestRemoveReference() { 7109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>(); 7110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveReferenceTest, MacroVersion) { 7113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReference<int, int>(); 7114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReference<const char, const char&>(); 7115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that RemoveConst does not affect non-const types. 7119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveConstTest, DoesNotAffectNonConstType) { 7120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int, RemoveConst<int>::type>(); 7121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<char&, RemoveConst<char&>::type>(); 7122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that RemoveConst removes const from const types. 7125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveConstTest, RemovesConst) { 7126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int, RemoveConst<const int>::type>(); 7127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>(); 7128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>(); 7129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GTEST_REMOVE_CONST_. 7132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 7134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestGTestRemoveConst() { 7135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>(); 7136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveConstTest, MacroVersion) { 7139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveConst<int, int>(); 7140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveConst<double&, double&>(); 7141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveConst<char, const char>(); 7142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GTEST_REMOVE_REFERENCE_AND_CONST_. 7145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 7147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestGTestRemoveReferenceAndConst() { 7148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>(); 7149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(RemoveReferenceToConstTest, Works) { 7152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReferenceAndConst<int, int>(); 7153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReferenceAndConst<double, double&>(); 7154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReferenceAndConst<char, const char>(); 7155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReferenceAndConst<char, const char&>(); 7156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestRemoveReferenceAndConst<const char*, const char*>(); 7157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that AddReference does not affect reference types. 7160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AddReferenceTest, DoesNotAffectReferenceType) { 7161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int&, AddReference<int&>::type>(); 7162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<const char&, AddReference<const char&>::type>(); 7163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that AddReference adds reference to non-reference types. 7166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AddReferenceTest, AddsReference) { 7167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<int&, AddReference<int>::type>(); 7168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<const char&, AddReference<const char>::type>(); 7169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GTEST_ADD_REFERENCE_. 7172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 7174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestGTestAddReference() { 7175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>(); 7176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(AddReferenceTest, MacroVersion) { 7179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestAddReference<int&, int>(); 7180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestAddReference<const char&, const char&>(); 7181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests GTEST_REFERENCE_TO_CONST_. 7184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2> 7186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtervoid TestGTestReferenceToConst() { 7187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>(); 7188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(GTestReferenceToConstTest, Works) { 7191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestReferenceToConst<const char&, char>(); 7192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestReferenceToConst<const int&, const int>(); 7193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestReferenceToConst<const double&, double>(); 7194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter TestGTestReferenceToConst<const std::string&, const std::string&>(); 7195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant. 7198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) { 7199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true); 7200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value), 7201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const_false); 7202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can 7205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// be implicitly converted to T2. 7206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) { 7207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<int, double>::value)); 7208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<double, int>::value)); 7209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value)); 7210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value)); 7211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&, 7212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const ConversionHelperBase&>::value)); 7213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase, 7214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ConversionHelperBase>::value)); 7215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1 7218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// cannot be implicitly converted to T2. 7219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) { 7220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value)); 7221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value)); 7222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value)); 7223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&, 7224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ConversionHelperDerived&>::value)); 7225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests IsContainerTest. 7228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass NonContainer {}; 7230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsContainerTestTest, WorksForNonContainer) { 7232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0))); 7233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0))); 7234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0))); 7235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(IsContainerTestTest, WorksForContainer) { 7238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(IsContainer), 7239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter sizeof(IsContainerTest<std::vector<bool> >(0))); 7240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(sizeof(IsContainer), 7241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter sizeof(IsContainerTest<std::map<int, double> >(0))); 7242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ArrayEq(). 7245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ArrayEqTest, WorksForDegeneratedArrays) { 7247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(5, 5L)); 7248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ArrayEq('a', 0)); 7249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ArrayEqTest, WorksForOneDimensionalArrays) { 7252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // Note that a and b are distinct but compatible types. 7253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int a[] = { 0, 1 }; 7254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter long b[] = { 0, 1 }; 7255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, b)); 7256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, 2, b)); 7257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter b[0] = 2; 7259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ArrayEq(a, b)); 7260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ArrayEq(a, 1, b)); 7261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ArrayEqTest, WorksForTwoDimensionalArrays) { 7264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char a[][3] = { "hi", "lo" }; 7265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char b[][3] = { "hi", "lo" }; 7266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char c[][3] = { "hi", "li" }; 7267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, b)); 7269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, 2, b)); 7270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ArrayEq(a, c)); 7272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(ArrayEq(a, 2, c)); 7273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests ArrayAwareFind(). 7276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ArrayAwareFindTest, WorksForOneDimensionalArray) { 7278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char a[] = "hello"; 7279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o')); 7280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x')); 7281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) { 7284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; 7285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int b[2] = { 2, 3 }; 7286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b)); 7287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int c[2] = { 6, 7 }; 7289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c)); 7290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests CopyArray(). 7293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CopyArrayTest, WorksForDegeneratedArrays) { 7295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int n = 0; 7296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CopyArray('a', &n); 7297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ('a', n); 7298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CopyArrayTest, WorksForOneDimensionalArrays) { 7301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char a[3] = "hi"; 7302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int b[3]; 7303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 7304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CopyArray(a, &b); 7305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, b)); 7306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 7307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int c[3]; 7309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CopyArray(a, 3, c); 7310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, c)); 7311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(CopyArrayTest, WorksForTwoDimensionalArrays) { 7314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } }; 7315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int b[2][3]; 7316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. 7317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CopyArray(a, &b); 7318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, b)); 7319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif 7320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter int c[2][3]; 7322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter CopyArray(a, 2, c); 7323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(ArrayEq(a, c)); 7324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests NativeArray. 7327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NativeArrayTest, ConstructorFromArrayWorks) { 7329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int a[3] = { 0, 1, 2 }; 7330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<int> na(a, 3, kReference); 7331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3U, na.size()); 7332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a, na.begin()); 7333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { 7336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter typedef int Array[2]; 7337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter Array* a = new Array[1]; 7338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (*a)[0] = 0; 7339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter (*a)[1] = 1; 7340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<int> na(*a, 2, kCopy); 7341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_NE(*a, na.begin()); 7342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter delete[] a; 7343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, na.begin()[0]); 7344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, na.begin()[1]); 7345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // We rely on the heap checker to verify that na deletes the copy of 7347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter // array. 7348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NativeArrayTest, TypeMembersAreCorrect) { 7351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<char, NativeArray<char>::value_type>(); 7352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>(); 7353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>(); 7355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>(); 7356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NativeArrayTest, MethodsWork) { 7359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int a[3] = { 0, 1, 2 }; 7360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<int> na(a, 3, kCopy); 7361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(3U, na.size()); 7362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(3, na.end() - na.begin()); 7363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<int>::const_iterator it = na.begin(); 7365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(0, *it); 7366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ++it; 7367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(1, *it); 7368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter it++; 7369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(2, *it); 7370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ++it; 7371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(na.end(), it); 7372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(na == na); 7374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<int> na2(a, 3, kReference); 7376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(na == na2); 7377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int b1[3] = { 0, 1, 1 }; 7379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const int b2[4] = { 0, 1, 2, 3 }; 7380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(na == NativeArray<int>(b1, 3, kReference)); 7381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(na == NativeArray<int>(b2, 4, kCopy)); 7382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(NativeArrayTest, WorksForTwoDimensionalArray) { 7385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char a[2][3] = { "hi", "lo" }; 7386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter NativeArray<char[3]> na(a, 2, kReference); 7387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter ASSERT_EQ(2U, na.size()); 7388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(a, na.begin()); 7389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Tests SkipPrefix(). 7392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SkipPrefixTest, SkipsWhenPrefixMatches) { 7394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* const str = "hello"; 7395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* p = str; 7397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(SkipPrefix("", &p)); 7398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(str, p); 7399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter p = str; 7401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_TRUE(SkipPrefix("hell", &p)); 7402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(str + 4, p); 7403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterTEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) { 7406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* const str = "world"; 7407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter const char* p = str; 7409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(SkipPrefix("W", &p)); 7410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(str, p); 7411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter 7412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter p = str; 7413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_FALSE(SkipPrefix("world!", &p)); 7414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter EXPECT_EQ(str, p); 7415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter} 7416