1  """Tests for distutils.version."""
       2  import unittest
       3  from distutils.version import LooseVersion
       4  from distutils.version import StrictVersion
       5  
       6  class ESC[4;38;5;81mVersionTestCase(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       7  
       8      def test_prerelease(self):
       9          version = StrictVersion('1.2.3a1')
      10          self.assertEqual(version.version, (1, 2, 3))
      11          self.assertEqual(version.prerelease, ('a', 1))
      12          self.assertEqual(str(version), '1.2.3a1')
      13  
      14          version = StrictVersion('1.2.0')
      15          self.assertEqual(str(version), '1.2')
      16  
      17      def test_cmp_strict(self):
      18          versions = (('1.5.1', '1.5.2b2', -1),
      19                      ('161', '3.10a', ValueError),
      20                      ('8.02', '8.02', 0),
      21                      ('3.4j', '1996.07.12', ValueError),
      22                      ('3.2.pl0', '3.1.1.6', ValueError),
      23                      ('2g6', '11g', ValueError),
      24                      ('0.9', '2.2', -1),
      25                      ('1.2.1', '1.2', 1),
      26                      ('1.1', '1.2.2', -1),
      27                      ('1.2', '1.1', 1),
      28                      ('1.2.1', '1.2.2', -1),
      29                      ('1.2.2', '1.2', 1),
      30                      ('1.2', '1.2.2', -1),
      31                      ('0.4.0', '0.4', 0),
      32                      ('1.13++', '5.5.kw', ValueError))
      33  
      34          for v1, v2, wanted in versions:
      35              try:
      36                  res = StrictVersion(v1)._cmp(StrictVersion(v2))
      37              except ValueError:
      38                  if wanted is ValueError:
      39                      continue
      40                  else:
      41                      raise AssertionError(("cmp(%s, %s) "
      42                                            "shouldn't raise ValueError")
      43                                              % (v1, v2))
      44              self.assertEqual(res, wanted,
      45                               'cmp(%s, %s) should be %s, got %s' %
      46                               (v1, v2, wanted, res))
      47              res = StrictVersion(v1)._cmp(v2)
      48              self.assertEqual(res, wanted,
      49                               'cmp(%s, %s) should be %s, got %s' %
      50                               (v1, v2, wanted, res))
      51              res = StrictVersion(v1)._cmp(object())
      52              self.assertIs(res, NotImplemented,
      53                            'cmp(%s, %s) should be NotImplemented, got %s' %
      54                            (v1, v2, res))
      55  
      56  
      57      def test_cmp(self):
      58          versions = (('1.5.1', '1.5.2b2', -1),
      59                      ('161', '3.10a', 1),
      60                      ('8.02', '8.02', 0),
      61                      ('3.4j', '1996.07.12', -1),
      62                      ('3.2.pl0', '3.1.1.6', 1),
      63                      ('2g6', '11g', -1),
      64                      ('0.960923', '2.2beta29', -1),
      65                      ('1.13++', '5.5.kw', -1))
      66  
      67  
      68          for v1, v2, wanted in versions:
      69              res = LooseVersion(v1)._cmp(LooseVersion(v2))
      70              self.assertEqual(res, wanted,
      71                               'cmp(%s, %s) should be %s, got %s' %
      72                               (v1, v2, wanted, res))
      73              res = LooseVersion(v1)._cmp(v2)
      74              self.assertEqual(res, wanted,
      75                               'cmp(%s, %s) should be %s, got %s' %
      76                               (v1, v2, wanted, res))
      77              res = LooseVersion(v1)._cmp(object())
      78              self.assertIs(res, NotImplemented,
      79                            'cmp(%s, %s) should be NotImplemented, got %s' %
      80                            (v1, v2, res))
      81  
      82  if __name__ == "__main__":
      83      unittest.main()