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