Commit 0fa4949d authored by craigdh@chromium.org's avatar craigdh@chromium.org

[chromedriver] Add option to relaunch the test harness after each java test for debugging.

BUG=None
TEST=Ran tests locally with the flag.

Review URL: https://codereview.chromium.org/14130017

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194612 0039d316-1c4b-4281-b951-d872f2087c98
parent 7f7f65c6
This diff is collapsed.
......@@ -240,6 +240,9 @@ def main():
'', '--filter', type='string', default=None,
help='Filter for specifying what tests to run, "*" will run all. E.g., '
'*testShouldReturnTitleOfPageIfSet')
parser.add_option(
'', '--isolate-tests', action='store_true', default=False,
help='Relaunch the jar test harness after each test')
options, args = parser.parse_args()
if options.chromedriver is None or not os.path.exists(options.chromedriver):
......@@ -257,9 +260,13 @@ def main():
try:
environment.GlobalSetUp()
# Run passed tests when filter is not provided.
test_filter = options.filter
if test_filter is None:
test_filter = environment.GetPassedJavaTestFilter()
if options.filter:
test_filters = [options.filter]
else:
if options.isolate_tests:
test_filters = environment.GetPassedJavaTests()
else:
test_filters = [environment.GetPassedJavaTestFilter()]
java_tests_src_dir = os.path.join(chrome_paths.GetSrc(), 'chrome', 'test',
'chromedriver', 'third_party',
......@@ -270,14 +277,17 @@ def main():
'Should add "deps/third_party/webdriver" to source checkout config')
return 1
return PrintTestResults(_Run(
java_tests_src_dir=java_tests_src_dir,
test_filter=test_filter,
chromedriver_path=options.chromedriver,
chrome_path=options.chrome,
android_package=options.android_package,
verbose=options.verbose,
debug=options.debug))
results = []
for filter in test_filters:
results += _Run(
java_tests_src_dir=java_tests_src_dir,
test_filter=filter,
chromedriver_path=options.chromedriver,
chrome_path=options.chrome,
android_package=options.android_package,
verbose=options.verbose,
debug=options.debug)
return PrintTestResults(results)
finally:
environment.GlobalTearDown()
......
......@@ -42,6 +42,10 @@ class BaseTestEnvironment(object):
"""
self._chrome_version = chrome_version
def GetOS(self):
"""Name of the OS."""
raise NotImplementedError
def GlobalSetUp(self):
"""Sets up the global test environment state."""
pass
......@@ -51,21 +55,32 @@ class BaseTestEnvironment(object):
pass
def GetPassedJavaTestFilter(self):
"""Returns the test filter for running all passing tests.
"""Get the test filter for running all passing tests.
Returns:
Filter string, in Google Test (C++) format.
"""
raise NotImplementedError
return _EXPECTATIONS['GetPassedJavaTestFilter'](
'android', self._chrome_version)
def GetPassedJavaTests(self):
"""Get the list of passed java tests.
Returns:
List of passed test names.
"""
with open(os.path.join(_THIS_DIR, 'java_tests.txt'), 'r') as f:
return _EXPECTATIONS['ApplyJavaTestFilter'](
'android', self._chrome_version,
[t.strip('\n') for t in f.readlines()])
class DesktopTestEnvironment(BaseTestEnvironment):
"""Manages the environment java tests require to run on Desktop."""
#override
def GetPassedJavaTestFilter(self):
return _EXPECTATIONS['GetPassedJavaTestFilter'](
util.GetPlatformName(), self._chrome_version)
def GetOS(self):
return util.GetPlatformName()
class AndroidTestEnvironment(DesktopTestEnvironment):
......@@ -95,6 +110,5 @@ class AndroidTestEnvironment(DesktopTestEnvironment):
self._forwarder.Close()
#override
def GetPassedJavaTestFilter(self):
return _EXPECTATIONS['GetPassedJavaTestFilter'](
'android', self._chrome_version)
def GetOS(self):
return 'android'
......@@ -177,3 +177,27 @@ def GetPassedJavaTestFilter(operating_system, chrome_version):
"""
return '*-' + ':'.join(_OS_NEGATIVE_FILTER[operating_system] +
_REVISION_NEGATIVE_FILTER[chrome_version])
def ApplyJavaTestFilter(operating_system, chrome_version, tests):
"""Applies the test filter to the given list of tests.
Args:
operating_system: The operating system, one of 'linux', 'mac', 'win', or
'android'.
chrome_version: Chrome version to test against, e.g., 'HEAD' or '26'.
test: list of test names to filter.
Returns:
Set of passed test names.
"""
filters = (_OS_NEGATIVE_FILTER[operating_system] +
_REVISION_NEGATIVE_FILTER[chrome_version])
passed = set(tests)
for f in filters:
passed.difference_update(set(t for t in tests if _TestMatchesFilter(t, f)))
return passed
def _TestMatchesFilter(test, filter):
if '*' in filter:
return test[:len(filter) - 1] == test[:-1]
return test == filter
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