1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/file/extname_spec.rb
NAKAMURA Usaku 204dc3f39f Revert "Should return "." for File.extname("file.") also on Windows"
We want to introduce consistency and better compatibility with unixen,
but the Windows APIs doues not have consistency fundamentally and
we can not found any logical way...

This reverts commit 61aff0cd18.
2019-12-23 11:54:25 +09:00

66 lines
2.1 KiB
Ruby

# -*- encoding: utf-8 -*-
require_relative '../../spec_helper'
describe "File.extname" do
it "returns the extension (the portion of file name in path after the period)" do
File.extname("foo.rb").should == ".rb"
File.extname("/foo/bar.rb").should == ".rb"
File.extname("/foo.rb/bar.c").should == ".c"
File.extname("bar").should == ""
File.extname(".bashrc").should == ""
File.extname("/foo.bar/baz").should == ""
File.extname(".app.conf").should == ".conf"
end
it "returns the extension for edge cases" do
File.extname("").should == ""
File.extname(".").should == ""
File.extname("/").should == ""
File.extname("/.").should == ""
File.extname("..").should == ""
File.extname("...").should == ""
File.extname("....").should == ""
end
describe "for a filename ending with a dot" do
guard -> { platform_is :windows or ruby_version_is ""..."2.7" } do
it "returns ''" do
File.extname(".foo.").should == ""
File.extname("foo.").should == ""
end
end
guard -> { platform_is_not :windows and ruby_version_is "2.7" } do
it "returns '.'" do
File.extname(".foo.").should == "."
File.extname("foo.").should == "."
end
end
end
it "returns only the last extension of a file with several dots" do
File.extname("a.b.c.d.e").should == ".e"
end
it "accepts an object that has a #to_path method" do
File.extname(mock_to_path("a.b.c.d.e")).should == ".e"
end
it "raises a TypeError if not passed a String type" do
-> { File.extname(nil) }.should raise_error(TypeError)
-> { File.extname(0) }.should raise_error(TypeError)
-> { File.extname(true) }.should raise_error(TypeError)
-> { File.extname(false) }.should raise_error(TypeError)
end
it "raises an ArgumentError if not passed one argument" do
-> { File.extname }.should raise_error(ArgumentError)
-> { File.extname("foo.bar", "foo.baz") }.should raise_error(ArgumentError)
end
it "returns the extension for a multibyte filename" do
File.extname('Имя.m4a').should == ".m4a"
end
end