def test_final(self):
     v = PEP440Version('1.2.3')
     self.assertEqual(v.version, [1, 2, 3])
     self.assertIsInstance(v.final, PEP440Version)
     self.assertNotEqual(v.final, PEP440Version([124]))
     self.assertIs(v.final, v)
     self.assertEqual(str(v), '1.2.3')
 def test_v_prefix(self):
     v = PEP440Version('v1.2.3')
     self.assertEqual(v.version, [1, 2, 3])
     self.assertNotEqual(v.final, PEP440Version([1, 2, 4]))
     self.assertNotEqual(v.final, PEP440Version([124]))
     self.assertIs(v.final, v)
     self.assertEqual(str(v), 'v1.2.3')
     self.assertEqual(str(v.final), 'v1.2.3')
 def test_non_final_unsupported_comparisons(self):
     # TODO: Ordering of these is not especially important
     self.assertEqual(PEP440Version('1.2a3'), PEP440Version('1.2alpha3'))
     self.assertEqual(PEP440Version('1.2b3'), PEP440Version('1.2beta3'))
     self.assertEqual(PEP440Version('1.2pre3'),
                      PEP440Version('1.2bpreview3'))
     self.assertEqual(PEP440Version('1.2rc3'), PEP440Version('1.2c3'))
 def test_epoch_not_implemented(self):
     # TODO: To be useful, final and previous need to ignore the epoch
     # until previous creates a new version identifier which should
     # be in the same epoch
     v = PEP440Version('5!1.2.3')
     with self.assertRaises(NotImplementedError):
         v._estimate_previous()
    def test_final(self):
        v = PEP440Version('1.2.3')
        p = v._estimate_previous()
        self.assertIsInstance(p, PEP440Version)
        self.assertEqual(p.version, [1, 2, 2])
        self.assertEqual(str(p), '1.2.2')

        p2 = v._estimate_previous()
        self.assertIs(p, p2)
    def test_multiple_zeros(self):
        v = PEP440Version('1.0.0')
        p = v._estimate_previous()
        self.assertIsInstance(p, PEP440Version)
        self.assertEqual(p.version, [0, 0, '*'])
        self.assertEqual(str(p), '0.0.*')

        v = PEP440Version('1.0.0.0')
        p = v._estimate_previous()
        self.assertIsInstance(p, PEP440Version)
        self.assertEqual(p.version, [0, 0, 0, '*'])
        self.assertEqual(str(p), '0.0.0.*')

        v = PEP440Version('1.0.0.1.0')
        p = v._estimate_previous()
        self.assertIsInstance(p, PEP440Version)
        self.assertEqual(p.version, [1, 0, 0, 0, '*'])
        self.assertEqual(str(p), '1.0.0.0.*')
 def test_not_final(self):
     v = PEP440Version('1.2.3dev0')
     with self.assertRaisesRegex(AssertionError, 'is not final'):
         v._estimate_previous()
 def test_tuple_v_str_disabled(self):
     v = PEP440Version(('v1', 2, 3), v_prefix=False)
     self.assertEqual(v.version, (1, 2, 3))
     self.assertEqual(str(v), '1.2.3')
 def test_implicit_post(self):
     # TODO: This is quite important to rewrite existing implicit post
     self.assertEqual(PEP440Version('1.2-3'), PEP440Version('1.2.post3'))
     self.assertNotEqual(PEP440Version('1.2-3'), PEP440Version('1.2.3'))
 def test_epoch_comparison(self):
     # TODO: This is quite essential to the purpose of PEP 440
     # but is rarely ever used.
     self.assertGreater(PEP440Version('1!1.0'), PEP440Version('2012.04'))
 def test_zero_algorithm_non_final(self):
     v = (0, 0, 0, 'dev', 1)
     p = PEP440Version._decrement(v)
     self.assertIsInstance(p, tuple)
     self.assertEqual(p, (0, 0, 0, 'dev', 0))
 def test_list_vv_disabled(self):
     v = PEP440Version(['vv', 2, 3], v_prefix=False)
     self.assertEqual(v.version, ['v', 2, 3])
     self.assertEqual(str(v), 'v.2.3')
     self.assertEqual(repr(v), "PEP440Version('v.2.3')")
     self.assertEqual(repr(eval(repr(v))), "PEP440Version('v.2.3')")
 def test_list_vv_auto(self):
     v = PEP440Version(['vv', 2, 3])
     self.assertEqual(v.version, ['v', 2, 3])
     self.assertEqual(str(v), 'vv.2.3')
     self.assertEqual(repr(v), "PEP440Version('vv.2.3')")
     self.assertEqual(repr(eval(repr(v))), "PEP440Version('vv.2.3')")
 def test_list_v_str_disabled(self):
     v = PEP440Version(['v1', 2, 3], v_prefix=False)
     self.assertEqual(v.version, [1, 2, 3])
     self.assertEqual(str(v), '1.2.3')
 def test_list_v_str(self):
     v = PEP440Version(['v1', 2, 3], v_prefix=True)
     self.assertEqual(v.version, [1, 2, 3])
     self.assertEqual(str(v), 'v1.2.3')
 def test_tuple_vv_disabled(self):
     v = PEP440Version(('vv', 2, 3), v_prefix=False)
     self.assertEqual(v.version, ('v', 2, 3))
     self.assertEqual(str(v), 'v.2.3')
     self.assertEqual(repr(v), "PEP440Version('v.2.3')")
     self.assertEqual(repr(eval(repr(v))), "PEP440Version('v.2.3')")
 def test_tuple_vv_auto(self):
     v = PEP440Version(('vv', 2, 3))
     self.assertEqual(v.version, ('v', 2, 3))
     self.assertEqual(str(v), 'vv.2.3')
     self.assertEqual(repr(v), "PEP440Version('vv.2.3')")
     self.assertEqual(repr(eval(repr(v))), "PEP440Version('vv.2.3')")
 def test_one(self):
     v = PEP440Version('1.2.1')
     p = v._estimate_previous()
     self.assertIsInstance(p, PEP440Version)
     self.assertEqual(p.version, [1, 2, 0])
     self.assertEqual(str(p), '1.2.0')
 def test_zeros(self):
     v = PEP440Version('v1.2.0')
     p = v._estimate_previous()
     self.assertIsInstance(p, PEP440Version)
     self.assertEqual(p.version, [1, 1, '*'])
     self.assertEqual(str(p), 'v1.1.*')
 def test_list_v_str_mixed(self):
     v = PEP440Version(['v1', 2, '3'])
     self.assertEqual(v.version, [1, 2, 3])
 def test_all_zeros(self):
     v = PEP440Version('0.0.0')
     msg = 'version prior to 0.0 can not exist'
     with self.assertRaisesRegex(ValueError, msg):
         v._estimate_previous()
 def test_list_v_str_with_dots(self):
     v = PEP440Version(['v1', 2, '3.4'])
     self.assertEqual(v.version, [1, 2, 3, 4])
 def test_skip_non_int(self):
     v = (0, 0, 1, 'dev', 0)
     p = PEP440Version._decrement(v)
     self.assertIsInstance(p, tuple)
     self.assertEqual(p, (0, 0, 0, 'dev', '*'))
 def test_tuple(self):
     v = PEP440Version((1, 2, 3))
     self.assertEqual(v.version, (1, 2, 3))
     self.assertEqual(str(v), '1.2.3')
    def test_PEP440(self):
        # All examples in PEP440 spec
        self.assertEqual(PEP440Version('1').version, [1])
        self.assertEqual(PEP440Version('1.2').version, [1, 2])
        self.assertEqual(PEP440Version('1.2.3').version, [1, 2, 3])

        self.assertEqual(PEP440Version('2012.04').version, [2012, 4])
        self.assertEqual(PEP440Version('2013.01').version, [2013, 1])

        self.assertEqual(PEP440Version('1.2a3').version, [1, 2, 'a', 3])
        self.assertEqual(PEP440Version('1.2b3').version, [1, 2, 'b', 3])
        self.assertEqual(PEP440Version('1.2rc3').version, [1, 2, 'rc', 3])

        self.assertGreater(PEP440Version('1.2rc3'), PEP440Version('1.2b3'))
        self.assertGreater(PEP440Version('1.2b3'), PEP440Version('1.2a3'))
        self.assertLess(PEP440Version('1.2a3'), PEP440Version('1.2b3'))
        self.assertEqual(PEP440Version('1.2a3'), PEP440Version('1.2a3'))

        self.assertEqual(PEP440Version('1.2.post3').version, [1, 2, 'post', 3])

        self.assertEqual(
            PEP440Version('1.2a3.post4').version, [1, 2, 'a', 3, 'post', 4])
        self.assertEqual(
            PEP440Version('1.2b3.post4').version, [1, 2, 'b', 3, 'post', 4])
        self.assertEqual(
            PEP440Version('1.2rc3.post4').version, [1, 2, 'rc', 3, 'post', 4])

        self.assertEqual(PEP440Version('1.2.dev3').version, [1, 2, 'dev', 3])

        self.assertEqual(
            PEP440Version('1.2a3.dev4').version, [1, 2, 'a', 3, 'dev', 4])

        self.assertEqual(
            PEP440Version('1.2.post3.dev4').version,
            [1, 2, 'post', 3, 'dev', 4])

        self.assertEqual(PEP440Version('1!1.0').version, [1, '!', 1, 0])

        self.assertGreater(PEP440Version('1!1.1'), PEP440Version('1!1.0'))
        self.assertGreater(PEP440Version('2!1.1'), PEP440Version('1!0.9'))

        self.assertEqual(PEP440Version('1.1RC1'), PEP440Version('1.1rc1'))

        self.assertEqual(PEP440Version('1.2.a3').version, [1, 2, 'a', 3])
        self.assertEqual(PEP440Version('1.2-a3').version, [1, 2, 'a', 3])
        self.assertEqual(PEP440Version('1.2_a3').version, [1, 2, 'a', 3])

        self.assertEqual(PEP440Version('1.2.a3'), PEP440Version('1.2-a3'))

        self.assertEqual(PEP440Version('1.2.a'), PEP440Version('1.2-a0'))

        self.assertEqual(PEP440Version('1.2.post-3'),
                         PEP440Version('1.2.post3'))

        self.assertEqual(PEP440Version('1.2-3').version, [1, 2, 3])

        self.assertEqual(PEP440Version('1.2+u.3').version, [1, 2, '+', 'u', 3])
        self.assertEqual(PEP440Version('1.2+u-3').version, [1, 2, '+', 'u', 3])

        self.assertEqual(PEP440Version(' 1.2.3 ').version, [1, 2, 3])
        self.assertEqual(PEP440Version('\n1.2.3\n').version, [1, 2, 3])
        self.assertEqual(PEP440Version('\r1.2.3\r').version, [1, 2, 3])
        self.assertEqual(PEP440Version('\t1.2.3\t').version, [1, 2, 3])
        self.assertEqual(PEP440Version('\v1.2.3\v').version, [1, 2, 3])
 def test_final(self):
     v = PEP440Version('1.2.3')
     self.assertEqual(v.version, [1, 2, 3])
     self.assertEqual(str(v), '1.2.3')
 def test_no_numbers(self):
     v = PEP440Version('abc')
     self.assertEqual(v.version, ['abc', 0])
     self.assertEqual(str(v), 'abc')
 def test_tuple_v_str(self):
     v = PEP440Version(('v1', 2, 3), v_prefix=True)
     self.assertEqual(v.version, (1, 2, 3))
     self.assertEqual(str(v), 'v1.2.3')
 def test_invalid_epoch(self):
     with self.assertRaisesRegex(ValueError, 'Invalid use of epoch'):
         PEP440Version('a!1.2.3')
 def test_no_dots(self):
     v = PEP440Version('123')
     self.assertEqual(v.version, [123])