PageRenderTime 37ms CodeModel.GetById 20ms app.highlight 13ms RepoModel.GetById 1ms app.codeStats 1ms

/thirdparty/breakpad/third_party/protobuf/protobuf/gtest/test/gtest_nc.cc

http://github.com/tomahawk-player/tomahawk
C++ | 234 lines | 111 code | 58 blank | 65 comment | 0 complexity | 2497b5ac51540a2be71cbe60bb01600b MD5 | raw file
  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@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@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
 47int 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
 63class 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
 74class 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
 87class 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
 98class 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
112template <typename T>
113class FooTest : public testing::Test {
114};
115
116template <typename T>
117class BarTest : public testing::Test {
118};
119
120TYPED_TEST_CASE_P(FooTest);
121TYPED_TEST_P(BarTest, A) {}  // Wrong test case name.
122REGISTER_TYPED_TEST_CASE_P(FooTest, A);
123INSTANTIATE_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
131template <typename T>
132class FooTest : public testing::Test {
133};
134
135template <typename T>
136class BarTest : public testing::Test {
137};
138
139TYPED_TEST_CASE_P(FooTest);
140TYPED_TEST_P(FooTest, A) {}
141REGISTER_TYPED_TEST_CASE_P(BarTest, A);  // Wrong test case name.
142INSTANTIATE_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
150template <typename T>
151class FooTest : public testing::Test {
152};
153
154template <typename T>
155class BarTest : public testing::Test {
156};
157
158TYPED_TEST_CASE_P(FooTest);
159TYPED_TEST_P(FooTest, A) {}
160REGISTER_TYPED_TEST_CASE_P(FooTest, A);
161
162// Wrong test case name.
163INSTANTIATE_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
171template <typename T>
172class FooTest : public testing::Test {
173};
174
175TYPED_TEST_CASE_P(FooTest);
176TYPED_TEST_P(FooTest, A) {}
177REGISTER_TYPED_TEST_CASE_P(FooTest, A);
178
179INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
180
181// Wrong name prefix: "My" has been used.
182INSTANTIATE_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.
189testing::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.
196static 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
202template <typename T>
203class 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
211void 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
220void 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
230int main() {
231  return RUN_ALL_TESTS();
232}
233
234#endif