| 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 |