]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/version-lifecycle.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / test / tap / version-lifecycle.js
1 var fs = require('graceful-fs')
2 var path = require('path')
3
4 var mkdirp = require('mkdirp')
5 var osenv = require('osenv')
6 var rimraf = require('rimraf')
7 var test = require('tap').test
8
9 var common = require('../common-tap.js')
10 var npm = require('../../')
11 var pkg = path.resolve(__dirname, 'version-lifecycle')
12 var cache = path.resolve(pkg, 'cache')
13 var npmrc = path.resolve(pkg, './.npmrc')
14 var configContents = 'sign-git-tag=false\n'
15
16 test('npm version <semver> with failing preversion lifecycle script', function (t) {
17   setup()
18   fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
19     author: 'Alex Wolfe',
20     name: 'version-lifecycle',
21     version: '0.0.0',
22     description: 'Test for npm version if preversion script fails',
23     scripts: {
24       preversion: './fail.sh'
25     }
26   }), 'utf8')
27   fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8')
28   fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448)
29   npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () {
30     var version = require('../../lib/version')
31     version(['patch'], function (err) {
32       t.ok(err)
33       t.ok(err.message.match(/Exit status 50/))
34       t.end()
35     })
36   })
37 })
38
39 test('npm version <semver> with failing version lifecycle script', function (t) {
40   setup()
41   fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
42     author: 'Alex Wolfe',
43     name: 'version-lifecycle',
44     version: '0.0.0',
45     description: 'Test for npm version if postversion script fails',
46     scripts: {
47       version: './fail.sh'
48     }
49   }), 'utf8')
50   fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8')
51   fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448)
52   npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () {
53     var version = require('../../lib/version')
54     version(['patch'], function (err) {
55       t.ok(err)
56       t.ok(err.message.match(/Exit status 50/))
57       t.end()
58     })
59   })
60 })
61
62 test('npm version <semver> with failing postversion lifecycle script', function (t) {
63   setup()
64   fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
65     author: 'Alex Wolfe',
66     name: 'version-lifecycle',
67     version: '0.0.0',
68     description: 'Test for npm version if postversion script fails',
69     scripts: {
70       postversion: './fail.sh'
71     }
72   }), 'utf8')
73   fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8')
74   fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448)
75   npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () {
76     var version = require('../../lib/version')
77     version(['patch'], function (err) {
78       t.ok(err)
79       t.ok(err.message.match(/Exit status 50/))
80       t.end()
81     })
82   })
83 })
84
85 test('npm version <semver> execution order', function (t) {
86   setup()
87   fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
88     author: 'Alex Wolfe',
89     name: 'version-lifecycle',
90     version: '0.0.0',
91     description: 'Test for npm version if postversion script fails',
92     scripts: {
93       preversion: './preversion.sh',
94       version: './version.sh',
95       postversion: './postversion.sh'
96     }
97   }), 'utf8')
98   makeScript('preversion')
99   makeScript('version')
100   makeScript('postversion')
101   npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () {
102     common.makeGitRepo({path: pkg}, function (err, git) {
103       t.ifError(err, 'git bootstrap ran without error')
104
105       var version = require('../../lib/version')
106       version(['patch'], function (err) {
107         t.ifError(err, 'version command complete')
108
109         t.equal('0.0.0', readPackage('preversion').version, 'preversion')
110         t.deepEqual(readStatus('preversion', t), {
111           'preversion-package.json': 'A'
112         })
113
114         t.equal('0.0.1', readPackage('version').version, 'version')
115         t.deepEqual(readStatus('version', t), {
116           'package.json': 'M',
117           'preversion-package.json': 'A',
118           'version-package.json': 'A'
119         })
120
121         t.equal('0.0.1', readPackage('postversion').version, 'postversion')
122         t.deepEqual(readStatus('postversion', t), {
123           'postversion-package.json': 'A'
124         })
125         t.end()
126       })
127     })
128   })
129 })
130
131 test('cleanup', function (t) {
132   process.chdir(osenv.tmpdir())
133   rimraf.sync(pkg)
134   t.end()
135 })
136
137 function setup () {
138   mkdirp.sync(pkg)
139   mkdirp.sync(path.join(pkg, 'node_modules'))
140   mkdirp.sync(cache)
141   fs.writeFileSync(npmrc, configContents, 'ascii')
142   process.chdir(pkg)
143 }
144
145 function makeScript (lifecycle) {
146   var contents = [
147     'cp package.json ' + lifecycle + '-package.json',
148     'git add ' + lifecycle + '-package.json',
149     'git status --porcelain > ' + lifecycle + '-git.txt'
150   ].join('\n')
151   var scriptPath = path.join(pkg, lifecycle + '.sh')
152   fs.writeFileSync(scriptPath, contents, 'utf-8')
153   fs.chmodSync(scriptPath, 448)
154 }
155
156 function readPackage (lifecycle) {
157   return JSON.parse(fs.readFileSync(path.join(pkg, lifecycle + '-package.json'), 'utf-8'))
158 }
159
160 function readStatus (lifecycle, t) {
161   var status = {}
162   fs.readFileSync(path.join(pkg, lifecycle + '-git.txt'), 'utf-8')
163     .trim()
164     .split('\n')
165     .forEach(function (line) {
166       line = line.trim()
167       if (line && !line.match(/^\?\? /)) {
168         var parts = line.split(/\s+/)
169         t.equal(parts.length, 2, lifecycle + ' : git status has too many words : ' + line)
170         status[parts[1].trim()] = parts[0].trim()
171       }
172     })
173   return status
174 }