15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2010 Google Inc. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions are 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# met: 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# * Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# * Redistributions in binary form must reproduce the above 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# in the documentation and/or other materials provided with the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# * Neither the name of Google Inc. nor the names of its 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# contributors may be used to endorse or promote products derived from 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# this software without specific prior written permission. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)import unittest 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochfrom webkitpy.layout_tests.port import mac 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)from webkitpy.layout_tests.port import port_testcase 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)from webkitpy.tool.mocktool import MockOptions 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class MacPortTest(port_testcase.PortTestCase): 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) os_name = 'mac' 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) os_version = 'snowleopard' 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch port_name = 'mac' 407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci full_port_name = 'mac-snowleopard' 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch port_maker = mac.MacPort 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def assert_name(self, port_name, os_version_string, expected): 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port = self.make_port(os_version=os_version_string, port_name=port_name) 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.assertEqual(expected, port.name()) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_versions(self): 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.assertTrue(self.make_port().name() in ('mac-snowleopard', 'mac-lion', 'mac-mountainlion', 'mac-mavericks')) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name(None, 'snowleopard', 'mac-snowleopard') 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name('mac', 'snowleopard', 'mac-snowleopard') 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name('mac-snowleopard', 'leopard', 'mac-snowleopard') 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name('mac-snowleopard', 'snowleopard', 'mac-snowleopard') 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name(None, 'lion', 'mac-lion') 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name(None, 'mountainlion', 'mac-mountainlion') 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.assert_name(None, 'mavericks', 'mac-mavericks') 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.assert_name(None, 'future', 'mac-mavericks') 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assert_name('mac', 'lion', 'mac-lion') 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.assertRaises(AssertionError, self.assert_name, None, 'tiger', 'should-raise-assertion-so-this-value-does-not-matter') 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_baseline_path(self): 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch port = self.make_port(port_name='mac-snowleopard') 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assertEqual(port.baseline_path(), port._webkit_baseline_path('mac-snowleopard')) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch port = self.make_port(port_name='mac-lion') 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assertEqual(port.baseline_path(), port._webkit_baseline_path('mac-lion')) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch port = self.make_port(port_name='mac-mountainlion') 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.assertEqual(port.baseline_path(), port._webkit_baseline_path('mac-mountainlion')) 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) port = self.make_port(port_name='mac-mavericks') 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch self.assertEqual(port.baseline_path(), port._webkit_baseline_path('mac')) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_operating_system(self): 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.assertEqual('mac', self.make_port().operating_system()) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_build_path(self): 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # Test that optional paths are used regardless of whether they exist. 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) options = MockOptions(configuration='Release', build_directory='/foo') 821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) self.assert_build_path(options, ['/mock-checkout/out/Release'], '/foo/Release') 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # Test that optional relative paths are returned unmodified. 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) options = MockOptions(configuration='Release', build_directory='foo') 861e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) self.assert_build_path(options, ['/mock-checkout/out/Release'], 'foo/Release') 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # Test that we prefer the legacy dir over the new dir. 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) options = MockOptions(configuration='Release', build_directory=None) 901e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) self.assert_build_path(options, ['/mock-checkout/xcodebuild/Release', '/mock-checkout/out/Release'], '/mock-checkout/xcodebuild/Release') 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def test_build_path_timestamps(self): 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) options = MockOptions(configuration='Release', build_directory=None) 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) port = self.make_port(options=options) 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) port.host.filesystem.maybe_make_directory('/mock-checkout/out/Release') 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) port.host.filesystem.maybe_make_directory('/mock-checkout/xcodebuild/Release') 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) # Check with 'out' being newer. 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) port.host.filesystem.mtime = lambda f: 5 if '/out/' in f else 4 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.assertEqual(port._build_path(), '/mock-checkout/out/Release') 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) # Check with 'xcodebuild' being newer. 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) port.host.filesystem.mtime = lambda f: 5 if '/xcodebuild/' in f else 4 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.assertEqual(port._build_path(), '/mock-checkout/xcodebuild/Release') 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_driver_name_option(self): 10593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) self.assertTrue(self.make_port()._path_to_driver().endswith('Content Shell')) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.assertTrue(self.make_port(options=MockOptions(driver_name='OtherDriver'))._path_to_driver().endswith('OtherDriver')) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def test_path_to_image_diff(self): 109f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) self.assertEqual(self.make_port()._path_to_image_diff(), '/mock-checkout/out/Release/image_diff') 110