19f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// Copyright 2008 Google Inc. 29f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// All Rights Reserved. 39f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// 49f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// Redistribution and use in source and binary forms, with or without 59f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// modification, are permitted provided that the following conditions are 69f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// met: 79f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// 89f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// * Redistributions of source code must retain the above copyright 99f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// notice, this list of conditions and the following disclaimer. 109f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// * Redistributions in binary form must reproduce the above 11ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// copyright notice, this list of conditions and the following disclaimer 12ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// in the documentation and/or other materials provided with the 13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// distribution. 149f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// * Neither the name of Google Inc. nor the names of its 159f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// contributors may be used to endorse or promote products derived from 169f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// this software without specific prior written permission. 179f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// 189f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 199f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 209f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 219f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 229f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 239f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 249f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 259f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 269f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 279f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 289f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 299f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// 309f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// Author: mheule@google.com (Markus Heule) 319f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// 329f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 339f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth#include <gtest/gtest-test-part.h> 349f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 359f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth#include <gtest/gtest.h> 369f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 379f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruthusing testing::Test; 389f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruthusing testing::TestPartResult; 399f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruthusing testing::TestPartResultArray; 409f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 419f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruthnamespace { 429f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 439f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// Tests the TestPartResult class. 449f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth 459f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth// The test fixture for testing TestPartResult. 469f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruthclass TestPartResultTest : public Test { 479f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth protected: 489f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth TestPartResultTest() 499f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"), 509f7a6eeee441bcbb1b17208cb3abd65a0017525aChandler Carruth r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"), 51 r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {} 52 53 TestPartResult r1_, r2_, r3_; 54}; 55 56// Tests TestPartResult::type(). 57TEST_F(TestPartResultTest, type) { 58 EXPECT_EQ(TestPartResult::kSuccess, r1_.type()); 59 EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type()); 60 EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type()); 61} 62 63// Tests TestPartResult::file_name(). 64TEST_F(TestPartResultTest, file_name) { 65 EXPECT_STREQ("foo/bar.cc", r1_.file_name()); 66 EXPECT_STREQ(NULL, r3_.file_name()); 67} 68 69// Tests TestPartResult::line_number(). 70TEST_F(TestPartResultTest, line_number) { 71 EXPECT_EQ(10, r1_.line_number()); 72 EXPECT_EQ(-1, r2_.line_number()); 73} 74 75// Tests TestPartResult::message(). 76TEST_F(TestPartResultTest, message) { 77 EXPECT_STREQ("Success!", r1_.message()); 78} 79 80// Tests TestPartResult::passed(). 81TEST_F(TestPartResultTest, Passed) { 82 EXPECT_TRUE(r1_.passed()); 83 EXPECT_FALSE(r2_.passed()); 84 EXPECT_FALSE(r3_.passed()); 85} 86 87// Tests TestPartResult::failed(). 88TEST_F(TestPartResultTest, Failed) { 89 EXPECT_FALSE(r1_.failed()); 90 EXPECT_TRUE(r2_.failed()); 91 EXPECT_TRUE(r3_.failed()); 92} 93 94// Tests TestPartResult::fatally_failed(). 95TEST_F(TestPartResultTest, FatallyFailed) { 96 EXPECT_FALSE(r1_.fatally_failed()); 97 EXPECT_FALSE(r2_.fatally_failed()); 98 EXPECT_TRUE(r3_.fatally_failed()); 99} 100 101// Tests TestPartResult::nonfatally_failed(). 102TEST_F(TestPartResultTest, NonfatallyFailed) { 103 EXPECT_FALSE(r1_.nonfatally_failed()); 104 EXPECT_TRUE(r2_.nonfatally_failed()); 105 EXPECT_FALSE(r3_.nonfatally_failed()); 106} 107 108// Tests the TestPartResultArray class. 109 110class TestPartResultArrayTest : public Test { 111 protected: 112 TestPartResultArrayTest() 113 : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"), 114 r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {} 115 116 const TestPartResult r1_, r2_; 117}; 118 119// Tests that TestPartResultArray initially has size 0. 120TEST_F(TestPartResultArrayTest, InitialSizeIsZero) { 121 TestPartResultArray results; 122 EXPECT_EQ(0, results.size()); 123} 124 125// Tests that TestPartResultArray contains the given TestPartResult 126// after one Append() operation. 127TEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) { 128 TestPartResultArray results; 129 results.Append(r1_); 130 EXPECT_EQ(1, results.size()); 131 EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); 132} 133 134// Tests that TestPartResultArray contains the given TestPartResults 135// after two Append() operations. 136TEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) { 137 TestPartResultArray results; 138 results.Append(r1_); 139 results.Append(r2_); 140 EXPECT_EQ(2, results.size()); 141 EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); 142 EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message()); 143} 144 145typedef TestPartResultArrayTest TestPartResultArrayDeathTest; 146 147// Tests that the program dies when GetTestPartResult() is called with 148// an invalid index. 149TEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) { 150 TestPartResultArray results; 151 results.Append(r1_); 152 153 EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), ""); 154 EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), ""); 155} 156 157// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper. 158 159} // namespace 160