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
e8919006
Commit
e8919006
authored
Mar 07, 2018
by
Gennadiy Civil
Browse files
Merging, XML tests
parent
703b4a85
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 @
e8919006
...
@@ -3448,6 +3448,11 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener {
...
@@ -3448,6 +3448,11 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener {
// to delimit this attribute from prior attributes.
// to delimit this attribute from prior attributes.
static
std
::
string
TestPropertiesAsXmlAttributes
(
const
TestResult
&
result
);
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.
// The output file.
const
std
::
string
output_file_
;
const
std
::
string
output_file_
;
...
@@ -3659,6 +3664,10 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
...
@@ -3659,6 +3664,10 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
const
TestResult
&
result
=
*
test_info
.
result
();
const
TestResult
&
result
=
*
test_info
.
result
();
const
std
::
string
kTestcase
=
"testcase"
;
const
std
::
string
kTestcase
=
"testcase"
;
if
(
test_info
.
is_in_another_shard
())
{
return
;
}
*
stream
<<
" <testcase"
;
*
stream
<<
" <testcase"
;
OutputXmlAttribute
(
stream
,
kTestcase
,
"name"
,
test_info
.
name
());
OutputXmlAttribute
(
stream
,
kTestcase
,
"name"
,
test_info
.
name
());
...
@@ -3675,7 +3684,6 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
...
@@ -3675,7 +3684,6 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
OutputXmlAttribute
(
stream
,
kTestcase
,
"time"
,
OutputXmlAttribute
(
stream
,
kTestcase
,
"time"
,
FormatTimeInMillisAsSeconds
(
result
.
elapsed_time
()));
FormatTimeInMillisAsSeconds
(
result
.
elapsed_time
()));
OutputXmlAttribute
(
stream
,
kTestcase
,
"classname"
,
test_case_name
);
OutputXmlAttribute
(
stream
,
kTestcase
,
"classname"
,
test_case_name
);
*
stream
<<
TestPropertiesAsXmlAttributes
(
result
);
int
failures
=
0
;
int
failures
=
0
;
for
(
int
i
=
0
;
i
<
result
.
total_part_count
();
++
i
)
{
for
(
int
i
=
0
;
i
<
result
.
total_part_count
();
++
i
)
{
...
@@ -3697,10 +3705,15 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
...
@@ -3697,10 +3705,15 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
}
}
}
}
if
(
failures
==
0
)
if
(
failures
==
0
&&
result
.
test_property_count
()
==
0
)
{
*
stream
<<
" />
\n
"
;
*
stream
<<
" />
\n
"
;
else
}
else
{
if
(
failures
==
0
)
{
*
stream
<<
">
\n
"
;
}
OutputXmlTestProperties
(
stream
,
result
);
*
stream
<<
" </testcase>
\n
"
;
*
stream
<<
" </testcase>
\n
"
;
}
}
}
// Prints an XML representation of a TestCase object
// Prints an XML representation of a TestCase object
...
@@ -3780,6 +3793,26 @@ std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
...
@@ -3780,6 +3793,26 @@ std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
return
attributes
.
GetString
();
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
// End XmlUnitTestResultPrinter
...
...
googletest/test/gtest_xml_outfiles_test.py
View file @
e8919006
...
@@ -43,7 +43,13 @@ GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_"
...
@@ -43,7 +43,13 @@ GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_"
EXPECTED_XML_1
=
"""<?xml version="1.0" encoding="UTF-8"?>
EXPECTED_XML_1
=
"""<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests">
<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="*">
<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>
</testsuite>
</testsuites>
</testsuites>
"""
"""
...
@@ -51,7 +57,13 @@ EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?>
...
@@ -51,7 +57,13 @@ EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?>
EXPECTED_XML_2
=
"""<?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">
<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="*">
<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>
</testsuite>
</testsuites>
</testsuites>
"""
"""
...
...
googletest/test/gtest_xml_output_unittest.py
View file @
e8919006
...
@@ -104,15 +104,45 @@ Invalid characters in brackets []%(stack)s]]></failure>
...
@@ -104,15 +104,45 @@ Invalid characters in brackets []%(stack)s]]></failure>
<testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/>
<testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/>
</testsuite>
</testsuite>
<testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*" SetUpTestCase="yes" TearDownTestCase="aye">
<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="OneProperty" status="run" time="*" classname="PropertyRecordingTest">
<testcase name="IntValuedProperty" status="run" time="*" classname="PropertyRecordingTest" key_int="1"/>
<properties>
<testcase name="ThreeProperties" status="run" time="*" classname="PropertyRecordingTest" key_1="1" key_2="2" key_3="3"/>
<property name="key_1" value="1"/>
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" time="*" classname="PropertyRecordingTest" key_1="2"/>
</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>
<testsuite name="NoFixtureTest" tests="3" failures="0" disabled="0" errors="0" time="*">
<testsuite name="NoFixtureTest" tests="3" 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">
<testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_int="1"/>
<properties>
<testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_string="1"/>
<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>
<testsuite name="Single/ValueParamTest" tests="4" failures="0" disabled="0" errors="0" time="*">
<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" />
<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"?>
...
@@ -149,7 +179,11 @@ EXPECTED_SHARDED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
</testsuite>
</testsuite>
<testsuite name="NoFixtureTest" tests="1" failures="0" disabled="0" errors="0" time="*">
<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>
<testsuite name="Single/ValueParamTest" tests="1" failures="0" disabled="0" errors="0" time="*">
<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" />
<testcase name="AnotherTestThatHasValueParamAttribute/1" value_param="42" status="run" time="*" classname="Single/ValueParamTest" />
...
...
googletest/test/gtest_xml_test_utils.py
View file @
e8919006
...
@@ -101,19 +101,22 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
...
@@ -101,19 +101,22 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
self
.
AssertEquivalentNodes
(
child
,
actual_children
[
child_id
])
self
.
AssertEquivalentNodes
(
child
,
actual_children
[
child_id
])
identifying_attribute
=
{
identifying_attribute
=
{
'testsuites'
:
'name'
,
'testsuites'
:
'name'
,
'testsuite'
:
'name'
,
'testsuite'
:
'name'
,
'testcase'
:
'name'
,
'testcase'
:
'name'
,
'failure'
:
'message'
,
'failure'
:
'message'
,
}
'property'
:
'name'
,
}
def
_GetChildren
(
self
,
element
):
def
_GetChildren
(
self
,
element
):
"""
"""
Fetches all of the child nodes of element, a DOM Element object.
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
Returns them as the values of a dictionary keyed by the IDs of the
children. For <testsuites>, <testsuite> and <testcase> elements, the ID
children. For <testsuites>, <testsuite>, <testcase>, and <property>
is the value of their "name" attribute; for <failure> elements, it is
elements, the ID is the value of their "name" attribute; for <failure>
the value of the "message" attribute; CDATA sections and non-whitespace
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
text nodes are concatenated into a single CDATA section with ID
"detail". An exception is raised if any element other than the above
"detail". An exception is raised if any element other than the above
four is encountered, if two child elements with the same identifying
four is encountered, if two child elements with the same identifying
...
@@ -123,11 +126,17 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
...
@@ -123,11 +126,17 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
children
=
{}
children
=
{}
for
child
in
element
.
childNodes
:
for
child
in
element
.
childNodes
:
if
child
.
nodeType
==
Node
.
ELEMENT_NODE
:
if
child
.
nodeType
==
Node
.
ELEMENT_NODE
:
self
.
assert_
(
child
.
tagName
in
self
.
identifying_attribute
,
if
child
.
tagName
==
'properties'
:
'Encountered unknown element <%s>'
%
child
.
tagName
)
self
.
assert_
(
child
.
parentNode
is
not
None
,
childID
=
child
.
getAttribute
(
self
.
identifying_attribute
[
child
.
tagName
])
'Encountered <properties> element without a parent'
)
self
.
assert_
(
childID
not
in
children
)
child_id
=
child
.
parentNode
.
getAttribute
(
'name'
)
+
'-properties'
children
[
childID
]
=
child
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
]:
elif
child
.
nodeType
in
[
Node
.
TEXT_NODE
,
Node
.
CDATA_SECTION_NODE
]:
if
'detail'
not
in
children
:
if
'detail'
not
in
children
:
if
(
child
.
nodeType
==
Node
.
CDATA_SECTION_NODE
or
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