From bef7f13de22f5dd3407b5b902b8b5455cded0a55 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 5 Jun 2018 14:52:40 +0200 Subject: [PATCH] feat: versioning.isSingleVersion() --- lib/versioning/pep440/index.js | 7 ++++++- lib/versioning/semver/index.js | 5 +++++ test/versioning/pep440.spec.js | 15 +++++++++++++++ test/versioning/semver.spec.js | 13 +++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/versioning/pep440/index.js b/lib/versioning/pep440/index.js index a273053d3b..aaf904a38f 100644 --- a/lib/versioning/pep440/index.js +++ b/lib/versioning/pep440/index.js @@ -37,15 +37,20 @@ const minSatisfyingVersion = (versions, range) => { return found.length === 0 ? null : found[0]; }; +const isSingleVersion = constraint => + isVersion(constraint) || + (constraint.startsWith('==') && isVersion(constraint.substring(2).trim())); + module.exports = { equals, getMajor, getMinor, isGreaterThan, - isVersion, + isSingleVersion, isRange, isStable, isValid, + isVersion, matches, maxSatisfyingVersion, minSatisfyingVersion, diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js index 2e9064b43c..716624d65d 100644 --- a/lib/versioning/semver/index.js +++ b/lib/versioning/semver/index.js @@ -29,6 +29,10 @@ const isRange = input => isValid(input) && !isVersion(input); // If this is left as an alias, inputs like "17.04.0" throw errors const isValid = input => validRange(input); +const isSingleVersion = constraint => + isVersion(constraint) || + (constraint.startsWith('=') && isVersion(constraint.substring(1).trim())); + module.exports = { equals, getMajor, @@ -36,6 +40,7 @@ module.exports = { isGreaterThan, isLessThanRange, isRange, + isSingleVersion, isStable, isValid, isVersion, diff --git a/test/versioning/pep440.spec.js b/test/versioning/pep440.spec.js index 0f4cd2c4cc..8e945b5901 100644 --- a/test/versioning/pep440.spec.js +++ b/test/versioning/pep440.spec.js @@ -45,6 +45,21 @@ describe('pep440.isStable(version)', () => { }); }); +describe('pep440.isSingleVersion()', () => { + it('returns true if naked version', () => { + expect(!!pep440.isSingleVersion('1.2.3')).toBe(true); + expect(!!pep440.isSingleVersion('1.2.3rc0')).toBe(true); + }); + it('returns true if double equals', () => { + expect(!!pep440.isSingleVersion('==1.2.3')).toBe(true); + expect(!!pep440.isSingleVersion('==1.2')).toBe(true); + expect(!!pep440.isSingleVersion('== 1.2.3')).toBe(true); + }); + it('returns false when not version', () => { + expect(!!pep440.isSingleVersion('==1.*')).toBe(false); + }); +}); + const versions = [ '0.9.4', '1.0.0', diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js index fa2b4df48e..e2a8a0f1e0 100644 --- a/test/versioning/semver.spec.js +++ b/test/versioning/semver.spec.js @@ -37,6 +37,19 @@ describe('semver.isRange(input)', () => { expect(!!semver.isRange('^1.2.3')).toBe(true); }); }); +describe('semver.isSingleVersion()', () => { + it('returns true if naked version', () => { + expect(!!semver.isSingleVersion('1.2.3')).toBe(true); + expect(!!semver.isSingleVersion('1.2.3-alpha.1')).toBe(true); + }); + it('returns true if equals', () => { + expect(!!semver.isSingleVersion('=1.2.3')).toBe(true); + expect(!!semver.isSingleVersion('= 1.2.3')).toBe(true); + }); + it('returns false when not version', () => { + expect(!!semver.isSingleVersion('1.x')).toBe(false); + }); +}); describe('semver.getNewValue()', () => { it('bumps equals', () => { expect( -- GitLab