| Index: build/android/pylib/utils/json_results_generator_unittest.py
|
| diff --git a/build/android/pylib/utils/json_results_generator_unittest.py b/build/android/pylib/utils/json_results_generator_unittest.py
|
| deleted file mode 100644
|
| index 41ab77b81f7d43fbb97378c3a8d43ec4cbe9a254..0000000000000000000000000000000000000000
|
| --- a/build/android/pylib/utils/json_results_generator_unittest.py
|
| +++ /dev/null
|
| @@ -1,213 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -#
|
| -# Most of this file was ported over from Blink's
|
| -# webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
|
| -#
|
| -
|
| -import unittest
|
| -import json
|
| -
|
| -from pylib.utils import json_results_generator
|
| -
|
| -
|
| -class JSONGeneratorTest(unittest.TestCase):
|
| -
|
| - def setUp(self):
|
| - self.builder_name = 'DUMMY_BUILDER_NAME'
|
| - self.build_name = 'DUMMY_BUILD_NAME'
|
| - self.build_number = 'DUMMY_BUILDER_NUMBER'
|
| -
|
| - # For archived results.
|
| - self._json = None
|
| - self._num_runs = 0
|
| - self._tests_set = set([])
|
| - self._test_timings = {}
|
| - self._failed_count_map = {}
|
| -
|
| - self._PASS_count = 0
|
| - self._DISABLED_count = 0
|
| - self._FLAKY_count = 0
|
| - self._FAILS_count = 0
|
| - self._fixable_count = 0
|
| -
|
| - self._orig_write_json = json_results_generator.WriteJSON
|
| -
|
| - # unused arguments ... pylint: disable=W0613
|
| - def _WriteJSONStub(json_object, file_path, callback=None):
|
| - pass
|
| -
|
| - json_results_generator.WriteJSON = _WriteJSONStub
|
| -
|
| - def tearDown(self):
|
| - json_results_generator.WriteJSON = self._orig_write_json
|
| -
|
| - def _TestJSONGeneration(self, passed_tests_list, failed_tests_list):
|
| - tests_set = set(passed_tests_list) | set(failed_tests_list)
|
| -
|
| - DISABLED_tests = set([t for t in tests_set
|
| - if t.startswith('DISABLED_')])
|
| - FLAKY_tests = set([t for t in tests_set
|
| - if t.startswith('FLAKY_')])
|
| - FAILS_tests = set([t for t in tests_set
|
| - if t.startswith('FAILS_')])
|
| - PASS_tests = tests_set - (DISABLED_tests | FLAKY_tests | FAILS_tests)
|
| -
|
| - failed_tests = set(failed_tests_list) - DISABLED_tests
|
| - failed_count_map = dict([(t, 1) for t in failed_tests])
|
| -
|
| - test_timings = {}
|
| - i = 0
|
| - for test in tests_set:
|
| - test_timings[test] = float(self._num_runs * 100 + i)
|
| - i += 1
|
| -
|
| - test_results_map = dict()
|
| - for test in tests_set:
|
| - test_results_map[test] = json_results_generator.TestResult(
|
| - test, failed=(test in failed_tests),
|
| - elapsed_time=test_timings[test])
|
| -
|
| - generator = json_results_generator.JSONResultsGeneratorBase(
|
| - self.builder_name, self.build_name, self.build_number,
|
| - '',
|
| - None, # don't fetch past json results archive
|
| - test_results_map)
|
| -
|
| - failed_count_map = dict([(t, 1) for t in failed_tests])
|
| -
|
| - # Test incremental json results
|
| - incremental_json = generator.GetJSON()
|
| - self._VerifyJSONResults(
|
| - tests_set,
|
| - test_timings,
|
| - failed_count_map,
|
| - len(PASS_tests),
|
| - len(DISABLED_tests),
|
| - len(FLAKY_tests),
|
| - len(DISABLED_tests | failed_tests),
|
| - incremental_json,
|
| - 1)
|
| -
|
| - # We don't verify the results here, but at least we make sure the code
|
| - # runs without errors.
|
| - generator.GenerateJSONOutput()
|
| - generator.GenerateTimesMSFile()
|
| -
|
| - def _VerifyJSONResults(self, tests_set, test_timings, failed_count_map,
|
| - PASS_count, DISABLED_count, FLAKY_count,
|
| - fixable_count, json_obj, num_runs):
|
| - # Aliasing to a short name for better access to its constants.
|
| - JRG = json_results_generator.JSONResultsGeneratorBase
|
| -
|
| - self.assertIn(JRG.VERSION_KEY, json_obj)
|
| - self.assertIn(self.builder_name, json_obj)
|
| -
|
| - buildinfo = json_obj[self.builder_name]
|
| - self.assertIn(JRG.FIXABLE, buildinfo)
|
| - self.assertIn(JRG.TESTS, buildinfo)
|
| - self.assertEqual(len(buildinfo[JRG.BUILD_NUMBERS]), num_runs)
|
| - self.assertEqual(buildinfo[JRG.BUILD_NUMBERS][0], self.build_number)
|
| -
|
| - if tests_set or DISABLED_count:
|
| - fixable = {}
|
| - for fixable_items in buildinfo[JRG.FIXABLE]:
|
| - for (result_type, count) in fixable_items.iteritems():
|
| - if result_type in fixable:
|
| - fixable[result_type] = fixable[result_type] + count
|
| - else:
|
| - fixable[result_type] = count
|
| -
|
| - if PASS_count:
|
| - self.assertEqual(fixable[JRG.PASS_RESULT], PASS_count)
|
| - else:
|
| - self.assertTrue(JRG.PASS_RESULT not in fixable or
|
| - fixable[JRG.PASS_RESULT] == 0)
|
| - if DISABLED_count:
|
| - self.assertEqual(fixable[JRG.SKIP_RESULT], DISABLED_count)
|
| - else:
|
| - self.assertTrue(JRG.SKIP_RESULT not in fixable or
|
| - fixable[JRG.SKIP_RESULT] == 0)
|
| - if FLAKY_count:
|
| - self.assertEqual(fixable[JRG.FLAKY_RESULT], FLAKY_count)
|
| - else:
|
| - self.assertTrue(JRG.FLAKY_RESULT not in fixable or
|
| - fixable[JRG.FLAKY_RESULT] == 0)
|
| -
|
| - if failed_count_map:
|
| - tests = buildinfo[JRG.TESTS]
|
| - for test_name in failed_count_map.iterkeys():
|
| - test = self._FindTestInTrie(test_name, tests)
|
| -
|
| - failed = 0
|
| - for result in test[JRG.RESULTS]:
|
| - if result[1] == JRG.FAIL_RESULT:
|
| - failed += result[0]
|
| - self.assertEqual(failed_count_map[test_name], failed)
|
| -
|
| - timing_count = 0
|
| - for timings in test[JRG.TIMES]:
|
| - if timings[1] == test_timings[test_name]:
|
| - timing_count = timings[0]
|
| - self.assertEqual(1, timing_count)
|
| -
|
| - if fixable_count:
|
| - self.assertEqual(sum(buildinfo[JRG.FIXABLE_COUNT]), fixable_count)
|
| -
|
| - def _FindTestInTrie(self, path, trie):
|
| - nodes = path.split('/')
|
| - sub_trie = trie
|
| - for node in nodes:
|
| - self.assertIn(node, sub_trie)
|
| - sub_trie = sub_trie[node]
|
| - return sub_trie
|
| -
|
| - def testJSONGeneration(self):
|
| - self._TestJSONGeneration([], [])
|
| - self._TestJSONGeneration(['A1', 'B1'], [])
|
| - self._TestJSONGeneration([], ['FAILS_A2', 'FAILS_B2'])
|
| - self._TestJSONGeneration(['DISABLED_A3', 'DISABLED_B3'], [])
|
| - self._TestJSONGeneration(['A4'], ['B4', 'FAILS_C4'])
|
| - self._TestJSONGeneration(['DISABLED_C5', 'DISABLED_D5'], ['A5', 'B5'])
|
| - self._TestJSONGeneration(
|
| - ['A6', 'B6', 'FAILS_C6', 'DISABLED_E6', 'DISABLED_F6'],
|
| - ['FAILS_D6'])
|
| -
|
| - # Generate JSON with the same test sets. (Both incremental results and
|
| - # archived results must be updated appropriately.)
|
| - self._TestJSONGeneration(
|
| - ['A', 'FLAKY_B', 'DISABLED_C'],
|
| - ['FAILS_D', 'FLAKY_E'])
|
| - self._TestJSONGeneration(
|
| - ['A', 'DISABLED_C', 'FLAKY_E'],
|
| - ['FLAKY_B', 'FAILS_D'])
|
| - self._TestJSONGeneration(
|
| - ['FLAKY_B', 'DISABLED_C', 'FAILS_D'],
|
| - ['A', 'FLAKY_E'])
|
| -
|
| - def testHierarchicalJSNGeneration(self):
|
| - # FIXME: Re-work tests to be more comprehensible and comprehensive.
|
| - self._TestJSONGeneration(['foo/A'], ['foo/B', 'bar/C'])
|
| -
|
| - def testTestTimingsTrie(self):
|
| - individual_test_timings = []
|
| - individual_test_timings.append(
|
| - json_results_generator.TestResult(
|
| - 'foo/bar/baz.html',
|
| - elapsed_time=1.2))
|
| - individual_test_timings.append(
|
| - json_results_generator.TestResult('bar.html', elapsed_time=0.0001))
|
| - trie = json_results_generator.TestTimingsTrie(individual_test_timings)
|
| -
|
| - expected_trie = {
|
| - 'bar.html': 0,
|
| - 'foo': {
|
| - 'bar': {
|
| - 'baz.html': 1200,
|
| - }
|
| - }
|
| - }
|
| -
|
| - self.assertEqual(json.dumps(trie), json.dumps(expected_trie))
|
|
|