2 var test = require("tap").test
3 var requireInject = require("require-inject")
4 var path = require("path")
7 tarball: /[/\\]a.tar.gz$/,
9 packagejson: /[/\\]b[/\\]package.json$/,
10 nonpackagedir: /[/\\]c$/,
11 nopackagejson: /[/\\]c[/\\]package.json$/,
12 remotename: /[/\\]d$/,
13 packagedirlikegithub: /[/\\]e[/\\]1$/,
14 packagejsonlikegithub: /[/\\]e[/\\]1[/\\]package.json$/,
15 github: /[/\\]e[/\\]2$/,
16 localrangefile: /[/\\]1[.]0[.]0$/,
17 localverfile: /[/\\]1$/
20 var rps = requireInject("../index", {
22 "stat": function (path, callback) {
23 if (re.tarball.test(path)) {
24 callback(null,{isDirectory:function(){ return false }})
26 else if (re.packagedir.test(path)) {
27 callback(null,{isDirectory:function(){ return true }})
29 else if (re.packagejson.test(path)) {
32 else if (re.nonpackagedir.test(path)) {
33 callback(null,{isDirectory:function(){ return true }})
35 else if (re.nopackagejson.test(path)) {
36 callback(new Error("EFILENOTFOUND"))
38 else if (re.remotename.test(path)) {
39 callback(new Error("EFILENOTFOUND"))
41 else if (re.packagedirlikegithub.test(path)) {
42 callback(null,{isDirectory:function(){ return true }})
44 else if (re.packagejsonlikegithub.test(path)) {
47 else if (re.github.test(path)) {
48 callback(new Error("EFILENOTFOUND"))
50 else if (re.localverfile.test(path)) {
51 callback(null,{isDirectory:function(){ return false }})
53 else if (re.localrangefile.test(path)) {
54 callback(null,{isDirectory:function(){ return false }})
57 throw new Error("Unknown stat fixture path: "+path)
63 test("realize-package-specifier", function (t) {
65 rps("a.tar.gz", function (err, result) {
66 t.is(result.type, "local", "local tarball")
68 rps("b", function (err, result) {
69 t.is(result.type, "directory", "local package directory")
71 rps("c", function (err, result) {
72 t.is(result.type, "range", "remote package, non-package local directory")
74 rps("d", function (err, result) {
75 t.is(result.type, "range", "remote package, no local directory")
77 rps("file:./a.tar.gz", function (err, result) {
78 t.is(result.type, "local", "local tarball")
80 rps("file:./b", function (err, result) {
81 t.is(result.type, "directory", "local package directory")
83 rps("file:./c", function (err, result) {
84 t.is(result.type, "local", "non-package local directory, specified with a file URL")
86 rps("file:./d", function (err, result) {
87 t.is(result.type, "local", "no local directory, specified with a file URL")
89 rps("e/1", function (err, result) {
90 t.is(result.type, "directory", "local package directory")
92 rps("e/2", function (err, result) {
93 t.is(result.type, "hosted", "hosted package dependency")
94 t.is(result.hosted.type, "github", "github package dependency")
96 rps("1", function (err, result) {
97 t.is(result.type, "local", "range like local file is still a local file")
99 rps("1.0.0", function (err, result) {
100 t.is(result.type, "local", "version like local file is still a local file")
103 test("named realize-package-specifier", function (t) {
106 rps("a@a.tar.gz", function (err, result) {
107 t.is(result.type, "local", "named local tarball")
109 rps("b@b", function (err, result) {
110 t.is(result.type, "directory", "named local package directory")
112 rps("c@c", function (err, result) {
113 t.is(result.type, "tag", "remote package, non-package local directory")
115 rps("d@d", function (err, result) {
116 t.is(result.type, "tag", "remote package, no local directory")
118 rps("a@file:./a.tar.gz", function (err, result) {
119 t.is(result.type, "local", "local tarball")
121 rps("b@file:./b", function (err, result) {
122 t.is(result.type, "directory", "local package directory")
124 rps("c@file:./c", function (err, result) {
125 t.is(result.type, "local", "non-package local directory, specified with a file URL")
127 rps("d@file:./d", function (err, result) {
128 t.is(result.type, "local", "no local directory, specified with a file URL")
130 rps("e@e/1", function (err, result) {
131 t.is(result.type, "directory", "local package directory")
133 rps("e@e/2", function (err, result) {
134 t.is(result.type, "hosted", "hosted package dependency")
135 t.is(result.hosted.type, "github", "github package dependency")
137 rps("e@1", function (err, result) {
138 t.is(result.type, "range", "range like specifier is never a local file")
140 rps("e@1.0.0", function (err, result) {
141 t.is(result.type, "version", "version like specifier is never a local file")