Ejemplo n.º 1
0
 def test_invalid(self):
     data = [
         'blerg',
         'git+https://user:[email protected]/foo',
         '>=1 a',
         '? >=1',
     ]
     for pattern in data:
         with self.assertRaises(ValueError,
                                msg='Pattern should be invalid %s' %
                                pattern):
             Range(pattern, loose=True)
Ejemplo n.º 2
0
 def test_loose_ranges(self):
     data = [
         ['>01.02.03', '>1.2.3'],
         ['~1.2.3beta', '>=1.2.3-beta <1.3.0'],
     ]
     for pattern, expanded in data:
         pattern = Range(pattern, loose=True)
         result = '||'.join(comparator.desc
                            for comparator in pattern.ranges)
         self.assertEqual(result,
                          expanded,
                          msg='%s should expand to %s' %
                          (pattern, expanded))
Ejemplo n.º 3
0
    def test_loose_range_non_matches(self):
        data = [
            ['1', '1.0.0beta'],
            ['<1', '1.0.0beta'],
            ['< 1', '1.0.0beta'],
            ['>=0.1.97', 'v0.1.93'],
            ['1', '2.0.0beta'],
            ['*', 'v1.2.3-foo'],

            # node's semver doesn't consider these a loose range:
            ['~v0.5.4-beta', '0.5.4-alpha'],
        ]
        for pattern, version in data:
            pattern = Range(pattern, loose=True)
            self.assertNotIn(version,
                             pattern,
                             msg='%s should not be in %s' % (version, pattern))
Ejemplo n.º 4
0
    def test_loose_range_matches(self):
        data = [
            ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3'],
            ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3'],
            ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3'],
            ['*', 'v1.2.3'],
            ['>=0.1.97', 'v0.1.97'],

            # node's semver doesn't consider these a loose range:
            ['~v0.5.4-pre', '0.5.5'],
            ['~v0.5.4-pre', '0.5.4'],
        ]
        for pattern, version in data:
            pattern = Range(pattern, loose=True)
            self.assertIn(version,
                          pattern,
                          msg='%s should be in %s' % (version, pattern))
