1'use strict' 2var fs = require('fs') 3var path = require('path') 4var test = require('tap').test 5var Tacks = require('tacks') 6var File = Tacks.File 7var Dir = Tacks.Dir 8var common = require('../common-tap.js') 9var testdir = path.join(__dirname, path.basename(__filename, '.js')) 10 11var fixture = new Tacks( 12 Dir({ 13 node_modules: Dir({ 14 'a': Dir({ 15 'package.json': File({ 16 _requested: { 17 rawSpec: 'file:///mods/a' 18 }, 19 dependencies: { 20 'b': 'file:///mods/b' 21 }, 22 name: 'a', 23 version: '1.0.0' 24 }) 25 }), 26 'b': Dir({ 27 'package.json': File({ 28 _requested: { 29 rawSpec: 'file:///mods/b' 30 }, 31 dependencies: { 32 'a': 'file:///mods/a' 33 }, 34 name: 'b', 35 version: '1.0.0' 36 }) 37 }) 38 }), 39 'package.json': File({ 40 name: 'test', 41 version: '1.0.0', 42 devDependencies: { 43 'a': 'file:///mods/a' 44 } 45 }) 46 }) 47) 48 49var expectedShrinkwrap = { 50 name: 'test', 51 version: '1.0.0', 52 dependencies: { 53 a: { 54 version: '1.0.0', 55 dev: true 56 }, 57 b: { 58 version: '1.0.0', 59 dev: true 60 } 61 } 62} 63 64function setup () { 65 cleanup() 66 fixture.create(testdir) 67} 68 69function cleanup () { 70 fixture.remove(testdir) 71} 72 73function readJson (file) { 74 try { 75 var contents = fs.readFileSync(file) 76 return JSON.parse(contents) 77 } catch (ex) { 78 return ex 79 } 80} 81 82test('setup', function (t) { 83 setup() 84 t.end() 85}) 86 87test('shrinkwrap cycle in dev deps', function (t) { 88 common.npm(['shrinkwrap', '--only=prod'], {cwd: testdir}, function (err, code, stdout, stderr) { 89 if (err) throw err 90 t.is(code, 0, 'result code = ok') 91 t.comment(stdout.trim()) 92 t.comment(stderr.trim()) 93 var actualShrinkwrap = readJson(path.join(testdir, 'npm-shrinkwrap.json')) 94 t.isDeeply(actualShrinkwrap, expectedShrinkwrap, 'shrinkwrap is right') 95 t.end() 96 }) 97}) 98 99test('cleanup', function (t) { 100 cleanup() 101 t.end() 102}) 103