Author: laukpe
Date: Thu Sep 18 05:03:17 2008
New Revision: 757

Modified:
   trunk/atest/testdata/standard_libraries/operating_system/path.html
   trunk/src/robot/libraries/OperatingSystem.py

Log:
more split_extension tuning: handle multiple leading dots in the file name, also handle trailing dots (who'd use them??) so that they are always part of the extension

Modified: trunk/atest/testdata/standard_libraries/operating_system/path.html
==============================================================================
--- trunk/atest/testdata/standard_libraries/operating_system/path.html (original) +++ trunk/atest/testdata/standard_libraries/operating_system/path.html Thu Sep 18 05:03:17 2008
@@ -4695,7 +4695,7 @@



-      <td align="undefined" valign="undefined">abc.</td>
+      <td align="undefined" valign="undefined">abc</td>



@@ -4768,7 +4768,7 @@



-      <td align="undefined" valign="undefined">abc</td>
+      <td align="undefined" valign="undefined">abc.</td>



@@ -4776,7 +4776,7 @@



-      <td align="undefined" valign="undefined">abc</td>
+      <td align="undefined" valign="undefined">abc.</td>



@@ -4816,7 +4816,9 @@



-    <tr>
+ <tr><td></td><td align="undefined" valign="undefined">Split Extension And +Check</td><td align="undefined" valign="undefined">abc.ext.</td><td align="undefined" valign="undefined">abc</td><td align="undefined" valign="undefined">ext.</td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And +Check</td><td align="undefined" valign="undefined">abc...ext...</td><td align="undefined" valign="undefined">abc..</td><td align="undefined" valign="undefined">ext...</td><td></td></tr><tr>



@@ -4890,7 +4892,9 @@


<tr><td></td><td align="undefined" valign="undefined">Split Extension And -Check</td><td align="undefined" valign="undefined">.abc.ext</td><td>.abc</td><td align="undefined" valign="undefined">ext<br></td><td></td></tr><tr> +Check</td><td align="undefined" valign="undefined">.abc.ext</td><td>.abc</td><td align="undefined" valign="undefined">ext<br></td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And +Check</td><td align="undefined" valign="undefined">..abc.ext</td><td>..abc</td><td align="undefined" valign="undefined">ext<br></td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And +Check</td><td align="undefined" valign="undefined">...abc....ext...</td><td>...abc...</td><td align="undefined" valign="undefined">ext...<br></td><td></td></tr><tr>



@@ -5402,7 +5406,15 @@
 Check</td><td align="undefined" valign="undefined">
path/.file</td><td align="undefined" valign="undefined">path${/}.file</td><td>\</td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And
 Check</td><td align="undefined" valign="undefined">
-path/..ext</td><td align="undefined" valign="undefined">path${/}.</td><td>ext</td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Forward Slash Works as Separator On All OSes</td><td>${path} =</td><td>Join Path</td><td>a/b</td><td>c/d/e</td><td>f/g</td></tr><tr><td></td><td>Should Be Equal</td><td>${path}</td><td>a${/}b${/}c${/}d${/}e${/}f${/}g</td><td></td><td></td></tr><tr><td></td><td>Normalize Path And Check</td><td>foo/bar/../zap</td><td>foo${/}zap</td><td></td><td></td></tr><tr><td></td><td>Split Path And Check</td><td>foo/bar/zap</td><td>foo${/}bar</td><td>zap</td><td></td></tr><tr><td></td><td>Split Extension And Check</td><td>foo/bar/zap.txt</td><td>foo${/}bar${/}zap</td><td>txt</td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td></tr> +path/...file.ext</td><td align="undefined" valign="undefined">path${/}...file</td><td>ext<br></td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And
+Check</td><td align="undefined" valign="undefined">
+path/...file</td><td align="undefined" valign="undefined">path${/}...file</td><td>\</td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And
+Check</td><td align="undefined" valign="undefined">
+path/file.ext.</td><td align="undefined" valign="undefined">path${/}file</td><td>ext.</td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And
+Check</td><td align="undefined" valign="undefined">
+path/file.ext...</td><td align="undefined" valign="undefined">path${/}file</td><td>ext...</td><td></td></tr><tr><td></td><td align="undefined" valign="undefined">Split Extension And
+Check</td><td align="undefined" valign="undefined">
+path/...file..ext...</td><td align="undefined" valign="undefined">path${/}...file.</td><td>ext...</td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Forward Slash Works as Separator On All OSes</td><td>${path} =</td><td>Join Path</td><td>a/b</td><td>c/d/e</td><td>f/g</td></tr><tr><td></td><td>Should Be Equal</td><td>${path}</td><td>a${/}b${/}c${/}d${/}e${/}f${/}g</td><td></td><td></td></tr><tr><td></td><td>Normalize Path And Check</td><td>foo/bar/../zap</td><td>foo${/}zap</td><td></td><td></td></tr><tr><td></td><td>Split Path And Check</td><td>foo/bar/zap</td><td>foo${/}bar</td><td>zap</td><td></td></tr><tr><td></td><td>Split Extension And Check</td><td>foo/bar/zap.txt</td><td>foo${/}bar${/}zap</td><td>txt</td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>




Modified: trunk/src/robot/libraries/OperatingSystem.py
==============================================================================
--- trunk/src/robot/libraries/OperatingSystem.py        (original)
+++ trunk/src/robot/libraries/OperatingSystem.py        Thu Sep 18 05:03:17 2008
@@ -947,13 +947,13 @@
         removed). The base path and extension are returned as separate
         components so that extension separator ('.') is removed. If
         the path contains no extension, an empty string is returned
-        for it.
+        for it.
+
+        Possible leading dots in in the file name are considered to be
+        part of the basename, and not extension separators, starting
+        from Robot Framework 2.0.2. With earlier versions, the last
+        example below would return 'file' as an extension.

-        Starting from 2.0.2, files starting with a dot are handled so
-        that the leading dot is always part of the file name. With
-        earlier versions, the last example below would return 'file' as
-        an extension.
-
         Examples:
         | ${path} | ${ext} = | Split Extension | file.extension    |
         | ${p2}   | ${e2} =  | Split Extension | path/file.ext     |
@@ -971,12 +971,22 @@
         """
         path = self.normalize_path(path)
         basename = os.path.basename(path)
-        if basename.startswith('.') and basename.count('.') == 1:
+        if basename.startswith('.' * basename.count('.')):
             return path, ''
-        base, ext = os.path.splitext(path)
+        if path.endswith('.'):
+            path2 = path.rstrip('.')
+            trailing_dots = '.' * (len(path) - len(path2))
+            path = path2
+        else:
+            trailing_dots = ''
+        basepath, ext = os.path.splitext(path)
         if ext.startswith('.'):
             ext = ext[1:]
-        return base, ext
+        if ext:
+            ext += trailing_dots
+        else:
+            basepath += trailing_dots
+        return basepath, ext

     # Misc

Reply via email to