Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy_unittest.py (285136 => 285137)
--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy_unittest.py 2021-11-01 22:09:41 UTC (rev 285136)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy_unittest.py 2021-11-01 22:15:44 UTC (rev 285137)
@@ -30,8 +30,13 @@
from webkitpy.common.host_mock import MockHost
from webkitpy.common.system.filesystem_mock import MockFileSystem
-from webkitpy.layout_tests.controllers.layout_test_finder_legacy import LayoutTestFinder, Port, _is_reference_html_file, _supported_test_extensions
-from webkitpy.port.test import add_unit_tests_to_mock_filesystem, TestPort
+from webkitpy.layout_tests.controllers.layout_test_finder_legacy import (
+ LayoutTestFinder,
+ Port,
+ _is_reference_html_file,
+ _supported_test_extensions,
+)
+from webkitpy.port.test import add_unit_tests_to_mock_filesystem, TestPort, unit_test_list
class MockLayoutTestFinder(LayoutTestFinder):
@@ -40,12 +45,21 @@
class LayoutTestFinderTests(unittest.TestCase):
- def make_finder(self):
+ def __init__(self, *args, **kwargs):
+ super(LayoutTestFinderTests, self).__init__(*args, **kwargs)
+ self.port = None
+ self.finder = None
+
+ def setUp(self):
host = MockHost(create_stub_repository_files=True)
add_unit_tests_to_mock_filesystem(host.filesystem)
- port = TestPort(host)
- return LayoutTestFinder(port, None)
+ self.port = TestPort(host)
+ self.finder = LayoutTestFinder(self.port, None)
+ def tearDown(self):
+ self.port = None
+ self.finder = None
+
def test_supported_test_extensions(self):
self.assertEqual(_supported_test_extensions & Port._supported_reference_extensions, Port._supported_reference_extensions)
@@ -62,32 +76,289 @@
self.assertFalse(_is_reference_html_file(filesystem, '', 'foo-expected.mht'))
def test_find_no_paths_specified(self):
- finder = self.make_finder()
- tests = finder.find_tests_by_path([])
- self.assertNotEqual(len(tests), 0)
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path([])]
+ self.assertNotEqual(tests, [])
+ def test_find_no_paths_sorted(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path([])]
+ sorted_tests = sorted(tests, key=self.port.test_key)
+ self.assertEqual(tests, sorted_tests)
+
+ def test_find_all_no_paths(self):
+ finder = self.finder
+ empty_tests = [t.test_path for t in finder.find_tests_by_path([])]
+ star_tests = [t.test_path for t in finder.find_tests_by_path(['*'])]
+ self.assertEqual(empty_tests, star_tests)
+
+ def test_includes_other_platforms(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path([])]
+ self.assertEqual(self.port.name(), 'test-mac-leopard')
+ self.assertIn('platform/test-snow-leopard/websocket/test.html', tests)
+
def test_find_one_test(self):
- finder = self.make_finder()
- tests = finder.find_tests_by_path(['failures/expected/image.html'])
- self.assertEqual(len(tests), 1)
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['failures/expected/image.html'])]
+ self.assertEqual(tests, ['failures/expected/image.html'])
+ def test_find_platform(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['platform'])]
+ self.assertEqual(
+ tests,
+ [
+ 'platform/test-mac-leopard/http/test.html',
+ 'platform/test-mac-leopard/passes/platform-specific-test.html',
+ 'platform/test-mac-leopard/platform-specific-dir/platform-specific-test.html',
+ 'platform/test-snow-leopard/http/test.html',
+ 'platform/test-snow-leopard/websocket/test.html',
+ 'platform/test-win-7sp0/http/test.html',
+ ],
+ )
+ with_slash = [t.test_path for t in finder.find_tests_by_path(['platform/'])]
+ self.assertEqual(tests, with_slash)
+ with_star = [t.test_path for t in finder.find_tests_by_path(['platform/*'])]
+ self.assertEqual(tests, with_star)
+
+ def test_find_platform_self(self):
+ finder = self.finder
+ self.assertEqual(self.port.name(), 'test-mac-leopard')
+ tests = [t.test_path for t in finder.find_tests_by_path(['platform/test-mac-leopard'])]
+ self.assertEqual(
+ tests,
+ [
+ 'platform/test-mac-leopard/http/test.html',
+ 'platform/test-mac-leopard/passes/platform-specific-test.html',
+ 'platform/test-mac-leopard/platform-specific-dir/platform-specific-test.html',
+ ],
+ )
+
+ def test_find_platform_other(self):
+ finder = self.finder
+ self.assertEqual(self.port.name(), 'test-mac-leopard')
+ tests = [t.test_path for t in finder.find_tests_by_path(['platform/test-snow-leopard'])]
+ self.assertEqual(
+ tests,
+ [
+ 'platform/test-snow-leopard/http/test.html',
+ 'platform/test-snow-leopard/websocket/test.html',
+ ],
+ )
+
+ def test_find_platform_specific(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['http/test.html'])]
+ self.assertEqual(tests, [])
+
+ def test_find_platform_specific_directory(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['platform-specific-dir'])]
+ self.assertEqual(tests, [])
+ with_slash = [t.test_path for t in finder.find_tests_by_path(['platform-specific-dir/'])]
+ self.assertEqual(tests, with_slash)
+ with_star = [t.test_path for t in finder.find_tests_by_path(['platform-specific-dir/*'])]
+ self.assertEqual(tests, with_star)
+
+ def test_find_directory_includes_platform_specific(self):
+ # contrast with test_find_platform_specific above
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['http'])]
+ self.assertEqual(
+ tests,
+ [
+ 'http/tests/passes/image.html',
+ 'http/tests/passes/text.html',
+ 'http/tests/ssl/text.html',
+ 'platform/test-mac-leopard/http/test.html',
+ ],
+ )
+
def test_find_glob(self):
- finder = self.make_finder()
- tests = finder.find_tests_by_path(['failures/expected/im*'])
- self.assertEqual(len(tests), 2)
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['failures/expected/im*'])]
+ self.assertEqual(
+ tests, ['failures/expected/image.html', 'failures/expected/image_checksum.html']
+ )
+ # these are commented out as MockFileSystem doesn't support anything but *
+ # def test_find_glob_b(self):
+ # finder = self.finder
+ # tests = [t.test_path for t in finder.find_tests_by_path(['failures/expected/i?age.html'])]
+ # self.assertEqual(tests, ['failures/expected/image.html'])
+
+ # def test_find_glob_c(self):
+ # finder = self.finder
+ # tests = [t.test_path for t in finder.find_tests_by_path(['failures/expected/i[m]age.html'])]
+ # self.assertEqual(tests, ['failures/expected/image.html'])
+
+ def test_find_glob_mixed_file_type_sorted(self):
+ finder = self.finder
+ # this should expand the *, sort the result, then recurse;
+ # notably this therefore puts passes/skipped/ < passes/svgreftest.svg
+
+ # test the short, simple case first
+ tests = [t.test_path for t in finder.find_tests_by_path(['passes/s*'])]
+ self.assertEqual(tests, ['passes/skipped/skip.html', 'passes/svgreftest.svg'])
+
+ # then test the whole directory (check directories aren't just sorted first)
+ tests = [t.test_path for t in finder.find_tests_by_path(['passes/*'])]
+ self.assertEqual(
+ tests,
+ [
+ 'passes/args.html',
+ 'passes/audio-tolerance.html',
+ 'passes/audio.html',
+ 'passes/checksum_in_image.html',
+ 'passes/error.html',
+ 'passes/image.html',
+ 'passes/mismatch.html',
+ 'passes/phpreftest.php',
+ 'passes/platform_image.html',
+ 'passes/reftest.html',
+ 'passes/skipped/skip.html',
+ 'passes/svgreftest.svg',
+ 'passes/text.html',
+ 'passes/xhtreftest.xht',
+ ],
+ )
+
+ def test_find_glob_directory(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['fai*ures/expected/image.html'])]
+ self.assertEqual(tests, ['failures/expected/image.html'])
+ tests = [t.test_path for t in finder.find_tests_by_path(['failures/*xpected/image.html'])]
+ self.assertEqual(tests, ['failures/expected/image.html'])
+
+ def test_find_glob_directory_b(self):
+ finder = self.finder
+ glob_tests = [t.test_path for t in finder.find_tests_by_path(['fai*ures'])]
+ plain_tests = [t.test_path for t in finder.find_tests_by_path(['failures'])]
+ self.assertEqual(plain_tests, glob_tests)
+ glob_slash_tests = [t.test_path for t in finder.find_tests_by_path(['fai*ures/'])]
+ self.assertEqual(plain_tests, glob_slash_tests)
+
+ def test_find_glob_directory_e(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['h*tp'])]
+ # contrast with test_find_directory_includes_platform_specific;
+ # this excludes the platform/*/http/ tests
+ self.assertEqual(
+ tests,
+ [
+ 'http/tests/passes/image.html',
+ 'http/tests/passes/text.html',
+ 'http/tests/ssl/text.html',
+ ],
+ )
+
+ def test_find_directory(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['websocket/tests'])]
+ self.assertEqual(tests, ['websocket/tests/passes/text.html'])
+
+ def test_find_directory_trailing_slash(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['websocket/tests/'])]
+ self.assertEqual(tests, ['websocket/tests/passes/text.html'])
+
+ def test_find_directory_star(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['websocket/tests/*'])]
+ self.assertEqual(tests, ['websocket/tests/passes/text.html'])
+
+ def test_preserves_order(self):
+ tests_to_find = [
+ 'passes/audio.html',
+ 'failures/expected/text.html',
+ 'failures/expected/missing_text.html',
+ 'passes/args.html',
+ ]
+ finder = self.finder
+ tests_found = [t.test_path for t in finder.find_tests_by_path(tests_to_find)]
+ self.assertEqual(tests_to_find, tests_found)
+
+ def test_preserves_order_multiple_times(self):
+ tests_to_find = [
+ 'passes/args.html',
+ 'passes/audio.html',
+ 'passes/audio.html',
+ 'passes/args.html',
+ ]
+ finder = self.finder
+ tests_found = [t.test_path for t in finder.find_tests_by_path(tests_to_find)]
+ self.assertEqual(tests_to_find, tests_found)
+
+ def test_preserves_order_directories(self):
+ tests_to_find = ['http/tests/ssl', 'http/tests/passes']
+ finder = self.finder
+ tests_found = [t.test_path for t in finder.find_tests_by_path(tests_to_find)]
+ self.assertEqual(
+ tests_found,
+ [
+ 'http/tests/ssl/text.html',
+ 'http/tests/passes/image.html',
+ 'http/tests/passes/text.html',
+ ],
+ )
+
+ def test_preserves_order_mixed_file_type(self):
+ tests_to_find = ['passes/skipped', 'passes/args.html']
+ finder = self.finder
+ tests_found = [t.test_path for t in finder.find_tests_by_path(tests_to_find)]
+ self.assertEqual(tests_found, ['passes/skipped/skip.html', 'passes/args.html'])
+
+ def test_preserves_order_mixed_file_type_b(self):
+ tests_to_find = ['passes/args.html', 'passes/skipped']
+ finder = self.finder
+ tests_found = [t.test_path for t in finder.find_tests_by_path(tests_to_find)]
+ self.assertEqual(tests_found, ['passes/args.html', 'passes/skipped/skip.html'])
+
+ def test_find_directory_multiple_times(self):
+ finder = self.finder
+ tests = [
+ t.test_path
+ for t in finder.find_tests_by_path(['websocket/tests/', 'websocket/tests/'])
+ ]
+ self.assertEqual(
+ tests, ['websocket/tests/passes/text.html', 'websocket/tests/passes/text.html']
+ )
+
+ def test_no_reference(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['passes/reftest-expected.html'])]
+ self.assertEqual(tests, [])
+
+ def test_glob_no_references(self):
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['passes/*reftest*'])]
+ self.assertEqual(
+ tests,
+ [
+ 'passes/phpreftest.php',
+ 'passes/reftest.html',
+ 'passes/svgreftest.svg',
+ 'passes/xhtreftest.xht',
+ ],
+ )
+
def test_find_with_skipped_directories(self):
- finder = self.make_finder()
- tests = finder.find_tests_by_path(['userscripts'])
- self.assertNotIn('userscripts/resources/iframe.html', [test.test_path for test in tests])
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['userscripts'])]
+ self.assertNotIn('userscripts/resources/iframe.html', tests)
def test_find_with_skipped_directories_2(self):
- finder = self.make_finder()
- tests = finder.find_tests_by_path(['userscripts/resources'])
+ finder = self.finder
+ tests = [t.test_path for t in finder.find_tests_by_path(['userscripts/resources'])]
self.assertEqual(tests, [])
+ tests = [t.test_path for t in finder.find_tests_by_path(['userscripts/resources/'])]
+ self.assertEqual(tests, [])
+ tests = [t.test_path for t in finder.find_tests_by_path(['userscripts/resources/*'])]
+ self.assertEqual(tests, [])
def test_is_test_file(self):
- finder = self.make_finder()
+ finder = self.finder
self.assertTrue(finder._is_test_file(finder._filesystem, '', 'foo.html'))
self.assertTrue(finder._is_test_file(finder._filesystem, '', 'foo.shtml'))
self.assertTrue(finder._is_test_file(finder._filesystem, '', 'foo.svg'))
@@ -113,7 +384,7 @@
self.assertTrue(finder._is_test_file(finder._filesystem, '', 'foo-root.xml'))
def test_is_w3c_resource_file(self):
- finder = self.make_finder()
+ finder = self.finder
finder._filesystem.write_text_file(finder._port.layout_tests_dir() + "/imported/w3c/resources/resource-files.json", """
{"directories": [
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py (285136 => 285137)
--- trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py 2021-11-01 22:09:41 UTC (rev 285136)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py 2021-11-01 22:15:44 UTC (rev 285137)
@@ -174,8 +174,7 @@
# FIXME: Remove this when we fix test-webkitpy to work
# properly on cygwin (bug 63846).
- # FIXME: Multiprocessing doesn't do well when nested in Python 3 (https://bugs.webkit.org/show_bug.cgi?id=205280)
- self.should_test_processes = not self._platform.is_win() and sys.version_info < (3, 0)
+ self.should_test_processes = not self._platform.is_win()
def serial_test_basic(self):
options, args = parse_args(tests_included=True)
@@ -223,7 +222,7 @@
def test_child_processes_min(self):
if self.should_test_processes:
_, regular_output, _ = logging_run(
- ['--debug-rwt-logging', '--child-processes', '2', '-i', 'passes/passes', 'passes'],
+ ['--debug-rwt-logging', '--child-processes', '2', '-i', 'passes/passes', '-i', 'platform', 'passes'],
tests_included=True, shared_port=False)
self.assertTrue(any(['Running 1 ' in line for line in regular_output.getvalue().splitlines()]))