Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
9bda90b7
Unverified
Commit
9bda90b7
authored
Mar 07, 2018
by
Gennadiy Civil
Committed by
GitHub
Mar 07, 2018
Browse files
Merge pull request #1497 from gennadiycivil/master
Merging, XML tests
parents
703b4a85
e8919006
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
114 additions
and
26 deletions
+114
-26
googletest/src/gtest.cc
googletest/src/gtest.cc
+36
-3
googletest/test/gtest_xml_outfiles_test.py
googletest/test/gtest_xml_outfiles_test.py
+14
-2
googletest/test/gtest_xml_output_unittest.py
googletest/test/gtest_xml_output_unittest.py
+42
-8
googletest/test/gtest_xml_test_utils.py
googletest/test/gtest_xml_test_utils.py
+22
-13
No files found.
googletest/src/gtest.cc
View file @
9bda90b7
...
...
@@ -3448,6 +3448,11 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener {
// to delimit this attribute from prior attributes.
static
std
::
string
TestPropertiesAsXmlAttributes
(
const
TestResult
&
result
);
// Streams an XML representation of the test properties of a TestResult
// object.
static
void
OutputXmlTestProperties
(
std
::
ostream
*
stream
,
const
TestResult
&
result
);
// The output file.
const
std
::
string
output_file_
;
...
...
@@ -3659,6 +3664,10 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
const
TestResult
&
result
=
*
test_info
.
result
();
const
std
::
string
kTestcase
=
"testcase"
;
if
(
test_info
.
is_in_another_shard
())
{
return
;
}
*
stream
<<
" <testcase"
;
OutputXmlAttribute
(
stream
,
kTestcase
,
"name"
,
test_info
.
name
());
...
...
@@ -3675,7 +3684,6 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
OutputXmlAttribute
(
stream
,
kTestcase
,
"time"
,
FormatTimeInMillisAsSeconds
(
result
.
elapsed_time
()));
OutputXmlAttribute
(
stream
,
kTestcase
,
"classname"
,
test_case_name
);
*
stream
<<
TestPropertiesAsXmlAttributes
(
result
);
int
failures
=
0
;
for
(
int
i
=
0
;
i
<
result
.
total_part_count
();
++
i
)
{
...
...
@@ -3697,10 +3705,15 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
}
}
if
(
failures
==
0
)
if
(
failures
==
0
&&
result
.
test_property_count
()
==
0
)
{
*
stream
<<
" />
\n
"
;
else
}
else
{
if
(
failures
==
0
)
{
*
stream
<<
">
\n
"
;
}
OutputXmlTestProperties
(
stream
,
result
);
*
stream
<<
" </testcase>
\n
"
;
}
}
// Prints an XML representation of a TestCase object
...
...
@@ -3780,6 +3793,26 @@ std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
return
attributes
.
GetString
();
}
void
XmlUnitTestResultPrinter
::
OutputXmlTestProperties
(
std
::
ostream
*
stream
,
const
TestResult
&
result
)
{
const
std
::
string
kProperties
=
"properties"
;
const
std
::
string
kProperty
=
"property"
;
if
(
result
.
test_property_count
()
<=
0
)
{
return
;
}
*
stream
<<
"<"
<<
kProperties
<<
">
\n
"
;
for
(
int
i
=
0
;
i
<
result
.
test_property_count
();
++
i
)
{
const
TestProperty
&
property
=
result
.
GetTestProperty
(
i
);
*
stream
<<
"<"
<<
kProperty
;
*
stream
<<
" name=
\"
"
<<
EscapeXmlAttribute
(
property
.
key
())
<<
"
\"
"
;
*
stream
<<
" value=
\"
"
<<
EscapeXmlAttribute
(
property
.
value
())
<<
"
\"
"
;
*
stream
<<
"/>
\n
"
;
}
*
stream
<<
"</"
<<
kProperties
<<
">
\n
"
;
}
// End XmlUnitTestResultPrinter
...
...
googletest/test/gtest_xml_outfiles_test.py
View file @
9bda90b7
...
...
@@ -43,7 +43,13 @@ GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_"
EXPECTED_XML_1
=
"""<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests">
<testsuite name="PropertyOne" tests="1" failures="0" disabled="0" errors="0" time="*">
<testcase name="TestSomeProperties" status="run" time="*" classname="PropertyOne" SetUpProp="1" TestSomeProperty="1" TearDownProp="1" />
<testcase name="TestSomeProperties" status="run" time="*" classname="PropertyOne">
<properties>
<property name="SetUpProp" value="1"/>
<property name="TestSomeProperty" value="1"/>
<property name="TearDownProp" value="1"/>
</properties>
</testcase>
</testsuite>
</testsuites>
"""
...
...
@@ -51,7 +57,13 @@ EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?>
EXPECTED_XML_2
=
"""<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests">
<testsuite name="PropertyTwo" tests="1" failures="0" disabled="0" errors="0" time="*">
<testcase name="TestSomeProperties" status="run" time="*" classname="PropertyTwo" SetUpProp="2" TestSomeProperty="2" TearDownProp="2" />
<testcase name="TestSomeProperties" status="run" time="*" classname="PropertyTwo">
<properties>
<property name="SetUpProp" value="2"/>
<property name="TestSomeProperty" value="2"/>
<property name="TearDownProp" value="2"/>
</properties>
</testcase>
</testsuite>
</testsuites>
"""
...
...
googletest/test/gtest_xml_output_unittest.py
View file @
9bda90b7
...
...
@@ -104,15 +104,45 @@ Invalid characters in brackets []%(stack)s]]></failure>
<testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/>
</testsuite>
<testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*" SetUpTestCase="yes" TearDownTestCase="aye">
<testcase name="OneProperty" status="run" time="*" classname="PropertyRecordingTest" key_1="1"/>
<testcase name="IntValuedProperty" status="run" time="*" classname="PropertyRecordingTest" key_int="1"/>
<testcase name="ThreeProperties" status="run" time="*" classname="PropertyRecordingTest" key_1="1" key_2="2" key_3="3"/>
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" time="*" classname="PropertyRecordingTest" key_1="2"/>
<testcase name="OneProperty" status="run" time="*" classname="PropertyRecordingTest">
<properties>
<property name="key_1" value="1"/>
</properties>
</testcase>
<testcase name="IntValuedProperty" status="run" time="*" classname="PropertyRecordingTest">
<properties>
<property name="key_int" value="1"/>
</properties>
</testcase>
<testcase name="ThreeProperties" status="run" time="*" classname="PropertyRecordingTest">
<properties>
<property name="key_1" value="1"/>
<property name="key_2" value="2"/>
<property name="key_3" value="3"/>
</properties>
</testcase>
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" time="*" classname="PropertyRecordingTest">
<properties>
<property name="key_1" value="2"/>
</properties>
</testcase>
</testsuite>
<testsuite name="NoFixtureTest" tests="3" failures="0" disabled="0" errors="0" time="*">
<testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest" key="1"/>
<testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_int="1"/>
<testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_string="1"/>
<testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest">
<properties>
<property name="key" value="1"/>
</properties>
</testcase>
<testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" time="*" classname="NoFixtureTest">
<properties>
<property name="key_for_utility_int" value="1"/>
</properties>
</testcase>
<testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" time="*" classname="NoFixtureTest">
<properties>
<property name="key_for_utility_string" value="1"/>
</properties>
</testcase>
</testsuite>
<testsuite name="Single/ValueParamTest" tests="4" failures="0" disabled="0" errors="0" time="*">
<testcase name="HasValueParamAttribute/0" value_param="33" status="run" time="*" classname="Single/ValueParamTest" />
...
...
@@ -149,7 +179,11 @@ EXPECTED_SHARDED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
</testsuite>
<testsuite name="NoFixtureTest" tests="1" failures="0" disabled="0" errors="0" time="*">
<testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest" key="1"/>
<testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest">
<properties>
<property name="key" value="1"/>
</properties>
</testcase>
</testsuite>
<testsuite name="Single/ValueParamTest" tests="1" failures="0" disabled="0" errors="0" time="*">
<testcase name="AnotherTestThatHasValueParamAttribute/1" value_param="42" status="run" time="*" classname="Single/ValueParamTest" />
...
...
googletest/test/gtest_xml_test_utils.py
View file @
9bda90b7
...
...
@@ -101,19 +101,22 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
self
.
AssertEquivalentNodes
(
child
,
actual_children
[
child_id
])
identifying_attribute
=
{
'testsuites'
:
'name'
,
'testsuite'
:
'name'
,
'testcase'
:
'name'
,
'failure'
:
'message'
,
}
'testsuites'
:
'name'
,
'testsuite'
:
'name'
,
'testcase'
:
'name'
,
'failure'
:
'message'
,
'property'
:
'name'
,
}
def
_GetChildren
(
self
,
element
):
"""
Fetches all of the child nodes of element, a DOM Element object.
Returns them as the values of a dictionary keyed by the IDs of the
children. For <testsuites>, <testsuite> and <testcase> elements, the ID
is the value of their "name" attribute; for <failure> elements, it is
the value of the "message" attribute; CDATA sections and non-whitespace
children. For <testsuites>, <testsuite>, <testcase>, and <property>
elements, the ID is the value of their "name" attribute; for <failure>
elements, it is the value of the "message" attribute; for <properties>
elements, it is the value of their parent's "name" attribute plus the
literal string "properties"; CDATA sections and non-whitespace
text nodes are concatenated into a single CDATA section with ID
"detail". An exception is raised if any element other than the above
four is encountered, if two child elements with the same identifying
...
...
@@ -123,11 +126,17 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
children
=
{}
for
child
in
element
.
childNodes
:
if
child
.
nodeType
==
Node
.
ELEMENT_NODE
:
self
.
assert_
(
child
.
tagName
in
self
.
identifying_attribute
,
'Encountered unknown element <%s>'
%
child
.
tagName
)
childID
=
child
.
getAttribute
(
self
.
identifying_attribute
[
child
.
tagName
])
self
.
assert_
(
childID
not
in
children
)
children
[
childID
]
=
child
if
child
.
tagName
==
'properties'
:
self
.
assert_
(
child
.
parentNode
is
not
None
,
'Encountered <properties> element without a parent'
)
child_id
=
child
.
parentNode
.
getAttribute
(
'name'
)
+
'-properties'
else
:
self
.
assert_
(
child
.
tagName
in
self
.
identifying_attribute
,
'Encountered unknown element <%s>'
%
child
.
tagName
)
child_id
=
child
.
getAttribute
(
self
.
identifying_attribute
[
child
.
tagName
])
self
.
assert_
(
child_id
not
in
children
)
children
[
child_id
]
=
child
elif
child
.
nodeType
in
[
Node
.
TEXT_NODE
,
Node
.
CDATA_SECTION_NODE
]:
if
'detail'
not
in
children
:
if
(
child
.
nodeType
==
Node
.
CDATA_SECTION_NODE
or
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment