var npa = require('../npa.js') var path = require('path') require('tap').test('basic', function (t) { t.setMaxListeners(999) var tests = { 'foo@1.2': { name: 'foo', escapedName: 'foo', type: 'range', spec: '>=1.2.0 <1.3.0', raw: 'foo@1.2', rawSpec: '1.2' }, '@foo/bar': { raw: '@foo/bar', name: '@foo/bar', escapedName: '@foo%2fbar', scope: '@foo', rawSpec: '', spec: 'latest', type: 'tag' }, '@foo/bar@': { raw: '@foo/bar@', name: '@foo/bar', escapedName: '@foo%2fbar', scope: '@foo', rawSpec: '', spec: 'latest', type: 'tag' }, '@foo/bar@baz': { raw: '@foo/bar@baz', name: '@foo/bar', escapedName: '@foo%2fbar', scope: '@foo', rawSpec: 'baz', spec: 'baz', type: 'tag' }, '@f fo o al/ a d s ;f ': { raw: '@f fo o al/ a d s ;f', name: null, escapedName: null, rawSpec: '@f fo o al/ a d s ;f', spec: '@f fo o al/ a d s ;f', type: 'local' }, 'foo@1.2.3': { name: 'foo', escapedName: 'foo', type: 'version', spec: '1.2.3', raw: 'foo@1.2.3' }, 'foo@=v1.2.3': { name: 'foo', escapedName: 'foo', type: 'version', spec: '1.2.3', raw: 'foo@=v1.2.3', rawSpec: '=v1.2.3' }, 'git+ssh://git@notgithub.com/user/foo#1.2.3': { name: null, escapedName: null, type: 'git', spec: 'ssh://git@notgithub.com/user/foo#1.2.3', raw: 'git+ssh://git@notgithub.com/user/foo#1.2.3' }, 'git+file://path/to/repo#1.2.3': { name: null, escapedName: null, type: 'git', spec: 'file://path/to/repo#1.2.3', raw: 'git+file://path/to/repo#1.2.3' }, 'git://notgithub.com/user/foo': { name: null, escapedName: null, type: 'git', spec: 'git://notgithub.com/user/foo', raw: 'git://notgithub.com/user/foo' }, '@foo/bar@git+ssh://notgithub.com/user/foo': { name: '@foo/bar', escapedName: '@foo%2fbar', scope: '@foo', spec: 'ssh://notgithub.com/user/foo', rawSpec: 'git+ssh://notgithub.com/user/foo', raw: '@foo/bar@git+ssh://notgithub.com/user/foo' }, '/path/to/foo': { name: null, escapedName: null, type: 'local', spec: path.resolve(__dirname, '/path/to/foo'), raw: '/path/to/foo' }, 'file:path/to/foo': { name: null, escapedName: null, type: 'local', spec: 'path/to/foo', raw: 'file:path/to/foo' }, 'file:~/path/to/foo': { name: null, escapedName: null, type: 'local', spec: '~/path/to/foo', raw: 'file:~/path/to/foo' }, 'file:../path/to/foo': { name: null, escapedName: null, type: 'local', spec: '../path/to/foo', raw: 'file:../path/to/foo' }, 'file:///path/to/foo': { name: null, escapedName: null, type: 'local', spec: '/path/to/foo', raw: 'file:///path/to/foo' }, 'https://server.com/foo.tgz': { name: null, escapedName: null, type: 'remote', spec: 'https://server.com/foo.tgz', raw: 'https://server.com/foo.tgz' }, 'foo@latest': { name: 'foo', escapedName: 'foo', type: 'tag', spec: 'latest', raw: 'foo@latest' }, 'foo': { name: 'foo', escapedName: 'foo', type: 'tag', spec: 'latest', raw: 'foo' } } Object.keys(tests).forEach(function (arg) { var res = npa(arg) t.type(res, 'Result', arg + ' is result') t.has(res, tests[arg], arg + ' matches expectations') }) // Completely unreasonable invalid garbage throws an error t.throws(function () { npa('this is not a \0 valid package name or url') }) t.throws(function () { npa('gopher://yea right') }, 'Unsupported URL Type: gopher://yea right') t.end() })