11const t = require ( 'tap' )
22const requireInject = require ( 'require-inject' )
33const mockNpm = require ( '../fixtures/mock-npm' )
4+ const pacote = require ( 'pacote' )
45
56const OUTPUT = [ ]
67const output = ( ...msg ) => OUTPUT . push ( msg )
@@ -11,6 +12,16 @@ const libnpmpack = async (spec, opts) => {
1112
1213 return ''
1314}
15+ const mockPacote = {
16+ manifest : ( spec ) => {
17+ if ( spec . type === 'directory' )
18+ return pacote . manifest ( spec )
19+ return {
20+ name : spec . name || 'test-package' ,
21+ version : spec . version || '1.0.0-test' ,
22+ }
23+ } ,
24+ }
1425
1526t . afterEach ( cb => {
1627 OUTPUT . length = 0
@@ -152,3 +163,95 @@ t.test('should log pack contents', (t) => {
152163 t . end ( )
153164 } )
154165} )
166+
167+ t . test ( 'workspaces' , ( t ) => {
168+ const testDir = t . testdir ( {
169+ 'package.json' : JSON . stringify ( {
170+ name : 'workspaces-test' ,
171+ version : '1.0.0' ,
172+ workspaces : [ 'workspace-a' , 'workspace-b' ] ,
173+ } , null , 2 ) ,
174+ 'workspace-a' : {
175+ 'package.json' : JSON . stringify ( {
176+ name : 'workspace-a' ,
177+ version : '1.0.0' ,
178+ } ) ,
179+ } ,
180+ 'workspace-b' : {
181+ 'package.json' : JSON . stringify ( {
182+ name : 'workspace-b' ,
183+ version : '1.0.0' ,
184+ } ) ,
185+ } ,
186+ } )
187+ const Pack = requireInject ( '../../lib/pack.js' , {
188+ libnpmpack,
189+ pacote : mockPacote ,
190+ npmlog : {
191+ notice : ( ) => { } ,
192+ showProgress : ( ) => { } ,
193+ clearProgress : ( ) => { } ,
194+ } ,
195+ } )
196+ const npm = mockNpm ( {
197+ localPrefix : testDir ,
198+ config : {
199+ unicode : false ,
200+ json : false ,
201+ 'dry-run' : false ,
202+ } ,
203+ output,
204+ } )
205+ const pack = new Pack ( npm )
206+
207+ t . test ( 'all workspaces' , ( t ) => {
208+ pack . execWorkspaces ( [ ] , [ ] , er => {
209+ if ( er )
210+ throw er
211+
212+ t . strictSame ( OUTPUT , [
213+ [ 'workspace-a-1.0.0.tgz' ] ,
214+ [ 'workspace-b-1.0.0.tgz' ] ,
215+ ] )
216+ t . end ( )
217+ } )
218+ } )
219+
220+ t . test ( 'all workspaces, `.` first arg' , ( t ) => {
221+ pack . execWorkspaces ( [ '.' ] , [ ] , er => {
222+ if ( er )
223+ throw er
224+
225+ t . strictSame ( OUTPUT , [
226+ [ 'workspace-a-1.0.0.tgz' ] ,
227+ [ 'workspace-b-1.0.0.tgz' ] ,
228+ ] )
229+ t . end ( )
230+ } )
231+ } )
232+
233+ t . test ( 'one workspace' , ( t ) => {
234+ pack . execWorkspaces ( [ ] , [ 'workspace-a' ] , er => {
235+ if ( er )
236+ throw er
237+
238+ t . strictSame ( OUTPUT , [
239+ [ 'workspace-a-1.0.0.tgz' ] ,
240+ ] )
241+ t . end ( )
242+ } )
243+ } )
244+
245+ t . test ( 'specific package' , ( t ) => {
246+ pack . execWorkspaces ( [ 'abbrev' ] , [ ] , er => {
247+ if ( er )
248+ throw er
249+
250+ t . strictSame ( OUTPUT , [
251+ [ 'abbrev-1.0.0-test.tgz' ] ,
252+ ] )
253+ t . end ( )
254+ } )
255+ } )
256+ t . end ( )
257+ } )
0 commit comments