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