diff options
author | Nobuyoshi Nakada <[email protected]> | 2025-06-29 16:07:07 +0900 |
---|---|---|
committer | git <[email protected]> | 2025-06-29 07:52:45 +0000 |
commit | 259b0233d826104840d0b52ebb14e0a3435d4497 (patch) | |
tree | fe6d4f35229891667f90c863f6c71c15d6edb3fa | |
parent | 9fd793e0bd88e6b573fd4363595b3d7019b8c3b9 (diff) |
[ruby/optparse] Fix OptionParser#program_name not to strip suffix unexpectedly
https://github.com/ruby/optparse/commit/740ffa76c0
-rw-r--r-- | lib/optparse.rb | 10 | ||||
-rw-r--r-- | test/optparse/test_optparse.rb | 12 |
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/optparse.rb b/lib/optparse.rb index 9cbd377545..7838af7783 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -1294,7 +1294,15 @@ XXX # to $0. # def program_name - @program_name || File.basename($0, '.*') + @program_name || strip_ext(File.basename($0)) + end + + private def strip_ext(name) # :nodoc: + exts = /#{ + require "rbconfig" + Regexp.union(RbConfig::CONFIG["EXECUTABLE_EXTS"]) + }\z/o + name.sub(exts, "") end # for experimental cascading :-) diff --git a/test/optparse/test_optparse.rb b/test/optparse/test_optparse.rb index d50203bb63..ae12ae5677 100644 --- a/test/optparse/test_optparse.rb +++ b/test/optparse/test_optparse.rb @@ -216,4 +216,16 @@ class TestOptionParser < Test::Unit::TestCase end end end + + def test_program_name + program = $0 + $0 = "rdbg3.5" + assert_equal "rdbg3.5", OptionParser.new.program_name + RbConfig::CONFIG["EXECUTABLE_EXTS"].split(" ") do |ext| + $0 = "rdbg3.5" + ext + assert_equal "rdbg3.5", OptionParser.new.program_name + end + ensure + $0 = program + end end |