|
1 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@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 |