Home | History | Annotate | Download | only in port
      1 #!/usr/bin/env python
      2 # Copyright (C) 2010 Google Inc. All rights reserved.
      3 #
      4 # Redistribution and use in source and binary forms, with or without
      5 # modification, are permitted provided that the following conditions are
      6 # met:
      7 #
      8 #     * Redistributions of source code must retain the above copyright
      9 # notice, this list of conditions and the following disclaimer.
     10 #     * Redistributions in binary form must reproduce the above
     11 # copyright notice, this list of conditions and the following disclaimer
     12 # in the documentation and/or other materials provided with the
     13 # distribution.
     14 
     15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     16 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     17 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     18 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     19 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     20 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     21 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     22 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     23 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 
     27 
     28 def _test_expectations_overrides(port, super):
     29     # The chrome ports use the regular overrides plus anything in the
     30     # official test_expectations as well. Hopefully we don't get collisions.
     31     chromium_overrides = super.test_expectations_overrides(port)
     32 
     33     # FIXME: It used to be that AssertionError would get raised by
     34     # path_from_chromium_base() if we weren't in a Chromium checkout, but
     35     # this changed in r60427. This should probably be changed back.
     36     overrides_path = port.path_from_chromium_base('webkit', 'tools',
     37             'layout_tests', 'test_expectations_chrome.txt')
     38     if not port._filesystem.exists(overrides_path):
     39         return chromium_overrides
     40 
     41     chromium_overrides = chromium_overrides or ''
     42     return chromium_overrides + port._filesystem.read_text_file(overrides_path)
     43 
     44 def GetGoogleChromePort(**kwargs):
     45     """Some tests have slightly different results when compiled as Google
     46     Chrome vs Chromium.  In those cases, we prepend an additional directory to
     47     to the baseline paths."""
     48     # FIXME: This whole routine is a tremendous hack that needs to be cleaned up.
     49 
     50     port_name = kwargs['port_name']
     51     del kwargs['port_name']
     52     if port_name == 'google-chrome-linux32':
     53         import chromium_linux
     54 
     55         class GoogleChromeLinux32Port(chromium_linux.ChromiumLinuxPort):
     56             def baseline_search_path(self):
     57                 paths = chromium_linux.ChromiumLinuxPort.baseline_search_path(
     58                     self)
     59                 paths.insert(0, self._webkit_baseline_path(
     60                     'google-chrome-linux32'))
     61                 return paths
     62 
     63             def test_expectations_overrides(self):
     64                 return _test_expectations_overrides(self,
     65                     chromium_linux.ChromiumLinuxPort)
     66 
     67             def architecture(self):
     68                 return 'x86'
     69 
     70         return GoogleChromeLinux32Port(port_name='chromium-linux-x86', **kwargs)
     71     elif port_name == 'google-chrome-linux64':
     72         import chromium_linux
     73 
     74         class GoogleChromeLinux64Port(chromium_linux.ChromiumLinuxPort):
     75             def baseline_search_path(self):
     76                 paths = chromium_linux.ChromiumLinuxPort.baseline_search_path(
     77                     self)
     78                 paths.insert(0, self._webkit_baseline_path(
     79                     'google-chrome-linux64'))
     80                 return paths
     81 
     82             def test_expectations_overrides(self):
     83                 return _test_expectations_overrides(self,
     84                     chromium_linux.ChromiumLinuxPort)
     85 
     86             def architecture(self):
     87                 return 'x86_64'
     88 
     89         # We use chromium-linux-x86 here in order to skip over the linux-x86_64
     90         # baselines.
     91         return GoogleChromeLinux64Port(port_name='chromium-linux-x86', **kwargs)
     92     elif port_name.startswith('google-chrome-mac'):
     93         import chromium_mac
     94 
     95         class GoogleChromeMacPort(chromium_mac.ChromiumMacPort):
     96             def baseline_search_path(self):
     97                 paths = chromium_mac.ChromiumMacPort.baseline_search_path(
     98                     self)
     99                 paths.insert(0, self._webkit_baseline_path(
    100                     'google-chrome-mac'))
    101                 return paths
    102 
    103             def test_expectations_overrides(self):
    104                 return _test_expectations_overrides(self,
    105                     chromium_mac.ChromiumMacPort)
    106 
    107         return GoogleChromeMacPort(**kwargs)
    108     elif port_name.startswith('google-chrome-win'):
    109         import chromium_win
    110 
    111         class GoogleChromeWinPort(chromium_win.ChromiumWinPort):
    112             def baseline_search_path(self):
    113                 paths = chromium_win.ChromiumWinPort.baseline_search_path(
    114                     self)
    115                 paths.insert(0, self._webkit_baseline_path(
    116                     'google-chrome-win'))
    117                 return paths
    118 
    119             def test_expectations_overrides(self):
    120                 return _test_expectations_overrides(self,
    121                     chromium_win.ChromiumWinPort)
    122 
    123         return GoogleChromeWinPort(**kwargs)
    124     raise NotImplementedError('unsupported port: %s' % port_name)
    125