Ejemplo n.º 5
0
    def test_max_satisfying(self):
        data = [
            [['1.2.3', '1.2.4'], '1.2', '1.2.4'],
            [['1.2.4', '1.2.3'], '1.2', '1.2.4'],
            [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'],
        ]
        for versions, pattern, expected in data:
            pattern = Range(pattern)
            self.assertEqual(pattern.highest_version(versions), expected)

        data = [
            [[
                '1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2',
                '2.0.0b3', '2.0.0', '2.1.0'
            ], '~2.0.0', '2.0.0'],
        ]
        for versions, pattern, expected in data:
            pattern = Range(pattern, loose=True)
            self.assertEqual(pattern.highest_version(versions), expected)
Ejemplo n.º 6
0
 def test_range_non_matches(self):
     data = [
         ['1.0.0 - 2.0.0', '2.2.3'],
         ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'],
         ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'],
         ['^1.2.3+build', '2.0.0'],
         ['^1.2.3+build', '1.2.0'],
         ['^1.2.3', '1.2.3-pre'],
         ['^1.2', '1.2.0-pre'],
         ['>1.2', '1.3.0-beta'],
         ['<=1.2.3', '1.2.3-beta'],
         ['^1.2.3', '1.2.3-beta'],
         ['=0.7.x', '0.7.0-asdf'],
         ['>=0.7.x', '0.7.0-asdf'],
         ['1.0.0', '1.0.1'],
         ['>=1.0.0', '0.0.0'],
         ['>=1.0.0', '0.0.1'],
         ['>=1.0.0', '0.1.0'],
         ['>1.0.0', '0.0.1'],
         ['>1.0.0', '0.1.0'],
         ['<=2.0.0', '3.0.0'],
         ['<=2.0.0', '2.9999.9999'],
         ['<=2.0.0', '2.2.9'],
         ['<2.0.0', '2.9999.9999'],
         ['<2.0.0', '2.2.9'],
         ['>=0.1.97', '0.1.93'],
         ['0.1.20 || 1.2.4', '1.2.3'],
         ['>=0.2.3 || <0.0.1', '0.0.3'],
         ['>=0.2.3 || <0.0.1', '0.2.2'],
         ['2.x.x', '1.1.3'],
         ['2.x.x', '3.1.3'],
         ['1.2.x', '1.3.3'],
         ['1.2.x || 2.x', '3.1.3'],
         ['1.2.x || 2.x', '1.1.3'],
         ['2.*.*', '1.1.3'],
         ['2.*.*', '3.1.3'],
         ['1.2.*', '1.3.3'],
         ['1.2.* || 2.*', '3.1.3'],
         ['1.2.* || 2.*', '1.1.3'],
         ['2', '1.1.2'],
         ['2.3', '2.4.1'],
         ['~2.4', '2.5.0'],  # >= 2.4.0 < 2.5.0
         ['~2.4', '2.3.9'],
         ['~>3.2.1', '3.3.2'],  # >= 3.2.1 < 3.3.0
         ['~>3.2.1', '3.2.0'],  # >= 3.2.1 < 3.3.0
         ['~1', '0.2.3'],  # >= 1.0.0 < 2.0.0
         ['~>1', '2.2.3'],
         ['~1.0', '1.1.0'],  # >= 1.0.0 < 1.1.0
         ['<1', '1.0.0'],
         ['>=1.2', '1.1.1'],
         ['=0.7.x', '0.8.2'],
         ['>=0.7.x', '0.6.2'],
         ['<0.7.x', '0.7.2'],
         ['<1.2.3', '1.2.3-beta'],
         ['=1.2.3', '1.2.3-beta'],
         ['>1.2', '1.2.8'],
         ['^1.2.3', '2.0.0-alpha'],
         ['^1.2.3', '1.2.2'],
         ['^1.2', '1.1.9'],
         ['^1.2.3', '2.0.0-pre'],
     ]
     for pattern, version in data:
         pattern = Range(pattern)
         self.assertNotIn(version,
                          pattern,
                          msg='%s should not be in %s' % (version, pattern))
Ejemplo n.º 7
0
 def test_range_matches(self):
     data = [
         ['1.0.0 - 2.0.0', '1.2.3'],
         ['^1.2.3+build', '1.2.3'],
         ['^1.2.3+build', '1.3.0'],
         ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'],
         ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'],
         ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'],
         ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'],
         ['1.0.0', '1.0.0'],
         ['>=*', '0.2.4'],
         ['', '1.0.0'],
         ['*', '1.2.3'],
         ['>=1.0.0', '1.0.0'],
         ['>=1.0.0', '1.0.1'],
         ['>=1.0.0', '1.1.0'],
         ['>1.0.0', '1.0.1'],
         ['>1.0.0', '1.1.0'],
         ['<=2.0.0', '2.0.0'],
         ['<=2.0.0', '1.9999.9999'],
         ['<=2.0.0', '0.2.9'],
         ['<2.0.0', '1.9999.9999'],
         ['<2.0.0', '0.2.9'],
         ['>= 1.0.0', '1.0.0'],
         ['>=  1.0.0', '1.0.1'],
         ['>=   1.0.0', '1.1.0'],
         ['> 1.0.0', '1.0.1'],
         ['>  1.0.0', '1.1.0'],
         ['<=   2.0.0', '2.0.0'],
         ['<= 2.0.0', '1.9999.9999'],
         ['<=  2.0.0', '0.2.9'],
         ['<    2.0.0', '1.9999.9999'],
         ['<\t2.0.0', '0.2.9'],
         ['>=0.1.97', '0.1.97'],
         ['0.1.20 || 1.2.4', '1.2.4'],
         ['>=0.2.3 || <0.0.1', '0.0.0'],
         ['>=0.2.3 || <0.0.1', '0.2.3'],
         ['>=0.2.3 || <0.0.1', '0.2.4'],
         ['||', '1.3.4'],
         ['2.x.x', '2.1.3'],
         ['1.2.x', '1.2.3'],
         ['1.2.x || 2.x', '2.1.3'],
         ['1.2.x || 2.x', '1.2.3'],
         ['x', '1.2.3'],
         ['2.*.*', '2.1.3'],
         ['1.2.*', '1.2.3'],
         ['1.2.* || 2.*', '2.1.3'],
         ['1.2.* || 2.*', '1.2.3'],
         ['*', '1.2.3'],
         ['2', '2.1.2'],
         ['2.3', '2.3.1'],
         ['~2.4', '2.4.0'],  # >=2.4.0 <2.5.0
         ['~2.4', '2.4.5'],
         ['~>3.2.1', '3.2.2'],  # >=3.2.1 <3.3.0,
         ['~1', '1.2.3'],  # >=1.0.0 <2.0.0
         ['~>1', '1.2.3'],
         ['~> 1', '1.2.3'],
         ['~1.0', '1.0.2'],  # >=1.0.0 <1.1.0,
         ['~ 1.0', '1.0.2'],
         ['~ 1.0.3', '1.0.12'],
         ['>=1', '1.0.0'],
         ['>= 1', '1.0.0'],
         ['<1.2', '1.1.1'],
         ['< 1.2', '1.1.1'],
         ['=0.7.x', '0.7.2'],
         ['<=0.7.x', '0.7.2'],
         ['>=0.7.x', '0.7.2'],
         ['<=0.7.x', '0.6.2'],
         ['~1.2.1 >=1.2.3', '1.2.3'],
         ['~1.2.1 =1.2.3', '1.2.3'],
         ['~1.2.1 1.2.3', '1.2.3'],
         ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'],
         ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'],
         ['~1.2.1 1.2.3', '1.2.3'],
         ['>=1.2.1 1.2.3', '1.2.3'],
         ['1.2.3 >=1.2.1', '1.2.3'],
         ['>=1.2.3 >=1.2.1', '1.2.3'],
         ['>=1.2.1 >=1.2.3', '1.2.3'],
         ['>=1.2', '1.2.8'],
         ['^1.2.3', '1.8.1'],
         ['^0.1.2', '0.1.2'],
         ['^0.1', '0.1.2'],
         ['^1.2', '1.4.2'],
         ['^1.2 ^1', '1.4.2'],
         ['^1.2.3-alpha', '1.2.3-pre'],
         ['^1.2.0-alpha', '1.2.0-pre'],
         ['^0.0.1-alpha', '0.0.1-beta'],
     ]
     for pattern, version in data:
         pattern = Range(pattern)
         self.assertIn(version,
                       pattern,
                       msg='%s should be in %s' % (version, pattern))
Ejemplo n.º 8
0
    def test_comparators(self):
        data = [
            ['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]],
            ['1.0.0', [['1.0.0']]],
            ['>=*', [['>=0.0.0']]],  # node's semver uses ''
            ['', [['>=0.0.0']]],  # node's semver uses ''
            ['*', [['>=0.0.0']]],  # node's semver uses ''
            ['*', [['>=0.0.0']]],  # node's semver uses ''
            ['>=1.0.0', [['>=1.0.0']]],
            ['>=1.0.0', [['>=1.0.0']]],
            ['>=1.0.0', [['>=1.0.0']]],
            ['>1.0.0', [['>1.0.0']]],
            ['>1.0.0', [['>1.0.0']]],
            ['<=2.0.0', [['<=2.0.0']]],
            ['1', [['>=1.0.0', '<2.0.0']]],
            ['<=2.0.0', [['<=2.0.0']]],
            ['<=2.0.0', [['<=2.0.0']]],
            ['<2.0.0', [['<2.0.0']]],
            ['<2.0.0', [['<2.0.0']]],
            ['>= 1.0.0', [['>=1.0.0']]],
            ['>=  1.0.0', [['>=1.0.0']]],
            ['>=   1.0.0', [['>=1.0.0']]],
            ['> 1.0.0', [['>1.0.0']]],
            ['>  1.0.0', [['>1.0.0']]],
            ['<=   2.0.0', [['<=2.0.0']]],
            ['<= 2.0.0', [['<=2.0.0']]],
            ['<=  2.0.0', [['<=2.0.0']]],
            ['<    2.0.0', [['<2.0.0']]],
            ['<\t2.0.0', [['<2.0.0']]],
            ['>=0.1.97', [['>=0.1.97']]],
            ['>=0.1.97', [['>=0.1.97']]],
            ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]],
            ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
            ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
            ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
            ['||', [['>=0.0.0']]],  # node's semver uses '||'
            ['2.x.x', [['>=2.0.0', '<3.0.0']]],
            ['1.2.x', [['>=1.2.0', '<1.3.0']]],
            ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
            ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
            ['x', [['>=0.0.0']]],  # node's semver uses ''
            ['2.*.*', [['>=2.0.0', '<3.0.0']]],
            ['1.2.*', [['>=1.2.0', '<1.3.0']]],
            ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
            ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
            ['*', [['>=0.0.0']]],  # node's semver uses ''
            ['2', [['>=2.0.0', '<3.0.0']]],
            ['2.3', [['>=2.3.0', '<2.4.0']]],
            ['~2.4', [['>=2.4.0', '<2.5.0']]],
            ['~2.4', [['>=2.4.0', '<2.5.0']]],
            ['~>3.2.1', [['>=3.2.1', '<3.3.0']]],
            ['~1', [['>=1.0.0', '<2.0.0']]],
            ['~>1', [['>=1.0.0', '<2.0.0']]],
            ['~> 1', [['>=1.0.0', '<2.0.0']]],
            ['~1.0', [['>=1.0.0', '<1.1.0']]],
            ['~ 1.0', [['>=1.0.0', '<1.1.0']]],
            ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]],
            ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]],
            ['<1', [['<1.0.0']]],
            ['< 1', [['<1.0.0']]],
            ['>=1', [['>=1.0.0']]],
            ['>= 1', [['>=1.0.0']]],
            ['<1.2', [['<1.2.0']]],
            ['< 1.2', [['<1.2.0']]],
            ['1', [['>=1.0.0', '<2.0.0']]],
            # node's semver uses '>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0':
            ['1 2', [['>=1.0.0', '>=2.0.0', '<2.0.0', '<3.0.0']]],
            ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]],
            ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]],
            ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]],

            # match-nothing ranges
            ['>*', [['<0.0.0']]],
            ['<*', [['<0.0.0']]],
        ]
        for pattern, expected_ranges in data:
            pattern = Range(pattern)
            for expected_range, comparator in zip(expected_ranges,
                                                  pattern.ranges):
                expected_range = ' '.join(expected_range)
                self.assertEqual(expected_range,
                                 comparator.desc,
                                 msg='%s should expand to %s' %
                                 (pattern, expected_range))
