blob: a6e7f1388ebfdde4117617e2c2454c010970bd59 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import optparse
from blinkpy.common.system.executive_mock import MockExecutive
from blinkpy.common.system.output_capture import OutputCapture
from blinkpy.tool.commands.rebaseline_test import RebaselineTest
from blinkpy.tool.commands.rebaseline_unittest import BaseTestCase
class TestRebaselineTest(BaseTestCase):
command_constructor = RebaselineTest
@staticmethod
def options(**kwargs):
return optparse.Values(
dict({
'builder': 'MOCK Mac10.11',
'port_name': None,
'test': 'userscripts/another-test.html',
'suffixes': 'txt',
'results_directory': None,
'build_number': None,
'step_name': None,
}, **kwargs))
def test_rebaseline_test_internal_with_port_that_lacks_buildbot(self):
self.tool.executive = MockExecutive()
port = self.tool.port_factory.get('test-win-win7')
baseline_relative_path = 'platform/test-win-win10/failures/expected/image-expected.txt'
baseline_local_absolute_path = port.host.filesystem.join(
port.web_tests_dir(), baseline_relative_path)
self._write(baseline_local_absolute_path, 'original win10 result')
actual_result_url = (
'https://test-results.appspot.com/data/layout_results/MOCK_Win10/'
+ 'results/layout-test-results/failures/expected/image-actual.txt')
self.tool.web.urls[actual_result_url] = 'new win10 result'
oc = OutputCapture()
try:
options = optparse.Values({
'optimize': True,
'builder': 'MOCK Win10',
'port_name': None,
'suffixes': 'txt',
'verbose': True,
'test': 'failures/expected/image.html',
'results_directory': None,
'build_number': None,
'step_name': None,
})
oc.capture_output()
self.command.execute(options, [], self.tool)
finally:
out, _, _ = oc.restore_output()
self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
self.assertMultiLineEqual(
self._read(baseline_local_absolute_path), 'new win10 result')
self.assertFalse(
self.tool.filesystem.exists(
self.tool.filesystem.join(
port.web_tests_dir(),
'platform/test-win-win7/failures/expected/image-expected.txt'
)))
# We should not change TestExpectations for unexpected failures.
self.assertMultiLineEqual(out, '')
def test_baseline_directory(self):
self.assertMultiLineEqual(
self.command.baseline_directory('MOCK Mac10.11'),
'/test.checkout/wtests/platform/test-mac-mac10.11')
self.assertMultiLineEqual(
self.command.baseline_directory('MOCK Mac10.10'),
'/test.checkout/wtests/platform/test-mac-mac10.10')
self.assertMultiLineEqual(
self.command.baseline_directory('MOCK Trusty'),
'/test.checkout/wtests/platform/test-linux-trusty')
self.assertMultiLineEqual(
self.command.baseline_directory('MOCK Precise'),
'/test.checkout/wtests/platform/test-linux-precise')
def test_rebaseline_updates_expectations_file_noop(self):
# pylint: disable=protected-access
self._zero_out_test_expectations()
self._write(self.test_expectations_path, (
'Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'
))
self._write(
'fast/dom/Window/window-postmessage-clone-really-deep-array.html',
'Dummy test contents')
self._write('fast/css/large-list-of-rules-crash.html',
'Dummy test contents')
self._write('userscripts/another-test.html', 'Dummy test contents')
self.command._rebaseline_test_and_update_expectations(
self.options(suffixes='png,wav,txt'))
self.assertItemsEqual(self.tool.web.urls_fetched, [
self.WEB_PREFIX + '/userscripts/another-test-actual.png',
self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
])
new_expectations = self._read(self.test_expectations_path)
self.assertMultiLineEqual(new_expectations, (
'Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'
))
def test_rebaseline_test(self):
# pylint: disable=protected-access
actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
self.tool.web.urls[actual_result_url] = 'new result'
self.command._rebaseline_test('test-linux-trusty',
'userscripts/another-test.html', 'txt',
self.WEB_PREFIX)
self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
port = self.tool.port_factory.get('test-linux-trusty')
self.assertMultiLineEqual(
self._read(
port.host.filesystem.join(
port.baseline_version_dir(),
'userscripts/another-test-expected.txt')), 'new result')
def test_rebaseline_test_empty_result(self):
# pylint: disable=protected-access
actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
self.tool.web.urls[actual_result_url] = ''
self.command._rebaseline_test('test-linux-trusty',
'userscripts/another-test.html', 'txt',
self.WEB_PREFIX)
self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
port = self.tool.port_factory.get('test-linux-trusty')
self.assertMultiLineEqual(
self._read(
port.host.filesystem.join(
port.baseline_version_dir(),
'userscripts/another-test-expected.txt')), '')
def test_rebaseline_test_non_existence_result(self):
# pylint: disable=protected-access
actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
self.command._rebaseline_test('test-linux-trusty',
'userscripts/another-test.html', 'txt',
self.WEB_PREFIX)
self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
port = self.tool.port_factory.get('test-linux-trusty')
self.assertMultiLineEqual(
self._read(
port.host.filesystem.join(
port.baseline_version_dir(),
'userscripts/another-test-expected.txt')), '')
def test_rebaseline_test_with_results_directory(self):
# pylint: disable=protected-access
self._write('userscripts/another-test.html', 'test data')
self._write(
self.test_expectations_path,
('Bug(x) [ Mac ] userscripts/another-test.html [ Failure ]\n'
'bug(z) [ Linux ] userscripts/another-test.html [ Failure ]\n'))
self.command._rebaseline_test_and_update_expectations(
self.options(results_directory='/tmp'))
self.assertItemsEqual(
self.tool.web.urls_fetched,
['file:///tmp/userscripts/another-test-actual.txt'])
def test_rebaseline_reftest(self):
# pylint: disable=protected-access
self._write('userscripts/another-test.html', 'test data')
self._write('userscripts/another-test-expected.html', 'generic result')
OutputCapture().assert_outputs(
self,
self.command._rebaseline_test_and_update_expectations,
args=[self.options(suffixes='png')],
expected_logs=
'Cannot rebaseline image result for reftest: userscripts/another-test.html\n'
)
self.assertDictEqual(self.command.expectation_line_changes.to_dict(),
{'remove-lines': []})
def test_rebaseline_reftest_with_text(self):
# pylint: disable=protected-access
self._write('userscripts/another-test.html', 'test data')
self._write('userscripts/another-test-expected.html', 'generic result')
self._write('userscripts/another-test-expected.txt', 'text')
OutputCapture().assert_outputs(
self,
self.command._rebaseline_test_and_update_expectations,
args=[self.options(suffixes='png,txt')],
expected_logs=
'Cannot rebaseline image result for reftest: userscripts/another-test.html\n'
)
self.assertItemsEqual(
self.tool.web.urls_fetched,
[self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
self.assertDictEqual(self.command.expectation_line_changes.to_dict(),
{'remove-lines': []})