1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc.
2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// All Rights Reserved.
3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without
5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are
6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met:
7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions of source code must retain the above copyright
9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer.
10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions in binary form must reproduce the above
11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer
12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the
13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution.
14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Neither the name of Google Inc. nor the names of its
15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from
16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission.
17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: mheule@google.com (Markus Heule)
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest-test-part.h>
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing testing::Test;
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing testing::TestPartResult;
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing testing::TestPartResultArray;
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace {
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests the TestPartResult class.
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// The test fixture for testing TestPartResult.
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass TestPartResultTest : public Test {
47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultTest()
49d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville      : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"),
50d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville        r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"),
51d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville        r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {}
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResult r1_, r2_, r3_;
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::type().
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, type) {
58d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville  EXPECT_EQ(TestPartResult::kSuccess, r1_.type());
59d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville  EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type());
60d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville  EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type());
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::file_name().
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, file_name) {
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("foo/bar.cc", r1_.file_name());
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(NULL, r3_.file_name());
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::line_number().
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, line_number) {
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(10, r1_.line_number());
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(-1, r2_.line_number());
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::message().
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, message) {
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Success!", r1_.message());
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::passed().
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, Passed) {
82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(r1_.passed());
83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r2_.passed());
84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r3_.passed());
85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::failed().
88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, Failed) {
89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r1_.failed());
90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(r2_.failed());
91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(r3_.failed());
92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::fatally_failed().
95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, FatallyFailed) {
96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r1_.fatally_failed());
97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r2_.fatally_failed());
98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(r3_.fatally_failed());
99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests TestPartResult::nonfatally_failed().
102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultTest, NonfatallyFailed) {
103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r1_.nonfatally_failed());
104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(r2_.nonfatally_failed());
105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(r3_.nonfatally_failed());
106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests the TestPartResultArray class.
109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass TestPartResultArrayTest : public Test {
111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultArrayTest()
113d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville      : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"),
114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville        r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {}
115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestPartResult r1_, r2_;
117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that TestPartResultArray initially has size 0.
120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultArrayTest, InitialSizeIsZero) {
121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultArray results;
122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(0, results.size());
123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that TestPartResultArray contains the given TestPartResult
126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// after one Append() operation.
127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) {
128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultArray results;
129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  results.Append(r1_);
130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(1, results.size());
131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message());
132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that TestPartResultArray contains the given TestPartResults
135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// after two Append() operations.
136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) {
137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultArray results;
138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  results.Append(r1_);
139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  results.Append(r2_);
140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(2, results.size());
141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message());
142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message());
143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletypedef TestPartResultArrayTest TestPartResultArrayDeathTest;
146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the program dies when GetTestPartResult() is called with
148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// an invalid index.
149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) {
150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  TestPartResultArray results;
151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  results.Append(r1_);
152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville  EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), "");
154d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville  EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), "");
155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper.
158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace
160