| # 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'))) |
| self.assertMultiLineEqual( |
| out, '{"remove-lines": [{"test": "failures/expected/image.html", "port_name": "test-win-win10"}]}\n') |
| |
| 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': []}) |