Chromium Code Reviews| Index: scripts/slave/recipe_modules/chromium_tests/steps.py | 
| diff --git a/scripts/slave/recipe_modules/chromium_tests/steps.py b/scripts/slave/recipe_modules/chromium_tests/steps.py | 
| index e5a404409498e8e5ef3a5121b783e3411c707cc5..c0f3c4a76a26a8b91de61c94ef8b073e6bc57b60 100644 | 
| --- a/scripts/slave/recipe_modules/chromium_tests/steps.py | 
| +++ b/scripts/slave/recipe_modules/chromium_tests/steps.py | 
| @@ -518,6 +518,7 @@ def generate_instrumentation_test(api, chromium_tests_api, mastername, | 
| yield AndroidInstrumentationTest( | 
| test_name, | 
| compile_targets=test.get('override_compile_targets'), | 
| + render_results_dir=test.get('render_results_dir'), | 
| timeout_scale=test.get('timeout_scale'), | 
| result_details=True, | 
| store_tombstones=True) | 
| @@ -1501,27 +1502,33 @@ class AndroidTest(Test): | 
| def run(self, api, suffix, test_filter=None): | 
| assert api.chromium.c.TARGET_PLATFORM == 'android' | 
| - json_results_file = api.test_utils.gtest_results(add_json_log=False) | 
| - try: | 
| - self.run_tests(api, suffix, json_results_file) | 
| - finally: | 
| - step_result = api.step.active_result | 
| - self._test_runs[suffix] = {'valid': False} | 
| - if (hasattr(step_result, 'test_utils') and | 
| - hasattr(step_result.test_utils, 'gtest_results')): | 
| - gtest_results = step_result.test_utils.gtest_results | 
| - failures = gtest_results.failures | 
| - self._test_runs[suffix] = {'valid': True, 'failures': failures} | 
| - step_result.presentation.step_text += ( | 
| - api.test_utils.format_step_text([['failures:', failures]])) | 
| + nested_step_name = '%s%s' % (self._name, ' (%s)' % suffix if suffix else '') | 
| + with api.step.nest(nested_step_name) as nested_step: | 
| 
 
ghost stip (do not use)
2016/12/08 20:16:02
cool, we may want to use this in other spots
 
 | 
| + json_results_file = api.test_utils.gtest_results(add_json_log=False) | 
| + try: | 
| + step_result = self.run_tests(api, suffix, json_results_file) | 
| + except api.step.StepFailure as f: | 
| + step_result = f.result | 
| + raise | 
| + finally: | 
| + nested_step.presentation.status = step_result.presentation.status | 
| + self._test_runs[suffix] = {'valid': False} | 
| + if (hasattr(step_result, 'test_utils') and | 
| + hasattr(step_result.test_utils, 'gtest_results')): | 
| + gtest_results = step_result.test_utils.gtest_results | 
| + | 
| + failures = gtest_results.failures | 
| + self._test_runs[suffix] = {'valid': True, 'failures': failures} | 
| + nested_step.presentation.step_text += ( | 
| + api.test_utils.format_step_text([['failures:', failures]])) | 
| - api.test_results.upload( | 
| - api.json.input(gtest_results.raw), | 
| - test_type=self.name, | 
| - chrome_revision=api.bot_update.last_returned_properties.get( | 
| - 'got_revision_cp', 'x@{#0}'), | 
| - test_results_server='test-results.appspot.com') | 
| + api.test_results.upload( | 
| + api.json.input(gtest_results.raw), | 
| + test_type=self.name, | 
| + chrome_revision=api.bot_update.last_returned_properties.get( | 
| + 'got_revision_cp', 'x@{#0}'), | 
| + test_results_server='test-results.appspot.com') | 
| def compile_targets(self, _): | 
| return self._compile_targets | 
| @@ -1547,7 +1554,7 @@ class AndroidJunitTest(AndroidTest): | 
| #override | 
| def run_tests(self, api, suffix, json_results_file): | 
| - api.chromium_android.run_java_unit_test_suite( | 
| + return api.chromium_android.run_java_unit_test_suite( | 
| self.name, verbose=True, suffix=suffix, | 
| json_results_file=json_results_file, | 
| step_test_data=lambda: api.test_utils.test_api.canned_gtest_output(False)) | 
| @@ -1611,7 +1618,8 @@ class AndroidInstrumentationTest(AndroidTest): | 
| test_apk=None, isolate_file_path=None, timeout_scale=None, | 
| annotation=None, except_annotation=None, screenshot=False, | 
| verbose=True, tool=None, additional_apks=None, | 
| - store_tombstones=False, result_details=False): | 
| + store_tombstones=False, result_details=False, | 
| + render_results_dir=None): | 
| suite_defaults = ( | 
| AndroidInstrumentationTest._DEFAULT_SUITES.get(name) | 
| or AndroidInstrumentationTest._DEFAULT_SUITES_BY_TARGET.get(name) | 
| @@ -1639,6 +1647,7 @@ class AndroidInstrumentationTest(AndroidTest): | 
| self._wrapper_script_suite_name = compile_targets[0] | 
| self._store_tombstones = store_tombstones | 
| self._result_details = result_details | 
| + self._render_results_dir = render_results_dir | 
| @property | 
| def uses_local_devices(self): | 
| @@ -1646,7 +1655,7 @@ class AndroidInstrumentationTest(AndroidTest): | 
| #override | 
| def run_tests(self, api, suffix, json_results_file): | 
| - api.chromium_android.run_instrumentation_suite( | 
| + return api.chromium_android.run_instrumentation_suite( | 
| self.name, | 
| test_apk=api.chromium_android.apk_path(self._test_apk), | 
| apk_under_test=api.chromium_android.apk_path(self._apk_under_test), | 
| @@ -1662,6 +1671,7 @@ class AndroidInstrumentationTest(AndroidTest): | 
| result_details=self._result_details, | 
| store_tombstones=self._store_tombstones, | 
| wrapper_script_suite_name=self._wrapper_script_suite_name, | 
| + render_results_dir=self._render_results_dir, | 
| step_test_data=lambda: api.test_utils.test_api.canned_gtest_output(False)) |