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