Ejemplo n.º 9
0
 def test_ranges(self):
     data = [
         ['1.2.3 - 2.3.4', '>=1.2.3 <=2.3.4'],
         ['1.2 - 2.3.4', '>=1.2.0 <=2.3.4'],
         ['1.2.3 - 2.3', '>=1.2.3 <2.4.0'],
         ['1.2.3 - 2', '>=1.2.3 <3.0.0'],
         ['~1.2.3', '>=1.2.3 <1.3.0'],
         ['~1.2', '>=1.2.0 <1.3.0'],
         ['~1', '>=1.0.0 <2.0.0'],
         ['~0.2.3', '>=0.2.3 <0.3.0'],
         ['~0.2', '>=0.2.0 <0.3.0'],
         ['~0', '>=0.0.0 <1.0.0'],
         ['~1.2.3-beta.2', '>=1.2.3-beta.2 <1.3.0'],
         ['^1.2.3', '>=1.2.3 <2.0.0'],
         ['^0.2.3', '>=0.2.3 <0.3.0'],
         ['^0.0.3', '>=0.0.3 <0.0.4'],
         ['^1.2.3-beta.2', '>=1.2.3-beta.2 <2.0.0'],
         ['^0.0.3-beta', '>=0.0.3-beta <0.0.4'],
         ['^1.2.x', '>=1.2.0 <2.0.0'],
         ['^0.0.x', '>=0.0.0 <0.1.0'],
         ['^0.0', '>=0.0.0 <0.1.0'],
         ['^1.x', '>=1.0.0 <2.0.0'],
         ['^0.x', '>=0.0.0 <1.0.0'],
         ['1.2.3 - *', '>=1.2.3'],
         ['* - 2', '>=0.0.0 <3.0.0'],
         ['^*', '>=0.0.0'],  # is this right?
         ['', '>=0.0.0'],
         ['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
         ['1.0.0', '1.0.0'],
         ['>=*', '>=0.0.0'],  # node's semver uses *
         ['', '>=0.0.0'],  # node's semver uses *
         ['*', '>=0.0.0'],  # node's semver uses *
         ['*', '>=0.0.0'],  # node's semver uses *
         ['>=1.0.0', '>=1.0.0'],
         ['>1.0.0', '>1.0.0'],
         ['<=2.0.0', '<=2.0.0'],
         ['1', '>=1.0.0 <2.0.0'],
         ['<=2.0.0', '<=2.0.0'],
         ['<=2.0.0', '<=2.0.0'],
         ['<2.0.0', '<2.0.0'],
         ['<2.0.0', '<2.0.0'],
         ['>= 1.0.0', '>=1.0.0'],
         ['>=  1.0.0', '>=1.0.0'],
         ['>=   1.0.0', '>=1.0.0'],
         ['> 1.0.0', '>1.0.0'],
         ['>  1.0.0', '>1.0.0'],
         ['<=   2.0.0', '<=2.0.0'],
         ['<= 2.0.0', '<=2.0.0'],
         ['<=  2.0.0', '<=2.0.0'],
         ['<    2.0.0', '<2.0.0'],
         ['<	2.0.0', '<2.0.0'],
         ['>=0.1.97', '>=0.1.97'],
         ['>=0.1.97', '>=0.1.97'],
         ['0.1.20 || 1.2.4', '0.1.20||1.2.4'],
         ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
         ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
         ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
         ['||', '>=0.0.0'],  # node's semver uses ||
         ['2.x.x', '>=2.0.0 <3.0.0'],
         ['1.2.x', '>=1.2.0 <1.3.0'],
         ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
         ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
         ['x', '>=0.0.0'],  # node's semver uses *
         ['2.*.*', '>=2.0.0 <3.0.0'],
         ['1.2.*', '>=1.2.0 <1.3.0'],
         ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
         ['*', '>=0.0.0'],  # node's semver uses *
         ['2', '>=2.0.0 <3.0.0'],
         ['2.3', '>=2.3.0 <2.4.0'],
         ['~2.4', '>=2.4.0 <2.5.0'],
         ['~2.4', '>=2.4.0 <2.5.0'],
         ['~>3.2.1', '>=3.2.1 <3.3.0'],
         ['~1', '>=1.0.0 <2.0.0'],
         ['~>1', '>=1.0.0 <2.0.0'],
         ['~> 1', '>=1.0.0 <2.0.0'],
         ['~1.0', '>=1.0.0 <1.1.0'],
         ['~ 1.0', '>=1.0.0 <1.1.0'],
         ['^0', '>=0.0.0 <1.0.0'],
         ['^ 1', '>=1.0.0 <2.0.0'],
         ['^0.1', '>=0.1.0 <0.2.0'],
         ['^1.0', '>=1.0.0 <2.0.0'],
         ['^1.2', '>=1.2.0 <2.0.0'],
         ['^0.0.1', '>=0.0.1 <0.0.2'],
         ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'],
         ['^0.1.2', '>=0.1.2 <0.2.0'],
         ['^1.2.3', '>=1.2.3 <2.0.0'],
         ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'],
         ['<1', '<1.0.0'],
         ['< 1', '<1.0.0'],
         ['>=1', '>=1.0.0'],
         ['>= 1', '>=1.0.0'],
         ['<1.2', '<1.2.0'],
         ['< 1.2', '<1.2.0'],
         ['1', '>=1.0.0 <2.0.0'],
         ['^ 1.2 ^ 1', '>=1.0.0 >=1.2.0 <2.0.0 <2.0.0'
          ],  # node's semver doesn't sort: >=1.2.0 <2.0.0 >=1.0.0 <2.0.0
     ]
     for pattern, expanded in data:
         pattern = Range(pattern)
         result = '||'.join(comparator.desc
                            for comparator in pattern.ranges)
         self.assertEqual(result,
                          expanded,
                          msg='%s should expand to %s' %
                          (pattern, expanded))