Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(693)

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations.py

Issue 2349543002: In update_w3c_test_expectations use ExpectationLine.tokenize_line and refactor. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """A class for updating layout test expectations when updating w3c tests. 5 """A class for updating layout test expectations when updating w3c tests.
6 6
7 Specifically, this class fetches results from try bots for the current CL, and: 7 Specifically, this class fetches results from try bots for the current CL, and:
8 1. Downloads new baseline files for any tests that can be rebaselined. 8 1. Downloads new baseline files for any tests that can be rebaselined.
9 2. Updates the generic TestExpectations file for any other failing tests. 9 2. Updates the generic TestExpectations file for any other failing tests.
10 10
11 This is used as part of the w3c test auto-import process. 11 This is used as part of the w3c test auto-import process.
12 """ 12 """
13 13
14 import argparse 14 import argparse
15 import logging 15 import logging
16 16
17 from webkitpy.common.net.git_cl import GitCL 17 from webkitpy.common.net.git_cl import GitCL
18 from webkitpy.common.net.rietveld import Rietveld 18 from webkitpy.common.net.rietveld import Rietveld
19 from webkitpy.common.webkit_finder import WebKitFinder 19 from webkitpy.common.webkit_finder import WebKitFinder
20 from webkitpy.w3c.test_parser import TestParser 20 from webkitpy.w3c.test_parser import TestParser
21 from webkitpy.layout_tests.models.test_expectations import TestExpectationLine
21 22
22 _log = logging.getLogger(__name__) 23 _log = logging.getLogger(__name__)
23 24
24 25
25 class W3CExpectationsLineAdder(object): 26 class W3CExpectationsLineAdder(object):
26 27
27 def __init__(self, host): 28 def __init__(self, host):
28 self.host = host 29 self.host = host
29 self.host.initialize_scm() 30 self.host.initialize_scm()
30 self.finder = WebKitFinder(self.host.filesystem) 31 self.finder = WebKitFinder(self.host.filesystem)
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 platform_list.append(platform) 250 platform_list.append(platform)
250 bug.append(platform_results[platform]['bug']) 251 bug.append(platform_results[platform]['bug'])
251 expectations = self.get_expectations(platform_results[platfo rm]) 252 expectations = self.get_expectations(platform_results[platfo rm])
252 line = '%s [ %s ] %s [ %s ]' % (bug[0], ' '.join(platform_li st), test_name, ' '.join(expectations)) 253 line = '%s [ %s ] %s [ %s ]' % (bug[0], ' '.join(platform_li st), test_name, ' '.join(expectations))
253 line_list.append(str(line)) 254 line_list.append(str(line))
254 return line_list 255 return line_list
255 256
256 def write_to_test_expectations(self, line_list): 257 def write_to_test_expectations(self, line_list):
257 """Writes to TestExpectations. 258 """Writes to TestExpectations.
258 259
259 Writes the test expectations lines in |line_list| to the test
260 expectations file.
261
262 The place in the file where the new lines are inserted is after a 260 The place in the file where the new lines are inserted is after a
263 marker comment line. If this marker comment line is not found, it will 261 marker comment line. If this marker comment line is not found, it will
264 be added to the end of the file. 262 be added to the end of the file.
265 263
266 Args: 264 Args:
267 line_list: A list of w3c test expectations lines. 265 line_list: A list of lines to add to the TestExpectations file.
268 """ 266 """
269 _log.debug('Lines to write to TestExpectations: %r', line_list) 267 _log.debug('Lines to write to TestExpectations: %r', line_list)
270 port = self.host.port_factory.get() 268 port = self.host.port_factory.get()
271 expectations_file = port.path_to_generic_test_expectations_file() 269 expectations_file_path = port.path_to_generic_test_expectations_file()
272 comment_line = '# Tests added from W3C auto import bot' 270 marker_comment = '# Tests added from W3C auto import bot'
273 file_contents = self.host.filesystem.read_text_file(expectations_file) 271 file_contents = self.host.filesystem.read_text_file(expectations_file_pa th)
274 w3c_comment_line_index = file_contents.find(comment_line) 272 marker_comment_index = file_contents.find(marker_comment)
275 all_lines = '' 273 line_list = [line for line in line_list if self._test_name_from_expectat ion_string(line) not in file_contents]
276 for line in line_list: 274 if marker_comment_index == -1:
277 end_bracket_index = line.split().index(']') 275 file_contents += '\n%s\n' % marker_comment
278 test_name = line.split()[end_bracket_index + 1] 276 file_contents += '\n'.join(line_list)
279 if test_name in file_contents:
280 continue
281 all_lines += str(line) + '\n'
282 all_lines = all_lines[:-1]
283 if w3c_comment_line_index == -1:
284 file_contents += '\n%s\n' % comment_line
285 file_contents += all_lines
286 else: 277 else:
287 end_of_comment_line = (file_contents[w3c_comment_line_index:].find(' \n')) + w3c_comment_line_index 278 end_of_marker_line = (file_contents[marker_comment_index:].find('\n' )) + marker_comment_index
288 new_data = file_contents[: end_of_comment_line + 1] + all_lines + fi le_contents[end_of_comment_line:] 279 file_contents = file_contents[:end_of_marker_line + 1] + '\n'.join(l ine_list) + file_contents[end_of_marker_line:]
289 file_contents = new_data 280 self.host.filesystem.write_text_file(expectations_file_path, file_conten ts)
290 self.host.filesystem.write_text_file(expectations_file, file_contents) 281
282 @staticmethod
283 def _test_name_from_expectation_string(expectation_string):
284 return TestExpectationLine.tokenize_line(filename='', expectation_string =expectation_string, line_number=0).name
291 285
292 def get_expected_txt_files(self, tests_results): 286 def get_expected_txt_files(self, tests_results):
293 """Fetches new baseline files for tests that should be rebaselined. 287 """Fetches new baseline files for tests that should be rebaselined.
294 288
295 Invokes webkit-patch rebaseline-from-try-jobs in order to download new 289 Invokes webkit-patch rebaseline-from-try-jobs in order to download new
296 -expected.txt files for testharness.js tests that did not crash or time 290 -expected.txt files for testharness.js tests that did not crash or time
297 out. Then, the platform-specific test is removed from the overall 291 out. Then, the platform-specific test is removed from the overall
298 failure test dictionary. 292 failure test dictionary.
299 293
300 Args: 294 Args:
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 350
357 Args: 351 Args:
358 test_path: A file path relative to the layout tests directory. 352 test_path: A file path relative to the layout tests directory.
359 This might correspond to a deleted file or a non-test. 353 This might correspond to a deleted file or a non-test.
360 """ 354 """
361 absolute_path = self.host.filesystem.join(self.finder.layout_tests_dir() , test_path) 355 absolute_path = self.host.filesystem.join(self.finder.layout_tests_dir() , test_path)
362 test_parser = TestParser(absolute_path, self.host) 356 test_parser = TestParser(absolute_path, self.host)
363 if not test_parser.test_doc: 357 if not test_parser.test_doc:
364 return False 358 return False
365 return test_parser.is_jstest() 359 return test_parser.is_jstest()
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/w3c/update_w3c_test_expectations_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698