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