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