@@ -8,29 +8,103 @@ const path = require('path');
88const tmpdir = require ( '../common/tmpdir' ) ;
99tmpdir . refresh ( ) ;
1010
11- const tmpFolder = fs . mkdtempSync ( path . join ( tmpdir . path , 'foo.' ) ) ;
12-
13- assert . strictEqual ( path . basename ( tmpFolder ) . length , 'foo.XXXXXX' . length ) ;
14- assert ( fs . existsSync ( tmpFolder ) ) ;
15-
16- const utf8 = fs . mkdtempSync ( path . join ( tmpdir . path , '\u0222abc.' ) ) ;
17- assert . strictEqual ( Buffer . byteLength ( path . basename ( utf8 ) ) ,
18- Buffer . byteLength ( '\u0222abc.XXXXXX' ) ) ;
19- assert ( fs . existsSync ( utf8 ) ) ;
20-
2111function handler ( err , folder ) {
2212 assert . ifError ( err ) ;
2313 assert ( fs . existsSync ( folder ) ) ;
2414 assert . strictEqual ( this , undefined ) ;
2515}
2616
27- fs . mkdtemp ( path . join ( tmpdir . path , 'bar.' ) , common . mustCall ( handler ) ) ;
17+ // Test with plain string
18+ {
19+ const tmpFolder = fs . mkdtempSync ( path . join ( tmpdir . path , 'foo.' ) ) ;
20+
21+ assert . strictEqual ( path . basename ( tmpFolder ) . length , 'foo.XXXXXX' . length ) ;
22+ assert ( fs . existsSync ( tmpFolder ) ) ;
23+
24+ const utf8 = fs . mkdtempSync ( path . join ( tmpdir . path , '\u0222abc.' ) ) ;
25+ assert . strictEqual ( Buffer . byteLength ( path . basename ( utf8 ) ) ,
26+ Buffer . byteLength ( '\u0222abc.XXXXXX' ) ) ;
27+ assert ( fs . existsSync ( utf8 ) ) ;
28+
29+ fs . mkdtemp ( path . join ( tmpdir . path , 'bar.' ) , common . mustCall ( handler ) ) ;
30+
31+ // Same test as above, but making sure that passing an options object doesn't
32+ // affect the way the callback function is handled.
33+ fs . mkdtemp ( path . join ( tmpdir . path , 'bar.' ) , { } , common . mustCall ( handler ) ) ;
34+
35+ const warningMsg = 'mkdtemp() templates ending with X are not portable. ' +
36+ 'For details see: https://nodejs.org/api/fs.html' ;
37+ common . expectWarning ( 'Warning' , warningMsg ) ;
38+ fs . mkdtemp ( path . join ( tmpdir . path , 'bar.X' ) , common . mustCall ( handler ) ) ;
39+ }
40+
41+ // Test with URL object
42+ {
43+ tmpdir . url = new URL ( `file://${ tmpdir . path } ` ) ;
44+ const urljoin = ( base , path ) => new URL ( path , base ) ;
45+
46+ const tmpFolder = fs . mkdtempSync ( urljoin ( tmpdir . url , 'foo.' ) ) ;
47+
48+ assert . strictEqual ( path . basename ( tmpFolder ) . length , 'foo.XXXXXX' . length ) ;
49+ assert ( fs . existsSync ( tmpFolder ) ) ;
50+
51+ const utf8 = fs . mkdtempSync ( urljoin ( tmpdir . url , '\u0222abc.' ) ) ;
52+ assert . strictEqual ( Buffer . byteLength ( path . basename ( utf8 ) ) ,
53+ Buffer . byteLength ( '\u0222abc.XXXXXX' ) ) ;
54+ assert ( fs . existsSync ( utf8 ) ) ;
55+
56+ fs . mkdtemp ( urljoin ( tmpdir . url , 'bar.' ) , common . mustCall ( handler ) ) ;
57+
58+ // Same test as above, but making sure that passing an options object doesn't
59+ // affect the way the callback function is handled.
60+ fs . mkdtemp ( urljoin ( tmpdir . url , 'bar.' ) , { } , common . mustCall ( handler ) ) ;
61+
62+ // Warning fires only once
63+ fs . mkdtemp ( urljoin ( tmpdir . url , 'bar.X' ) , common . mustCall ( handler ) ) ;
64+ }
65+
66+ // Test with Buffer
67+ {
68+ const tmpFolder = fs . mkdtempSync ( Buffer . from ( path . join ( tmpdir . path , 'foo.' ) ) ) ;
69+
70+ assert . strictEqual ( path . basename ( tmpFolder ) . length , 'foo.XXXXXX' . length ) ;
71+ assert ( fs . existsSync ( tmpFolder ) ) ;
2872
29- // Same test as above, but making sure that passing an options object doesn't
30- // affect the way the callback function is handled.
31- fs . mkdtemp ( path . join ( tmpdir . path , 'bar.' ) , { } , common . mustCall ( handler ) ) ;
73+ const utf8 = fs . mkdtempSync ( Buffer . from ( path . join ( tmpdir . path , '\u0222abc.' ) ) ) ;
74+ assert . strictEqual ( Buffer . byteLength ( path . basename ( utf8 ) ) ,
75+ Buffer . byteLength ( '\u0222abc.XXXXXX' ) ) ;
76+ assert ( fs . existsSync ( utf8 ) ) ;
77+
78+ fs . mkdtemp ( Buffer . from ( path . join ( tmpdir . path , 'bar.' ) ) , common . mustCall ( handler ) ) ;
79+
80+ // Same test as above, but making sure that passing an options object doesn't
81+ // affect the way the callback function is handled.
82+ fs . mkdtemp ( Buffer . from ( path . join ( tmpdir . path , 'bar.' ) ) , { } , common . mustCall ( handler ) ) ;
83+
84+ // Warning fires only once
85+ fs . mkdtemp ( Buffer . from ( path . join ( tmpdir . path , 'bar.X' ) ) , common . mustCall ( handler ) ) ;
86+ }
3287
33- const warningMsg = 'mkdtemp() templates ending with X are not portable. ' +
34- 'For details see: https://nodejs.org/api/fs.html' ;
35- common . expectWarning ( 'Warning' , warningMsg ) ;
36- fs . mkdtemp ( path . join ( tmpdir . path , 'bar.X' ) , common . mustCall ( handler ) ) ;
88+ // Test with Uint8Array
89+ {
90+ const encoder = new TextEncoder ( ) ;
91+
92+ const tmpFolder = fs . mkdtempSync ( encoder . encode ( path . join ( tmpdir . path , 'foo.' ) ) ) ;
93+
94+ assert . strictEqual ( path . basename ( tmpFolder ) . length , 'foo.XXXXXX' . length ) ;
95+ assert ( fs . existsSync ( tmpFolder ) ) ;
96+
97+ const utf8 = fs . mkdtempSync ( encoder . encode ( path . join ( tmpdir . path , '\u0222abc.' ) ) ) ;
98+ assert . strictEqual ( Buffer . byteLength ( path . basename ( utf8 ) ) ,
99+ Buffer . byteLength ( '\u0222abc.XXXXXX' ) ) ;
100+ assert ( fs . existsSync ( utf8 ) ) ;
101+
102+ fs . mkdtemp ( encoder . encode ( path . join ( tmpdir . path , 'bar.' ) ) , common . mustCall ( handler ) ) ;
103+
104+ // Same test as above, but making sure that passing an options object doesn't
105+ // affect the way the callback function is handled.
106+ fs . mkdtemp ( encoder . encode ( path . join ( tmpdir . path , 'bar.' ) ) , { } , common . mustCall ( handler ) ) ;
107+
108+ // Warning fires only once
109+ fs . mkdtemp ( encoder . encode ( path . join ( tmpdir . path , 'bar.X' ) ) , common . mustCall ( handler ) ) ;
110+ }
0 commit comments