diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/package.json b/package.json index 5f679c9..83aaf1c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Tools for manipulating semver strings and objects", "main": "semver-utils.js", "scripts": { - "test": "node semver-utils-test.js" + "test": "mocha" }, "repository": { "type": "git", @@ -18,5 +18,10 @@ ], "author": "AJ ONeal", "license": "APACHEv2", - "readmeFilename": "README.md" + "readmeFilename": "README.md", + "devDependencies": { + "chai": "^3.0.0", + "deep-equal": "^1.0.0", + "mocha": "^2.2.5" + } } diff --git a/semver-utils-test.js b/semver-utils-test.js deleted file mode 100644 index 9bfa0a2..0000000 --- a/semver-utils-test.js +++ /dev/null @@ -1,131 +0,0 @@ -(function () { - var semverutils = require('./semver-utils') - ; - - function testParseRange() { - console.info('testParseRange'); - var good = - [ 'v1.0.0' - , '< v2.0.0' - , '~v2.0.0' - , '~1.0.0' - , '~1.0.0 || >= 1.1.7 < 2.0.0+build.1848' - , '~1.0.0 || >= 1.1.7 < 2.0.0+build.1848 || v1.1.3' - , '~1.0.0 || >= 1.1.7 < 2.0.0+build.1848 || v1.1.3 || 2.0.1-alpha.1227' - , '~1.0.0 || >= 1.1.7 < 2.0.0+build.1848 || v1.1.3 || 2.0.1-alpha.1227 || 1.0.0 - 1.0.x' - , '~1.0.0 || >= 1.1.7 < 2.0.0+build.1848 || v1.1.3 || 2.0.1-alpha.1227 || 1.0.0 - 1.0.x || 1.*' - ] - ; - - good.every(function (range) { - var result = semverutils.parseRange(range) - ; - - if (!result || 0 === result.length) { - throw new Error("didn't parse something that should be parseable: " + range); - } - - return true; - }); - - console.log(good[good.length - 1]); - console.log(semverutils.stringifyRange(semverutils.parseRange(good[good.length - 1]))); - } - - function testParse() { - console.info('testParse'); - var good - , bad - ; - - good = [ - "1.0.8" - , "1.23.7" - , "2.0.0-alpha.123.abc" - , "2.0.0-alpha.123.abc+build.acebfde1284" - , "1.0.0-alpha" - , "1.0.0-alpha.1" - , "1.0.0-0.3.7" - , "1.0.0-x.7.z.92" - , "1.0.0-alpha" - , "1.0.0-alpha.1" - , "1.0.0-beta.2" - , "1.0.0-beta.11" - , "1.0.0-rc.1" - , "1.0.0-rc.1+build.1" - , "1.0.0-rc.1+build.1-b" - , "1.0.0" - , "1.0.0+0.3.7" - , "1.3.7+build" - , "1.3.7+build.2.b8f12d7" - , "1.3.7+build.11.e0f985a" - , "1.3.7+build.11.e0f9-85a" - , "1.0.0+build-acbe" - , "2.0.0+build.acebfde1284-alpha.123.abc" - ]; - - bad = [ - // "v1.0.0" now allows optional 'v' - , "a.b.c" - , "1" - , "1.0.0b" - , "1.0" - , "1.0.0+b[\\]^_`uild" // [,\,],^,_,` are between A-z, but not A-Za-z - , "1.0.0+build-acbe." // trailing period - , "1.0.0+build.!@#$%" - ]; - - good.every(function (version) { - var result = semverutils.parse(version) - ; - - if (!result) { - throw new Error("didn't parse something that should be parseable: " + version); - } - - return true; - }); - - bad.every(function (version) { - var result = semverutils.parse(version) - ; - - if (result) { - throw new Error("parsed something that should not be parseable: " + version); - } - - return true; - }); - - console.log(semverutils.parse("a.b.c")); // null - console.log(semverutils.parse("1.0.3")); - /* - { - semver: 1.0.3 - , major: 1 - , minor: 0 - , patch: 3 - } - */ - - console.log(semverutils.parse("1.0.3-rc.1+build.aef312")); - /* - { - semver: v1.0.3-rc.1+build.aef312 - , major: 1 - , minor: 0 - , patch: 3 - , build: build.aef312 - , release: rc.1 - } - */ - - console.log(semverutils.parse("1.0.0-rc.1-1")); - console.log(semverutils.parse("1.0.0-rc.1+build.1-b")); - console.log(semverutils.parse("1.0.0-rc.1-1+build.1-b")); - console.log(semverutils.parse("2.0.0+build.acebfde1284-alpha.123.abc")); - } - - testParse(); - testParseRange(); -}()); diff --git a/test/deepOwnEqual.js b/test/deepOwnEqual.js new file mode 100644 index 0000000..b7dd276 --- /dev/null +++ b/test/deepOwnEqual.js @@ -0,0 +1,26 @@ +var assert = require('chai').assert; + +// we need to define our own deepEqual function that ignores properties that are not hasOwnProperty. Not supported in chai.assert.deepEqual as of v3.0.0. +function deepOwnEqual(a, b) { + + // if arrays of objects, recurse down to the objects + if(Array.isArray(a) && Array.isArray(b)) { + assert.deepEqual(a.length, b.length, 'Arrays have different lengths') + for(var i=0; i