aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-12-23 17:48:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-01-08 16:07:37 +0200
commit8e1998d8ebdb9ead5e432201998cb4db70918f95 (patch)
tree8ea6cc85665e77e65b8bfa4eb16a10256ed449c4 /tests
parent9863b40b7d3df92f1a6b975b372586fbc0c6b404 (diff)
Support version release
Diffstat (limited to 'tests')
-rw-r--r--tests/manifest/packages20
-rw-r--r--tests/package-version/driver.cxx165
2 files changed, 135 insertions, 50 deletions
diff --git a/tests/manifest/packages b/tests/manifest/packages
index 9ae65bc..d2058e3 100644
--- a/tests/manifest/packages
+++ b/tests/manifest/packages
@@ -1,20 +1,20 @@
: 1
name: libfoo
-version: 1.2.3-2
+version: 1.2.3+2
priority: high; Due to critical bug fix.
summary: Modern XML parser
license: LGPLv2, MIT; Both required.
license: BSD
tags: c++, xml, parser, serializer, pull, streaming, modern
description: libfoo is a very modern C++ XML parser.
-changes: 1.2.3-2: applied upstream patch for critical bug bar
-changes: 1.2.3-1: applied upstream patch for critical bug foo
+changes: 1.2.3+2: applied upstream patch for critical bug bar
+changes: 1.2.3+1: applied upstream patch for critical bug foo
changes-file: NEWS
url: http://www.example.org/projects/libfoo/; libfoo project page url
-package-url: http://www.example.org/projects/libbar/1.2.3-2; package url
+package-url: http://www.example.org/projects/libbar/1.2.3+2; package url
email: libfoo-users@example.org; Public mailing list, posts by non-members\
are allowed but moderated.
-package-email: libfoo-1.2.3-2@example.org; Bug reports are welcome.
+package-email: libfoo-1.2.3+2@example.org; Bug reports are welcome.
depends: libz
depends: libgnutls <= 1.2.3 | libopenssl >= 2.3.4
depends: ? libboost-regex >= 1.52.0; Only if C++ compiler doesn't support\
@@ -26,22 +26,22 @@ requires: ? ; VC++ 12.0 or later if targeting Windows.
requires: ? ; libc++ standard library if using Clang on Mac OS X.
requires: zlib; Most Linux/UNIX systems already have one; or get it at\
www.zlib.net.
-location: libfoo-1.2.3-2.tar.bz2
+location: libfoo-1.2.3+2.tar.bz2
:
name: libbar
-version: 3.4A.5-6
+version: 3.4A.5+6
summary: Modern bar management framework
license: LGPLv2
tags: c++, xml, modern
description-file: README; Comprehensive description
url: http://www.example.org/projects/libbar/
email: libbar-users@example.org
-location: bar/libbar-3.4A.5-6.tbz
+location: bar/libbar-3.4A.5+6.tbz
:
name: libbaz
-version: 2+3.4A.5-3
+version: 2~3.4A.5+3
summary: Modern baz system
license: LGPLv2
url: http://www.example.org/projects/libbar/
email: libbaz-users@example.org
-location: libbaz/libbaz-2+3.4A.5-3.tar.gz
+location: libbaz/libbaz-2~3.4A.5+3.tar.gz
diff --git a/tests/package-version/driver.cxx b/tests/package-version/driver.cxx
index df4d73b..d28fabf 100644
--- a/tests/package-version/driver.cxx
+++ b/tests/package-version/driver.cxx
@@ -29,11 +29,11 @@ bad_version (const string& v)
}
static bool
-bad_version (uint16_t e, const string& u, uint16_t r)
+bad_version (uint16_t e, const string& u, const string& l, uint16_t r)
{
try
{
- version bv (e, u, r);
+ version bv (e, u, l, r);
return false;
}
catch (const invalid_argument&)
@@ -45,7 +45,7 @@ bad_version (uint16_t e, const string& u, uint16_t r)
static bool
test_constructor (const version& v)
{
- return v == version (v.epoch, v.upstream, v.revision);
+ return v == version (v.epoch, v.upstream, v.release, v.revision);
}
int
@@ -60,31 +60,58 @@ main (int argc, char* argv[])
try
{
assert (bad_version ("")); // Empty upstream.
- assert (bad_version ("1+")); // Same.
- assert (bad_version ("1+-3")); // Same.
- assert (bad_version ("-3")); // Same.
- assert (bad_version ("+3.5")); // Empty epoch.
- assert (bad_version ("a-")); // Empty revision.
- assert (bad_version ("1+2+4.1-3")); // Extra epoch.
- assert (bad_version ("3.5-1-4")); // Extra revision.
- assert (bad_version ("1++2-3")); // Duplicated epoch separator.
- assert (bad_version ("1+2--3")); // Duplicated revision separator.
+ assert (bad_version ("1~")); // Same.
+ assert (bad_version ("1~+3")); // Same.
+ assert (bad_version ("+3")); // Same.
+ assert (bad_version ("1~-a")); // Same.
+ assert (bad_version ("1~-a+3")); // Same.
+ assert (bad_version ("-a+3")); // Same.
+ assert (bad_version ("~3.5")); // Empty epoch.
+ assert (bad_version ("a+")); // Empty revision.
+ assert (bad_version ("1~2~4.1+3")); // Extra epoch.
+ assert (bad_version ("3.5+1+4")); // Extra revision.
+ assert (bad_version ("1~~2+3")); // Duplicated epoch separator.
+ assert (bad_version ("1~2++3")); // Duplicated revision separator.
assert (bad_version ("a.394857391.3")); // Too long numeric component.
assert (bad_version ("a.000000000.3")); // Too long numeric zero component.
- assert (bad_version ("65536+q.3")); // Too big epoch.
- assert (bad_version ("1+q-65536")); // Too big revision.
- assert (bad_version ("3.5+1.4")); // Components in epoch.
- assert (bad_version ("3.5-1.4")); // Components in revision.
- assert (bad_version ("3 5-1")); // Non alpha-numeric in upstream.
- assert (bad_version ("1+ -3")); // Same.
- assert (bad_version ("3 5+4-1")); // Non alpha-numeric in epoch.
- assert (bad_version ("2b+a")); // Same.
- assert (bad_version ("1+34.1-3 5")); // Non alpha-numeric in revision.
- assert (bad_version ("a-3s")); // Same.
+ assert (bad_version ("1-a.000000000")); // Same.
+ assert (bad_version ("65536~q.3")); // Too big epoch.
+ assert (bad_version ("1+q+65536")); // Too big revision.
+ assert (bad_version ("3.5~1.4")); // Components in epoch.
+ assert (bad_version ("3.5+1.4")); // Components in revision.
+ assert (bad_version ("3 5+1")); // Non alpha-numeric in upstream.
+ assert (bad_version ("1~ +3")); // Same.
+ assert (bad_version ("1-3 5+1")); // Non alpha-numeric in release.
+ assert (bad_version ("1~1- +3")); // Same.
+ assert (bad_version ("3 5~4+1")); // Non alpha-numeric in epoch.
+ assert (bad_version ("2b~a")); // Same.
+ assert (bad_version ("1~34.1+3 5")); // Non numeric in revision.
+ assert (bad_version ("a+3s")); // Same.
assert (bad_version ("a.")); // Not completed upstream.
assert (bad_version ("a..b")); // Empty upstream component.
- assert (bad_version (1, "1+1.1", 2)); // Epoch in upstream.
- assert (bad_version (1, "1.1-1", 2)); // Revision in upstream.
+ assert (bad_version ("a.b-+1")); // Revision for empty release.
+
+ assert (bad_version (0, "", "", 0)); // Empty upstream.
+ assert (bad_version (0, "1", "", 1)); // Revision for empty release.
+ assert (bad_version (1, "1~1.1", "~", 2)); // Epoch in upstream.
+ assert (bad_version (1, "1.1-1", "~", 2)); // Release in upstream.
+ assert (bad_version (1, "1.1+1", "~", 2)); // Revision in upstream.
+ assert (bad_version (1, "1", "1~1.1", 2)); // Epoch in release.
+ assert (bad_version (1, "1", "1.1-1", 2)); // Release in release.
+ assert (bad_version (1, "1", "1.1+1", 2)); // Revision in release.
+
+ {
+ version v1;
+ assert (v1.empty ());
+ assert (v1.string ().empty ());
+
+ version v2 ("0.0.0");
+ assert (!v2.empty ());
+
+ // @@ It doesn't look nice.
+ //
+ assert (v1.canonical_upstream == v2.canonical_upstream);
+ }
{
version v ("a");
@@ -94,8 +121,8 @@ main (int argc, char* argv[])
}
{
- version v ("65535+ab-65535");
- assert (v.string () == "65535+ab-65535");
+ version v ("65535~ab+65535");
+ assert (v.string () == "65535~ab+65535");
assert (v.canonical_upstream == "ab");
assert (test_constructor (v));
}
@@ -150,33 +177,81 @@ main (int argc, char* argv[])
}
{
- version v ("1+0");
- assert (v.string () == "1+0");
+ version v ("1~0");
+ assert (v.string () == "1~0");
assert (v.canonical_upstream.empty ());
assert (test_constructor (v));
}
{
- version v ("0+A-1");
- assert (v.string () == "A-1");
+ version v ("0~A+1");
+ assert (v.string () == "A+1");
assert (v.canonical_upstream == "a");
assert (test_constructor (v));
}
{
- version v ("10+B-0");
- assert (v.string () == "10+B");
+ version v ("10~B+0");
+ assert (v.string () == "10~B");
assert (v.canonical_upstream == "b");
assert (test_constructor (v));
}
{
- version v ("3+1A.31.0.4.0-7");
- assert (v.string () == "3+1A.31.0.4.0-7");
+ version v ("3~1A.31.0.4.0+7");
+ assert (v.string () == "3~1A.31.0.4.0+7");
assert (v.canonical_upstream == "1a.00000031.00000000.00000004");
assert (test_constructor (v));
}
+ {
+ version v ("1.2.3");
+ assert (v.string () == "1.2.3");
+ assert (v.release == "~");
+ assert (v.canonical_release == "~");
+ assert (test_constructor (v));
+ }
+
+ {
+ version v ("1.2.3+1");
+ assert (v.string () == "1.2.3+1");
+ assert (v.release == "~");
+ assert (v.canonical_release == "~");
+ assert (test_constructor (v));
+ }
+
+ {
+ version v ("1.2.3-");
+ assert (v.string () == "1.2.3-");
+ assert (v.release.empty ());
+ assert (v.canonical_release.empty ());
+ assert (test_constructor (v));
+ }
+
+ {
+ version v ("1~A-1.2.3B.00+0");
+ assert (v.string () == "1~A-1.2.3B.00");
+ assert (v.release == "1.2.3B.00");
+ assert (v.canonical_release == "00000001.00000002.3b");
+ assert (test_constructor (v));
+ }
+
+ {
+ version v (1, "1", "~", 2);
+ assert (v.string () == "1~1+2");
+ assert (v.release == "~");
+ assert (v.canonical_release == "~");
+ assert (test_constructor (v));
+ }
+
+ {
+ version v (1, "1", "", 0);
+ assert (v.string () == "1~1-");
+ assert (v.release.empty ());
+ assert (v.canonical_release.empty ());
+ assert (test_constructor (v));
+ }
+
assert (version ("a") == version ("a"));
assert (version ("a") < version ("b"));
assert (version ("a") < version ("aa"));
@@ -184,13 +259,13 @@ main (int argc, char* argv[])
assert (version ("a") < version ("a.a"));
assert (version ("ab") == version ("ab"));
assert (version ("ac") < version ("bc"));
- assert (version ("ab-0") == version ("ab"));
- assert (version ("a.1-1") > version ("a.1"));
- assert (version ("0+ab") == version ("ab"));
+ assert (version ("ab+0") == version ("ab"));
+ assert (version ("a.1+1") > version ("a.1"));
+ assert (version ("0~ab") == version ("ab"));
assert (version ("1.2") > version ("1.1"));
- assert (version ("1+1.0") > version ("2.0"));
- assert (version ("0+ab-1") == version ("ab-1"));
- assert (version ("0+ab-1").compare (version ("0+ab-2"), true) == 0);
+ assert (version ("1~1.0") > version ("2.0"));
+ assert (version ("0~ab+1") == version ("ab+1"));
+ assert (version ("0~ab+1").compare (version ("0~ab+2"), true) == 0);
assert (version ("12") > version ("2"));
assert (version ("2") < version ("12"));
assert (version ("1") == version ("01"));
@@ -208,6 +283,16 @@ main (int argc, char* argv[])
assert (version ("1.0.0") == version ("01"));
assert (version ("0.1.00") == version ("00.1"));
assert (version ("0.0a.00") == version ("00.0a"));
+ assert (version ("1.0-alpha") < version ("1.0"));
+ assert (version ("1.0-") < version ("1.0"));
+ assert (version ("1.0-") < version ("1.0-alpha"));
+ assert (version ("1.0-alpha") < version ("1.1"));
+ assert (version ("1.0-alpha+1") < version ("1.0"));
+ assert (version ("1.0-alpha+1") < version ("1.1"));
+ assert (version ("1.0-alpha") > version ("1.0-1"));
+ assert (version ("1.0-alpha") == version ("1.0-alpha.0"));
+ assert (version (1, "2.0", "~", 3) == version ("1~2+3"));
+ assert (version (1, "2.0", "", 0) == version ("1~2-"));
}
catch (const exception& e)
{