18a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#!/usr/bin/env python 28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# Copyright (C) 2010 Google Inc. All rights reserved. 38a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# 48a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# Redistribution and use in source and binary forms, with or without 58a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# modification, are permitted provided that the following conditions are 68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# met: 78a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# 88a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# * Redistributions of source code must retain the above copyright 98a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# notice, this list of conditions and the following disclaimer. 108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# * Redistributions in binary form must reproduce the above 118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# copyright notice, this list of conditions and the following disclaimer 128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# in the documentation and/or other materials provided with the 138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# distribution. 148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# * Neither the Google name nor the names of its 158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# contributors may be used to endorse or promote products derived from 168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# this software without specific prior written permission. 178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# 188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block"""Dummy Port implementation used for testing.""" 31e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockfrom __future__ import with_statement 328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochimport base64 348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockimport time 358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 36ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochfrom webkitpy.common.system import filesystem_mock 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.tool import mocktool 386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockimport base 408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 42bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen# This sets basic expectations for a test. Each individual expectation 43bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen# can be overridden by a keyword argument in TestList.add(). 44bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenclass TestInstance: 45bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def __init__(self, name): 46bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.name = name 47bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.base = name[(name.rfind("/") + 1):name.rfind(".html")] 48bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.crash = False 49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.exception = False 50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.hang = False 51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.keyboard = False 52bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.error = '' 53bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.timeout = False 542bde8e466a4451c7319e3a072d118917957d6554Steve Block self.is_reftest = False 552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # The values of each field are treated as raw byte strings. They 572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # will be converted to unicode strings where appropriate using 582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # MockFileSystem.read_text_file(). 592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.actual_text = self.base + '-txt' 602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.actual_checksum = self.base + '-checksum' 612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # We add the '\x8a' for the image file to prevent the value from 632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # being treated as UTF-8 (the character is invalid) 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.actual_image = self.base + '\x8a' + '-png' 652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.expected_text = self.actual_text 67bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.expected_checksum = self.actual_checksum 68bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.expected_image = self.actual_image 69bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self.actual_audio = None 712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self.expected_audio = None 72bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 73bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen# This is an in-memory list of tests, what we want them to produce, and 74bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen# what we want to claim are the expected results. 75bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenclass TestList: 76ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch def __init__(self): 77bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.tests = {} 78bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 79bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def add(self, name, **kwargs): 80bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen test = TestInstance(name) 81bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for key, value in kwargs.items(): 82bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen test.__dict__[key] = value 83bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self.tests[name] = test 84bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 852bde8e466a4451c7319e3a072d118917957d6554Steve Block def add_reftest(self, name, reference_name, same_image): 862bde8e466a4451c7319e3a072d118917957d6554Steve Block self.add(name, actual_checksum='xxx', actual_image='XXX', is_reftest=True) 872bde8e466a4451c7319e3a072d118917957d6554Steve Block if same_image: 882bde8e466a4451c7319e3a072d118917957d6554Steve Block self.add(reference_name, actual_checksum='xxx', actual_image='XXX', is_reftest=True) 892bde8e466a4451c7319e3a072d118917957d6554Steve Block else: 902bde8e466a4451c7319e3a072d118917957d6554Steve Block self.add(reference_name, actual_checksum='yyy', actual_image='YYY', is_reftest=True) 912bde8e466a4451c7319e3a072d118917957d6554Steve Block 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def keys(self): 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return self.tests.keys() 94bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def __contains__(self, item): 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return item in self.tests 97bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def __getitem__(self, item): 99bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return self.tests[item] 100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 102ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochdef unit_test_list(): 103ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests = TestList() 104ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/checksum.html', 1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_checksum='checksum_fail-checksum') 106ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/crash.html', crash=True) 107ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/exception.html', exception=True) 108ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/timeout.html', timeout=True) 109ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/hang.html', hang=True) 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block tests.add('failures/expected/missing_text.html', expected_text=None) 111ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/image.html', 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_image='image_fail-png', 1132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_image='image-png') 114ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/image_checksum.html', 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_checksum='image_checksum_fail-checksum', 1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_image='image_checksum_fail-png') 1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch tests.add('failures/expected/audio.html', 1182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_audio=base64.b64encode('audio_fail-wav'), expected_audio='audio-wav', 1192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_text=None, expected_text=None, 1202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_image=None, expected_image=None, 1212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_checksum=None, expected_checksum=None) 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block tests.add('failures/expected/keyboard.html', keyboard=True) 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add('failures/expected/missing_check.html', 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_checksum=None, 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_image=None) 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block tests.add('failures/expected/missing_image.html', expected_image=None) 1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch tests.add('failures/expected/missing_audio.html', expected_audio=None, 1282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_text=None, expected_text=None, 1292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_image=None, expected_image=None, 1302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_checksum=None, expected_checksum=None) 1312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block tests.add('failures/expected/missing_text.html', expected_text=None) 132ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/newlines_leading.html', 1332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_text="\nfoo\n", actual_text="foo\n") 134ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/newlines_trailing.html', 1352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_text="foo\n\n", actual_text="foo\n") 136ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/expected/newlines_with_excess_CR.html', 1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_text="foo\r\r\r\n", actual_text="foo\n") 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block tests.add('failures/expected/text.html', actual_text='text_fail-png') 139ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/unexpected/crash.html', crash=True) 140ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/unexpected/text-image-checksum.html', 1412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_text='text-image-checksum_fail-txt', 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block actual_checksum='text-image-checksum_fail-checksum') 143ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('failures/unexpected/timeout.html', timeout=True) 144ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('http/tests/passes/text.html') 1452bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add('http/tests/passes/image.html') 146ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('http/tests/ssl/text.html') 147ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('passes/error.html', error='stuff going to stderr') 148ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('passes/image.html') 1492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch tests.add('passes/audio.html', 1502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_audio=base64.b64encode('audio-wav'), expected_audio='audio-wav', 1512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_text=None, expected_text=None, 1522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_image=None, expected_image=None, 1532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch actual_checksum=None, expected_checksum=None) 154ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('passes/platform_image.html') 1552bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add('passes/checksum_in_image.html', 1562bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_checksum=None, 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_image='tEXtchecksum\x00checksum_in_image-checksum') 1582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 159ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch # Text output files contain "\r\n" on Windows. This may be 160ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch # helpfully filtered to "\r\r\n" by our Python/Cygwin tooling. 161ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('passes/text.html', 1622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block expected_text='\nfoo\n\n', actual_text='\nfoo\r\n\r\r\n') 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block # For reftests. 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('passes/reftest.html', 'passes/reftest-expected.html', same_image=True) 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('passes/mismatch.html', 'passes/mismatch-expected-mismatch.html', same_image=False) 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('failures/expected/reftest.html', 'failures/expected/reftest-expected.html', same_image=False) 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('failures/expected/mismatch.html', 'failures/expected/mismatch-expected-mismatch.html', same_image=True) 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('failures/unexpected/reftest.html', 'failures/unexpected/reftest-expected.html', same_image=False) 1702bde8e466a4451c7319e3a072d118917957d6554Steve Block tests.add_reftest('failures/unexpected/mismatch.html', 'failures/unexpected/mismatch-expected-mismatch.html', same_image=True) 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block # FIXME: Add a reftest which crashes. 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block 173ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tests.add('websocket/tests/passes/text.html') 174ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return tests 175ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 176ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 177ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# Here we use a non-standard location for the layout tests, to ensure that 178ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# this works. The path contains a '.' in the name because we've seen bugs 179ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# related to this before. 180ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 181ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochLAYOUT_TEST_DIR = '/test.checkout/LayoutTests' 182ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 183ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 184ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# Here we synthesize an in-memory filesystem from the test list 185ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# in order to fully control the test output and to demonstrate that 186ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch# we don't need a real filesystem to run the tests. 187ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 188ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochdef unit_test_filesystem(files=None): 189ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch """Return the FileSystem object used by the unit tests.""" 190ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch test_list = unit_test_list() 191ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch files = files or {} 192ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 193ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch def add_file(files, test, suffix, contents): 194ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch dirname = test.name[0:test.name.rfind('/')] 195ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch base = test.base 196ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch path = LAYOUT_TEST_DIR + '/' + dirname + '/' + base + suffix 197ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch files[path] = contents 198ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 199ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch # Add each test and the expected output, if any. 200ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch for test in test_list.tests.values(): 201ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch add_file(files, test, '.html', '') 2022bde8e466a4451c7319e3a072d118917957d6554Steve Block if test.is_reftest: 2032bde8e466a4451c7319e3a072d118917957d6554Steve Block continue 2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if test.actual_audio: 2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch add_file(files, test, '-expected.wav', test.expected_audio) 2062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch continue 2072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 208ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch add_file(files, test, '-expected.txt', test.expected_text) 209ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch add_file(files, test, '-expected.checksum', test.expected_checksum) 210ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch add_file(files, test, '-expected.png', test.expected_image) 211ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 213ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch # Add the test_expectations file. 214ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch files[LAYOUT_TEST_DIR + '/platform/test/test_expectations.txt'] = """ 215ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/checksum.html = IMAGE 216ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/crash.html = CRASH 217ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch// This one actually passes because the checksums will match. 218ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/image.html = PASS 2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochWONTFIX : failures/expected/audio.html = AUDIO 220ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/image_checksum.html = IMAGE 2212bde8e466a4451c7319e3a072d118917957d6554Steve BlockWONTFIX : failures/expected/mismatch.html = IMAGE 222ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/missing_check.html = MISSING PASS 223ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/missing_image.html = MISSING PASS 2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochWONTFIX : failures/expected/missing_audio.html = MISSING PASS 225ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/missing_text.html = MISSING PASS 226ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/newlines_leading.html = TEXT 227ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/newlines_trailing.html = TEXT 228ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/newlines_with_excess_CR.html = TEXT 2292bde8e466a4451c7319e3a072d118917957d6554Steve BlockWONTFIX : failures/expected/reftest.html = IMAGE 230ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/text.html = TEXT 231ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX : failures/expected/timeout.html = TIMEOUT 232ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX SKIP : failures/expected/hang.html = TIMEOUT 233ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX SKIP : failures/expected/keyboard.html = CRASH 234ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWONTFIX SKIP : failures/expected/exception.html = CRASH 235ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch""" 236ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Add in a file should be ignored by test_files.find(). 2382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block files[LAYOUT_TEST_DIR + 'userscripts/resources/iframe.html'] = 'iframe' 2392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 240ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch fs = filesystem_mock.MockFileSystem(files) 241ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch fs._tests = test_list 242ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return fs 243ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 244ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass TestPort(base.Port): 2468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block """Test implementation of the Port interface.""" 2472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ALL_BASELINE_VARIANTS = ( 2482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-mac-snowleopard', 'test-mac-leopard', 2492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-win7', 'test-win-vista', 'test-win-xp', 2502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-linux-x86', 2512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ) 2528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def __init__(self, port_name=None, user=None, filesystem=None, **kwargs): 2542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if not port_name or port_name == 'test': 2552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch port_name = 'test-mac-leopard' 2562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch user = user or mocktool.MockUser() 2572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch filesystem = filesystem or unit_test_filesystem() 2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch base.Port.__init__(self, port_name=port_name, filesystem=filesystem, user=user, 2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch **kwargs) 2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._results_directory = None 2612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block assert filesystem._tests 2632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self._tests = filesystem._tests 2642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._operating_system = 'mac' 2662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if port_name.startswith('test-win'): 2672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._operating_system = 'win' 2682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch elif port_name.startswith('test-linux'): 2692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._operating_system = 'linux' 270ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch version_map = { 2722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-xp': 'xp', 2732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-win7': 'win7', 2742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-vista': 'vista', 2752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-mac-leopard': 'leopard', 2762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-mac-snowleopard': 'snowleopard', 2772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-linux-x86': '', 2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._version = version_map[port_name] 280ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self._expectations_path = LAYOUT_TEST_DIR + '/platform/test/test_expectations.txt' 2822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def _path_to_driver(self): 2842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # This routine shouldn't normally be called, but it is called by 2852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # the mock_drt Driver. We return something, but make sure it's useless. 2862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 'junk' 2878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def baseline_path(self): 2892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # We don't bother with a fallback path. 2902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return self._filesystem.join(self.layout_tests_dir(), 'platform', self.name()) 2918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def baseline_search_path(self): 2932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch search_paths = { 2942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-mac-snowleopard': ['test-mac-snowleopard'], 2952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-mac-leopard': ['test-mac-leopard', 'test-mac-snowleopard'], 2962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-win7': ['test-win-win7'], 2972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-vista': ['test-win-vista', 'test-win-win7'], 2982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-win-xp': ['test-win-xp', 'test-win-vista', 'test-win-win7'], 2992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 'test-linux-x86': ['test-linux', 'test-win-win7'], 3002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 3012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [self._webkit_baseline_path(d) for d in search_paths[self.name()]] 3028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3032bde8e466a4451c7319e3a072d118917957d6554Steve Block def default_child_processes(self): 3042bde8e466a4451c7319e3a072d118917957d6554Steve Block return 1 3052bde8e466a4451c7319e3a072d118917957d6554Steve Block 3062bde8e466a4451c7319e3a072d118917957d6554Steve Block def default_worker_model(self): 3072bde8e466a4451c7319e3a072d118917957d6554Steve Block return 'inline' 3082bde8e466a4451c7319e3a072d118917957d6554Steve Block 309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def check_build(self, needs_http): 3108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return True 3118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def default_configuration(self): 3132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 'Release' 3142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def diff_image(self, expected_contents, actual_contents, 316e14391e94c850b8bd03680c23b38978db68687a8John Reck diff_filename=None): 317e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffed = actual_contents != expected_contents 318e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if diffed and diff_filename: 3192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self._filesystem.write_binary_file(diff_filename, 320ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch "< %s\n---\n> %s\n" % (expected_contents, actual_contents)) 321e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return diffed 3228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 323e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block def layout_tests_dir(self): 324ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return LAYOUT_TEST_DIR 325bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 3268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def name(self): 3278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return self._name 3288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 329e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block def _path_to_wdiff(self): 330e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return None 331e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 3322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def default_results_directory(self): 3332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return '/tmp/layout-test-results' 3348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def setup_test_run(self): 3368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 3378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang def create_driver(self, worker_number): 3394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return TestDriver(self, worker_number) 3408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def start_http_server(self): 3428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 3438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def start_websocket_server(self): 3458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 3468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def stop_http_server(self): 3488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 3498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def stop_websocket_server(self): 3518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 3528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def path_to_test_expectations_file(self): 3542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return self._expectations_path 355ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 3562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def all_baseline_variants(self): 3572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return self.ALL_BASELINE_VARIANTS 3582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # FIXME: These next two routines are copied from base.py with 3602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # the calls to path.abspath_to_uri() removed. We shouldn't have 3612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # to do this. 3622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def filename_to_uri(self, filename): 3632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block """Convert a test file (which is an absolute path) to a URI.""" 3642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block LAYOUTTEST_HTTP_DIR = "http/tests/" 3652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block LAYOUTTEST_WEBSOCKET_DIR = "http/tests/websocket/tests/" 3662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block relative_path = self.relative_test_filename(filename) 3682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port = None 3692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block use_ssl = False 3702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (relative_path.startswith(LAYOUTTEST_WEBSOCKET_DIR) 3722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block or relative_path.startswith(LAYOUTTEST_HTTP_DIR)): 3732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block relative_path = relative_path[len(LAYOUTTEST_HTTP_DIR):] 3742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port = 8000 3752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # Make http/tests/local run as local files. This is to mimic the 3772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # logic in run-webkit-tests. 3782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # 3792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # TODO(dpranke): remove the media reference and the SSL reference? 3802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (port and not relative_path.startswith("local/") and 3812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block not relative_path.startswith("media/")): 3822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if relative_path.startswith("ssl/"): 3832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block port += 443 3842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block protocol = "https" 3852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else: 3862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block protocol = "http" 3872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return "%s://127.0.0.1:%u/%s" % (protocol, port, relative_path) 3882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return "file://" + self._filesystem.abspath(filename) 3902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def uri_to_test_name(self, uri): 3922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block """Return the base layout test name for a given URI. 3932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block This returns the test name for a given URI, e.g., if you passed in 3952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block "file:///src/LayoutTests/fast/html/keygen.html" it would return 3962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block "fast/html/keygen.html". 3972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block """ 3992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block test = uri 4002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if uri.startswith("file:///"): 4012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block prefix = "file://" + self.layout_tests_dir() + "/" 4022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return test[len(prefix):] 4032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if uri.startswith("http://127.0.0.1:8880/"): 4052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # websocket tests 4062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return test.replace('http://127.0.0.1:8880/', '') 4072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if uri.startswith("http://"): 4092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block # regular HTTP test 4102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return test.replace('http://127.0.0.1:8000/', 'http/tests/') 4112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if uri.startswith("https://"): 4132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return test.replace('https://127.0.0.1:8443/', 'http/tests/') 4142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block raise NotImplementedError('unknown url type: %s' % uri) 416f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 4178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass TestDriver(base.Driver): 4198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block """Test/Dummy implementation of the DumpRenderTree interface.""" 4208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang def __init__(self, port, worker_number): 4228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block self._port = port 4234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 4244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang def cmd_line(self): 4252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [self._port._path_to_driver()] + self._port.get_option('additional_drt_flag', []) 4268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def poll(self): 4288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return True 4298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang def run_test(self, test_input): 4316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner start_time = time.time() 4324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang test_name = self._port.relative_test_filename(test_input.filename) 433bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen test = self._port._tests[test_name] 434bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if test.keyboard: 435bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen raise KeyboardInterrupt 436bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if test.exception: 437bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen raise ValueError('exception from ' + test_name) 438bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if test.hang: 4394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang time.sleep((float(test_input.timeout) * 4) / 1000.0) 4402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 4412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch audio = None 4422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if test.actual_audio: 4432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch audio = base64.b64decode(test.actual_audio) 4442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return base.DriverOutput(test.actual_text, test.actual_image, 4452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.actual_checksum, audio, crash=test.crash, 4462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test_time=time.time() - start_time, timeout=test.timeout, error=test.error) 4478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 44821939df44de1705786c545cd1bf519d47250322dBen Murdoch def start(self): 44921939df44de1705786c545cd1bf519d47250322dBen Murdoch pass 45021939df44de1705786c545cd1bf519d47250322dBen Murdoch 4518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def stop(self): 4528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pass 453