OLD | NEW |
| (Empty) |
1 # Copyright (c) 2006-2008 Twisted Matrix Laboratories. | |
2 # See LICENSE for details. | |
3 | |
4 import sys | |
5 from cStringIO import StringIO | |
6 | |
7 from twisted.python.versions import getVersionString, IncomparableVersions | |
8 from twisted.python.versions import Version, _inf | |
9 from twisted.python.filepath import FilePath | |
10 | |
11 from twisted.trial import unittest | |
12 | |
13 | |
14 | |
15 VERSION_4_ENTRIES = """\ | |
16 <?xml version="1.0" encoding="utf-8"?> | |
17 <wc-entries | |
18 xmlns="svn:"> | |
19 <entry | |
20 committed-rev="18210" | |
21 name="" | |
22 committed-date="2006-09-21T04:43:09.542953Z" | |
23 url="svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk/twisted" | |
24 last-author="exarkun" | |
25 kind="dir" | |
26 uuid="bbbe8e31-12d6-0310-92fd-ac37d47ddeeb" | |
27 repos="svn+ssh://svn.twistedmatrix.com/svn/Twisted" | |
28 revision="18211"/> | |
29 </wc-entries> | |
30 """ | |
31 | |
32 | |
33 | |
34 VERSION_8_ENTRIES = """\ | |
35 8 | |
36 | |
37 dir | |
38 22715 | |
39 svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk | |
40 """ | |
41 | |
42 | |
43 | |
44 class VersionsTest(unittest.TestCase): | |
45 | |
46 def test_versionComparison(self): | |
47 """ | |
48 Versions can be compared for equality and order. | |
49 """ | |
50 va = Version("dummy", 1, 0, 0) | |
51 vb = Version("dummy", 0, 1, 0) | |
52 self.failUnless(va > vb) | |
53 self.failUnless(vb < va) | |
54 self.failUnless(va >= vb) | |
55 self.failUnless(vb <= va) | |
56 self.failUnless(va != vb) | |
57 self.failUnless(vb == Version("dummy", 0, 1, 0)) | |
58 self.failUnless(vb == vb) | |
59 | |
60 # BREAK IT DOWN@!! | |
61 self.failIf(va < vb) | |
62 self.failIf(vb > va) | |
63 self.failIf(va <= vb) | |
64 self.failIf(vb >= va) | |
65 self.failIf(va == vb) | |
66 self.failIf(vb != Version("dummy", 0, 1, 0)) | |
67 self.failIf(vb != vb) | |
68 | |
69 | |
70 def test_comparingPrereleasesWithReleases(self): | |
71 """ | |
72 Prereleases are always less than versions without prereleases. | |
73 """ | |
74 va = Version("whatever", 1, 0, 0, prerelease=1) | |
75 vb = Version("whatever", 1, 0, 0) | |
76 self.assertTrue(va < vb) | |
77 self.assertFalse(va > vb) | |
78 self.assertNotEquals(vb, va) | |
79 | |
80 | |
81 def test_comparingPrereleases(self): | |
82 """ | |
83 The value specified as the prerelease is used in version comparisons. | |
84 """ | |
85 va = Version("whatever", 1, 0, 0, prerelease=1) | |
86 vb = Version("whatever", 1, 0, 0, prerelease=2) | |
87 self.assertTrue(va < vb) | |
88 self.assertFalse(va > vb) | |
89 self.assertNotEqual(va, vb) | |
90 | |
91 | |
92 def test_infComparison(self): | |
93 """ | |
94 L{_inf} is equal to L{_inf}. | |
95 | |
96 This is a regression test. | |
97 """ | |
98 self.assertEquals(_inf, _inf) | |
99 | |
100 | |
101 def testDontAllowBuggyComparisons(self): | |
102 self.assertRaises(IncomparableVersions, | |
103 cmp, | |
104 Version("dummy", 1, 0, 0), | |
105 Version("dumym", 1, 0, 0)) | |
106 | |
107 | |
108 def test_repr(self): | |
109 """ | |
110 Calling C{repr} on a version returns a human-readable string | |
111 representation of the version. | |
112 """ | |
113 self.assertEquals(repr(Version("dummy", 1, 2, 3)), | |
114 "Version('dummy', 1, 2, 3)") | |
115 | |
116 | |
117 def test_reprWithPrerelease(self): | |
118 """ | |
119 Calling C{repr} on a version with a prerelease returns a human-readable | |
120 string representation of the version including the prerelease. | |
121 """ | |
122 self.assertEquals(repr(Version("dummy", 1, 2, 3, prerelease=4)), | |
123 "Version('dummy', 1, 2, 3, prerelease=4)") | |
124 | |
125 | |
126 def test_str(self): | |
127 """ | |
128 Calling C{str} on a version returns a human-readable string | |
129 representation of the version. | |
130 """ | |
131 self.assertEquals(str(Version("dummy", 1, 2, 3)), | |
132 "[dummy, version 1.2.3]") | |
133 | |
134 | |
135 def test_strWithPrerelease(self): | |
136 """ | |
137 Calling C{str} on a version with a prerelease includes the prerelease. | |
138 """ | |
139 self.assertEquals(str(Version("dummy", 1, 0, 0, prerelease=1)), | |
140 "[dummy, version 1.0.0pre1]") | |
141 | |
142 | |
143 def testShort(self): | |
144 self.assertEquals(Version('dummy', 1, 2, 3).short(), '1.2.3') | |
145 | |
146 | |
147 def test_goodSVNEntries_4(self): | |
148 """ | |
149 Version should be able to parse an SVN format 4 entries file. | |
150 """ | |
151 version = Version("dummy", 1, 0, 0) | |
152 self.assertEquals( | |
153 version._parseSVNEntries_4(StringIO(VERSION_4_ENTRIES)), '18211') | |
154 | |
155 | |
156 def test_goodSVNEntries_8(self): | |
157 """ | |
158 Version should be able to parse an SVN format 8 entries file. | |
159 """ | |
160 version = Version("dummy", 1, 0, 0) | |
161 self.assertEqual( | |
162 version._parseSVNEntries_8(StringIO(VERSION_8_ENTRIES)), '22715') | |
163 | |
164 | |
165 def test_getVersionString(self): | |
166 """ | |
167 L{getVersionString} returns a string with the package name and the | |
168 short version number. | |
169 """ | |
170 self.assertEqual( | |
171 'Twisted 8.0.0', getVersionString(Version('Twisted', 8, 0, 0))) | |
172 | |
173 | |
174 def test_getVersionStringWithPrerelease(self): | |
175 """ | |
176 L{getVersionString} includes the prerelease, if any. | |
177 """ | |
178 self.assertEqual( | |
179 getVersionString(Version("whatever", 8, 0, 0, prerelease=1)), | |
180 "whatever 8.0.0pre1") | |
181 | |
182 | |
183 def test_base(self): | |
184 """ | |
185 The L{base} method returns a very simple representation of the version. | |
186 """ | |
187 self.assertEquals(Version("foo", 1, 0, 0).base(), "1.0.0") | |
188 | |
189 | |
190 def test_baseWithPrerelease(self): | |
191 """ | |
192 The base version includes 'preX' for versions with prereleases. | |
193 """ | |
194 self.assertEquals(Version("foo", 1, 0, 0, prerelease=8).base(), | |
195 "1.0.0pre8") | |
196 | |
197 | |
198 | |
199 class FormatDiscoveryTests(unittest.TestCase): | |
200 """ | |
201 Tests which discover the parsing method based on the imported module name. | |
202 """ | |
203 | |
204 def setUp(self): | |
205 """ | |
206 Create a temporary directory with a package structure in it. | |
207 """ | |
208 self.entry = FilePath(self.mktemp()) | |
209 self.preTestModules = sys.modules.copy() | |
210 sys.path.append(self.entry.path) | |
211 pkg = self.entry.child("twisted_python_versions_package") | |
212 pkg.makedirs() | |
213 pkg.child("__init__.py").setContent( | |
214 "from twisted.python.versions import Version\n" | |
215 "version = Version('twisted_python_versions_package', 1, 0, 0)\n") | |
216 self.svnEntries = pkg.child(".svn") | |
217 self.svnEntries.makedirs() | |
218 | |
219 | |
220 def tearDown(self): | |
221 """ | |
222 Remove the imported modules and sys.path modifications. | |
223 """ | |
224 sys.modules.clear() | |
225 sys.modules.update(self.preTestModules) | |
226 sys.path.remove(self.entry.path) | |
227 | |
228 | |
229 def checkSVNFormat(self, formatVersion, entriesText, expectedRevision): | |
230 """ | |
231 Check for the given revision being detected after setting the SVN | |
232 entries text and format version of the test directory structure. | |
233 """ | |
234 self.svnEntries.child("format").setContent(formatVersion+"\n") | |
235 self.svnEntries.child("entries").setContent(entriesText) | |
236 self.assertEqual(self.getVersion()._getSVNVersion(), expectedRevision) | |
237 | |
238 | |
239 def getVersion(self): | |
240 """ | |
241 Import and retrieve the Version object from our dynamically created | |
242 package. | |
243 """ | |
244 import twisted_python_versions_package | |
245 return twisted_python_versions_package.version | |
246 | |
247 | |
248 def test_detectVersion4(self): | |
249 """ | |
250 Verify that version 4 format file will be properly detected and parsed. | |
251 """ | |
252 self.checkSVNFormat("4", VERSION_4_ENTRIES, '18211') | |
253 | |
254 | |
255 def test_detectVersion8(self): | |
256 """ | |
257 Verify that version 8 format files will be properly detected and | |
258 parsed. | |
259 """ | |
260 self.checkSVNFormat("8", VERSION_8_ENTRIES, '22715') | |
261 | |
262 | |
263 def test_detectUnknownVersion(self): | |
264 """ | |
265 Verify that a new version of SVN will result in the revision 'Unknown'. | |
266 """ | |
267 self.checkSVNFormat("some-random-new-version", "ooga booga!", 'Unknown') | |
268 | |
269 | |
OLD | NEW |