12fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#!/usr/bin/env python 22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# Copyright (C) 2010 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 62fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# are met: 72fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 82fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 1. Redistributions of source code must retain the above copyright 92fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# notice, this list of conditions and the following disclaimer. 102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 2. Redistributions in binary form must reproduce the above copyright 112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# notice, this list of conditions and the following disclaimer in the 122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# documentation and/or other materials provided with the distribution. 132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# 142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochimport sys 2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 272fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockfrom webkitpy.common.system.zip_mock import MockZip 282fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockimport testoutputset 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockimport unittest 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 322fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass TestOutputSetTest(unittest.TestCase): 332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def _outputset_with_zip(self, zip, **kwargs): 342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return testoutputset.TestOutputSet('<fake-outputset>', '<fake-platform>', zip, **kwargs) 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_text_files_get_interpreted_as_text_outputs(self): 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('fast/dom/some-test-actual.txt', 'actual outputs') 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(b.outputs_for('fast/dom/some-test'))) 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('fast/dom/some-test', b.outputs_for('fast/dom/some-test.html')[0].name()) 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_image_and_checksum_files_get_interpreted_as_a_single_image_output(self): 442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('fast/dom/some-test-actual.checksum', 'abc123') 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('fast/dom/some-test-actual.png', '<image data>') 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('fast/dom/some-test') 492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(outputs)) 502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block output = outputs[0] 512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('image', output.type()) 522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('abc123', output.checksum()) 532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_multiple_image_outputs_are_detected(self): 552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/win/fast/dom/some-test-actual.checksum', 'checksum1') 572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/win/fast/dom/some-test-actual.png', '<image data 1>') 582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/mac/fast/dom/some-test-actual.checksum', 'checksum2') 592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/mac/fast/dom/some-test-actual.png', '<image data 2>') 602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('fast/dom/some-test') 622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(2, len(outputs)) 632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertFalse(outputs[0].same_content(outputs[1])) 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_aggregate_output_set_correctly_retrieves_tests_from_multiple_output_sets(self): 662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset1_zip = MockZip() 672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset1_zip.insert('fast/dom/test-actual.txt', 'linux text output') 682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset1 = testoutputset.TestOutputSet('linux-outputset', 'linux', outputset1_zip) 692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset2_zip = MockZip() 702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset2_zip.insert('fast/dom/test-actual.txt', 'windows text output') 712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputset2 = testoutputset.TestOutputSet('win-outputset', 'win', outputset2_zip) 722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = testoutputset.AggregateTestOutputSet([outputset1, outputset2]) 742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(2, len(b.outputs_for('fast/dom/test'))) 752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_can_infer_platform_from_path_if_none_provided(self): 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # FIXME: unclear what the right behavior on win32 is. 7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # https://bugs.webkit.org/show_bug.cgi?id=54525. 7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if sys.platform == 'win32': 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return 8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/win/some-test-expected.png', '<image data>') 842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('platform/win/some-test-expected.checksum', 'abc123') 852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = testoutputset.TestOutputSet('local LayoutTests outputset', None, zip) 862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('some-test') 882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(outputs)) 892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('win', outputs[0].platform()) 902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_test_extension_is_ignored(self): 922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test/test-a-actual.txt', 'actual outputs') 942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('test/test-a.html') 962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(outputs)) 972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('test/test-a', outputs[0].name()) 982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_existing_outputs_are_marked_as_such(self): 1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test/test-a-expected.txt', 'expected outputs') 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('test/test-a.html') 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(outputs)) 1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertFalse(outputs[0].is_actual()) 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_only_returns_outputs_of_specified_type(self): 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test/test-a-expected.txt', 'expected outputs') 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test/test-a-expected.checksum', 'expected outputs') 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test/test-a-expected.png', 'expected outputs') 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip) 1132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('test/test-a.html') 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block text_outputs = b.outputs_for('test/test-a.html', target_type='text') 1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block image_outputs = b.outputs_for('test/test-a.html', target_type='image') 1172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(2, len(outputs)) 1192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(text_outputs)) 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(1, len(image_outputs)) 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('text', text_outputs[0].type()) 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals('image', image_outputs[0].type()) 1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def test_exclude_expected_outputs_works(self): 1252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip = MockZip() 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block zip.insert('test-expected.txt', 'expected outputs stored on server for some reason') 1272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block b = self._outputset_with_zip(zip, include_expected=False) 1282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block outputs = b.outputs_for('test', target_type=None) 1292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assertEquals(0, len(outputs)) 1302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1312fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockif __name__ == "__main__": 1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block unittest.main() 133