Home | History | Annotate | Download | only in test
      1 // Copyright 2007, Google Inc.
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are
      6 // met:
      7 //
      8 //     * Redistributions of source code must retain the above copyright
      9 // notice, this list of conditions and the following disclaimer.
     10 //     * Redistributions in binary form must reproduce the above
     11 // copyright notice, this list of conditions and the following disclaimer
     12 // in the documentation and/or other materials provided with the
     13 // distribution.
     14 //     * Neither the name of Google Inc. nor the names of its
     15 // contributors may be used to endorse or promote products derived from
     16 // this software without specific prior written permission.
     17 //
     18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 //
     30 // Author: wan (at) google.com (Zhanyong Wan)
     31 
     32 // This file is the input to a negative-compilation test for Google
     33 // Test.  Code here is NOT supposed to compile.  Its purpose is to
     34 // verify that certain incorrect usages of the Google Test API are
     35 // indeed rejected by the compiler.
     36 //
     37 // We still need to write the negative-compilation test itself, which
     38 // will be tightly coupled with the build environment.
     39 //
     40 // TODO(wan (at) google.com): finish the negative-compilation test.
     41 
     42 #ifdef TEST_CANNOT_IGNORE_RUN_ALL_TESTS_RESULT
     43 // Tests that the result of RUN_ALL_TESTS() cannot be ignored.
     44 
     45 #include <gtest/gtest.h>
     46 
     47 int main(int argc, char** argv) {
     48   testing::InitGoogleTest(&argc, argv);
     49   RUN_ALL_TESTS();  // This line shouldn't compile.
     50 }
     51 
     52 #elif defined(TEST_USER_CANNOT_INCLUDE_GTEST_INTERNAL_INL_H)
     53 // Tests that a user cannot include gtest-internal-inl.h in his code.
     54 
     55 #include "src/gtest-internal-inl.h"
     56 
     57 #elif defined(TEST_CATCHES_DECLARING_SETUP_IN_TEST_FIXTURE_WITH_TYPO)
     58 // Tests that the compiler catches the typo when a user declares a
     59 // Setup() method in a test fixture.
     60 
     61 #include <gtest/gtest.h>
     62 
     63 class MyTest : public testing::Test {
     64  protected:
     65   void Setup() {}
     66 };
     67 
     68 #elif defined(TEST_CATCHES_CALLING_SETUP_IN_TEST_WITH_TYPO)
     69 // Tests that the compiler catches the typo when a user calls Setup()
     70 // from a test fixture.
     71 
     72 #include <gtest/gtest.h>
     73 
     74 class MyTest : public testing::Test {
     75  protected:
     76   virtual void SetUp() {
     77     testing::Test::Setup();  // Tries to call SetUp() in the parent class.
     78   }
     79 };
     80 
     81 #elif defined(TEST_CATCHES_DECLARING_SETUP_IN_ENVIRONMENT_WITH_TYPO)
     82 // Tests that the compiler catches the typo when a user declares a
     83 // Setup() method in a subclass of Environment.
     84 
     85 #include <gtest/gtest.h>
     86 
     87 class MyEnvironment : public testing::Environment {
     88  public:
     89   void Setup() {}
     90 };
     91 
     92 #elif defined(TEST_CATCHES_CALLING_SETUP_IN_ENVIRONMENT_WITH_TYPO)
     93 // Tests that the compiler catches the typo when a user calls Setup()
     94 // in an Environment.
     95 
     96 #include <gtest/gtest.h>
     97 
     98 class MyEnvironment : public testing::Environment {
     99  protected:
    100   virtual void SetUp() {
    101     // Tries to call SetUp() in the parent class.
    102     testing::Environment::Setup();
    103   }
    104 };
    105 
    106 #elif defined(TEST_CATCHES_WRONG_CASE_IN_TYPED_TEST_P)
    107 // Tests that the compiler catches using the wrong test case name in
    108 // TYPED_TEST_P.
    109 
    110 #include <gtest/gtest.h>
    111 
    112 template <typename T>
    113 class FooTest : public testing::Test {
    114 };
    115 
    116 template <typename T>
    117 class BarTest : public testing::Test {
    118 };
    119 
    120 TYPED_TEST_CASE_P(FooTest);
    121 TYPED_TEST_P(BarTest, A) {}  // Wrong test case name.
    122 REGISTER_TYPED_TEST_CASE_P(FooTest, A);
    123 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
    124 
    125 #elif defined(TEST_CATCHES_WRONG_CASE_IN_REGISTER_TYPED_TEST_CASE_P)
    126 // Tests that the compiler catches using the wrong test case name in
    127 // REGISTER_TYPED_TEST_CASE_P.
    128 
    129 #include <gtest/gtest.h>
    130 
    131 template <typename T>
    132 class FooTest : public testing::Test {
    133 };
    134 
    135 template <typename T>
    136 class BarTest : public testing::Test {
    137 };
    138 
    139 TYPED_TEST_CASE_P(FooTest);
    140 TYPED_TEST_P(FooTest, A) {}
    141 REGISTER_TYPED_TEST_CASE_P(BarTest, A);  // Wrong test case name.
    142 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
    143 
    144 #elif defined(TEST_CATCHES_WRONG_CASE_IN_INSTANTIATE_TYPED_TEST_CASE_P)
    145 // Tests that the compiler catches using the wrong test case name in
    146 // INSTANTIATE_TYPED_TEST_CASE_P.
    147 
    148 #include <gtest/gtest.h>
    149 
    150 template <typename T>
    151 class FooTest : public testing::Test {
    152 };
    153 
    154 template <typename T>
    155 class BarTest : public testing::Test {
    156 };
    157 
    158 TYPED_TEST_CASE_P(FooTest);
    159 TYPED_TEST_P(FooTest, A) {}
    160 REGISTER_TYPED_TEST_CASE_P(FooTest, A);
    161 
    162 // Wrong test case name.
    163 INSTANTIATE_TYPED_TEST_CASE_P(My, BarTest, testing::Types<int>);
    164 
    165 #elif defined(TEST_CATCHES_INSTANTIATE_TYPED_TESET_CASE_P_WITH_SAME_NAME_PREFIX)
    166 // Tests that the compiler catches instantiating TYPED_TEST_CASE_P
    167 // twice with the same name prefix.
    168 
    169 #include <gtest/gtest.h>
    170 
    171 template <typename T>
    172 class FooTest : public testing::Test {
    173 };
    174 
    175 TYPED_TEST_CASE_P(FooTest);
    176 TYPED_TEST_P(FooTest, A) {}
    177 REGISTER_TYPED_TEST_CASE_P(FooTest, A);
    178 
    179 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
    180 
    181 // Wrong name prefix: "My" has been used.
    182 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<double>);
    183 
    184 #elif defined(TEST_STATIC_ASSERT_TYPE_EQ_IS_NOT_A_TYPE)
    185 
    186 #include <gtest/gtest.h>
    187 
    188 // Tests that StaticAssertTypeEq<T1, T2> cannot be used as a type.
    189 testing::StaticAssertTypeEq<int, int> dummy;
    190 
    191 #elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_NAMESPACE)
    192 
    193 #include <gtest/gtest.h>
    194 
    195 // Tests that StaticAssertTypeEq<T1, T2> works in a namespace scope.
    196 static bool dummy = testing::StaticAssertTypeEq<int, const int>();
    197 
    198 #elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_CLASS)
    199 
    200 #include <gtest/gtest.h>
    201 
    202 template <typename T>
    203 class Helper {
    204  public:
    205   // Tests that StaticAssertTypeEq<T1, T2> works in a class.
    206   Helper() { testing::StaticAssertTypeEq<int, T>(); }
    207 
    208   void DoSomething() {}
    209 };
    210 
    211 void Test() {
    212   Helper<bool> h;
    213   h.DoSomething();  // To avoid the "unused variable" warning.
    214 }
    215 
    216 #elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_FUNCTION)
    217 
    218 #include <gtest/gtest.h>
    219 
    220 void Test() {
    221   // Tests that StaticAssertTypeEq<T1, T2> works inside a function.
    222   testing::StaticAssertTypeEq<const int, int>();
    223 }
    224 
    225 #else
    226 // A sanity test.  This should compile.
    227 
    228 #include <gtest/gtest.h>
    229 
    230 int main() {
    231   return RUN_ALL_TESTS();
    232 }
    233 
    234 #endif
    235