mirror of https://github.com/lukechilds/node.git
Browse Source
Explain the behavior of `fs.open()` under win32 that file path contains some characters and add some test cases for them. < (less than) > (greater than) : (colon) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk) PR-URL: https://github.com/nodejs/node/pull/13875 Refs: https://github.com/nodejs/node/issues/13868 Refs: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx Refs: https://msdn.microsoft.com/en-us/library/windows/desktop/bb540537.aspx Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com> Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com> Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed-By: Tobias Nießen <tniessen@tnie.de>v6.x
XadillaX
8 years ago
committed by
Myles Borins
2 changed files with 55 additions and 0 deletions
@ -0,0 +1,45 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const fs = require('fs'); |
|||
const path = require('path'); |
|||
|
|||
if (!common.isWindows) |
|||
common.skip('This test is for Windows only.'); |
|||
|
|||
common.refreshTmpDir(); |
|||
|
|||
const DATA_VALUE = 'hello'; |
|||
|
|||
// Refs: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
|
|||
// Ignore '/', '\\' and ':'
|
|||
const RESERVED_CHARACTERS = '<>"|?*'; |
|||
|
|||
[...RESERVED_CHARACTERS].forEach((ch) => { |
|||
const pathname = path.join(common.tmpDir, `somefile_${ch}`); |
|||
assert.throws( |
|||
() => { |
|||
fs.writeFileSync(pathname, DATA_VALUE); |
|||
}, |
|||
/^Error: ENOENT: no such file or directory, open '.*'$/, |
|||
`failed with '${ch}'`); |
|||
}); |
|||
|
|||
// Test for ':' (NTFS data streams).
|
|||
// Refs: https://msdn.microsoft.com/en-us/library/windows/desktop/bb540537.aspx
|
|||
const pathname = path.join(common.tmpDir, 'foo:bar'); |
|||
fs.writeFileSync(pathname, DATA_VALUE); |
|||
|
|||
let content = ''; |
|||
const fileDataStream = fs.createReadStream(pathname, { |
|||
encoding: 'utf8' |
|||
}); |
|||
|
|||
fileDataStream.on('data', (data) => { |
|||
content += data; |
|||
}); |
|||
|
|||
fileDataStream.on('end', common.mustCall(() => { |
|||
assert.strictEqual(content, DATA_VALUE); |
|||
})); |
Loading…
Reference in new issue