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.
 
 
 
 
 
 

141 lines
4.6 KiB

"use strict"
var test = require("tap").test
var requireInject = require("require-inject")
var path = require("path")
var re = {
tarball: /[/\\]a.tar.gz$/,
packagedir: /[/\\]b$/,
packagejson: /[/\\]b[/\\]package.json$/,
nonpackagedir: /[/\\]c$/,
nopackagejson: /[/\\]c[/\\]package.json$/,
remotename: /[/\\]d$/,
packagedirlikegithub: /[/\\]e[/\\]1$/,
packagejsonlikegithub: /[/\\]e[/\\]1[/\\]package.json$/,
github: /[/\\]e[/\\]2$/,
localrangefile: /[/\\]1[.]0[.]0$/,
localverfile: /[/\\]1$/
}
var rps = requireInject("../index", {
"fs": {
"stat": function (path, callback) {
if (re.tarball.test(path)) {
callback(null,{isDirectory:function(){ return false }})
}
else if (re.packagedir.test(path)) {
callback(null,{isDirectory:function(){ return true }})
}
else if (re.packagejson.test(path)) {
callback(null,{})
}
else if (re.nonpackagedir.test(path)) {
callback(null,{isDirectory:function(){ return true }})
}
else if (re.nopackagejson.test(path)) {
callback(new Error("EFILENOTFOUND"))
}
else if (re.remotename.test(path)) {
callback(new Error("EFILENOTFOUND"))
}
else if (re.packagedirlikegithub.test(path)) {
callback(null,{isDirectory:function(){ return true }})
}
else if (re.packagejsonlikegithub.test(path)) {
callback(null,{})
}
else if (re.github.test(path)) {
callback(new Error("EFILENOTFOUND"))
}
else if (re.localverfile.test(path)) {
callback(null,{isDirectory:function(){ return false }})
}
else if (re.localrangefile.test(path)) {
callback(null,{isDirectory:function(){ return false }})
}
else {
throw new Error("Unknown stat fixture path: "+path)
}
}
}
})
test("realize-package-specifier", function (t) {
t.plan(12)
rps("a.tar.gz", function (err, result) {
t.is(result.type, "local", "local tarball")
})
rps("b", function (err, result) {
t.is(result.type, "directory", "local package directory")
})
rps("c", function (err, result) {
t.is(result.type, "range", "remote package, non-package local directory")
})
rps("d", function (err, result) {
t.is(result.type, "range", "remote package, no local directory")
})
rps("file:./a.tar.gz", function (err, result) {
t.is(result.type, "local", "local tarball")
})
rps("file:./b", function (err, result) {
t.is(result.type, "directory", "local package directory")
})
rps("file:./c", function (err, result) {
t.is(result.type, "local", "non-package local directory, specified with a file URL")
})
rps("file:./d", function (err, result) {
t.is(result.type, "local", "no local directory, specified with a file URL")
})
rps("e/1", function (err, result) {
t.is(result.type, "directory", "local package directory")
})
rps("e/2", function (err, result) {
t.is(result.type, "github", "github package dependency")
})
rps("1", function (err, result) {
t.is(result.type, "local", "range like local file is still a local file")
})
rps("1.0.0", function (err, result) {
t.is(result.type, "local", "version like local file is still a local file")
})
})
test("named realize-package-specifier", function (t) {
t.plan(12)
rps("a@a.tar.gz", function (err, result) {
t.is(result.type, "local", "named local tarball")
})
rps("b@b", function (err, result) {
t.is(result.type, "directory", "named local package directory")
})
rps("c@c", function (err, result) {
t.is(result.type, "tag", "remote package, non-package local directory")
})
rps("d@d", function (err, result) {
t.is(result.type, "tag", "remote package, no local directory")
})
rps("a@file:./a.tar.gz", function (err, result) {
t.is(result.type, "local", "local tarball")
})
rps("b@file:./b", function (err, result) {
t.is(result.type, "directory", "local package directory")
})
rps("c@file:./c", function (err, result) {
t.is(result.type, "local", "non-package local directory, specified with a file URL")
})
rps("d@file:./d", function (err, result) {
t.is(result.type, "local", "no local directory, specified with a file URL")
})
rps("e@e/1", function (err, result) {
t.is(result.type, "directory", "local package directory")
})
rps("e@e/2", function (err, result) {
t.is(result.type, "github", "github package dependency")
})
rps("e@1", function (err, result) {
t.is(result.type, "range", "range like specifier is never a local file")
})
rps("e@1.0.0", function (err, result) {
t.is(result.type, "version", "version like specifier is never a local file")
})
})