From 166c3167bc608a63e2312930a9b722f8d697d2c5 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 4 May 2018 23:42:51 +0300 Subject: Add support for standard version constraint shortcut operators --- tests/standard-version/driver.cxx | 26 +++++++++++ tests/standard-version/testscript | 93 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 118 insertions(+), 1 deletion(-) (limited to 'tests/standard-version') diff --git a/tests/standard-version/driver.cxx b/tests/standard-version/driver.cxx index c6f9c11..1eb1bc8 100644 --- a/tests/standard-version/driver.cxx +++ b/tests/standard-version/driver.cxx @@ -76,6 +76,32 @@ version (const string& s, assert (r == v); } + if (!r.stub ()) + { + auto max_ver = [&v] (char c) -> string + { + string e (v.epoch != 0 ? '+' + to_string (v.epoch) + '-' : string ()); + + return c == '~' || v.major () == 0 + ? e + to_string (v.major ()) + '.' + to_string (v.minor () + 1) + ".0-" + : e + to_string (v.major () + 1) + ".0.0-"; + }; + + if (v.minor () != 999) + { + standard_version_constraint c1 ("~" + s); + standard_version_constraint c2 ('[' + s + ' ' + max_ver ('~') + ')'); + assert (c1 == c2); + } + + if ((v.major () == 0 && v.minor () != 999) || + (v.major () != 0 && v.major () != 999)) + { + standard_version_constraint c1 ("^" + s); + standard_version_constraint c2 ('[' + s + ' ' + max_ver ('^') + ')'); + assert (c1 == c2); + } + } } catch (const invalid_argument& e) { diff --git a/tests/standard-version/testscript b/tests/standard-version/testscript index f06b178..65c446b 100644 --- a/tests/standard-version/testscript +++ b/tests/standard-version/testscript @@ -66,6 +66,14 @@ $* <>EOF EOF + + : max + : + $* <>EOF + 1.2.999 + 1.999.999 + 999.999.999 + EOF } : invalid @@ -236,10 +244,12 @@ [1.2.3 1.2.4] (1.2.3 1.2.4) [ 1.2.3- 1.2.4- ] + [1.999.0 2.0.0) EOI [1.2.3 1.2.4] (1.2.3 1.2.4) [1.2.3- 1.2.4-] + [1.999.0 2.0.0) EOE : invalid @@ -262,7 +272,7 @@ : min-gt-max : - $* <'[1.2.4 1.2.3]' 2>'min version is greater than max version' == 1 + $* <'[999.0.0 1.0.0)' 2>'min version is greater than max version' == 1 : open-end : @@ -319,6 +329,53 @@ $* <'>= 1.2.3-a.1.1.ads@' 2>'invalid version: junk after version' == 1 } } + + : shortcut + : + { + : valid + : + $* <>EOO + ~1.2.3 + ^1.2.3 + ^0.2.3 + ~1.2.3- + ^1.2.3- + ^0.2.3- + ~1.2.3-a.1 + ^1.2.3-a.1 + ^0.2.3-a.1 + ~1.2.3-a.1.123 + ^1.2.3-a.1.123 + ^0.2.3-a.1.123 + ~ 1.2.3 + EOI + ~1.2.3 + ^1.2.3 + ^0.2.3 + ~1.2.3- + ^1.2.3- + ^0.2.3- + ~1.2.3-a.1 + ^1.2.3-a.1 + ^0.2.3-a.1 + ~1.2.3-a.1.123 + ^1.2.3-a.1.123 + ^0.2.3-a.1.123 + ~1.2.3 + EOO + + : invalid + : + { + $* <'-1.2.3' 2>'invalid constraint' == 1 : bad-char + $* <'~' 2>'no version' == 1 : no-version + $* <'~1.2' 2>"'.' expected after minor version" == 1 : bad-ver + $* <'~1.999.0' 2>"invalid minor version" == 1 : bad-min-tilde + $* <'^0.999.0' 2>"invalid minor version" == 1 : bad-min-caret + $* <'^999.0.0' 2>"invalid major version" == 1 : bad-maj-caret + } + } } : satisfaction @@ -401,4 +458,38 @@ $* '1.2.3' '[1.2.1 1.2.2)' >n : open } } + + : shortcut + : + { + : tilde + : + { + $* '1.2.3-b.499' '~1.2.3' >n : out-left + $* '1.2.3' '~1.2.3' >y : in-left + $* '1.2.4' '~1.2.3' >y : in + $* '1.2.999' '~1.2.3' >y : in-right + $* '1.3.0-' '~1.2.3' >n : out-right + } + + : caret + : + { + $* '1.2.3-b.499' '^1.2.3' >n : out-left + $* '1.2.3' '^1.2.3' >y : in-left + $* '1.3.0' '^1.2.3' >y : in + $* '1.999.999' '^1.2.3' >y : in-right + $* '2.0.0-' '^1.2.3' >n : out-right + } + + : caret-zero-major + : + { + $* '0.2.3-b.499' '^0.2.3' >n : out-left + $* '0.2.3' '^0.2.3' >y : in-left + $* '0.2.4' '^0.2.3' >y : in + $* '0.2.999' '^0.2.3' >y : in-right + $* '0.3.0-' '^0.2.3' >n : out-right + } + } } -- cgit v1.1