1
1
'use strict'
2
2
3
- const { writeFileSync : writeFile , unlinkSync : unlink , chmodSync : chmod } = require ( 'fs' )
3
+ const { writeFileSync : writeFile } = require ( 'fs' )
4
4
const { join } = require ( 'path' )
5
5
const t = require ( 'tap' )
6
6
const promiseSpawn = require ( '@npmcli/promise-spawn' )
@@ -29,17 +29,11 @@ t.test('sh', (t) => {
29
29
}
30
30
31
31
t . test ( 'integration' , { skip : isWindows && 'posix only' } , async ( t ) => {
32
- const dir = t . testdir ( )
33
-
34
32
for ( const [ input ] of expectations ) {
35
- const filename = join ( dir , 'posix.sh' )
36
- const script = `#!/usr/bin/env sh\nnode -p process.argv[1] -- ${ escape . sh ( input ) } `
37
- writeFile ( filename , script )
38
- chmod ( filename , '0755' )
39
- const p = await promiseSpawn ( 'sh' , [ '-c' , filename ] , { stdioString : true } )
33
+ const script = `node -p process.argv[1] -- ${ escape . sh ( input ) } `
34
+ const p = await promiseSpawn ( 'sh' , [ '-c' , '--' , script ] , { stdioString : true } )
40
35
const stdout = p . stdout . trim ( )
41
- t . equal ( input , stdout , 'actual output matches input' )
42
- unlink ( filename )
36
+ t . equal ( stdout , input , `expected \`${ stdout } \` to equal \`${ input } \`` )
43
37
}
44
38
45
39
t . end ( )
@@ -52,30 +46,31 @@ t.test('cmd', (t) => {
52
46
const expectations = [
53
47
[ '' , '""' ] ,
54
48
[ 'test' , 'test' ] ,
55
- [ '%PATH%' , '%%PATH%%' ] ,
56
- [ '%PATH%' , '%%PATH%%' , true ] ,
57
- [ '"%PATH%"' , '^"\\^"%%PATH%%\\^"^"' ] ,
58
- [ '"%PATH%"' , '^^^"\\^^^"%%PATH%%\\^^^"^^^"' , true ] ,
59
- [ `'%PATH%'` , `'%%PATH%%'` ] ,
60
- [ `'%PATH%'` , `'%%PATH%%'` , true ] ,
61
- [ '\\%PATH%' , '\\%%PATH%%' ] ,
62
- [ '\\%PATH%' , '\\%%PATH%%' , true ] ,
63
- [ '--arg="%PATH%"' , '^"--arg=\\^"%%PATH%%\\^"^"' ] ,
64
- [ '--arg="%PATH%"' , '^^^"--arg=\\^^^"%%PATH%%\\^^^"^^^"' , true ] ,
65
- [ '--arg=npm exec -c "%PATH%"' , '^"--arg=npm^ exec^ -c^ \\^"%%PATH%%\\^"^"' ] ,
66
- [ '--arg=npm exec -c "%PATH%"' , '^^^"--arg=npm^^^ exec^^^ -c^^^ \\^^^"%%PATH%%\\^^^"^^^"' , true ] ,
67
- [ `--arg=npm exec -c '%PATH%'` , `^"--arg=npm^ exec^ -c^ '%%PATH%%'^"` ] ,
68
- [ `--arg=npm exec -c '%PATH%'` , `^^^"--arg=npm^^^ exec^^^ -c^^^ '%%PATH%%'^^^"` , true ] ,
69
- [ `'--arg=npm exec -c "%PATH%"'` , `^"'--arg=npm^ exec^ -c^ \\^"%%PATH%%\\^"'^"` ] ,
49
+ [ '%PATH%' , '^%PATH^%' ] ,
50
+ [ '%PATH%' , '^^^%PATH^^^%' , true ] ,
51
+ [ '"%PATH%"' , '^"\\^"^%PATH^%\\^"^"' ] ,
52
+ [ '"%PATH%"' , '^^^"\\^^^"^^^%PATH^^^%\\^^^"^^^"' , true ] ,
53
+ [ `'%PATH%'` , `'^%PATH^%'` ] ,
54
+ [ `'%PATH%'` , `'^^^%PATH^^^%'` , true ] ,
55
+ [ '\\%PATH%' , '\\^%PATH^%' ] ,
56
+ [ '\\%PATH%' , '\\^^^%PATH^^^%' , true ] ,
57
+ [ '--arg="%PATH%"' , '^"--arg=\\^"^%PATH^%\\^"^"' ] ,
58
+ [ '--arg="%PATH%"' , '^^^"--arg=\\^^^"^^^%PATH^^^%\\^^^"^^^"' , true ] ,
59
+ [ '--arg=npm exec -c "%PATH%"' , '^"--arg=npm^ exec^ -c^ \\^"^%PATH^%\\^"^"' ] ,
60
+ [ '--arg=npm exec -c "%PATH%"' ,
61
+ '^^^"--arg=npm^^^ exec^^^ -c^^^ \\^^^"^^^%PATH^^^%\\^^^"^^^"' , true ] ,
62
+ [ `--arg=npm exec -c '%PATH%'` , `^"--arg=npm^ exec^ -c^ '^%PATH^%'^"` ] ,
63
+ [ `--arg=npm exec -c '%PATH%'` , `^^^"--arg=npm^^^ exec^^^ -c^^^ '^^^%PATH^^^%'^^^"` , true ] ,
64
+ [ `'--arg=npm exec -c "%PATH%"'` , `^"'--arg=npm^ exec^ -c^ \\^"^%PATH^%\\^"'^"` ] ,
70
65
[ `'--arg=npm exec -c "%PATH%"'` ,
71
- `^^^"'--arg=npm^^^ exec^^^ -c^^^ \\^^^"%% PATH% %\\^^^"'^^^"` , true ] ,
66
+ `^^^"'--arg=npm^^^ exec^^^ -c^^^ \\^^^"^^^% PATH^^^ %\\^^^"'^^^"` , true ] ,
72
67
[ '"C:\\Program Files\\test.bat"' , '^"\\^"C:\\Program^ Files\\test.bat\\^"^"' ] ,
73
68
[ '"C:\\Program Files\\test.bat"' , '^^^"\\^^^"C:\\Program^^^ Files\\test.bat\\^^^"^^^"' , true ] ,
74
- [ '"C:\\Program Files\\test%.bat"' , '^"\\^"C:\\Program^ Files\\test% %.bat\\^"^"' ] ,
69
+ [ '"C:\\Program Files\\test%.bat"' , '^"\\^"C:\\Program^ Files\\test^ %.bat\\^"^"' ] ,
75
70
[ '"C:\\Program Files\\test%.bat"' ,
76
- '^^^"\\^^^"C:\\Program^^^ Files\\test% %.bat\\^^^"^^^"' , true ] ,
77
- [ '% % %' , '^"%%^ %%^ % %^"' ] ,
78
- [ '% % %' , '^^^"%% ^^^ %% ^^^ % %^^^"' , true ] ,
71
+ '^^^"\\^^^"C:\\Program^^^ Files\\test^^^ %.bat\\^^^"^^^"' , true ] ,
72
+ [ '% % %' , '^"^%^ ^%^ ^ %^"' ] ,
73
+ [ '% % %' , '^^^"^^^% ^^^ ^^^% ^^^ ^^^ %^^^"' , true ] ,
79
74
[ 'hello^^^^^^' , 'hello^^^^^^^^^^^^' ] ,
80
75
[ 'hello^^^^^^' , 'hello^^^^^^^^^^^^^^^^^^^^^^^^' , true ] ,
81
76
[ 'hello world' , '^"hello^ world^"' ] ,
@@ -94,8 +89,8 @@ t.test('cmd', (t) => {
94
89
[ 'hello\\\\"world' , '^^^"hello\\\\\\\\\\^^^"world^^^"' , true ] ,
95
90
[ 'hello world\\' , '^"hello^ world\\\\^"' ] ,
96
91
[ 'hello world\\' , '^^^"hello^^^ world\\\\^^^"' , true ] ,
97
- [ 'hello %PATH%' , '^"hello^ %% PATH% %^"' ] ,
98
- [ 'hello %PATH%' , '^^^"hello^^^ %% PATH% %^^^"' , true ] ,
92
+ [ 'hello %PATH%' , '^"hello^ ^% PATH^ %^"' ] ,
93
+ [ 'hello %PATH%' , '^^^"hello^^^ ^^^% PATH^^^ %^^^"' , true ] ,
99
94
]
100
95
101
96
for ( const [ input , expectation , double ] of expectations ) {
@@ -105,23 +100,20 @@ t.test('cmd', (t) => {
105
100
106
101
t . test ( 'integration' , { skip : ! isWindows && 'Windows only' } , async ( t ) => {
107
102
const dir = t . testdir ( )
103
+ const shimFile = join ( dir , 'shim.cmd' )
104
+ const shim = `@echo off\nnode -p process.argv[1] -- %*`
105
+ writeFile ( shimFile , shim )
108
106
109
107
for ( const [ input , , double ] of expectations ) {
110
- const filename = join ( dir , 'win.cmd' )
111
- if ( double ) {
112
- const shimFile = join ( dir , 'shim.cmd' )
113
- const shim = `@echo off\nnode -p process.argv[1] -- %*`
114
- writeFile ( shimFile , shim )
115
- const script = `@echo off\n"${ shimFile } " ${ escape . cmd ( input , double ) } `
116
- writeFile ( filename , script )
117
- } else {
118
- const script = `@echo off\nnode -p process.argv[1] -- ${ escape . cmd ( input ) } `
119
- writeFile ( filename , script )
120
- }
121
- const p = await promiseSpawn ( 'cmd' , [ '/d' , '/s' , '/c' , filename ] , { stdioString : true } )
108
+ const script = double
109
+ ? `${ escape . cmd ( shimFile ) } ${ escape . cmd ( input , double ) } `
110
+ : `node -p process.argv[1] -- ${ escape . cmd ( input ) } `
111
+ const p = await promiseSpawn ( 'cmd' , [ '/d' , '/s' , '/c' , script ] , {
112
+ stdioString : true ,
113
+ windowsVerbatimArguments : true ,
114
+ } )
122
115
const stdout = p . stdout . trim ( )
123
- t . equal ( input , stdout , 'actual output matches input' )
124
- unlink ( filename )
116
+ t . equal ( stdout , input , `expected \`${ stdout } \` to equal \`${ input } \`` )
125
117
}
126
118
127
119
t . end ( )
0 commit comments