gtest_xml_output_unittest_.cc revision d0332953cda33fb4f8e24ebff9c49159b69c43d6
1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2006, Google Inc. 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// All rights reserved. 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: eefacm@gmail.com (Sean Mcafee) 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Unit test for Google Test XML output. 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A user can specify XML output in a Google Test program to run via 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// either the GTEST_OUTPUT environment variable or the --gtest_output 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// flag. This is used for testing such functionality. 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This program will be invoked from a Python unit test. Don't run it 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// directly. 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h> 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 43d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleusing ::testing::InitGoogleTest; 44d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleusing ::testing::TestEventListeners; 45d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleusing ::testing::UnitTest; 46d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass SuccessfulTest : public testing::Test { 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(SuccessfulTest, Succeeds) { 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SUCCEED() << "This is a success."; 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ASSERT_EQ(1, 1); 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FailedTest : public testing::Test { 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(FailedTest, Fails) { 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ASSERT_EQ(1, 2); 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass DisabledTest : public testing::Test { 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(DisabledTest, DISABLED_test_not_run) { 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FAIL() << "Unexpected failure: Disabled test should not be run"; 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(MixedResultTest, Succeeds) { 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EXPECT_EQ(1, 1); 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ASSERT_EQ(1, 1); 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(MixedResultTest, Fails) { 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EXPECT_EQ(1, 2); 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ASSERT_EQ(2, 3); 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(MixedResultTest, DISABLED_test) { 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FAIL() << "Unexpected failure: Disabled test should not be run"; 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 83d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleTEST(XmlQuotingTest, OutputsCData) { 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville FAIL() << "XML output: " 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "<?xml encoding=\"utf-8\"><top><![CDATA[cdata text]]></top>"; 86d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 87d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 88d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville// Helps to test that invalid characters produced by test code do not make 89d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville// it into the XML file. 90d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleTEST(InvalidCharactersTest, InvalidCharactersInMessage) { 91d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville FAIL() << "Invalid characters in brackets [\x1\x2]"; 92d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass PropertyRecordingTest : public testing::Test { 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(PropertyRecordingTest, OneProperty) { 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_1", "1"); 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(PropertyRecordingTest, IntValuedProperty) { 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_int", 1); 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(PropertyRecordingTest, ThreeProperties) { 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_1", "1"); 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_2", "2"); 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_3", "3"); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(PropertyRecordingTest, TwoValuesForOneKeyUsesLastValue) { 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_1", "1"); 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key_1", "2"); 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(NoFixtureTest, RecordProperty) { 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RecordProperty("key", "1"); 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid ExternalUtilityThatCallsRecordProperty(const char* key, int value) { 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville testing::Test::RecordProperty(key, value); 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid ExternalUtilityThatCallsRecordProperty(const char* key, 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const char* value) { 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville testing::Test::RecordProperty(key, value); 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) { 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ExternalUtilityThatCallsRecordProperty("key_for_utility_int", 1); 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) { 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ExternalUtilityThatCallsRecordProperty("key_for_utility_string", "1"); 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 136d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 137d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleint main(int argc, char** argv) { 138d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville InitGoogleTest(&argc, argv); 139d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 140d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (argc > 1 && strcmp(argv[1], "--shut_down_xml") == 0) { 141d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); 142d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville delete listeners.Release(listeners.default_xml_generator()); 143d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return RUN_ALL_TESTS(); 145d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 146