1610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov/* Copyright (c) 2008-2010, Google Inc.
2610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * All rights reserved.
3610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov *
4610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * Redistribution and use in source and binary forms, with or without
5610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * modification, are permitted provided that the following conditions are
6610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * met:
7610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov *
8610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov *     * Redistributions of source code must retain the above copyright
9610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * notice, this list of conditions and the following disclaimer.
10610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov *     * Neither the name of Google Inc. nor the names of its
11610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * contributors may be used to endorse or promote products derived from
12610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * this software without specific prior written permission.
13610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov *
14610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
18610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
20610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov */
26610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
27610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// This file is a part of a test suite for ThreadSanitizer, a race detector.
28610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// Author: Timur Iskhodzhanov
29610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov//
30610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// For ThreadSanitizer tests, we want ANNOTATE_FLUSH_EXPECTED_RACES to be called
31610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// after running each test case.
32610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// This file contains a hack that replaces the googletest TEST macro and injects
33610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// a custom fixture class instead of ::testing::Test for TEST tests
34610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// (i.e. those test that don't have fixtures)
35610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov//
36610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// IMPORTANT NOTICE: please inherit your custom fixtures from RacecheckFixture,
37610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// not ::testing::Test
38610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// and call RacecheckFixture::TearDown() from your TearDown()
39610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
40610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#ifndef TEST
41610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#error Please include gtest_fixture_injection.h after <gtest/gtest.h>
42610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#endif
43610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
44610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovclass RacecheckFixture : public ::testing::Test {
45610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov public:
46610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  virtual void TearDown() {
47610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov    ANNOTATE_FLUSH_EXPECTED_RACES();
48610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  }
49610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov};
50610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
51610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#undef TEST
52610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#define TEST(test_case_name, test_name)\
53610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  GTEST_TEST_(test_case_name, test_name, \
54610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov              ::RacecheckFixture, ::testing::internal::GetTestTypeId())
55