diff --git a/classes/semver.js b/classes/semver.js index ea62fa0d..99dbe82d 100644 --- a/classes/semver.js +++ b/classes/semver.js @@ -16,7 +16,7 @@ class SemVer { version = version.version } } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) } if (version.length > MAX_LENGTH) { diff --git a/test/classes/semver.js b/test/classes/semver.js index 4556434c..224e1b36 100644 --- a/test/classes/semver.js +++ b/test/classes/semver.js @@ -5,52 +5,60 @@ const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') const invalidVersions = require('../fixtures/invalid-versions') -test('comparisons', t => { +test('comparisons', (t) => { t.plan(comparisons.length) - comparisons.forEach(([v0, v1, opt]) => t.test(`${v0} ${v1}`, t => { - const s0 = new SemVer(v0, opt) - const s1 = new SemVer(v1, opt) - t.equal(s0.compare(s1), 1) - t.equal(s0.compare(v1), 1) - t.equal(s1.compare(s0), -1) - t.equal(s1.compare(v0), -1) - t.equal(s0.compare(v0), 0) - t.equal(s1.compare(v1), 0) - t.end() - })) + comparisons.forEach(([v0, v1, opt]) => + t.test(`${v0} ${v1}`, (t) => { + const s0 = new SemVer(v0, opt) + const s1 = new SemVer(v1, opt) + t.equal(s0.compare(s1), 1) + t.equal(s0.compare(v1), 1) + t.equal(s1.compare(s0), -1) + t.equal(s1.compare(v0), -1) + t.equal(s0.compare(v0), 0) + t.equal(s1.compare(v1), 0) + t.end() + }) + ) }) -test('equality', t => { +test('equality', (t) => { t.plan(equality.length) - equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { - const s0 = new SemVer(v0, loose) - const s1 = new SemVer(v1, loose) - t.equal(s0.compare(s1), 0) - t.equal(s1.compare(s0), 0) - t.equal(s0.compare(v1), 0) - t.equal(s1.compare(v0), 0) - t.equal(s0.compare(s0), 0) - t.equal(s1.compare(s1), 0) - t.equal(s0.comparePre(s1), 0, 'comparePre just to hit that code path') - t.end() - })) + equality.forEach(([v0, v1, loose]) => + t.test(`${v0} ${v1} ${loose}`, (t) => { + const s0 = new SemVer(v0, loose) + const s1 = new SemVer(v1, loose) + t.equal(s0.compare(s1), 0) + t.equal(s1.compare(s0), 0) + t.equal(s0.compare(v1), 0) + t.equal(s1.compare(v0), 0) + t.equal(s0.compare(s0), 0) + t.equal(s1.compare(s1), 0) + t.equal(s0.comparePre(s1), 0, 'comparePre just to hit that code path') + t.end() + }) + ) }) -test('toString equals parsed version', t => { +test('toString equals parsed version', (t) => { t.equal(String(new SemVer('v1.2.3')), '1.2.3') t.end() }) -test('throws when presented with garbage', t => { +test('throws when presented with garbage', (t) => { t.plan(invalidVersions.length) invalidVersions.forEach(([v, msg, opts]) => - t.throws(() => new SemVer(v, opts), msg)) + t.throws(() => new SemVer(v, opts), msg) + ) }) -test('return SemVer arg to ctor if options match', t => { +test('return SemVer arg to ctor if options match', (t) => { const s = new SemVer('1.2.3', { loose: true, includePrerelease: true }) - t.equal(new SemVer(s, { loose: true, includePrerelease: true }), s, - 'get same object when options match') + t.equal( + new SemVer(s, { loose: true, includePrerelease: true }), + s, + 'get same object when options match' + ) t.not(new SemVer(s), s, 'get new object when options match') t.end() }) @@ -62,37 +70,39 @@ test('really big numeric prerelease value', (t) => { }) test('invalid version numbers', (t) => { - ['1.2.3.4', - 'NOT VALID', - 1.2, - null, - 'Infinity.NaN.Infinity', - ].forEach((v) => { - t.throws(() => { - new SemVer(v) // eslint-disable-line no-new - }, { name: 'TypeError', message: `Invalid Version: ${v}` }) + ['1.2.3.4', 'NOT VALID', 1.2, null, 'Infinity.NaN.Infinity'].forEach((v) => { + t.throws( + () => { + new SemVer(v) // eslint-disable-line no-new + }, + { + name: 'TypeError', + message: + typeof v === 'string' + ? `Invalid Version: ${v}` + : `Invalid version. Must be a string. Got type "${typeof v}".`, + } + ) }) t.end() }) -test('incrementing', t => { +test('incrementing', (t) => { t.plan(increments.length) - increments.forEach(([ - version, - inc, - expect, - options, - id, - base, - ]) => t.test(`${version} ${inc} ${id || ''}`.trim(), t => { - t.plan(1) - if (expect === null) { - t.throws(() => new SemVer(version, options).inc(inc, id, base)) - } else { - t.equal(new SemVer(version, options).inc(inc, id, base).version, expect) - } - })) + increments.forEach(([version, inc, expect, options, id, base]) => + t.test(`${version} ${inc} ${id || ''}`.trim(), (t) => { + t.plan(1) + if (expect === null) { + t.throws(() => new SemVer(version, options).inc(inc, id, base)) + } else { + t.equal( + new SemVer(version, options).inc(inc, id, base).version, + expect + ) + } + }) + ) }) test('compare main vs pre', (t) => { @@ -113,15 +123,19 @@ test('compare main vs pre', (t) => { }) test('invalid version numbers', (t) => { - ['1.2.3.4', - 'NOT VALID', - 1.2, - null, - 'Infinity.NaN.Infinity', - ].forEach((v) => { - t.throws(() => { - new SemVer(v) // eslint-disable-line no-new - }, { name: 'TypeError', message: `Invalid Version: ${v}` }) + ['1.2.3.4', 'NOT VALID', 1.2, null, 'Infinity.NaN.Infinity'].forEach((v) => { + t.throws( + () => { + new SemVer(v) // eslint-disable-line no-new + }, + { + name: 'TypeError', + message: + typeof v === 'string' + ? `Invalid Version: ${v}` + : `Invalid version. Must be a string. Got type "${typeof v}".`, + } + ) }) t.end() diff --git a/test/functions/parse.js b/test/functions/parse.js index b382ddcf..dd091e94 100644 --- a/test/functions/parse.js +++ b/test/functions/parse.js @@ -20,7 +20,7 @@ t.test('throw errors if asked to', t => { parse([], null, true) }, { name: 'TypeError', - message: 'Invalid Version: ', + message: 'Invalid version. Must be a string. Got type "object".', }) t.end() })