summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-15 14:19:55 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-15 14:19:55 +0000
commitd9aa81ea3eadd09de5d856ff26f57e3e7cfc0e3f (patch)
tree91766da1a477e88e6caeba94eef4d4847235bc6f
parent7514d35dc777b003d714d36be703b0c632ceb18f (diff)
merge revision(s) 40117,40118: [Backport #8222]
* test/test_curses.rb: tests for getch. * ext/curses/curses.c (Init_curses): fix implementation function, crmode should be same as cbreak. [ruby-core:54013] [Bug #8222] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@40311 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ext/curses/curses.c2
-rw-r--r--test/test_curses.rb48
-rw-r--r--version.h2
4 files changed, 55 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index d97686a1e0..d375f180fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Apr 15 23:19:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/curses.c (Init_curses): fix implementation function,
+ crmode should be same as cbreak. [ruby-core:54013] [Bug #8222]
+
Mon Apr 15 00:25:00 2013 Tanaka Akira <akr@fsij.org>
* time.c (num_exact): use to_r method only if to_int method is
diff --git a/ext/curses/curses.c b/ext/curses/curses.c
index 175e32cff9..88b1bdb3aa 100644
--- a/ext/curses/curses.c
+++ b/ext/curses/curses.c
@@ -2715,7 +2715,7 @@ Init_curses(void)
rb_define_module_function(mCurses, "noraw", curses_noraw, 0);
rb_define_module_function(mCurses, "cbreak", curses_cbreak, 0);
rb_define_module_function(mCurses, "nocbreak", curses_nocbreak, 0);
- rb_define_module_function(mCurses, "crmode", curses_nocbreak, 0);
+ rb_define_module_function(mCurses, "crmode", curses_cbreak, 0);
rb_define_module_function(mCurses, "nocrmode", curses_nocbreak, 0);
rb_define_module_function(mCurses, "nl", curses_nl, 0);
rb_define_module_function(mCurses, "nonl", curses_nonl, 0);
diff --git a/test/test_curses.rb b/test/test_curses.rb
index 03462d6f7e..9432c024bb 100644
--- a/test/test_curses.rb
+++ b/test/test_curses.rb
@@ -1,7 +1,9 @@
require 'test/unit'
+require_relative 'ruby/envutil'
begin
require 'curses'
+ require 'pty'
rescue LoadError
end
@@ -10,3 +12,49 @@ class TestCurses < Test::Unit::TestCase
assert_instance_of(String, Curses::VERSION)
end
end if defined? Curses
+
+class TestCurses
+ def run_curses(src, input = nil, timeout: 1)
+ PTY.spawn(EnvUtil.rubybin, "-e", <<-"src") {|r, w, pid|
+require 'timeout'
+require 'curses'
+include Curses
+init_screen
+begin
+ result = Timeout.timeout(#{timeout}) do
+ #{src}
+ end
+rescue Exception => e
+ensure
+ close_screen
+ puts "", [Marshal.dump([result, e])].pack('m').delete("\n")
+end
+src
+ if input
+ w.print(input)
+ w.flush
+ end
+ res = r.read
+ return unless res
+ res, error = Marshal.load(res[/(.*)\Z/, 1].unpack('m')[0])
+ raise error if error
+ return res
+ }
+ end
+
+ def test_getch
+ assert_equal("a", run_curses("getch", "a"))
+ end
+ def test_getch_cbreak
+ assert_equal("a", run_curses("cbreak; getch", "a"))
+ end
+ def test_getch_nocbreak
+ assert_raise(Timeout::Error) {run_curses("nocbreak; getch", "a")}
+ end
+ def test_getch_crmode
+ assert_equal("a", run_curses("crmode; getch", "a"))
+ end
+ def test_getch_nocrmode
+ assert_raise(Timeout::Error) {run_curses("nocrmode; getch", "a")}
+ end
+end if defined? TestCurses and defined? PTY
diff --git a/version.h b/version.h
index bedef9bfe9..a699feda2b 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2013-04-15"
-#define RUBY_PATCHLEVEL 136
+#define RUBY_PATCHLEVEL 137
#define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 4