Index: webkit/tools/layout_tests/layout_package/json_layout_results_generator.py |
=================================================================== |
--- webkit/tools/layout_tests/layout_package/json_layout_results_generator.py (revision 36724) |
+++ webkit/tools/layout_tests/layout_package/json_layout_results_generator.py (working copy) |
@@ -1,159 +0,0 @@ |
-# Copyright (c) 2010 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. |
- |
-import logging |
-import os |
- |
-from layout_package import json_results_generator |
-from layout_package import path_utils |
-from layout_package import test_expectations |
-from layout_package import test_failures |
- |
- |
-class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator): |
- """A JSON results generator for layout tests.""" |
- |
- LAYOUT_TESTS_PATH = "LayoutTests" |
- |
- # Additional JSON fields. |
- WONTFIX = "wontfixCounts" |
- DEFERRED = "deferredCounts" |
- |
- def __init__(self, builder_name, build_name, build_number, |
- results_file_base_path, builder_base_url, |
- test_timings, expectations, result_summary, all_tests): |
- """Modifies the results.json file. Grabs it off the archive directory |
- if it is not found locally. |
- |
- Args: |
- result_summary: ResultsSummary object storing the summary of the test |
- results. |
- (see the comment of JSONResultsGenerator.__init__ for other Args) |
- """ |
- |
- self._builder_name = builder_name |
- self._build_name = build_name |
- self._build_number = build_number |
- self._builder_base_url = builder_base_url |
- self._results_file_path = os.path.join(results_file_base_path, |
- self.RESULTS_FILENAME) |
- self._expectations = expectations |
- |
- # We don't use self._skipped_tests and self._passed_tests as we |
- # override _InsertFailureSummaries. |
- |
- # We want relative paths to LayoutTest root for JSON output. |
- path_to_name = self._GetPathRelativeToLayoutTestRoot |
- self._result_summary = result_summary |
- self._failures = dict( |
- (path_to_name(test), test_failures.DetermineResultType(failures)) |
- for (test, failures) in result_summary.failures.iteritems()) |
- self._all_tests = [path_to_name(test) for test in all_tests] |
- self._test_timings = dict( |
- (path_to_name(test_tuple.filename), test_tuple.test_run_time) |
- for test_tuple in test_timings) |
- |
- self._GenerateJSONOutput() |
- |
- def _GetPathRelativeToLayoutTestRoot(self, test): |
- """Returns the path of the test relative to the layout test root. |
- For example, for: |
- src/third_party/WebKit/LayoutTests/fast/forms/foo.html |
- We would return |
- fast/forms/foo.html |
- """ |
- index = test.find(self.LAYOUT_TESTS_PATH) |
- if index is not -1: |
- index += len(self.LAYOUT_TESTS_PATH) |
- |
- if index is -1: |
- # Already a relative path. |
- relativePath = test |
- else: |
- relativePath = test[index + 1:] |
- |
- # Make sure all paths are unix-style. |
- return relativePath.replace('\\', '/') |
- |
- # override |
- def _ConvertJSONToCurrentVersion(self, results_json): |
- archive_version = None |
- if self.VERSION_KEY in results_json: |
- archive_version = results_json[self.VERSION_KEY] |
- |
- super(JSONLayoutResultsGenerator, self)._ConvertJSONToCurrentVersion( |
- results_json) |
- |
- # version 2->3 |
- if archive_version == 2: |
- for results_for_builder in results_json.itervalues(): |
- try: |
- test_results = results_for_builder[self.TESTS] |
- except: |
- continue |
- |
- for test in test_results: |
- # Make sure all paths are relative |
- test_path = self._GetPathRelativeToLayoutTestRoot(test) |
- if test_path != test: |
- test_results[test_path] = test_results[test] |
- del test_results[test] |
- |
- # override |
- def _InsertFailureSummaries(self, results_for_builder): |
- summary = self._result_summary |
- |
- self._InsertItemIntoRawList(results_for_builder, |
- len((set(summary.failures.keys()) | |
- summary.tests_by_expectation[test_expectations.SKIP]) & |
- summary.tests_by_timeline[test_expectations.NOW]), |
- self.FIXABLE_COUNT) |
- self._InsertItemIntoRawList(results_for_builder, |
- self._GetFailureSummaryEntry(test_expectations.NOW), |
- self.FIXABLE) |
- self._InsertItemIntoRawList(results_for_builder, |
- len(self._expectations.GetTestsWithTimeline( |
- test_expectations.NOW)), self.ALL_FIXABLE_COUNT) |
- self._InsertItemIntoRawList(results_for_builder, |
- self._GetFailureSummaryEntry(test_expectations.DEFER), |
- self.DEFERRED) |
- self._InsertItemIntoRawList(results_for_builder, |
- self._GetFailureSummaryEntry(test_expectations.WONTFIX), |
- self.WONTFIX) |
- |
- # override |
- def _NormalizeResultsJSON(self, test, test_name, tests): |
- super(JSONLayoutResultsGenerator, self)._NormalizeResultsJSON( |
- test, test_name, tests) |
- |
- # Remove tests that don't exist anymore. |
- full_path = os.path.join(path_utils.LayoutTestsDir(), test_name) |
- full_path = os.path.normpath(full_path) |
- if not os.path.exists(full_path): |
- del tests[test_name] |
- |
- def _GetFailureSummaryEntry(self, timeline): |
- """Creates a summary object to insert into the JSON. |
- |
- Args: |
- summary ResultSummary object with test results |
- timeline current test_expectations timeline to build entry for |
- (e.g., test_expectations.NOW, etc.) |
- """ |
- entry = {} |
- summary = self._result_summary |
- timeline_tests = summary.tests_by_timeline[timeline] |
- entry[self.SKIP_RESULT] = len( |
- summary.tests_by_expectation[test_expectations.SKIP] & |
- timeline_tests) |
- entry[self.PASS_RESULT] = len( |
- summary.tests_by_expectation[test_expectations.PASS] & |
- timeline_tests) |
- for failure_type in summary.tests_by_expectation.keys(): |
- if failure_type not in self.FAILURE_TO_CHAR: |
- continue |
- count = len(summary.tests_by_expectation[failure_type] & |
- timeline_tests) |
- entry[self.FAILURE_TO_CHAR[failure_type]] = count |
- return entry |