1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2007, 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: wan@google.com (Zhanyong Wan)
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is the input to a negative-compilation test for Google
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Test.  Code here is NOT supposed to compile.  Its purpose is to
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// verify that certain incorrect usages of the Google Test API are
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// indeed rejected by the compiler.
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// We still need to write the negative-compilation test itself, which
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// will be tightly coupled with the build environment.
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// TODO(wan@google.com): finish the negative-compilation test.
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifdef TEST_CANNOT_IGNORE_RUN_ALL_TESTS_RESULT
43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the result of RUN_ALL_TESTS() cannot be ignored.
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint main(int argc, char** argv) {
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  testing::InitGoogleTest(&argc, argv);
49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  RUN_ALL_TESTS();  // This line shouldn't compile.
50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_USER_CANNOT_INCLUDE_GTEST_INTERNAL_INL_H)
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that a user cannot include gtest-internal-inl.h in his code.
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include "src/gtest-internal-inl.h"
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_DECLARING_SETUP_IN_TEST_FIXTURE_WITH_TYPO)
58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches the typo when a user declares a
59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Setup() method in a test fixture.
60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MyTest : public testing::Test {
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  void Setup() {}
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_CALLING_SETUP_IN_TEST_WITH_TYPO)
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches the typo when a user calls Setup()
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// from a test fixture.
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MyTest : public testing::Test {
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  virtual void SetUp() {
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    testing::Test::Setup();  // Tries to call SetUp() in the parent class.
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_DECLARING_SETUP_IN_ENVIRONMENT_WITH_TYPO)
82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches the typo when a user declares a
83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Setup() method in a subclass of Environment.
84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MyEnvironment : public testing::Environment {
88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public:
89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  void Setup() {}
90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_CALLING_SETUP_IN_ENVIRONMENT_WITH_TYPO)
93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches the typo when a user calls Setup()
94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in an Environment.
95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MyEnvironment : public testing::Environment {
99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  virtual void SetUp() {
101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    // Tries to call SetUp() in the parent class.
102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    testing::Environment::Setup();
103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_WRONG_CASE_IN_TYPED_TEST_P)
107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches using the wrong test case name in
108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// TYPED_TEST_P.
109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FooTest : public testing::Test {
114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass BarTest : public testing::Test {
118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_CASE_P(FooTest);
121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_P(BarTest, A) {}  // Wrong test case name.
122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleREGISTER_TYPED_TEST_CASE_P(FooTest, A);
123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleINSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_WRONG_CASE_IN_REGISTER_TYPED_TEST_CASE_P)
126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches using the wrong test case name in
127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// REGISTER_TYPED_TEST_CASE_P.
128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FooTest : public testing::Test {
133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass BarTest : public testing::Test {
137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_CASE_P(FooTest);
140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_P(FooTest, A) {}
141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleREGISTER_TYPED_TEST_CASE_P(BarTest, A);  // Wrong test case name.
142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleINSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_WRONG_CASE_IN_INSTANTIATE_TYPED_TEST_CASE_P)
145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches using the wrong test case name in
146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// INSTANTIATE_TYPED_TEST_CASE_P.
147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FooTest : public testing::Test {
152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass BarTest : public testing::Test {
156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_CASE_P(FooTest);
159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_P(FooTest, A) {}
160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleREGISTER_TYPED_TEST_CASE_P(FooTest, A);
161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Wrong test case name.
163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleINSTANTIATE_TYPED_TEST_CASE_P(My, BarTest, testing::Types<int>);
164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_CATCHES_INSTANTIATE_TYPED_TESET_CASE_P_WITH_SAME_NAME_PREFIX)
166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that the compiler catches instantiating TYPED_TEST_CASE_P
167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// twice with the same name prefix.
168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FooTest : public testing::Test {
173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_CASE_P(FooTest);
176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_P(FooTest, A) {}
177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleREGISTER_TYPED_TEST_CASE_P(FooTest, A);
178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleINSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<int>);
180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Wrong name prefix: "My" has been used.
182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleINSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, testing::Types<double>);
183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_STATIC_ASSERT_TYPE_EQ_IS_NOT_A_TYPE)
185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that StaticAssertTypeEq<T1, T2> cannot be used as a type.
189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletesting::StaticAssertTypeEq<int, int> dummy;
190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_NAMESPACE)
192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Tests that StaticAssertTypeEq<T1, T2> works in a namespace scope.
196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillestatic bool dummy = testing::StaticAssertTypeEq<int, const int>();
197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_CLASS)
199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass Helper {
204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public:
205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Tests that StaticAssertTypeEq<T1, T2> works in a class.
206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Helper() { testing::StaticAssertTypeEq<int, T>(); }
207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  void DoSomething() {}
209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid Test() {
212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Helper<bool> h;
213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  h.DoSomething();  // To avoid the "unused variable" warning.
214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif defined(TEST_STATIC_ASSERT_TYPE_EQ_WORKS_IN_FUNCTION)
217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid Test() {
221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Tests that StaticAssertTypeEq<T1, T2> works inside a function.
222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  testing::StaticAssertTypeEq<const int, int>();
223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A sanity test.  This should compile.
227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint main() {
231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  return RUN_ALL_TESTS();
232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif
235