12fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#!/usr/bin/env python 22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# Copyright (C) 2011 Google Inc. All rights reserved. 32fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 42fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# Redistribution and use in source and binary forms, with or without 52fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# modification, are permitted provided that the following conditions are 62fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# met: 72fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 82fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# * Redistributions of source code must retain the above copyright 92fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# notice, this list of conditions and the following disclaimer. 102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# * Redistributions in binary form must reproduce the above 112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# copyright notice, this list of conditions and the following disclaimer 122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# in the documentation and/or other materials provided with the 132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# distribution. 142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# * Neither the name of Google Inc. nor the names of its 152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# contributors may be used to endorse or promote products derived from 162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# this software without specific prior written permission. 172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block"""Unit tests for MockDRT.""" 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochimport sys 332fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockimport unittest 342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.common import newstringio 362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.layout_tests.port import mock_drt 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.layout_tests.port import factory 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.layout_tests.port import port_testcase 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.layout_tests.port import test 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochfrom webkitpy.tool import mocktool 432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochmock_options = mocktool.MockOptions(use_apache=True, 442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch configuration='Release') 452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass MockDRTPortTest(port_testcase.PortTestCase): 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def make_port(self, options=mock_options): 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if sys.platform == 'win32': 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # We use this because the 'win' port doesn't work yet. 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return mock_drt.MockDRTPort(port_name='mock-chromium-win', options=options) 522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return mock_drt.MockDRTPort(options=options) 532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch def test_default_worker_model(self): 5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # only overridding the default test; we don't care about this one. 5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch pass 5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_port_name_in_constructor(self): 592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTrue(mock_drt.MockDRTPort(port_name='mock-test')) 602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_acquire_http_lock(self): 622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().acquire_http_lock() 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_release_http_lock(self): 662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().release_http_lock() 682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_check_build(self): 702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port = self.make_port() 712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTrue(port.check_build(True)) 722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_check_sys_deps(self): 742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port = self.make_port() 752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTrue(port.check_sys_deps(True)) 762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_start_helper(self): 782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().start_helper() 802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_start_http_server(self): 822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().start_http_server() 842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_start_websocket_server(self): 862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().start_websocket_server() 882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_stop_helper(self): 902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().stop_helper() 922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_stop_http_server(self): 942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().stop_http_server() 962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_stop_websocket_server(self): 982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Only checking that no exception is raised. 992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.make_port().stop_websocket_server() 1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass MockDRTTest(unittest.TestCase): 1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def to_path(self, port, test_name): 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return port._filesystem.join(port.layout_tests_dir(), test_name) 1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def input_line(self, port, test_name, checksum=None): 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block url = port.filename_to_uri(self.to_path(port, test_name)) 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # FIXME: we shouldn't have to work around platform-specific issues 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # here. 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if url.startswith('file:////'): 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block url = url[len('file:////') - 1:] 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if url.startswith('file:///'): 1132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block url = url[len('file:///') - 1:] 1142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if checksum: 1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return url + "'" + checksum + '\n' 1172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return url + '\n' 1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def extra_args(self, pixel_tests): 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if pixel_tests: 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['--pixel-tests', '-'] 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['-'] 1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def make_drt(self, options, args, filesystem, stdin, stdout, stderr): 1252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return mock_drt.MockDRT(options, args, filesystem, stdin, stdout, stderr) 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def make_input_output(self, port, test_name, pixel_tests, 1282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_checksum, drt_output, drt_input=None): 1292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block path = self.to_path(port, test_name) 1302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if pixel_tests: 1312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if not expected_checksum: 1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_checksum = port.expected_checksum(path) 1332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if not drt_input: 1342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_input = self.input_line(port, test_name, expected_checksum) 1352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output = port.expected_text(path) 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if not drt_output: 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_output = self.expected_output(port, test_name, pixel_tests, 1392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output, expected_checksum) 1402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return (drt_input, drt_output) 1412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def expected_output(self, port, test_name, pixel_tests, text_output, expected_checksum): 1432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if pixel_tests and expected_checksum: 1442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['Content-Type: text/plain\n', 1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output, 1462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n', 1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '\n', 1482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'ActualHash: %s\n' % expected_checksum, 1492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'ExpectedHash: %s\n' % expected_checksum, 1502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n'] 1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else: 1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['Content-Type: text/plain\n', 1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output, 1542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n', 1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n'] 1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def assertTest(self, test_name, pixel_tests, expected_checksum=None, 1582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_output=None, filesystem=None): 1592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block platform = 'test' 1602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block filesystem = filesystem or test.unit_test_filesystem() 1612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port = factory.get(platform, filesystem=filesystem) 1622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_input, drt_output = self.make_input_output(port, test_name, 1632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block pixel_tests, expected_checksum, drt_output) 1642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block args = ['--platform', 'test'] + self.extra_args(pixel_tests) 1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stdin = newstringio.StringIO(drt_input) 1672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stdout = newstringio.StringIO() 1682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stderr = newstringio.StringIO() 1692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block options, args = mock_drt.parse_options(args) 1702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt = self.make_drt(options, args, filesystem, stdin, stdout, stderr) 1722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block res = drt.run() 1732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(res, 0) 1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # We use the StringIO.buflist here instead of getvalue() because 1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # the StringIO might be a mix of unicode/ascii and 8-bit strings. 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(stdout.buflist, drt_output) 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(stderr.getvalue(), '') 1802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_main(self): 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block filesystem = test.unit_test_filesystem() 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stdin = newstringio.StringIO() 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stdout = newstringio.StringIO() 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block stderr = newstringio.StringIO() 1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block res = mock_drt.main(['--platform', 'test'] + self.extra_args(False), 1872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block filesystem, stdin, stdout, stderr) 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(res, 0) 1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(stdout.getvalue(), '') 1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(stderr.getvalue(), '') 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEqual(filesystem.written_files, {}) 1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_pixeltest_passes(self): 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # This also tests that we handle HTTP: test URLs properly. 1952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTest('http/tests/passes/text.html', True) 1962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_pixeltest__fails(self): 1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTest('failures/expected/checksum.html', pixel_tests=True, 1992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_checksum='wrong-checksum', 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_output=['Content-Type: text/plain\n', 2012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'checksum-txt', 2022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n', 2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '\n', 2042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'ActualHash: checksum-checksum\n', 2052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'ExpectedHash: wrong-checksum\n', 2062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'Content-Type: image/png\n', 2072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'Content-Length: 13\n', 2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'checksum\x8a-png', 2092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n']) 2102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_textonly(self): 2122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTest('passes/image.html', False) 2132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2142bde8e466a4451c7319e3a072d118917957d6554Steve Block def test_checksum_in_png(self): 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block self.assertTest('passes/checksum_in_image.html', True) 2162bde8e466a4451c7319e3a072d118917957d6554Steve Block 2172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2182fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass MockChromiumDRTTest(MockDRTTest): 2192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def extra_args(self, pixel_tests): 2202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if pixel_tests: 2212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['--pixel-tests=/tmp/png_result0.png'] 2222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return [] 2232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def make_drt(self, options, args, filesystem, stdin, stdout, stderr): 2252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block options.chromium = True 2262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # We have to set these by hand because --platform test won't trigger 2282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # the Chromium code paths. 2292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block options.pixel_path = '/tmp/png_result0.png' 2302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block options.pixel_tests = True 2312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return mock_drt.MockChromiumDRT(options, args, filesystem, stdin, stdout, stderr) 2332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def input_line(self, port, test_name, checksum=None): 2352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block url = port.filename_to_uri(self.to_path(port, test_name)) 2362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if checksum: 2372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return url + ' 6000 ' + checksum + '\n' 2382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return url + ' 6000\n' 2392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def expected_output(self, port, test_name, pixel_tests, text_output, expected_checksum): 2412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block url = port.filename_to_uri(self.to_path(port, test_name)) 2422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if pixel_tests and expected_checksum: 2432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['#URL:%s\n' % url, 2442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#MD5:%s\n' % expected_checksum, 2452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output, 2462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '\n', 2472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n'] 2482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else: 2492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return ['#URL:%s\n' % url, 2502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_output, 2512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '\n', 2522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n'] 2532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_pixeltest__fails(self): 2552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block filesystem = test.unit_test_filesystem() 2562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTest('failures/expected/checksum.html', pixel_tests=True, 2572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_checksum='wrong-checksum', 2582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drt_output=['#URL:file:///test.checkout/LayoutTests/failures/expected/checksum.html\n', 2592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#MD5:checksum-checksum\n', 2602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 'checksum-txt', 2612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '\n', 2622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '#EOF\n'], 2632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block filesystem=filesystem) 2642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(filesystem.written_files, 2652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {'/tmp/png_result0.png': 'checksum\x8a-png'}) 2662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_chromium_parse_options(self): 2682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block options, args = mock_drt.parse_options(['--platform', 'chromium-mac', 2692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block '--pixel-tests=/tmp/png_result0.png']) 2702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTrue(options.chromium) 2712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertTrue(options.pixel_tests) 2722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(options.pixel_path, '/tmp/png_result0.png') 2732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2752fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockif __name__ == '__main__': 2762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block unittest.main() 277