Home | History | Annotate | Download | only in port
      1 # Copyright (C) 2010 Google Inc. All rights reserved.
      2 #
      3 # Redistribution and use in source and binary forms, with or without
      4 # modification, are permitted provided that the following conditions are
      5 # met:
      6 #
      7 #    * Redistributions of source code must retain the above copyright
      8 # notice, this list of conditions and the following disclaimer.
      9 #    * Redistributions in binary form must reproduce the above
     10 # copyright notice, this list of conditions and the following disclaimer
     11 # in the documentation and/or other materials provided with the
     12 # distribution.
     13 #    * Neither the name of Google Inc. nor the names of its
     14 # contributors may be used to endorse or promote products derived from
     15 # this software without specific prior written permission.
     16 #
     17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 
     29 import unittest
     30 
     31 from webkitpy.tool.mocktool import MockOptions
     32 from webkitpy.common.system.systemhost_mock import MockSystemHost
     33 
     34 from webkitpy.layout_tests.port import android
     35 from webkitpy.layout_tests.port import linux
     36 from webkitpy.layout_tests.port import mac
     37 from webkitpy.layout_tests.port import win
     38 from webkitpy.layout_tests.port import factory
     39 from webkitpy.layout_tests.port import test
     40 
     41 
     42 class FactoryTest(unittest.TestCase):
     43     """Test that the factory creates the proper port object for given combination of port_name, host.platform, and options."""
     44     # FIXME: The ports themselves should expose what options they require,
     45     # instead of passing generic "options".
     46 
     47     def setUp(self):
     48         self.webkit_options = MockOptions(pixel_tests=False)
     49 
     50     def assert_port(self, port_name=None, os_name=None, os_version=None, options=None, cls=None):
     51         host = MockSystemHost(os_name=os_name, os_version=os_version)
     52         port = factory.PortFactory(host).get(port_name, options=options)
     53         self.assertIsInstance(port, cls)
     54 
     55     def test_mac(self):
     56         self.assert_port(port_name='mac', os_name='mac', os_version='snowleopard',
     57                          cls=mac.MacPort)
     58         self.assert_port(port_name='chromium', os_name='mac', os_version='lion',
     59                          cls=mac.MacPort)
     60 
     61     def test_linux(self):
     62         self.assert_port(port_name='linux', cls=linux.LinuxPort)
     63         self.assert_port(port_name='chromium', os_name='linux', os_version='lucid',
     64                          cls=linux.LinuxPort)
     65 
     66     def test_android(self):
     67         self.assert_port(port_name='android', cls=android.AndroidPort)
     68         # NOTE: We can't check for port_name=chromium here, as this will append the host's
     69         # operating system, whereas host!=target for Android.
     70 
     71     def test_win(self):
     72         self.assert_port(port_name='win-xp', cls=win.WinPort)
     73         self.assert_port(port_name='win', os_name='win', os_version='xp',
     74                          cls=win.WinPort)
     75         self.assert_port(port_name='chromium', os_name='win', os_version='xp',
     76                          cls=win.WinPort)
     77 
     78     def test_unknown_specified(self):
     79         self.assertRaises(NotImplementedError, factory.PortFactory(MockSystemHost()).get, port_name='unknown')
     80 
     81     def test_unknown_default(self):
     82         self.assertRaises(NotImplementedError, factory.PortFactory(MockSystemHost(os_name='vms')).get)
     83 
     84     def test_get_from_builder_name(self):
     85         self.assertEqual(factory.PortFactory(MockSystemHost()).get_from_builder_name('WebKit Mac10.7').name(),
     86                           'mac-lion')
     87