@@ -8,29 +8,103 @@ const path = require('path');
8
8
const tmpdir = require ( '../common/tmpdir' ) ;
9
9
tmpdir . refresh ( ) ;
10
10
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
-
21
11
function handler ( err , folder ) {
22
12
assert . ifError ( err ) ;
23
13
assert ( fs . existsSync ( folder ) ) ;
24
14
assert . strictEqual ( this , undefined ) ;
25
15
}
26
16
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 ) ) ;
28
72
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
+ }
32
87
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