summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2025-06-29 16:07:07 +0900
committergit <[email protected]>2025-06-29 07:52:45 +0000
commit259b0233d826104840d0b52ebb14e0a3435d4497 (patch)
treefe6d4f35229891667f90c863f6c71c15d6edb3fa
parent9fd793e0bd88e6b573fd4363595b3d7019b8c3b9 (diff)
[ruby/optparse] Fix OptionParser#program_name not to strip suffix unexpectedly
https://github.com/ruby/optparse/commit/740ffa76c0
-rw-r--r--lib/optparse.rb10
-rw-r--r--test/optparse/test_optparse.rb12
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