You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

187 lines
3.9 KiB

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()
})