summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2014-02-13 01:34:01 +0100
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2014-02-13 01:34:08 +0100
commite2228c90d3fcee09543e6155f3cca31003a188a9 (patch)
tree389904ee00463ca3b736936afa7d9dc0b2527c3f /tests
parentd742b34053f9ed1eb1aafbd6e07db2f65520a527 (diff)
downloadsemantic-version-e2228c90d3fcee09543e6155f3cca31003a188a9.tar.gz
Upgrade to semver-2.0.0 (Closes #3)
Diffstat (limited to 'tests')
-rwxr-xr-xtests/test_base.py4
-rw-r--r--tests/test_spec.py163
2 files changed, 165 insertions, 2 deletions
diff --git a/tests/test_base.py b/tests/test_base.py
index 3006ba0..0016776 100755
--- a/tests/test_base.py
+++ b/tests/test_base.py
@@ -358,8 +358,8 @@ class SpecItemTestCase(unittest.TestCase):
class CoerceTestCase(unittest.TestCase):
examples = {
# Dict of target: [list of equivalents]
- '0.0.0': ('0', '0.0', '0.0.0', '0.0.0+', '0-', '00000000.00'),
- '0.1.0': ('0.1', '0.1+', '0.1-', '0.1.0', '0.000001.000000000000'),
+ '0.0.0': ('0', '0.0', '0.0.0', '0.0.0+', '0-'),
+ '0.1.0': ('0.1', '0.1+', '0.1-', '0.1.0'),
'0.1.0+2': ('0.1.0+2', '0.1.0.2'),
'0.1.0+2.3.4': ('0.1.0+2.3.4', '0.1.0+2+3+4', '0.1.0.2+3+4'),
'0.1.0+2-3.4': ('0.1.0+2-3.4', '0.1.0+2-3+4', '0.1.0.2-3+4', '0.1.0.2_3+4'),
diff --git a/tests/test_spec.py b/tests/test_spec.py
new file mode 100644
index 0000000..decc2c4
--- /dev/null
+++ b/tests/test_spec.py
@@ -0,0 +1,163 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (c) 2012-2013 Raphaël Barrois
+# This code is distributed under the two-clause BSD License.
+
+"""Test conformance to the specs."""
+
+from .compat import unittest, is_python2
+
+import semantic_version
+
+# shortcut
+Version = semantic_version.Version
+
+
+class FormatTests(unittest.TestCase):
+ """Tests proper version validation."""
+
+ def test_major_minor_patch(self):
+ ### SPEC:
+ # A normal version number MUST take the form X.Y.Z
+
+ with self.assertRaises(ValueError):
+ Version('1')
+ with self.assertRaises(ValueError):
+ Version('1.1')
+ # Doesn't raise
+ Version('1.2.3')
+ with self.assertRaises(ValueError):
+ Version('1.2.3.4')
+
+ ### SPEC:
+ # Where X, Y, and Z are non-negative integers,
+
+ with self.assertRaises(ValueError):
+ Version('1.2.A')
+ with self.assertRaises(ValueError):
+ Version('1.-2.3')
+ # Valid
+ v = Version('1.2.3')
+ self.assertEqual(1, v.major)
+ self.assertEqual(2, v.minor)
+ self.assertEqual(3, v.patch)
+
+
+ ### Spec:
+ # And MUST NOT contain leading zeroes
+ with self.assertRaises(ValueError):
+ Version('1.2.01')
+ with self.assertRaises(ValueError):
+ Version('1.02.1')
+ with self.assertRaises(ValueError):
+ Version('01.2.1')
+ # Valid
+ v = Version('0.0.0')
+ self.assertEqual(0, v.major)
+ self.assertEqual(0, v.minor)
+ self.assertEqual(0, v.patch)
+
+ def test_prerelease(self):
+ ### SPEC:
+ # A pre-release version MAY be denoted by appending a hyphen and a
+ # series of dot separated identifiers immediately following the patch
+ # version.
+
+ with self.assertRaises(ValueError):
+ Version('1.2.3 -23')
+ # Valid
+ v = Version('1.2.3-23')
+ self.assertEqual(('23',), v.prerelease)
+
+ ### SPEC:
+ # Identifiers MUST comprise only ASCII alphanumerics and hyphen.
+ # Identifiers MUST NOT be empty
+ with self.assertRaises(ValueError):
+ Version('1.2.3-a,')
+ with self.assertRaises(ValueError):
+ Version('1.2.3-..')
+
+ ### SPEC:
+ # Numeric identifiers MUST NOT include leading zeroes.
+
+ with self.assertRaises(ValueError):
+ Version('1.2.3-a0.01')
+ with self.assertRaises(ValueError):
+ Version('1.2.3-00')
+ # Valid
+ v = Version('1.2.3-0a.0.000zz')
+ self.assertEqual(('0a', '0', '000zz'), v.prerelease)
+
+ def test_build(self):
+ ### SPEC:
+ # Build metadata MAY be denoted by appending a plus sign and a series of
+ # dot separated identifiers immediately following the patch or
+ # pre-release version
+
+ v = Version('1.2.3')
+ self.assertEqual((), v.build)
+ with self.assertRaises(ValueError):
+ Version('1.2.3 +4')
+
+ ### SPEC:
+ # Identifiers MUST comprise only ASCII alphanumerics and hyphen.
+ # Identifiers MUST NOT be empty
+ with self.assertRaises(ValueError):
+ Version('1.2.3+a,')
+ with self.assertRaises(ValueError):
+ Version('1.2.3+..')
+
+ # Leading zeroes allowed
+ v = Version('1.2.3+0.0a.01')
+ self.assertEqual(('0', '0a', '01'), v.build)
+
+ def test_precedence(self):
+ ### SPEC:
+ # Precedence is determined by the first difference when comparing from
+ # left to right as follows: Major, minor, and patch versions are always
+ # compared numerically.
+ # Example: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1
+ self.assertLess(Version('1.0.0'), Version('2.0.0'))
+ self.assertLess(Version('2.0.0'), Version('2.1.0'))
+ self.assertLess(Version('2.1.0'), Version('2.1.1'))
+
+ ### SPEC:
+ # When major, minor, and patch are equal, a pre-release version has
+ # lower precedence than a normal version.
+ # Example: 1.0.0-alpha < 1.0.0
+ self.assertLess(Version('1.0.0-alpha'), Version('1.0.0'))
+
+ ### SPEC:
+ # Precedence for two pre-release versions with the same major, minor,
+ # and patch version MUST be determined by comparing each dot separated
+ # identifier from left to right until a difference is found as follows:
+ # identifiers consisting of only digits are compared numerically
+ self.assertLess(Version('1.0.0-1'), Version('1.0.0-2'))
+
+ # and identifiers with letters or hyphens are compared lexically in
+ # ASCII sort order.
+ self.assertLess(Version('1.0.0-aa'), Version('1.0.0-ab'))
+
+ # Numeric identifiers always have lower precedence than
+ # non-numeric identifiers.
+ self.assertLess(Version('1.0.0-9'), Version('1.0.0-a'))
+
+ # A larger set of pre-release fields has a higher precedence than a
+ # smaller set, if all of the preceding identifiers are equal.
+ self.assertLess(Version('1.0.0-a.b.c'), Version('1.0.0-a.b.c.0'))
+
+ # Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.
+ self.assertLess(Version('1.0.0-alpha'), Version('1.0.0-alpha.1'))
+ self.assertLess(Version('1.0.0-alpha.1'), Version('1.0.0-alpha.beta'))
+ self.assertLess(Version('1.0.0-alpha.beta'), Version('1.0.0-beta'))
+ self.assertLess(Version('1.0.0-beta'), Version('1.0.0-beta.2'))
+ self.assertLess(Version('1.0.0-beta.2'), Version('1.0.0-beta.11'))
+ self.assertLess(Version('1.0.0-beta.11'), Version('1.0.0-rc.1'))
+ self.assertLess(Version('1.0.0-rc.1'), Version('1.0.0'))
+
+
+
+class PrecedenceTestCase(unittest.TestCase):
+ pass
+
+