1f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// Copyright 2009, Google Inc.
2f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// All rights reserved.
3f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//
4f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// Redistribution and use in source and binary forms, with or without
5f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// modification, are permitted provided that the following conditions are
6f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// met:
7f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//
8f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//     * Redistributions of source code must retain the above copyright
9f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// notice, this list of conditions and the following disclaimer.
10f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//     * Redistributions in binary form must reproduce the above
11f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// copyright notice, this list of conditions and the following disclaimer
12f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// in the documentation and/or other materials provided with the
13f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// distribution.
14f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//     * Neither the name of Google Inc. nor the names of its
15f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// contributors may be used to endorse or promote products derived from
16f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// this software without specific prior written permission.
17f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//
18f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan//
30f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// Author: wan@google.com (Zhanyong Wan)
31f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
32f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// Verifies that test shuffling works.
33f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
342620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h"
35f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
36f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wannamespace {
37f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
38f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::EmptyTestEventListener;
39f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::InitGoogleTest;
40f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::Message;
41f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::Test;
42f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::TestEventListeners;
43f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::TestInfo;
44f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::UnitTest;
45f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanusing ::testing::internal::scoped_ptr;
46f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
47f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// The test methods are empty, as the sole purpose of this program is
48f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// to print the test names before/after shuffling.
49f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
50f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanclass A : public Test {};
51f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(A, A) {}
52f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST_F(A, B) {}
53f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
54f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(ADeathTest, A) {}
55f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(ADeathTest, B) {}
56f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(ADeathTest, C) {}
57f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
58f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(B, A) {}
59f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(B, B) {}
60f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(B, C) {}
61f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(B, DISABLED_D) {}
62f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(B, DISABLED_E) {}
63f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
64f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(BDeathTest, A) {}
65f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(BDeathTest, B) {}
66f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
67f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(C, A) {}
68f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(C, B) {}
69f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(C, C) {}
70f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(C, DISABLED_D) {}
71f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
72f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(CDeathTest, A) {}
73f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
74f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(DISABLED_D, A) {}
75f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanTEST(DISABLED_D, DISABLED_B) {}
76f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
77f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// This printer prints the full test names only, starting each test
78f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan// iteration with a "----" marker.
79f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanclass TestNamePrinter : public EmptyTestEventListener {
80f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan public:
81f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  virtual void OnTestIterationStart(const UnitTest& /* unit_test */,
82f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan                                    int /* iteration */) {
83f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan    printf("----\n");
84f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  }
85f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
86f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  virtual void OnTestStart(const TestInfo& test_info) {
87f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan    printf("%s.%s\n", test_info.test_case_name(), test_info.name());
88f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  }
89f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan};
90f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
91f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan}  // namespace
92f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
93f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wanint main(int argc, char **argv) {
94f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  InitGoogleTest(&argc, argv);
95f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
96f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  // Replaces the default printer with TestNamePrinter, which prints
97f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  // the test name only.
98f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
99f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  delete listeners.Release(listeners.default_result_printer());
100f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  listeners.Append(new TestNamePrinter);
101f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan
102f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan  return RUN_ALL_TESTS();
103f19450f3ad156e1dea624b4d37e645bef067ab5czhanyong.wan}
104