Bugs item #8676, was opened at 2007-02-15 10:09
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=8676&group_id=426

Category: Core
Group: 1.8.5
Status: Open
Resolution: None
Priority: 3
Submitted By: Daniel Berger (djberg96)
Assigned to: Nobody (None)
Summary: File.basename fails on Windows root paths

Initial Comment:
Ruby 1.8.5
Windows XP Pro, SP2

The File.basename method does not work properly on Windows root paths. IMO, calling File.basename on a root path should return itself. However, on MS Windows it appears to be dropping the volume name and it doesn't handle UNC root paths correctly:

require 'test/unit'

class TC_File_Basename_ClassMethod < Test::Unit::TestCase
   def test_basename_windows_root_forward_slash
      assert_equal("C:/", File.basename("C:/"))
   end

   def test_basename_windows_root_backslash
      assert_equal("C:\", File.basename("C:\"))  # Or "C:/" if you prefer
   end

   def test_basename_windows_unc_root_two_elements
      assert_equal("\\foo\bar", File.basename("\\foo\bar"))
   end

   def test_basename_windows_unc_root_one_element
      assert_equal("\\foo", File.basename("\\foo"))
   end
end

C:\Documents and Settings\djberge\My Documents\Ruby>ruby basename_bugs.rb
Loaded suite basename_bugs
Started
FFFF
Finished in 0.07 seconds.

  1) Failure:
test_basename_windows_root_backslash(TC_File_Basename_ClassMethod) [basename_bugs.rb:9]:
<"C:\"> expected but was
<"\">.

  2) Failure:
test_basename_windows_root_forward_slash(TC_File_Basename_ClassMethod) [basename_bugs.rb:5]:
<"C:/"> expected but was
<"/">.

  3) Failure:
test_basename_windows_unc_root_one_element(TC_File_Basename_ClassMethod) [basename_bugs.rb:17]:
<"\\foo"> expected but was
<"/">.

  4) Failure:
test_basename_windows_unc_root_two_elements(TC_File_Basename_ClassMethod) [basename_bugs.rb:13]:
<"\\foo\bar"> expected but was
<"/">.

4 tests, 4 assertions, 4 failures, 0 errors

This method should probably be moved to win32.c where you can use the Windows path handling functions from shlwapi.h to get things right, and convert the path separators as you see fit.

Regards,

Dan

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=8676&group_id=426