summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/optparse.rb3
-rw-r--r--test/optparse/test_optarg.rb2
-rw-r--r--test/optparse/test_optparse.rb17
-rw-r--r--test/optparse/test_placearg.rb3
-rw-r--r--test/optparse/test_reqarg.rb2
6 files changed, 32 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index ec0bf7615a..994e7502a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Jan 16 16:41:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (Regexp): fix incorrect options when casting to
+ a Regexp, and suppress encoding option warnings.
+ https://github.com/ruby/ruby/pull/82
+
Mon Jan 16 11:22:38 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* win32/win32.c (rb_chsize): no need to get the current file size.
diff --git a/lib/optparse.rb b/lib/optparse.rb
index 79a95c1462..a448459d46 100644
--- a/lib/optparse.rb
+++ b/lib/optparse.rb
@@ -1709,7 +1709,8 @@ XXX
f |= Regexp::IGNORECASE if /i/ =~ o
f |= Regexp::MULTILINE if /m/ =~ o
f |= Regexp::EXTENDED if /x/ =~ o
- k = o.delete("^imx")
+ k = o.delete("imx")
+ k = nil if k.empty?
end
Regexp.new(s || all, f, k)
end
diff --git a/test/optparse/test_optarg.rb b/test/optparse/test_optarg.rb
index 2058e3719d..3114b80fc5 100644
--- a/test/optparse/test_optarg.rb
+++ b/test/optparse/test_optarg.rb
@@ -5,6 +5,8 @@ class TestOptionParser::OptArg < TestOptionParser
super
@opt.def_option("-x[VAL]") {|x| @flag = x}
@opt.def_option("--option[=VAL]") {|x| @flag = x}
+ @opt.def_option("--regexp[=REGEXP]", Regexp) {|x| @reopt = x}
+ @reopt = nil
end
def test_short
diff --git a/test/optparse/test_optparse.rb b/test/optparse/test_optparse.rb
index 6aa8fac757..76b8f7b183 100644
--- a/test/optparse/test_optparse.rb
+++ b/test/optparse/test_optparse.rb
@@ -6,10 +6,17 @@ class TestOptionParser < Test::Unit::TestCase
@opt = OptionParser.new
@flag = self.class # cannot set by option
end
+
+ class DummyOutput < String
+ alias write <<
+ end
def no_error(*args)
+ $stderr, stderr = DummyOutput.new, $stderr
assert_nothing_raised(*args) {return yield}
ensure
+ stderr, $stderr = $stderr, stderr
$!.backtrace.delete_if {|e| /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}/o =~ e} if $!
+ assert_empty(stderr)
end
def test_permute
@@ -45,4 +52,14 @@ class TestOptionParser < Test::Unit::TestCase
assert_equal(%w"foo -- --help bar", no_error {@opt.order!(%w"foo -- --help bar")})
assert_equal(self.class, @flag)
end
+
+ def test_regexp
+ return unless defined?(@reopt)
+ assert_equal(%w"", no_error {@opt.parse!(%w"--regexp=/foo/")})
+ assert_equal(/foo/, @reopt)
+ assert_equal(%w"", no_error {@opt.parse!(%w"--regexp=/foo/i")})
+ assert_equal(/foo/i, @reopt)
+ assert_equal(%w"", no_error {@opt.parse!(%w"--regexp=/foo/n")})
+ assert_equal(/foo/n, @reopt)
+ end
end
diff --git a/test/optparse/test_placearg.rb b/test/optparse/test_placearg.rb
index 1aec01efb4..0bbd1a007e 100644
--- a/test/optparse/test_placearg.rb
+++ b/test/optparse/test_placearg.rb
@@ -6,7 +6,10 @@ class TestOptionParser::PlaceArg < TestOptionParser
@opt.def_option("-x [VAL]") {|x| @flag = x}
@opt.def_option("--option [VAL]") {|x| @flag = x}
@opt.def_option("-T [level]", /^[0-4]$/, Integer) {|x| @topt = x}
+ @topt = nil
@opt.def_option("-n") {}
+ @opt.def_option("--regexp [REGEXP]", Regexp) {|x| @reopt = x}
+ @reopt = nil
end
def test_short
diff --git a/test/optparse/test_reqarg.rb b/test/optparse/test_reqarg.rb
index 47c9e9a8a7..397da4a593 100644
--- a/test/optparse/test_reqarg.rb
+++ b/test/optparse/test_reqarg.rb
@@ -7,6 +7,8 @@ module TestOptionParser::ReqArg
super
@opt.def_option("-xVAL") {|x| @flag = x}
@opt.def_option("--option=VAL") {|x| @flag = x}
+ @opt.def_option("--regexp=REGEXP", Regexp) {|x| @reopt = x}
+ @reopt = nil
end
end
class Def2 < TestOptionParser