1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#!/usr/bin/env python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2006, Google Inc. 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# All rights reserved. 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Unit test for the gtest_xml_output module""" 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'eefacm@gmail.com (Sean Mcafee)' 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport errno 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport os 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport sys 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom xml.dom import minidom, Node 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport gtest_test_utils 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport gtest_xml_test_utils 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGTEST_OUTPUT_FLAG = "--gtest_output" 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" 47d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGTEST_PROGRAM_NAME = "gtest_xml_output_unittest_" 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleSUPPORTS_STACK_TRACES = False 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif SUPPORTS_STACK_TRACES: 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville STACK_TRACE_TEMPLATE = "\nStack trace:\n*" 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleelse: 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville STACK_TRACE_TEMPLATE = "" 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleEXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> 57d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville<testsuites tests="15" failures="4" disabled="2" errors="0" time="*" name="AllTests"> 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*"> 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/> 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="FailedTest" tests="1" failures="1" disabled="0" errors="0" time="*"> 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="Fails" status="run" time="*" classname="FailedTest"> 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <failure message="Value of: 2
Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:* 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleValue of: 2 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleExpected: 1%(stack)s]]></failure> 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testcase> 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*"> 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="Succeeds" status="run" time="*" classname="MixedResultTest"/> 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="Fails" status="run" time="*" classname="MixedResultTest"> 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <failure message="Value of: 2
Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:* 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleValue of: 2 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleExpected: 1%(stack)s]]></failure> 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <failure message="Value of: 3
Expected: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:* 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleValue of: 3 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleExpected: 2%(stack)s]]></failure> 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testcase> 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="DISABLED_test" status="notrun" time="*" classname="MixedResultTest"/> 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 80d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <testsuite name="XmlQuotingTest" tests="1" failures="1" disabled="0" errors="0" time="*"> 81d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <testcase name="OutputsCData" status="run" time="*" classname="XmlQuotingTest"> 82d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <failure message="Failed
XML output: <?xml encoding="utf-8"><top><![CDATA[cdata text]]></top>" type=""><![CDATA[gtest_xml_output_unittest_.cc:* 83d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleFailed 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleXML output: <?xml encoding="utf-8"><top><![CDATA[cdata text]]>]]><![CDATA[</top>%(stack)s]]></failure> 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville </testcase> 86d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville </testsuite> 87d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <testsuite name="InvalidCharactersTest" tests="1" failures="1" disabled="0" errors="0" time="*"> 88d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <testcase name="InvalidCharactersInMessage" status="run" time="*" classname="InvalidCharactersTest"> 89d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville <failure message="Failed
Invalid characters in brackets []" type=""><![CDATA[gtest_xml_output_unittest_.cc:* 90d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleFailed 91d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleInvalid characters in brackets []%(stack)s]]></failure> 92d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville </testcase> 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville </testsuite> 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="DisabledTest" tests="1" failures="0" disabled="1" errors="0" time="*"> 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/> 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*"> 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="OneProperty" status="run" time="*" classname="PropertyRecordingTest" key_1="1"/> 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="IntValuedProperty" status="run" time="*" classname="PropertyRecordingTest" key_int="1"/> 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="ThreeProperties" status="run" time="*" classname="PropertyRecordingTest" key_1="1" key_2="2" key_3="3"/> 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="TwoValuesForOneKeyUsesLastValue" status="run" time="*" classname="PropertyRecordingTest" key_1="2"/> 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testsuite name="NoFixtureTest" tests="3" failures="0" disabled="0" errors="0" time="*"> 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest" key="1"/> 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_int="1"/> 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville <testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_string="1"/> 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville </testsuite> 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville</testsuites>""" % {'stack': STACK_TRACE_TEMPLATE} 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleEXPECTED_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville<testsuites tests="0" failures="0" disabled="0" errors="0" time="*" name="AllTests"> 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville</testsuites>""" 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Unit test for Google Test's XML output functionality. 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNonEmptyXmlOutput(self): 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Runs a test program that generates a non-empty XML output, and 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville tests that the XML output is expected. 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 126d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1) 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEmptyXmlOutput(self): 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Runs a test program that generates an empty XML output, and 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville tests that the XML output is expected. 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._TestXmlOutput("gtest_no_test_unittest", 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EXPECTED_EMPTY_XML, 0) 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testDefaultOutputFile(self): 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Confirms that Google Test produces an XML output file with the expected 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville default name if no name is explicitly specified. 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output_file = os.path.join(gtest_test_utils.GetTempDir(), 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GTEST_DEFAULT_OUTPUT_FILE) 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville gtest_prog_path = gtest_test_utils.GetTestExecutablePath( 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "gtest_no_test_unittest") 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville os.remove(output_file) 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except OSError, e: 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if e.errno != errno.ENOENT: 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raise 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville p = gtest_test_utils.Subprocess( 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG], 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville working_dir=gtest_test_utils.GetTempDir()) 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assert_(p.exited) 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(0, p.exit_code) 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assert_(os.path.isfile(output_file)) 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 159d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testSuppressedXmlOutput(self): 160d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Tests that no XML file is generated if the default XML listener is 162d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville shut down before RUN_ALL_TESTS is invoked. 163d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 164d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 165d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville xml_path = os.path.join(gtest_test_utils.GetTempDir(), 166d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville GTEST_PROGRAM_NAME + "out.xml") 167d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if os.path.isfile(xml_path): 168d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville os.remove(xml_path) 169d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 170d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville gtest_prog_path = gtest_test_utils.GetTestExecutablePath(GTEST_PROGRAM_NAME) 171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 172d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville command = [gtest_prog_path, 173d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path), 174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "--shut_down_xml"] 175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville p = gtest_test_utils.Subprocess(command) 176d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if p.terminated_by_signal: 177d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assert_(False, 178d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "%s was killed by signal %d" % (gtest_prog_name, p.signal)) 179d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville else: 180d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assert_(p.exited) 181d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals(1, p.exit_code, 182d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "'%s' exited with code %s, which doesn't match " 183d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "the expected exit code %s." 184d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville % (command, p.exit_code, 1)) 185d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 186d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assert_(not os.path.isfile(xml_path)) 187d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code): 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Asserts that the XML document generated by running the program 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville gtest_prog_name matches expected_xml, a string containing another 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville XML document. Furthermore, the program's exit code must be 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville expected_exit_code. 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville xml_path = os.path.join(gtest_test_utils.GetTempDir(), 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville gtest_prog_name + "out.xml") 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name) 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)] 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville p = gtest_test_utils.Subprocess(command) 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if p.terminated_by_signal: 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assert_(False, 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "%s was killed by signal %d" % (gtest_prog_name, p.signal)) 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assert_(p.exited) 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(expected_exit_code, p.exit_code, 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "'%s' exited with code %s, which doesn't match " 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "the expected exit code %s." 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville % (command, p.exit_code, expected_exit_code)) 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville expected = minidom.parseString(expected_xml) 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville actual = minidom.parse(xml_path) 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.NormalizeXml(actual.documentElement) 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.AssertEquivalentNodes(expected.documentElement, 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville actual.documentElement) 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville expected.unlink() 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville actual .unlink() 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__': 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville os.environ['GTEST_STACK_TRACE_DEPTH'] = '1' 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville gtest_test_utils.Main() 225