Home | History | Annotate | Download | only in python24
      1 # Copyright (C) 2010 Chris Jerdonek (cjerdonek (at] webkit.org)
      2 #
      3 # Redistribution and use in source and binary forms, with or without
      4 # modification, are permitted provided that the following conditions
      5 # are met:
      6 # 1.  Redistributions of source code must retain the above copyright
      7 #     notice, this list of conditions and the following disclaimer.
      8 # 2.  Redistributions in binary form must reproduce the above copyright
      9 #     notice, this list of conditions and the following disclaimer in the
     10 #     documentation and/or other materials provided with the distribution.
     11 #
     12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
     13 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
     16 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     17 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     18 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     19 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     20 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     21 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     22 
     23 """Contains unit tests for versioning.py."""
     24 
     25 import logging
     26 import unittest
     27 
     28 from webkitpy.common.system.logtesting import LogTesting
     29 from webkitpy.python24.versioning import check_version
     30 from webkitpy.python24.versioning import compare_version
     31 
     32 class MockSys(object):
     33 
     34     """A mock sys module for passing to version-checking methods."""
     35 
     36     def __init__(self, current_version):
     37         """Create an instance.
     38 
     39         current_version: A version string with major, minor, and micro
     40                          version parts.
     41 
     42         """
     43         version_info = current_version.split(".")
     44         version_info = map(int, version_info)
     45 
     46         self.version = current_version + " Version details."
     47         self.version_info = version_info
     48 
     49 
     50 class CompareVersionTest(unittest.TestCase):
     51 
     52     """Tests compare_version()."""
     53 
     54     def _mock_sys(self, current_version):
     55         return MockSys(current_version)
     56 
     57     def test_default_minimum_version(self):
     58         """Test the configured minimum version that webkitpy supports."""
     59         (comparison, current_version, min_version) = compare_version()
     60         self.assertEquals(min_version, "2.5")
     61 
     62     def compare_version(self, target_version, current_version=None):
     63         """Call compare_version()."""
     64         if current_version is None:
     65             current_version = "2.5.3"
     66         mock_sys = self._mock_sys(current_version)
     67         return compare_version(mock_sys, target_version)
     68 
     69     def compare(self, target_version, current_version=None):
     70         """Call compare_version(), and return the comparison."""
     71         return self.compare_version(target_version, current_version)[0]
     72 
     73     def test_returned_current_version(self):
     74         """Test the current_version return value."""
     75         current_version = self.compare_version("2.5")[1]
     76         self.assertEquals(current_version, "2.5.3")
     77 
     78     def test_returned_target_version(self):
     79         """Test the current_version return value."""
     80         target_version = self.compare_version("2.5")[2]
     81         self.assertEquals(target_version, "2.5")
     82 
     83     def test_target_version_major(self):
     84         """Test major version for target."""
     85         self.assertEquals(-1, self.compare("3"))
     86         self.assertEquals(0, self.compare("2"))
     87         self.assertEquals(1, self.compare("2", "3.0.0"))
     88 
     89     def test_target_version_minor(self):
     90         """Test minor version for target."""
     91         self.assertEquals(-1, self.compare("2.6"))
     92         self.assertEquals(0, self.compare("2.5"))
     93         self.assertEquals(1, self.compare("2.4"))
     94 
     95     def test_target_version_micro(self):
     96         """Test minor version for target."""
     97         self.assertEquals(-1, self.compare("2.5.4"))
     98         self.assertEquals(0, self.compare("2.5.3"))
     99         self.assertEquals(1, self.compare("2.5.2"))
    100 
    101 
    102 class CheckVersionTest(unittest.TestCase):
    103 
    104     """Tests check_version()."""
    105 
    106     def setUp(self):
    107         self._log = LogTesting.setUp(self)
    108 
    109     def tearDown(self):
    110         self._log.tearDown()
    111 
    112     def _check_version(self, minimum_version):
    113         """Call check_version()."""
    114         mock_sys = MockSys("2.5.3")
    115         return check_version(sysmodule=mock_sys, target_version=minimum_version)
    116 
    117     def test_true_return_value(self):
    118         """Test the configured minimum version that webkitpy supports."""
    119         is_current = self._check_version("2.4")
    120         self.assertEquals(True, is_current)
    121         self._log.assertMessages([])  # No warning was logged.
    122 
    123     def test_false_return_value(self):
    124         """Test the configured minimum version that webkitpy supports."""
    125         is_current = self._check_version("2.6")
    126         self.assertEquals(False, is_current)
    127         expected_message = ('WARNING: WebKit Python scripts do not support '
    128                             'your current Python version (2.5.3).  '
    129                             'The minimum supported version is 2.6.\n  '
    130                             'See the following page to upgrade your Python '
    131                             'version:\n\n    '
    132                             'http://trac.webkit.org/wiki/PythonGuidelines\n\n')
    133         self._log.assertMessages([expected_message])
    134 
    135