Index: third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py |
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py |
index b9eac6027d77ce6451f12bb2c1e1ce265ced2869..f999e44ff83ae1a385c8e36e711b86366c3f6f02 100644 |
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py |
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py |
@@ -18,6 +18,7 @@ from webkitpy.common.net.git_cl import GitCL |
from webkitpy.common.net.rietveld import Rietveld |
from webkitpy.common.webkit_finder import WebKitFinder |
from webkitpy.w3c.test_parser import TestParser |
+from webkitpy.layout_tests.models.test_expectations import TestExpectationLine |
_log = logging.getLogger(__name__) |
@@ -256,38 +257,31 @@ class W3CExpectationsLineAdder(object): |
def write_to_test_expectations(self, line_list): |
"""Writes to TestExpectations. |
- Writes the test expectations lines in |line_list| to the test |
- expectations file. |
- |
The place in the file where the new lines are inserted is after a |
marker comment line. If this marker comment line is not found, it will |
be added to the end of the file. |
Args: |
- line_list: A list of w3c test expectations lines. |
+ line_list: A list of lines to add to the TestExpectations file. |
""" |
_log.debug('Lines to write to TestExpectations: %r', line_list) |
port = self.host.port_factory.get() |
- expectations_file = port.path_to_generic_test_expectations_file() |
- comment_line = '# Tests added from W3C auto import bot' |
- file_contents = self.host.filesystem.read_text_file(expectations_file) |
- w3c_comment_line_index = file_contents.find(comment_line) |
- all_lines = '' |
- for line in line_list: |
- end_bracket_index = line.split().index(']') |
- test_name = line.split()[end_bracket_index + 1] |
- if test_name in file_contents: |
- continue |
- all_lines += str(line) + '\n' |
- all_lines = all_lines[:-1] |
- if w3c_comment_line_index == -1: |
- file_contents += '\n%s\n' % comment_line |
- file_contents += all_lines |
+ expectations_file_path = port.path_to_generic_test_expectations_file() |
+ marker_comment = '# Tests added from W3C auto import bot' |
+ file_contents = self.host.filesystem.read_text_file(expectations_file_path) |
+ marker_comment_index = file_contents.find(marker_comment) |
+ line_list = [line for line in line_list if self._test_name_from_expectation_string(line) not in file_contents] |
+ if marker_comment_index == -1: |
+ file_contents += '\n%s\n' % marker_comment |
+ file_contents += '\n'.join(line_list) |
else: |
- end_of_comment_line = (file_contents[w3c_comment_line_index:].find('\n')) + w3c_comment_line_index |
- new_data = file_contents[: end_of_comment_line + 1] + all_lines + file_contents[end_of_comment_line:] |
- file_contents = new_data |
- self.host.filesystem.write_text_file(expectations_file, file_contents) |
+ end_of_marker_line = (file_contents[marker_comment_index:].find('\n')) + marker_comment_index |
+ file_contents = file_contents[:end_of_marker_line + 1] + '\n'.join(line_list) + file_contents[end_of_marker_line:] |
+ self.host.filesystem.write_text_file(expectations_file_path, file_contents) |
+ |
+ @staticmethod |
+ def _test_name_from_expectation_string(expectation_string): |
+ return TestExpectationLine.tokenize_line(filename='', expectation_string=expectation_string, line_number=0).name |
def get_expected_txt_files(self, tests_results): |
"""Fetches new baseline files for tests that should be rebaselined. |