OLD | NEW |
1 # Copyright (C) 2010 Google Inc. All rights reserved. | 1 # Copyright (C) 2010 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 file_name: The (human friendly) name or description of the file | 326 file_name: The (human friendly) name or description of the file |
327 you're looking for (e.g., "HTTP Server"). Used for error logging
. | 327 you're looking for (e.g., "HTTP Server"). Used for error logging
. |
328 override_step: An optional string to be logged if the check fails. | 328 override_step: An optional string to be logged if the check fails. |
329 more_logging: Whether or not to log the error messages. | 329 more_logging: Whether or not to log the error messages. |
330 | 330 |
331 Returns: | 331 Returns: |
332 True if the file exists, else False. | 332 True if the file exists, else False. |
333 """ | 333 """ |
334 if not self._filesystem.exists(path_to_file): | 334 if not self._filesystem.exists(path_to_file): |
335 if more_logging: | 335 if more_logging: |
336 _log.error('Unable to find %s' % file_description) | 336 _log.error('Unable to find %s', file_description) |
337 _log.error(' at %s' % path_to_file) | 337 _log.error(' at %s', path_to_file) |
338 if override_step: | 338 if override_step: |
339 _log.error(' %s' % override_step) | 339 _log.error(' %s', override_step) |
340 _log.error('') | 340 _log.error('') |
341 return False | 341 return False |
342 return True | 342 return True |
343 | 343 |
344 def check_build(self, needs_http, printer): | 344 def check_build(self, needs_http, printer): |
345 result = True | 345 result = True |
346 | 346 |
347 dump_render_tree_binary_path = self._path_to_driver() | 347 dump_render_tree_binary_path = self._path_to_driver() |
348 result = self._check_file_exists(dump_render_tree_binary_path, | 348 result = self._check_file_exists(dump_render_tree_binary_path, |
349 'test driver') and result | 349 'test driver') and result |
(...skipping 19 matching lines...) Expand all Loading... |
369 result = self._dump_reader.check_is_functional() and result | 369 result = self._dump_reader.check_is_functional() and result |
370 | 370 |
371 if needs_http: | 371 if needs_http: |
372 result = self.check_httpd() and result | 372 result = self.check_httpd() and result |
373 | 373 |
374 return test_run_results.OK_EXIT_STATUS if result else test_run_results.U
NEXPECTED_ERROR_EXIT_STATUS | 374 return test_run_results.OK_EXIT_STATUS if result else test_run_results.U
NEXPECTED_ERROR_EXIT_STATUS |
375 | 375 |
376 def _check_driver(self): | 376 def _check_driver(self): |
377 driver_path = self._path_to_driver() | 377 driver_path = self._path_to_driver() |
378 if not self._filesystem.exists(driver_path): | 378 if not self._filesystem.exists(driver_path): |
379 _log.error("%s was not found at %s" % (self.driver_name(), driver_pa
th)) | 379 _log.error("%s was not found at %s", self.driver_name(), driver_path
) |
380 return False | 380 return False |
381 return True | 381 return True |
382 | 382 |
383 def _check_port_build(self): | 383 def _check_port_build(self): |
384 # Ports can override this method to do additional checks. | 384 # Ports can override this method to do additional checks. |
385 return True | 385 return True |
386 | 386 |
387 def check_sys_deps(self, needs_http): | 387 def check_sys_deps(self, needs_http): |
388 """Checks whether the system is properly configured. | 388 """Checks whether the system is properly configured. |
389 | 389 |
(...skipping 21 matching lines...) Expand all Loading... |
411 _log.error('') | 411 _log.error('') |
412 _log.error('For complete build requirements, please see:') | 412 _log.error('For complete build requirements, please see:') |
413 _log.error(self.BUILD_REQUIREMENTS_URL) | 413 _log.error(self.BUILD_REQUIREMENTS_URL) |
414 return test_run_results.SYS_DEPS_EXIT_STATUS | 414 return test_run_results.SYS_DEPS_EXIT_STATUS |
415 return test_run_results.OK_EXIT_STATUS | 415 return test_run_results.OK_EXIT_STATUS |
416 | 416 |
417 def check_image_diff(self): | 417 def check_image_diff(self): |
418 """Checks whether image_diff binary exists.""" | 418 """Checks whether image_diff binary exists.""" |
419 image_diff_path = self._path_to_image_diff() | 419 image_diff_path = self._path_to_image_diff() |
420 if not self._filesystem.exists(image_diff_path): | 420 if not self._filesystem.exists(image_diff_path): |
421 _log.error("image_diff was not found at %s" % image_diff_path) | 421 _log.error("image_diff was not found at %s", image_diff_path) |
422 return False | 422 return False |
423 return True | 423 return True |
424 | 424 |
425 def check_pretty_patch(self, more_logging=True): | 425 def check_pretty_patch(self, more_logging=True): |
426 """Checks whether we can use the PrettyPatch ruby script.""" | 426 """Checks whether we can use the PrettyPatch ruby script.""" |
427 try: | 427 try: |
428 _ = self._executive.run_command(['ruby', '--version']) | 428 _ = self._executive.run_command(['ruby', '--version']) |
429 except OSError as e: | 429 except OSError as e: |
430 if e.errno in [errno.ENOENT, errno.EACCES, errno.ECHILD]: | 430 if e.errno in [errno.ENOENT, errno.EACCES, errno.ECHILD]: |
431 if more_logging: | 431 if more_logging: |
432 _log.warning("Ruby is not installed; can't generate pretty p
atches.") | 432 _log.warning("Ruby is not installed; can't generate pretty p
atches.") |
433 _log.warning('') | 433 _log.warning('') |
434 return False | 434 return False |
435 | 435 |
436 if not self._filesystem.exists(self._pretty_patch_path): | 436 if not self._filesystem.exists(self._pretty_patch_path): |
437 if more_logging: | 437 if more_logging: |
438 _log.warning("Unable to find %s; can't generate pretty patches."
% self._pretty_patch_path) | 438 _log.warning("Unable to find %s; can't generate pretty patches."
, self._pretty_patch_path) |
439 _log.warning('') | 439 _log.warning('') |
440 return False | 440 return False |
441 | 441 |
442 return True | 442 return True |
443 | 443 |
444 def check_wdiff(self, more_logging=True): | 444 def check_wdiff(self, more_logging=True): |
445 if not self._path_to_wdiff(): | 445 if not self._path_to_wdiff(): |
446 # Don't need to log here since this is the port choosing not to use
wdiff. | 446 # Don't need to log here since this is the port choosing not to use
wdiff. |
447 return False | 447 return False |
448 | 448 |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 if not filesystem.isfile(reftest_list_path): | 718 if not filesystem.isfile(reftest_list_path): |
719 return None | 719 return None |
720 reftest_list_file = filesystem.read_text_file(reftest_list_path) | 720 reftest_list_file = filesystem.read_text_file(reftest_list_path) |
721 | 721 |
722 parsed_list = {} | 722 parsed_list = {} |
723 for line in reftest_list_file.split('\n'): | 723 for line in reftest_list_file.split('\n'): |
724 line = re.sub('#.+$', '', line) | 724 line = re.sub('#.+$', '', line) |
725 split_line = line.split() | 725 split_line = line.split() |
726 if len(split_line) == 4: | 726 if len(split_line) == 4: |
727 # FIXME: Probably one of mozilla's extensions in the reftest.lis
t format. Do we need to support this? | 727 # FIXME: Probably one of mozilla's extensions in the reftest.lis
t format. Do we need to support this? |
728 _log.warning("unsupported reftest.list line '%s' in %s" % (line,
reftest_list_path)) | 728 _log.warning("unsupported reftest.list line '%s' in %s", line, r
eftest_list_path) |
729 continue | 729 continue |
730 if len(split_line) < 3: | 730 if len(split_line) < 3: |
731 continue | 731 continue |
732 expectation_type, test_file, ref_file = split_line | 732 expectation_type, test_file, ref_file = split_line |
733 parsed_list.setdefault(filesystem.join(test_dirpath, test_file), [])
.append( | 733 parsed_list.setdefault(filesystem.join(test_dirpath, test_file), [])
.append( |
734 (expectation_type, filesystem.join(test_dirpath, ref_file))) | 734 (expectation_type, filesystem.join(test_dirpath, ref_file))) |
735 return parsed_list | 735 return parsed_list |
736 | 736 |
737 def reference_files(self, test_name): | 737 def reference_files(self, test_name): |
738 """Return a list of expectation (== or !=) and filename pairs""" | 738 """Return a list of expectation (== or !=) and filename pairs""" |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 if line.startswith('#') or not len(line): | 934 if line.startswith('#') or not len(line): |
935 continue | 935 continue |
936 tests_to_skip.append(line) | 936 tests_to_skip.append(line) |
937 return tests_to_skip | 937 return tests_to_skip |
938 | 938 |
939 def _expectations_from_skipped_files(self, skipped_file_paths): | 939 def _expectations_from_skipped_files(self, skipped_file_paths): |
940 tests_to_skip = [] | 940 tests_to_skip = [] |
941 for search_path in skipped_file_paths: | 941 for search_path in skipped_file_paths: |
942 filename = self._filesystem.join(self._webkit_baseline_path(search_p
ath), "Skipped") | 942 filename = self._filesystem.join(self._webkit_baseline_path(search_p
ath), "Skipped") |
943 if not self._filesystem.exists(filename): | 943 if not self._filesystem.exists(filename): |
944 _log.debug("Skipped does not exist: %s" % filename) | 944 _log.debug("Skipped does not exist: %s", filename) |
945 continue | 945 continue |
946 _log.debug("Using Skipped file: %s" % filename) | 946 _log.debug("Using Skipped file: %s", filename) |
947 skipped_file_contents = self._filesystem.read_text_file(filename) | 947 skipped_file_contents = self._filesystem.read_text_file(filename) |
948 tests_to_skip.extend(self._tests_from_skipped_file_contents(skipped_
file_contents)) | 948 tests_to_skip.extend(self._tests_from_skipped_file_contents(skipped_
file_contents)) |
949 return tests_to_skip | 949 return tests_to_skip |
950 | 950 |
951 @memoized | 951 @memoized |
952 def skipped_perf_tests(self): | 952 def skipped_perf_tests(self): |
953 return self._expectations_from_skipped_files([self.perf_tests_dir()]) | 953 return self._expectations_from_skipped_files([self.perf_tests_dir()]) |
954 | 954 |
955 def skips_perf_test(self, test_name): | 955 def skips_perf_test(self, test_name): |
956 for test_or_category in self.skipped_perf_tests(): | 956 for test_or_category in self.skipped_perf_tests(): |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1117 def create_driver(self, worker_number, no_timeout=False): | 1117 def create_driver(self, worker_number, no_timeout=False): |
1118 """Return a newly created Driver subclass for starting/stopping the test
driver.""" | 1118 """Return a newly created Driver subclass for starting/stopping the test
driver.""" |
1119 return self._driver_class()(self, worker_number, pixel_tests=self.get_op
tion('pixel_tests'), no_timeout=no_timeout) | 1119 return self._driver_class()(self, worker_number, pixel_tests=self.get_op
tion('pixel_tests'), no_timeout=no_timeout) |
1120 | 1120 |
1121 def start_helper(self): | 1121 def start_helper(self): |
1122 """If a port needs to reconfigure graphics settings or do other | 1122 """If a port needs to reconfigure graphics settings or do other |
1123 things to ensure a known test configuration, it should override this | 1123 things to ensure a known test configuration, it should override this |
1124 method.""" | 1124 method.""" |
1125 helper_path = self._path_to_helper() | 1125 helper_path = self._path_to_helper() |
1126 if helper_path: | 1126 if helper_path: |
1127 _log.debug("Starting layout helper %s" % helper_path) | 1127 _log.debug("Starting layout helper %s", helper_path) |
1128 # Note: Not thread safe: http://bugs.python.org/issue2320 | 1128 # Note: Not thread safe: http://bugs.python.org/issue2320 |
1129 self._helper = self._executive.popen([helper_path], | 1129 self._helper = self._executive.popen([helper_path], |
1130 stdin=self._executive.PIPE, std
out=self._executive.PIPE, stderr=None) | 1130 stdin=self._executive.PIPE, std
out=self._executive.PIPE, stderr=None) |
1131 is_ready = self._helper.stdout.readline() | 1131 is_ready = self._helper.stdout.readline() |
1132 if not is_ready.startswith('ready'): | 1132 if not is_ready.startswith('ready'): |
1133 _log.error("layout_test_helper failed to be ready") | 1133 _log.error("layout_test_helper failed to be ready") |
1134 | 1134 |
1135 def requires_http_server(self): | 1135 def requires_http_server(self): |
1136 """Does the port require an HTTP server for running tests? This could | 1136 """Does the port require an HTTP server for running tests? This could |
1137 be the case when the tests aren't run on the host platform.""" | 1137 be the case when the tests aren't run on the host platform.""" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1284 # FIXME: rename this to test_expectations() once all the callers are upd
ated to know about the ordered dict. | 1284 # FIXME: rename this to test_expectations() once all the callers are upd
ated to know about the ordered dict. |
1285 expectations = collections.OrderedDict() | 1285 expectations = collections.OrderedDict() |
1286 | 1286 |
1287 for path in self.expectations_files(): | 1287 for path in self.expectations_files(): |
1288 if self._filesystem.exists(path): | 1288 if self._filesystem.exists(path): |
1289 expectations[path] = self._filesystem.read_text_file(path) | 1289 expectations[path] = self._filesystem.read_text_file(path) |
1290 | 1290 |
1291 for path in self.get_option('additional_expectations', []): | 1291 for path in self.get_option('additional_expectations', []): |
1292 expanded_path = self._filesystem.expanduser(path) | 1292 expanded_path = self._filesystem.expanduser(path) |
1293 if self._filesystem.exists(expanded_path): | 1293 if self._filesystem.exists(expanded_path): |
1294 _log.debug("reading additional_expectations from path '%s'" % pa
th) | 1294 _log.debug("reading additional_expectations from path '%s'", pat
h) |
1295 expectations[path] = self._filesystem.read_text_file(expanded_pa
th) | 1295 expectations[path] = self._filesystem.read_text_file(expanded_pa
th) |
1296 else: | 1296 else: |
1297 _log.warning("additional_expectations path '%s' does not exist"
% path) | 1297 _log.warning("additional_expectations path '%s' does not exist",
path) |
1298 return expectations | 1298 return expectations |
1299 | 1299 |
1300 def bot_expectations(self): | 1300 def bot_expectations(self): |
1301 if not self.get_option('ignore_flaky_tests'): | 1301 if not self.get_option('ignore_flaky_tests'): |
1302 return {} | 1302 return {} |
1303 | 1303 |
1304 full_port_name = self.determine_full_port_name(self.host, self._options,
self.port_name) | 1304 full_port_name = self.determine_full_port_name(self.host, self._options,
self.port_name) |
1305 builder_category = self.get_option('ignore_builder_category', 'layout') | 1305 builder_category = self.get_option('ignore_builder_category', 'layout') |
1306 factory = BotTestExpectationsFactory(self.host.builders) | 1306 factory = BotTestExpectationsFactory(self.host.builders) |
1307 # FIXME: This only grabs release builder's flakiness data. If we're runn
ing debug, | 1307 # FIXME: This only grabs release builder's flakiness data. If we're runn
ing debug, |
1308 # when we should grab the debug builder's data. | 1308 # when we should grab the debug builder's data. |
1309 expectations = factory.expectations_for_port(full_port_name, builder_cat
egory) | 1309 expectations = factory.expectations_for_port(full_port_name, builder_cat
egory) |
1310 | 1310 |
1311 if not expectations: | 1311 if not expectations: |
1312 return {} | 1312 return {} |
1313 | 1313 |
1314 ignore_mode = self.get_option('ignore_flaky_tests') | 1314 ignore_mode = self.get_option('ignore_flaky_tests') |
1315 if ignore_mode == 'very-flaky' or ignore_mode == 'maybe-flaky': | 1315 if ignore_mode == 'very-flaky' or ignore_mode == 'maybe-flaky': |
1316 return expectations.flakes_by_path(ignore_mode == 'very-flaky') | 1316 return expectations.flakes_by_path(ignore_mode == 'very-flaky') |
1317 if ignore_mode == 'unexpected': | 1317 if ignore_mode == 'unexpected': |
1318 return expectations.unexpected_results_by_path() | 1318 return expectations.unexpected_results_by_path() |
1319 _log.warning("Unexpected ignore mode: '%s'." % ignore_mode) | 1319 _log.warning("Unexpected ignore mode: '%s'.", ignore_mode) |
1320 return {} | 1320 return {} |
1321 | 1321 |
1322 def expectations_files(self): | 1322 def expectations_files(self): |
1323 paths = [ | 1323 paths = [ |
1324 self.path_to_generic_test_expectations_file(), | 1324 self.path_to_generic_test_expectations_file(), |
1325 self._filesystem.join(self.layout_tests_dir(), 'NeverFixTests'), | 1325 self._filesystem.join(self.layout_tests_dir(), 'NeverFixTests'), |
1326 self._filesystem.join(self.layout_tests_dir(), 'StaleTestExpectation
s'), | 1326 self._filesystem.join(self.layout_tests_dir(), 'StaleTestExpectation
s'), |
1327 self._filesystem.join(self.layout_tests_dir(), 'SlowTests'), | 1327 self._filesystem.join(self.layout_tests_dir(), 'SlowTests'), |
1328 ] | 1328 ] |
1329 if self.is_wptserve_enabled(): | 1329 if self.is_wptserve_enabled(): |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1386 try: | 1386 try: |
1387 # It's possible to raise a ScriptError we pass wdiff invalid paths. | 1387 # It's possible to raise a ScriptError we pass wdiff invalid paths. |
1388 return self._run_wdiff(actual_filename, expected_filename) | 1388 return self._run_wdiff(actual_filename, expected_filename) |
1389 except OSError as e: | 1389 except OSError as e: |
1390 if e.errno in [errno.ENOENT, errno.EACCES, errno.ECHILD]: | 1390 if e.errno in [errno.ENOENT, errno.EACCES, errno.ECHILD]: |
1391 # Silently ignore cases where wdiff is missing. | 1391 # Silently ignore cases where wdiff is missing. |
1392 self._wdiff_available = False | 1392 self._wdiff_available = False |
1393 return "" | 1393 return "" |
1394 raise | 1394 raise |
1395 except ScriptError as e: | 1395 except ScriptError as e: |
1396 _log.error("Failed to run wdiff: %s" % e) | 1396 _log.error("Failed to run wdiff: %s", e) |
1397 self._wdiff_available = False | 1397 self._wdiff_available = False |
1398 return self._wdiff_error_html | 1398 return self._wdiff_error_html |
1399 | 1399 |
1400 # This is a class variable so we can test error output easily. | 1400 # This is a class variable so we can test error output easily. |
1401 _pretty_patch_error_html = "Failed to run PrettyPatch, see error log." | 1401 _pretty_patch_error_html = "Failed to run PrettyPatch, see error log." |
1402 | 1402 |
1403 def pretty_patch_text(self, diff_path): | 1403 def pretty_patch_text(self, diff_path): |
1404 if self._pretty_patch_available is None: | 1404 if self._pretty_patch_available is None: |
1405 self._pretty_patch_available = self.check_pretty_patch(more_logging=
False) | 1405 self._pretty_patch_available = self.check_pretty_patch(more_logging=
False) |
1406 if not self._pretty_patch_available: | 1406 if not self._pretty_patch_available: |
1407 return self._pretty_patch_error_html | 1407 return self._pretty_patch_error_html |
1408 command = ("ruby", "-I", self._filesystem.dirname(self._pretty_patch_pat
h), | 1408 command = ("ruby", "-I", self._filesystem.dirname(self._pretty_patch_pat
h), |
1409 self._pretty_patch_path, diff_path) | 1409 self._pretty_patch_path, diff_path) |
1410 try: | 1410 try: |
1411 # Diffs are treated as binary (we pass decode_output=False) as they | 1411 # Diffs are treated as binary (we pass decode_output=False) as they |
1412 # may contain multiple files of conflicting encodings. | 1412 # may contain multiple files of conflicting encodings. |
1413 return self._executive.run_command(command, decode_output=False) | 1413 return self._executive.run_command(command, decode_output=False) |
1414 except OSError as e: | 1414 except OSError as e: |
1415 # If the system is missing ruby log the error and stop trying. | 1415 # If the system is missing ruby log the error and stop trying. |
1416 self._pretty_patch_available = False | 1416 self._pretty_patch_available = False |
1417 _log.error("Failed to run PrettyPatch (%s): %s" % (command, e)) | 1417 _log.error("Failed to run PrettyPatch (%s): %s", command, e) |
1418 return self._pretty_patch_error_html | 1418 return self._pretty_patch_error_html |
1419 except ScriptError as e: | 1419 except ScriptError as e: |
1420 # If ruby failed to run for some reason, log the command | 1420 # If ruby failed to run for some reason, log the command |
1421 # output and stop trying. | 1421 # output and stop trying. |
1422 self._pretty_patch_available = False | 1422 self._pretty_patch_available = False |
1423 _log.error("Failed to run PrettyPatch (%s):\n%s" % (command, e.messa
ge_with_output())) | 1423 _log.error("Failed to run PrettyPatch (%s):\n%s", command, e.message
_with_output()) |
1424 return self._pretty_patch_error_html | 1424 return self._pretty_patch_error_html |
1425 | 1425 |
1426 def default_configuration(self): | 1426 def default_configuration(self): |
1427 return 'Release' | 1427 return 'Release' |
1428 | 1428 |
1429 def clobber_old_port_specific_results(self): | 1429 def clobber_old_port_specific_results(self): |
1430 pass | 1430 pass |
1431 | 1431 |
1432 # FIXME: This does not belong on the port object. | 1432 # FIXME: This does not belong on the port object. |
1433 @memoized | 1433 @memoized |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1669 if path: | 1669 if path: |
1670 return [path] | 1670 return [path] |
1671 return [] | 1671 return [] |
1672 | 1672 |
1673 def _symbols_string(self): | 1673 def _symbols_string(self): |
1674 symbols = '' | 1674 symbols = '' |
1675 for path_to_module in self._modules_to_search_for_symbols(): | 1675 for path_to_module in self._modules_to_search_for_symbols(): |
1676 try: | 1676 try: |
1677 symbols += self._executive.run_command(['nm', path_to_module], e
rror_handler=self._executive.ignore_error) | 1677 symbols += self._executive.run_command(['nm', path_to_module], e
rror_handler=self._executive.ignore_error) |
1678 except OSError as e: | 1678 except OSError as e: |
1679 _log.warn("Failed to run nm: %s. Can't determine supported feat
ures correctly." % e) | 1679 _log.warning("Failed to run nm: %s. Can't determine supported f
eatures correctly.", e) |
1680 return symbols | 1680 return symbols |
1681 | 1681 |
1682 # Ports which use compile-time feature detection should define this method a
nd return | 1682 # Ports which use compile-time feature detection should define this method a
nd return |
1683 # a dictionary mapping from symbol substrings to possibly disabled test dire
ctories. | 1683 # a dictionary mapping from symbol substrings to possibly disabled test dire
ctories. |
1684 # When the symbol substrings are not matched, the directories will be skippe
d. | 1684 # When the symbol substrings are not matched, the directories will be skippe
d. |
1685 # If ports don't ever enable certain features, then those directories can ju
st be | 1685 # If ports don't ever enable certain features, then those directories can ju
st be |
1686 # in the Skipped list instead of compile-time-checked here. | 1686 # in the Skipped list instead of compile-time-checked here. |
1687 def _missing_symbol_to_skipped_tests(self): | 1687 def _missing_symbol_to_skipped_tests(self): |
1688 if self.PORT_HAS_AUDIO_CODECS_BUILT_IN: | 1688 if self.PORT_HAS_AUDIO_CODECS_BUILT_IN: |
1689 return {} | 1689 return {} |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1787 | 1787 |
1788 def __init__(self, base, args, reference_args=None): | 1788 def __init__(self, base, args, reference_args=None): |
1789 self.name = base | 1789 self.name = base |
1790 self.base = base | 1790 self.base = base |
1791 self.args = args | 1791 self.args = args |
1792 self.reference_args = args if reference_args is None else reference_args | 1792 self.reference_args = args if reference_args is None else reference_args |
1793 self.tests = set() | 1793 self.tests = set() |
1794 | 1794 |
1795 def __repr__(self): | 1795 def __repr__(self): |
1796 return "PhysicalTestSuite('%s', '%s', %s, %s)" % (self.name, self.base,
self.args, self.reference_args) | 1796 return "PhysicalTestSuite('%s', '%s', %s, %s)" % (self.name, self.base,
self.args, self.reference_args) |
OLD | NEW |