Commit 532dc2de authored by zhanyong.wan's avatar zhanyong.wan
Browse files

Implements a subset of TR1 tuple needed by gtest and gmock (by Zhanyong Wan);...

Implements a subset of TR1 tuple needed by gtest and gmock (by Zhanyong Wan); cleaned up the Python tests (by Vlad Losev); made run_tests.py invokable from any directory (by Vlad Losev).
parent 210ea10e
...@@ -34,19 +34,24 @@ ...@@ -34,19 +34,24 @@
__author__ = 'eefacm@gmail.com (Sean Mcafee)' __author__ = 'eefacm@gmail.com (Sean Mcafee)'
import errno import errno
import gtest_test_utils
import os import os
import sys import sys
import tempfile
import unittest
from xml.dom import minidom, Node from xml.dom import minidom, Node
import gtest_test_utils
import gtest_xml_test_utils import gtest_xml_test_utils
GTEST_OUTPUT_FLAG = "--gtest_output" GTEST_OUTPUT_FLAG = "--gtest_output"
GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml"
SUPPORTS_STACK_TRACES = False
if SUPPORTS_STACK_TRACES:
STACK_TRACE_TEMPLATE = "\nStack trace:\n*"
else:
STACK_TRACE_TEMPLATE = ""
EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="13" failures="2" disabled="2" errors="0" time="*" name="AllTests"> <testsuites tests="13" failures="2" disabled="2" errors="0" time="*" name="AllTests">
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*">
...@@ -56,7 +61,7 @@ EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> ...@@ -56,7 +61,7 @@ EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testcase name="Fails" status="run" time="*" classname="FailedTest"> <testcase name="Fails" status="run" time="*" classname="FailedTest">
<failure message="Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Value of: 2 Value of: 2
Expected: 1]]></failure> Expected: 1%(stack)s]]></failure>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*"> <testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*">
...@@ -64,10 +69,10 @@ Expected: 1]]></failure> ...@@ -64,10 +69,10 @@ Expected: 1]]></failure>
<testcase name="Fails" status="run" time="*" classname="MixedResultTest"> <testcase name="Fails" status="run" time="*" classname="MixedResultTest">
<failure message="Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Value of: 2 Value of: 2
Expected: 1]]></failure> Expected: 1%(stack)s]]></failure>
<failure message="Value of: 3&#x0A;Expected: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="Value of: 3&#x0A;Expected: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Value of: 3 Value of: 3
Expected: 2]]></failure> Expected: 2%(stack)s]]></failure>
</testcase> </testcase>
<testcase name="DISABLED_test" status="notrun" time="*" classname="MixedResultTest"/> <testcase name="DISABLED_test" status="notrun" time="*" classname="MixedResultTest"/>
</testsuite> </testsuite>
...@@ -85,7 +90,7 @@ Expected: 2]]></failure> ...@@ -85,7 +90,7 @@ Expected: 2]]></failure>
<testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_int="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="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" time="*" classname="NoFixtureTest" key_for_utility_string="1"/>
</testsuite> </testsuite>
</testsuites>""" </testsuites>""" % {'stack': STACK_TRACE_TEMPLATE}
EXPECTED_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
...@@ -120,8 +125,8 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): ...@@ -120,8 +125,8 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
Confirms that Google Test produces an XML output file with the expected Confirms that Google Test produces an XML output file with the expected
default name if no name is explicitly specified. default name if no name is explicitly specified.
""" """
temp_dir = tempfile.mkdtemp() output_file = os.path.join(gtest_test_utils.GetTempDir(),
output_file = os.path.join(temp_dir, GTEST_DEFAULT_OUTPUT_FILE) GTEST_DEFAULT_OUTPUT_FILE)
gtest_prog_path = gtest_test_utils.GetTestExecutablePath( gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
"gtest_no_test_unittest") "gtest_no_test_unittest")
try: try:
...@@ -132,7 +137,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): ...@@ -132,7 +137,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
p = gtest_test_utils.Subprocess( p = gtest_test_utils.Subprocess(
[gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG], [gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG],
working_dir=temp_dir) working_dir=gtest_test_utils.GetTempDir())
self.assert_(p.exited) self.assert_(p.exited)
self.assertEquals(0, p.exit_code) self.assertEquals(0, p.exit_code)
self.assert_(os.path.isfile(output_file)) self.assert_(os.path.isfile(output_file))
...@@ -145,8 +150,8 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): ...@@ -145,8 +150,8 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
XML document. Furthermore, the program's exit code must be XML document. Furthermore, the program's exit code must be
expected_exit_code. expected_exit_code.
""" """
xml_path = os.path.join(gtest_test_utils.GetTempDir(),
xml_path = os.path.join(tempfile.mkdtemp(), gtest_prog_name + "out.xml") gtest_prog_name + "out.xml")
gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name) gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name)
command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)] command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)]
......
...@@ -34,14 +34,15 @@ ...@@ -34,14 +34,15 @@
__author__ = 'eefacm@gmail.com (Sean Mcafee)' __author__ = 'eefacm@gmail.com (Sean Mcafee)'
import re import re
import unittest
from xml.dom import minidom, Node from xml.dom import minidom, Node
import gtest_test_utils
GTEST_OUTPUT_FLAG = "--gtest_output" GTEST_OUTPUT_FLAG = "--gtest_output"
GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml"
class GTestXMLTestCase(unittest.TestCase): class GTestXMLTestCase(gtest_test_utils.TestCase):
""" """
Base class for tests of Google Test's XML output functionality. Base class for tests of Google Test's XML output functionality.
""" """
......
...@@ -48,6 +48,8 @@ class FakePath(object): ...@@ -48,6 +48,8 @@ class FakePath(object):
self.tree = {} self.tree = {}
self.path_separator = os.sep self.path_separator = os.sep
# known_paths contains either absolute or relative paths. Relative paths
# are absolutized with self.current_dir.
if known_paths: if known_paths:
self._AddPaths(known_paths) self._AddPaths(known_paths)
...@@ -91,8 +93,11 @@ class FakePath(object): ...@@ -91,8 +93,11 @@ class FakePath(object):
return tree return tree
def normpath(self, path):
return os.path.normpath(path)
def abspath(self, path): def abspath(self, path):
return os.path.normpath(os.path.join(self.current_dir, path)) return self.normpath(os.path.join(self.current_dir, path))
def isfile(self, path): def isfile(self, path):
return self.PathElement(self.abspath(path)) == 1 return self.PathElement(self.abspath(path)) == 1
...@@ -157,7 +162,8 @@ class GetTestsToRunTest(unittest.TestCase): ...@@ -157,7 +162,8 @@ class GetTestsToRunTest(unittest.TestCase):
'test/gtest_color_test.py'])) 'test/gtest_color_test.py']))
self.fake_configurations = ['dbg', 'opt'] self.fake_configurations = ['dbg', 'opt']
self.test_runner = run_tests.TestRunner(injected_os=self.fake_os, self.test_runner = run_tests.TestRunner(injected_os=self.fake_os,
injected_subprocess=None) injected_subprocess=None,
injected_script_dir='.')
def testBinaryTestsOnly(self): def testBinaryTestsOnly(self):
"""Exercises GetTestsToRun with parameters designating binary tests only.""" """Exercises GetTestsToRun with parameters designating binary tests only."""
...@@ -388,7 +394,8 @@ class GetTestsToRunTest(unittest.TestCase): ...@@ -388,7 +394,8 @@ class GetTestsToRunTest(unittest.TestCase):
'scons/build/opt/scons/gtest_nontest.exe', 'scons/build/opt/scons/gtest_nontest.exe',
'test/'])) 'test/']))
self.test_runner = run_tests.TestRunner(injected_os=self.fake_os, self.test_runner = run_tests.TestRunner(injected_os=self.fake_os,
injected_subprocess=None) injected_subprocess=None,
injected_script_dir='.')
self.AssertResultsEqual( self.AssertResultsEqual(
self.test_runner.GetTestsToRun( self.test_runner.GetTestsToRun(
[], [],
...@@ -397,6 +404,43 @@ class GetTestsToRunTest(unittest.TestCase): ...@@ -397,6 +404,43 @@ class GetTestsToRunTest(unittest.TestCase):
available_configurations=self.fake_configurations), available_configurations=self.fake_configurations),
([], [])) ([], []))
def testWorksFromDifferentDir(self):
"""Exercises GetTestsToRun from a directory different from run_test.py's."""
# Here we simulate an test script in directory /d/ called from the
# directory /a/b/c/.
self.fake_os = FakeOs(FakePath(
current_dir=os.path.abspath('/a/b/c'),
known_paths=['/a/b/c/',
'/d/scons/build/dbg/scons/gtest_unittest',
'/d/scons/build/opt/scons/gtest_unittest',
'/d/test/gtest_color_test.py']))
self.fake_configurations = ['dbg', 'opt']
self.test_runner = run_tests.TestRunner(injected_os=self.fake_os,
injected_subprocess=None,
injected_script_dir='/d/')
# A binary test.
self.AssertResultsEqual(
self.test_runner.GetTestsToRun(
['gtest_unittest'],
'',
False,
available_configurations=self.fake_configurations),
([],
[('/d/scons/build/dbg/scons',
'/d/scons/build/dbg/scons/gtest_unittest')]))
# A Python test.
self.AssertResultsEqual(
self.test_runner.GetTestsToRun(
['gtest_color_test.py'],
'',
False,
available_configurations=self.fake_configurations),
([('/d/scons/build/dbg/scons', '/d/test/gtest_color_test.py')],
[]))
def testNonTestBinary(self): def testNonTestBinary(self):
"""Exercises GetTestsToRun with a non-test parameter.""" """Exercises GetTestsToRun with a non-test parameter."""
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment