path: remove dead code in favor of unit tests
authorNathan Woltman <nwoltman@outlook.com>
Fri, 31 Jul 2015 21:47:49 +0000 (17:47 -0400)
committerRoman Reiss <me@silverwind.io>
Sun, 9 Aug 2015 10:29:01 +0000 (12:29 +0200)
Remove dead code paths that are created by assertions that will never
trigger. They may only trigger if either the `splitDeviceRe` or
`splitPathRe` regular expressions are modified. If at some point they
are modified, current unit tests will catch most of the resulting
errors and this commit adds extra tests to catch the remaining errors.

PR-URL: https://github.com/nodejs/io.js/pull/2282
Reviewed-By: Roman Reiss <me@silverwind.io>
lib/path.js
test/parallel/test-path-parse-format.js

index e0c5bca..78c6157 100644 (file)
@@ -76,7 +76,7 @@ function win32SplitPath(filename) {
   // Separate device+slash from tail
   var result = splitDeviceRe.exec(filename),
       device = (result[1] || '') + (result[2] || ''),
-      tail = result[3] || '';
+      tail = result[3];
   // Split the tail into dir, basename and extension
   var result2 = splitTailRe.exec(tail),
       dir = result2[1],
@@ -386,9 +386,6 @@ win32.parse = function(pathString) {
   assertPath(pathString);
 
   var allParts = win32SplitPath(pathString);
-  if (!allParts || allParts.length !== 4) {
-    throw new TypeError("Invalid path '" + pathString + "'");
-  }
   return {
     root: allParts[0],
     dir: allParts[0] + allParts[1].slice(0, -1),
@@ -590,13 +587,6 @@ posix.parse = function(pathString) {
   assertPath(pathString);
 
   var allParts = posixSplitPath(pathString);
-  if (!allParts || allParts.length !== 4) {
-    throw new TypeError("Invalid path '" + pathString + "'");
-  }
-  allParts[1] = allParts[1] || '';
-  allParts[2] = allParts[2] || '';
-  allParts[3] = allParts[3] || '';
-
   return {
     root: allParts[0],
     dir: allParts[0] + allParts[1].slice(0, -1),
index 677bf32..e90fe21 100644 (file)
@@ -9,6 +9,7 @@ var winPaths = [
   '\\foo\\C:',
   'file',
   '.\\file',
+  '',
 
   // unc
   '\\\\server\\share\\file_path',
@@ -32,7 +33,8 @@ var unixPaths = [
   'file',
   '.\\file',
   './file',
-  'C:\\foo'
+  'C:\\foo',
+  ''
 ];
 
 var unixSpecialCaseFormatTests = [
@@ -52,8 +54,6 @@ var errors = [
    message: /Path must be a string. Received 1/},
   {method: 'parse', input: [],
    message: /Path must be a string. Received undefined/},
-  // {method: 'parse', input: [''],
-  //  message: /Invalid path/}, // omitted because it's hard to trigger!
   {method: 'format', input: [null],
    message: /Parameter 'pathObject' must be an object, not/},
   {method: 'format', input: [''],
@@ -93,8 +93,13 @@ function checkErrors(path) {
 }
 
 function checkParseFormat(path, paths) {
-  paths.forEach(function(element, index, array) {
+  paths.forEach(function(element) {
     var output = path.parse(element);
+    assert.strictEqual(typeof output.root, 'string');
+    assert.strictEqual(typeof output.dir, 'string');
+    assert.strictEqual(typeof output.base, 'string');
+    assert.strictEqual(typeof output.ext, 'string');
+    assert.strictEqual(typeof output.name, 'string');
     assert.strictEqual(path.format(output), element);
     assert.strictEqual(output.dir, output.dir ? path.dirname(element) : '');
     assert.strictEqual(output.base, path.basename(element));