Skip to content

Commit

Permalink
[webkitpy] make TestResultWriter.{actual,expected}_filename handle va…
Browse files Browse the repository at this point in the history
…riants

https://bugs.webkit.org/show_bug.cgi?id=264816

Reviewed by Jonathan Bedard.

While 259006@main made output_filename handle variants correctly, it
didn't make the other methods handle it correctly. This fixes this by
making all the methods behave correctly.

* Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
(TestResultWriter):
(TestResultWriter._modified_filename):
(TestResultWriter.expected_filename):
(TestResultWriter.actual_filename):
(TestResultWriter.output_filename):
* Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
(TestResultWriterTest.test_output_svg_filename):
(TestResultWriterTest):
(TestResultWriterTest.test_expected_filename):
(TestResultWriterTest.test_actual_filename):

Canonical link: https://commits.webkit.org/270773@main
  • Loading branch information
gsnedders committed Nov 15, 2023
1 parent b55438f commit 03a4b15
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,36 @@ class TestResultWriter(object):
FILENAME_SUFFIX_IMAGE_DIFFS_HTML = "-diffs.html"
PROCESS_NAME_RE = re.compile(r'(com\.apple|org\.WebKit)\..+')

@staticmethod
def expected_filename(test_name, filesystem, port_name=None, suffix='txt'):
@classmethod
def _modified_filename(cls, test_name, filesystem, modifier):
variant = ''
if '?' in test_name:
(test_name, variant) = test_name.split('?', 1)
if '#' in test_name:
(test_name, variant) = test_name.split('#', 1)

# Test names that are actually process names are treated like they don't have any extension
if cls.PROCESS_NAME_RE.match(filesystem.basename(test_name)):
ext_parts = (test_name, '', '')
else:
ext_parts = filesystem.splitext(test_name)
output_basename = ext_parts[0]

if len(variant):
output_basename += "_" + re.sub(r'[|* <>:]', '_', variant)

return output_basename + modifier

@classmethod
def expected_filename(cls, test_name, filesystem, port_name=None, suffix='txt'):
expected = cls._modified_filename(test_name, filesystem, TestResultWriter.FILENAME_SUFFIX_EXPECTED + '.' + suffix)
if not port_name:
return filesystem.splitext(test_name)[0] + TestResultWriter.FILENAME_SUFFIX_EXPECTED + '.' + suffix
return filesystem.join("platform", port_name, filesystem.splitext(test_name)[0] + TestResultWriter.FILENAME_SUFFIX_EXPECTED + '.' + suffix)
return expected
return filesystem.join("platform", port_name, expected)

@staticmethod
def actual_filename(test_name, filesystem, suffix='txt'):
return filesystem.splitext(test_name)[0] + TestResultWriter.FILENAME_SUFFIX_ACTUAL + '.' + suffix
@classmethod
def actual_filename(cls, test_name, filesystem, suffix='txt'):
return cls._modified_filename(test_name, filesystem, TestResultWriter.FILENAME_SUFFIX_ACTUAL + '.' + suffix)

def __init__(self, filesystem, port, root_output_dir, test_name):
self._filesystem = filesystem
Expand All @@ -98,25 +119,7 @@ def output_filename(self, modifier):
The absolute path to the output filename
"""
fs = self._filesystem

test_name = self._test_name
variant = ''
if '?' in test_name:
(test_name, variant) = test_name.split('?', 1)
if '#' in test_name:
(test_name, variant) = test_name.split('#', 1)

# Test names that are actually process names are treated like they don't have any extension
if self.PROCESS_NAME_RE.match(fs.basename(test_name)):
ext_parts = (test_name, '', '')
else:
ext_parts = fs.splitext(test_name)
output_basename = ext_parts[0]

if len(variant):
output_basename += "_" + re.sub(r'[|* <>:]', '_', variant)

return fs.join(self._root_output_dir, output_basename) + modifier
return fs.join(self._root_output_dir, self._modified_filename(self._test_name, self._filesystem, modifier))

def _write_binary_file(self, path, contents):
if contents is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,37 @@ def test_output_svg_filename(self):
fs = host.filesystem
writer = test_result_writer.TestResultWriter(fs, port, port.results_directory(), 'svg/W3C-SVG-1.1/animate-elem-02-t.svg')
self.assertEqual(fs.join(port.results_directory(), 'svg/W3C-SVG-1.1/animate-elem-02-t-diff.txt'), writer.output_filename('-diff.txt'))

def test_expected_filename(self):
host = MockHost()
port = TestPort(host)
fs = host.filesystem

expected = test_result_writer.TestResultWriter.expected_filename(
"fast/dom/foo.html", fs
)
self.assertEqual("fast/dom/foo-expected.txt", expected)

expected = test_result_writer.TestResultWriter.expected_filename(
"template_test/pbkdf2.https.any.worker.html?1-1000", fs
)
self.assertEqual(
"template_test/pbkdf2.https.any.worker_1-1000-expected.txt", expected
)

def test_actual_filename(self):
host = MockHost()
port = TestPort(host)
fs = host.filesystem

actual = test_result_writer.TestResultWriter.actual_filename(
"fast/dom/foo.html", fs
)
self.assertEqual("fast/dom/foo-actual.txt", actual)

actual = test_result_writer.TestResultWriter.actual_filename(
"template_test/pbkdf2.https.any.worker.html?1-1000", fs
)
self.assertEqual(
"template_test/pbkdf2.https.any.worker_1-1000-actual.txt", actual
)

0 comments on commit 03a4b15

Please sign in to comment.