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