%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict'; require('../common'); const assert = require('assert'); const path = require('path'); const failures = []; const slashRE = /\//g; [ [__filename, '.js'], ['', ''], ['/path/to/file', ''], ['/path/to/file.ext', '.ext'], ['/path.to/file.ext', '.ext'], ['/path.to/file', ''], ['/path.to/.file', ''], ['/path.to/.file.ext', '.ext'], ['/path/to/f.ext', '.ext'], ['/path/to/..ext', '.ext'], ['/path/to/..', ''], ['file', ''], ['file.ext', '.ext'], ['.file', ''], ['.file.ext', '.ext'], ['/file', ''], ['/file.ext', '.ext'], ['/.file', ''], ['/.file.ext', '.ext'], ['.path/file.ext', '.ext'], ['file.ext.ext', '.ext'], ['file.', '.'], ['.', ''], ['./', ''], ['.file.ext', '.ext'], ['.file', ''], ['.file.', '.'], ['.file..', '.'], ['..', ''], ['../', ''], ['..file.ext', '.ext'], ['..file', '.file'], ['..file.', '.'], ['..file..', '.'], ['...', '.'], ['...ext', '.ext'], ['....', '.'], ['file.ext/', '.ext'], ['file.ext//', '.ext'], ['file/', ''], ['file//', ''], ['file./', '.'], ['file.//', '.'], ].forEach((test) => { const expected = test[1]; [path.posix.extname, path.win32.extname].forEach((extname) => { let input = test[0]; let os; if (extname === path.win32.extname) { input = input.replace(slashRE, '\\'); os = 'win32'; } else { os = 'posix'; } const actual = extname(input); const message = `path.${os}.extname(${JSON.stringify(input)})\n expect=${ JSON.stringify(expected)}\n actual=${JSON.stringify(actual)}`; if (actual !== expected) failures.push(`\n${message}`); }); { const input = `C:${test[0].replace(slashRE, '\\')}`; const actual = path.win32.extname(input); const message = `path.win32.extname(${JSON.stringify(input)})\n expect=${ JSON.stringify(expected)}\n actual=${JSON.stringify(actual)}`; if (actual !== expected) failures.push(`\n${message}`); } }); assert.strictEqual(failures.length, 0, failures.join('')); // On Windows, backslash is a path separator. assert.strictEqual(path.win32.extname('.\\'), ''); assert.strictEqual(path.win32.extname('..\\'), ''); assert.strictEqual(path.win32.extname('file.ext\\'), '.ext'); assert.strictEqual(path.win32.extname('file.ext\\\\'), '.ext'); assert.strictEqual(path.win32.extname('file\\'), ''); assert.strictEqual(path.win32.extname('file\\\\'), ''); assert.strictEqual(path.win32.extname('file.\\'), '.'); assert.strictEqual(path.win32.extname('file.\\\\'), '.'); // On *nix, backslash is a valid name component like any other character. assert.strictEqual(path.posix.extname('.\\'), ''); assert.strictEqual(path.posix.extname('..\\'), '.\\'); assert.strictEqual(path.posix.extname('file.ext\\'), '.ext\\'); assert.strictEqual(path.posix.extname('file.ext\\\\'), '.ext\\\\'); assert.strictEqual(path.posix.extname('file\\'), ''); assert.strictEqual(path.posix.extname('file\\\\'), ''); assert.strictEqual(path.posix.extname('file.\\'), '.\\'); assert.strictEqual(path.posix.extname('file.\\\\'), '.\\\\');