]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/files-and-ignores.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / test / tap / files-and-ignores.js
1 'use strict'
2 var test = require('tap').test
3 var common = require('../common-tap.js')
4 var path = require('path')
5 var rimraf = require('rimraf')
6 var mkdirp = require('mkdirp')
7 var fs = require('graceful-fs')
8 var basepath = path.resolve(__dirname, path.basename(__filename, '.js'))
9 var fixturepath = path.resolve(basepath, 'npm-test-files')
10 var modulepath = path.resolve(basepath, 'node_modules')
11 var installedpath = path.resolve(modulepath, 'npm-test-files')
12 var Tacks = require('tacks')
13 var File = Tacks.File
14 var Dir = Tacks.Dir
15
16 test('basic file inclusion', function (t) {
17   var fixture = new Tacks(
18     Dir({
19       'package.json': File({
20         name: 'npm-test-files',
21         version: '1.2.5',
22         files: [
23           'include',
24           'sub/include'
25         ]
26       }),
27       include: File(''),
28       sub: Dir({ include: File('') }),
29       notincluded: File('')
30     })
31   )
32   withFixture(t, fixture, function (done) {
33     t.ok(fileExists('include'), 'toplevel file included')
34     t.ok(fileExists('sub/include'), 'nested file included')
35     t.notOk(fileExists('notincluded'), 'unspecified file not included')
36     done()
37   })
38 })
39
40 test('basic file exclusion', function (t) {
41   var fixture = new Tacks(
42     Dir({
43       'package.json': File({
44         name: 'npm-test-files',
45         version: '1.2.5'
46       }),
47       '.npmignore': File(
48         'ignore\n' +
49         'sub/ignore\n'
50       ),
51       include: File(''),
52       ignore: File(''),
53       sub: Dir({ ignore: File('') })
54     })
55   )
56   withFixture(t, fixture, function (done) {
57     t.notOk(fileExists('ignore'), 'toplevel file excluded')
58     t.notOk(fileExists('sub/ignore'), 'nested file excluded')
59     t.ok(fileExists('include'), 'unignored file included')
60     done()
61   })
62 })
63
64 test('toplevel-only and blanket ignores', function (t) {
65   var fixture = new Tacks(
66     Dir({
67       'package.json': File({
68         name: 'npm-test-files',
69         version: '1.2.5'
70       }),
71       '.npmignore': File(
72         './shallow1\n' +
73         '/shallow2\n' +
74         '/sub/onelevel\n' +
75         'deep\n' +
76         ''
77       ),
78       shallow1: File(''),
79       shallow2: File(''),
80       deep: File(''),
81       sub: Dir({
82         shallow1: File(''),
83         shallow2: File(''),
84         onelevel: File(''),
85         deep: File(''),
86         sub: Dir({
87           deep: File(''),
88           onelevel: File('')
89         })
90       })
91     })
92   )
93   withFixture(t, fixture, function (done) {
94     t.notOk(fileExists('shallow2'), '/ file excluded')
95     t.ok(fileExists('sub/shallow1'), 'nested ./ file included')
96     t.ok(fileExists('sub/shallow2'), 'nested / file included')
97     t.ok(fileExists('sub/sub/onelevel'), 'double-nested file included')
98     t.notOk(fileExists('sub/onelevel'), 'nested / file excluded')
99     t.notOk(fileExists('deep'), 'deep file excluded')
100     t.notOk(fileExists('sub/deep'), 'nested deep file excluded')
101     t.notOk(fileExists('sub/sub/deep'), 'double-nested deep file excluded')
102     t.ok(fileExists('shallow1'), './ file included')
103     done()
104   })
105 })
106
107 test('.npmignore works for nested directories recursively', function (t) {
108   var fixture = new Tacks(
109     Dir({
110       'package.json': File({
111         name: 'npm-test-files',
112         version: '1.2.5'
113       }),
114       '.npmignore': File(
115         '/ignore\n' +
116         'deep\n'
117       ),
118       include: File(''),
119       ignore: File(''),
120       deep: File(''),
121       sub: Dir({
122         ignore: File(''),
123         include: File(''),
124         deep: File(''),
125         sub: Dir({
126           '.npmignore': File(
127             '/ignore\n'
128           ),
129           ignore: File(''),
130           include: File(''),
131           deep: File('')
132         })
133       })
134     })
135   )
136   withFixture(t, fixture, function (done) {
137     t.notOk(fileExists('ignore'), 'toplevel file excluded')
138     t.ok(fileExists('include'), 'unignored file included')
139     t.ok(fileExists('sub/ignore'), 'same-name file in nested dir included')
140     t.ok(fileExists('sub/include'), 'unignored nested dir file included')
141     t.notOk(fileExists('sub/sub/ignore'), 'sub-sub-directory file excluded')
142     t.ok(fileExists('sub/sub/include'), 'sub-sube-directory file included')
143     t.notOk(fileExists('deep'), 'deep file excluded')
144     t.notOk(fileExists('sub/deep'), 'sub-dir deep file excluded')
145     t.notOk(fileExists('sub/sub/deep'), 'sub-sub-dir deep file excluded')
146     done()
147   })
148 })
149
150 test('.gitignore should have identical semantics', function (t) {
151   var fixture = new Tacks(
152     Dir({
153       'package.json': File({
154         name: 'npm-test-files',
155         version: '1.2.5'
156       }),
157       '.gitignore': File(
158         './shallow1\n' +
159         '/shallow2\n' +
160         '/sub/onelevel\n' +
161         'deep\n' +
162         ''
163       ),
164       shallow1: File(''),
165       shallow2: File(''),
166       deep: File(''),
167       sub: Dir({
168         shallow1: File(''),
169         shallow2: File(''),
170         onelevel: File(''),
171         deep: File(''),
172         sub: Dir({
173           deep: File(''),
174           onelevel: File('')
175         })
176       })
177     })
178   )
179   withFixture(t, fixture, function (done) {
180     t.notOk(fileExists('shallow2'), '/ file excluded')
181     t.ok(fileExists('sub/shallow1'), 'nested ./ file included')
182     t.ok(fileExists('sub/shallow2'), 'nested / file included')
183     t.ok(fileExists('sub/sub/onelevel'), 'double-nested file included')
184     t.notOk(fileExists('sub/onelevel'), 'nested / file excluded')
185     t.notOk(fileExists('deep'), 'deep file excluded')
186     t.notOk(fileExists('sub/deep'), 'nested deep file excluded')
187     t.notOk(fileExists('sub/sub/deep'), 'double-nested deep file excluded')
188     t.ok(fileExists('shallow1'), './ file included')
189     done()
190   })
191 })
192
193 test('.npmignore should always be overridden by files array', function (t) {
194   var fixture = new Tacks(
195     Dir({
196       'package.json': File({
197         name: 'npm-test-files',
198         version: '1.2.5',
199         files: [
200           'include',
201           'sub'
202         ]
203       }),
204       '.npmignore': File(
205         'include\n' +
206         'ignore\n' +
207         'sub/included\n'
208       ),
209       include: File(''),
210       ignore: File(''),
211       sub: Dir({
212         include: File('')
213       })
214     })
215   )
216   withFixture(t, fixture, function (done) {
217     t.notOk(fileExists('ignore'), 'toplevel file excluded')
218     t.ok(fileExists('include'), 'unignored file included')
219     t.ok(fileExists('sub/include'), 'nested file included')
220     done()
221   })
222 })
223
224 test('.gitignore supported for ignores', function (t) {
225   var fixture = new Tacks(
226     Dir({
227       'package.json': File({
228         name: 'npm-test-files',
229         version: '1.2.5'
230       }),
231       '.gitignore': File(
232         'ignore\n' +
233         'sub/ignore\n'
234       ),
235       include: File(''),
236       ignore: File(''),
237       sub: Dir({ ignore: File('') })
238     })
239   )
240   withFixture(t, fixture, function (done) {
241     t.notOk(fileExists('ignore'), 'toplevel file excluded')
242     t.notOk(fileExists('sub/ignore'), 'nested file excluded')
243     t.ok(fileExists('include'), 'unignored file included')
244     done()
245   })
246 })
247
248 test('.npmignore completely overrides .gitignore', function (t) {
249   var fixture = new Tacks(
250     Dir({
251       'package.json': File({
252         name: 'npm-test-files',
253         version: '1.2.5'
254       }),
255       '.npmignore': File(
256         'ignore\n' +
257         'sub/ignore\n'
258       ),
259       '.gitignore': File(
260         'include\n' +
261         'sub/include\n' +
262         'extra\n'
263       ),
264       include: File(''),
265       sub: Dir({ include: File('') }),
266       extra: File('')
267     })
268   )
269   withFixture(t, fixture, function (done) {
270     t.ok(fileExists('include'), 'gitignored toplevel file included')
271     t.ok(fileExists('extra'), 'gitignored extra toplevel file included')
272     t.ok(fileExists('sub/include'), 'gitignored nested file included')
273     t.notOk(fileExists('ignore'), 'toplevel file excluded')
274     t.notOk(fileExists('sub/ignore'), 'nested file excluded')
275     done()
276   })
277 })
278
279 test('files array overrides .npmignore', function (t) {
280   var fixture = new Tacks(
281     Dir({
282       'package.json': File({
283         name: 'npm-test-files',
284         version: '1.2.5',
285         files: [
286           'include',
287           'sub/include'
288         ]
289       }),
290       '.npmignore': File(
291         'include\n' +
292         'sub/include\n'
293       ),
294       include: File(''),
295       sub: Dir({ include: File('') })
296     })
297   )
298   withFixture(t, fixture, function (done) {
299     t.ok(fileExists('include'), 'toplevel file included')
300     t.ok(fileExists('sub/include'), 'nested file included')
301     done()
302   })
303 })
304
305 test('includes files regardless of emptiness', function (t) {
306   var fixture = new Tacks(
307     Dir({
308       'package.json': File({
309         name: 'npm-test-files',
310         version: '1.2.5',
311         files: [
312           'full',
313           'empty'
314         ]
315       }),
316       full: File('This file has contents~'),
317       empty: File('')
318     })
319   )
320   withFixture(t, fixture, function (done) {
321     t.ok(fileExists('full'), 'contentful file included')
322     t.ok(fileExists('empty'), 'empty file included')
323     done()
324   })
325 })
326
327 test('.npmignore itself gets included', function (t) {
328   var fixture = new Tacks(
329     Dir({
330       'package.json': File({
331         name: 'npm-test-files',
332         version: '1.2.5',
333         files: [
334           '.npmignore'
335         ]
336       }),
337       '.npmignore': File('')
338     })
339   )
340   withFixture(t, fixture, function (done) {
341     t.ok(fileExists('.npmignore'), '.npmignore included')
342     done()
343   })
344 })
345
346 test('include default files when missing files spec', function (t) {
347   var fixture = new Tacks(
348     Dir({
349       'package.json': File({
350         name: 'npm-test-files',
351         version: '1.2.5'
352       }),
353       'index.js': File(''),
354       foo: File(''),
355       node_modules: Dir({foo: Dir({bar: File('')})})
356     })
357   )
358   withFixture(t, fixture, function (done) {
359     t.ok(fileExists('index.js'), 'index.js included')
360     t.ok(fileExists('foo'), 'foo included')
361     t.notOk(fileExists('node_modules'), 'node_modules not included')
362     done()
363   })
364 })
365
366 test('include main file', function (t) {
367   var fixture = new Tacks(
368     Dir({
369       'package.json': File({
370         name: 'npm-test-files',
371         version: '1.2.5',
372         main: 'foo.js',
373         files: []
374       }),
375       'index.js': File(''),
376       'foo.js': File('')
377     })
378   )
379   withFixture(t, fixture, function (done) {
380     t.ok(fileExists('foo.js'), 'foo.js included because of main')
381     t.notOk(fileExists('index.js'), 'index.js not included')
382     done()
383   })
384 })
385
386 test('certain files ignored unconditionally', function (t) {
387   var fixture = new Tacks(
388     Dir({
389       'package.json': File({
390         name: 'npm-test-files',
391         version: '1.2.5',
392         files: [
393           '.git',
394           '.svn',
395           'CVS',
396           '.hg',
397           '.lock-wscript',
398           '.wafpickle-0',
399           '.wafpickle-5',
400           '.wafpickle-50',
401           'build/config.gypi',
402           'npm-debug.log',
403           '.npmrc',
404           '.foo.swp',
405           '.DS_Store',
406           '._ohno'
407         ]
408       }),
409       '.git': Dir({foo: File('')}),
410       '.svn': Dir({foo: File('')}),
411       'CVS': Dir({foo: File('')}),
412       '.hg': Dir({foo: File('')}),
413       '.lock-wscript': File(''),
414       '.wafpickle-0': File(''),
415       '.wafpickle-5': File(''),
416       '.wafpickle-50': File(''),
417       'build': Dir({'config.gypi': File('')}),
418       'npm-debug.log': File(''),
419       '.npmrc': File(''),
420       '.foo.swp': File(''),
421       '.DS_Store': Dir({foo: File('')}),
422       '._ohno': File(''),
423       '._ohnoes': Dir({noes: File('')})
424     })
425   )
426   withFixture(t, fixture, function (done) {
427     t.notOk(fileExists('.git'), '.git not included')
428     t.notOk(fileExists('.svn'), '.svn not included')
429     t.notOk(fileExists('CVS'), 'CVS not included')
430     t.notOk(fileExists('.hg'), '.hg not included')
431     t.notOk(fileExists('.lock-wscript'), '.lock-wscript not included')
432     t.notOk(fileExists('.wafpickle-0'), '.wafpickle-0 not included')
433     t.notOk(fileExists('.wafpickle-5'), '.wafpickle-5 not included')
434     t.notOk(fileExists('.wafpickle-50'), '.wafpickle-50 not included')
435     t.notOk(fileExists('build/config.gypi'), 'build/config.gypi not included')
436     t.notOk(fileExists('npm-debug.log'), 'npm-debug.log not included')
437     t.notOk(fileExists('.npmrc'), '.npmrc not included')
438     t.notOk(fileExists('.foo.swp'), '.foo.swp not included')
439     t.notOk(fileExists('.DS_Store'), '.DS_Store not included')
440     t.notOk(fileExists('._ohno'), '._ohno not included')
441     t.notOk(fileExists('._ohnoes'), '._ohnoes not included')
442     done()
443   })
444 })
445
446 test('certain files included unconditionally', function (t) {
447   var fixture = new Tacks(
448     Dir({
449       'package.json': File({
450         name: 'npm-test-files',
451         version: '1.2.5'
452       }),
453       '.npmignore': File(
454         'package.json',
455         'README',
456         'Readme',
457         'readme.md',
458         'readme.randomext',
459         'changelog',
460         'CHAngelog',
461         'ChangeLOG.txt',
462         'license',
463         'licence',
464         'LICENSE',
465         'LICENCE'
466       ),
467       'README': File(''),
468       'Readme': File(''),
469       'readme.md': File(''),
470       'readme.randomext': File(''),
471       'changelog': File(''),
472       'CHAngelog': File(''),
473       'ChangeLOG.txt': File(''),
474       'license': File(''),
475       'licence': File(''),
476       'LICENSE': File(''),
477       'LICENCE': File('')
478     })
479   )
480   withFixture(t, fixture, function (done) {
481     t.ok(fileExists('package.json'), 'package.json included')
482     t.ok(fileExists('README'), 'README included')
483     t.ok(fileExists('Readme'), 'Readme included')
484     t.ok(fileExists('readme.md'), 'readme.md included')
485     t.ok(fileExists('readme.randomext'), 'readme.randomext included')
486     t.ok(fileExists('changelog'), 'changelog included')
487     t.ok(fileExists('CHAngelog'), 'CHAngelog included')
488     t.ok(fileExists('ChangeLOG.txt'), 'ChangeLOG.txt included')
489     t.ok(fileExists('license'), 'license included')
490     t.ok(fileExists('licence'), 'licence included')
491     t.ok(fileExists('LICENSE'), 'LICENSE included')
492     t.ok(fileExists('LICENCE'), 'LICENCE included')
493     done()
494   })
495 })
496
497 test('folder-based inclusion works', function (t) {
498   var fixture = new Tacks(
499     Dir({
500       'package.json': File({
501         name: 'npm-test-files',
502         version: '1.2.5',
503         files: [
504           'sub1/sub',
505           'sub2'
506         ]
507       }),
508       sub1: Dir({
509         sub: Dir({
510           include1: File(''),
511           include2: File('')
512         }),
513         ignored: File('')
514       }),
515       sub2: Dir({
516         include1: File(''),
517         include2: File(''),
518         empty: Dir({})
519       })
520     })
521   )
522   withFixture(t, fixture, function (done) {
523     t.ok(fileExists('sub1/sub/include1'), 'nested dir included')
524     t.ok(fileExists('sub1/sub/include2'), 'nested dir included')
525     t.notOk(fileExists('sub1/ignored'), 'unspecified file not included')
526
527     t.ok(fileExists('sub2/include1'), 'dir contents included')
528     t.ok(fileExists('sub2/include2'), 'dir contents included')
529     t.notOk(fileExists('sub2/empty'), 'empty dir not included')
530
531     done()
532   })
533 })
534
535 function fileExists (file) {
536   try {
537     return !!fs.statSync(path.resolve(installedpath, file))
538   } catch (_) {
539     return false
540   }
541 }
542
543 function withFixture (t, fixture, tester) {
544   fixture.create(fixturepath)
545   mkdirp.sync(modulepath)
546   common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest)
547   function installCheckAndTest (err, code) {
548     if (err) throw err
549     t.is(code, 0, 'install went ok')
550     tester(removeAndDone)
551   }
552   function removeAndDone (err) {
553     if (err) throw err
554     fixture.remove(fixturepath)
555     rimraf.sync(basepath)
556     t.done()
557   }
558 }