def _ConvertUnmatchedResultsToStringDict(unmatched_results): """Converts |unmatched_results| to a dict of strings for reporting. Args: unmatched_results: A dict mapping builder names (string) to lists of data_types.Result who did not have a matching expectation. Returns: A string dictionary representation of |unmatched_results| in the following format: { test_name: { builder_name: { step_name: [ individual_result_string_1, individual_result_string_2, ... ], ... }, ... }, ... } """ output_dict = {} for builder, results in unmatched_results.iteritems(): for r in results: builder_map = output_dict.setdefault(r.test, {}) step_map = builder_map.setdefault(builder, {}) result_str = 'Got "%s" on %s with tags [%s]' % ( r.actual_result, data_types.BuildLinkFromBuildId( r.build_id), ' '.join(r.tags)) step_map.setdefault(r.step, []).append(result_str) return output_dict
def testRecursiveHtmlToFileExpectationMap(self): """Tests _RecursiveHtmlToFile() with an expectation map as input.""" expectation_map = { 'foo': { '"RetryOnFailure" expectation on "win intel"': { 'builder': { 'Fully passed in the following': [ 'all_pass (2/2)', ], 'Never passed in the following': [ 'all_fail (0/2)', ], 'Partially passed in the following': { 'some_pass (1/2)': [ data_types.BuildLinkFromBuildId('build_id0'), ], }, }, }, }, } result_output._RecursiveHtmlToFile(expectation_map, self._file_handle) self._file_handle.close() # pylint: disable=line-too-long expected_output = """\ <button type="button" class="collapsible_group">foo</button> <div class="content"> <button type="button" class="collapsible_group">"RetryOnFailure" expectation on "win intel"</button> <div class="content"> <button type="button" class="collapsible_group">builder</button> <div class="content"> <button type="button" class="collapsible_group">Never passed in the following</button> <div class="content"> <p>all_fail (0/2)</p> </div> <button type="button" class="highlighted_collapsible_group">Fully passed in the following</button> <div class="content"> <p>all_pass (2/2)</p> </div> <button type="button" class="collapsible_group">Partially passed in the following</button> <div class="content"> <button type="button" class="collapsible_group">some_pass (1/2)</button> <div class="content"> <p><a href="http://ci.chromium.org/b/build_id0">http://ci.chromium.org/b/build_id0</a></p> </div> </div> </div> </div> </div> """ # pylint: enable=line-too-long expected_output = _Dedent(expected_output) with open(self._filepath) as f: self.assertEqual(f.read(), expected_output)
def testRecursivePrintToFileExpectationMap(self): """Tests _RecursivePrintToFile() with an expectation map as input.""" expectation_map = { 'foo': { '"RetryOnFailure" expectation on "win intel"': { 'builder': { 'Fully passed in the following': [ 'all_pass (2/2)', ], 'Never passed in the following': [ 'all_fail (0/2)', ], 'Partially passed in the following': { 'some_pass (1/2)': [ data_types.BuildLinkFromBuildId('build_id0'), ], }, }, }, }, } result_output._RecursivePrintToFile(expectation_map, 0, self._file_handle) self._file_handle.close() expected_output = """\ foo "RetryOnFailure" expectation on "win intel" builder Never passed in the following all_fail (0/2) Fully passed in the following all_pass (2/2) Partially passed in the following some_pass (1/2) http://ci.chromium.org/b/build_id0 """ with open(self._filepath) as f: self.assertEqual(f.read(), expected_output)
def testSemiStaleMap(self): """Tests that everything functions when regular data is provided.""" expectation_map = data_types.TestExpectationMap({ 'foo': data_types.ExpectationBuilderMap({ data_types.Expectation('foo', ['win', 'intel'], ['RetryOnFailure']): data_types.BuilderStepMap({ 'builder': data_types.StepBuildStatsMap({ 'all_pass': uu.CreateStatsWithPassFails(2, 0), 'all_fail': uu.CreateStatsWithPassFails(0, 2), 'some_pass': uu.CreateStatsWithPassFails(1, 1), }), }), data_types.Expectation('foo', ['linux', 'intel'], [ 'RetryOnFailure' ]): data_types.BuilderStepMap({ 'builder': data_types.StepBuildStatsMap({ 'all_pass': uu.CreateStatsWithPassFails(2, 0), }), }), data_types.Expectation('foo', ['mac', 'intel'], ['RetryOnFailure']): data_types.BuilderStepMap({ 'builder': data_types.StepBuildStatsMap({ 'all_fail': uu.CreateStatsWithPassFails(0, 2), }), }), }), }) expected_ouput = { 'foo': { '"RetryOnFailure" expectation on "win intel"': { 'builder': { 'Fully passed in the following': [ 'all_pass (2/2)', ], 'Never passed in the following': [ 'all_fail (0/2)', ], 'Partially passed in the following': { 'some_pass (1/2)': [ data_types.BuildLinkFromBuildId('build_id0'), ], }, }, }, '"RetryOnFailure" expectation on "intel linux"': { 'builder': { 'Fully passed in the following': [ 'all_pass (2/2)', ], }, }, '"RetryOnFailure" expectation on "mac intel"': { 'builder': { 'Never passed in the following': [ 'all_fail (0/2)', ], }, }, }, } str_dict = result_output._ConvertTestExpectationMapToStringDict( expectation_map) self.assertEqual(str_dict, expected_ouput)