11be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Copyright 2006, Google Inc. 21be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// All rights reserved. 31be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 41be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Redistribution and use in source and binary forms, with or without 51be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// modification, are permitted provided that the following conditions are 61be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// met: 71be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 81be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions of source code must retain the above copyright 91be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// notice, this list of conditions and the following disclaimer. 101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions in binary form must reproduce the above 111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// copyright notice, this list of conditions and the following disclaimer 121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in the documentation and/or other materials provided with the 131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// distribution. 141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Neither the name of Google Inc. nor the names of its 151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// contributors may be used to endorse or promote products derived from 161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this software without specific prior written permission. 171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Author: eefacm@gmail.com (Sean Mcafee) 311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Unit test for Google Test XML output. 331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A user can specify XML output in a Google Test program to run via 351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// either the GTEST_OUTPUT environment variable or the --gtest_output 361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// flag. This is used for testing such functionality. 371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This program will be invoked from a Python unit test. Don't run it 391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// directly. 401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest.h" 421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::InitGoogleTest; 4441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestEventListeners; 4541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestWithParam; 4641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::UnitTest; 4741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::Test; 4841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::Types; 4941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::Values; 5041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SuccessfulTest : public Test { 521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 541be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(SuccessfulTest, Succeeds) { 551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania SUCCEED() << "This is a success."; 561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, 1); 571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass FailedTest : public Test { 601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(FailedTest, Fails) { 631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, 2); 641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass DisabledTest : public Test { 671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 691be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(DisabledTest, DISABLED_test_not_run) { 701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled test should not be run"; 711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MixedResultTest, Succeeds) { 741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, 1); 751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(1, 1); 761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MixedResultTest, Fails) { 791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania EXPECT_EQ(1, 2); 801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ASSERT_EQ(2, 3); 811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(MixedResultTest, DISABLED_test) { 841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FAIL() << "Unexpected failure: Disabled test should not be run"; 851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(XmlQuotingTest, OutputsCData) { 8841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FAIL() << "XML output: " 8941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "<?xml encoding=\"utf-8\"><top><![CDATA[cdata text]]></top>"; 9041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 9141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Helps to test that invalid characters produced by test code do not make 9341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// it into the XML file. 9441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(InvalidCharactersTest, InvalidCharactersInMessage) { 9541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot FAIL() << "Invalid characters in brackets [\x1\x2]"; 9641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 9741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass PropertyRecordingTest : public Test { 991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 1001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(PropertyRecordingTest, OneProperty) { 1021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_1", "1"); 1031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1051be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(PropertyRecordingTest, IntValuedProperty) { 1061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_int", 1); 1071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(PropertyRecordingTest, ThreeProperties) { 1101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_1", "1"); 1111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_2", "2"); 1121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_3", "3"); 1131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(PropertyRecordingTest, TwoValuesForOneKeyUsesLastValue) { 1161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_1", "1"); 1171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key_1", "2"); 1181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NoFixtureTest, RecordProperty) { 1211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RecordProperty("key", "1"); 1221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid ExternalUtilityThatCallsRecordProperty(const char* key, int value) { 1251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania testing::Test::RecordProperty(key, value); 1261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid ExternalUtilityThatCallsRecordProperty(const char* key, 1291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* value) { 1301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania testing::Test::RecordProperty(key, value); 1311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1331be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) { 1341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ExternalUtilityThatCallsRecordProperty("key_for_utility_int", 1); 1351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) { 1381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ExternalUtilityThatCallsRecordProperty("key_for_utility_string", "1"); 1391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 14041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Verifies that the test parameter value is output in the 'value_param' 14241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// XML attribute for value-parameterized tests. 14341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass ValueParamTest : public TestWithParam<int> {}; 14441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_P(ValueParamTest, HasValueParamAttribute) {} 14541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_P(ValueParamTest, AnotherTestThatHasValueParamAttribute) {} 14641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotINSTANTIATE_TEST_CASE_P(Single, ValueParamTest, Values(33, 42)); 14741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Verifies that the type parameter name is output in the 'type_param' 14941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// XML attribute for typed tests. 15041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T> class TypedTest : public Test {}; 15141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottypedef Types<int, long> TypedTestTypes; 15241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTYPED_TEST_CASE(TypedTest, TypedTestTypes); 15341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTYPED_TEST(TypedTest, HasTypeParamAttribute) {} 15441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Verifies that the type parameter name is output in the 'type_param' 15641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// XML attribute for type-parameterized tests. 15741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T> class TypeParameterizedTestCase : public Test {}; 15841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTYPED_TEST_CASE_P(TypeParameterizedTestCase); 15941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTYPED_TEST_P(TypeParameterizedTestCase, HasTypeParamAttribute) {} 16041d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotREGISTER_TYPED_TEST_CASE_P(TypeParameterizedTestCase, HasTypeParamAttribute); 16141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottypedef Types<int, long> TypeParameterizedTestCaseTypes; 16241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotINSTANTIATE_TYPED_TEST_CASE_P(Single, 16341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TypeParameterizedTestCase, 16441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TypeParameterizedTestCaseTypes); 16541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 16641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotint main(int argc, char** argv) { 16741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot InitGoogleTest(&argc, argv); 16841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 16941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (argc > 1 && strcmp(argv[1], "--shut_down_xml") == 0) { 17041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); 17141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot delete listeners.Release(listeners.default_xml_generator()); 17241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 17341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return RUN_ALL_TESTS(); 17441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 175