From 34ec7c5b496fb4dad4536b6e71333484f1d99c4f Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 21 Aug 2014 13:10:34 +0000 Subject: [PATCH] win32/test_console_attr.rb: reset attributes * ext/-test-/win32/console/attribute.c (console_set_attribute): set console attribute. * test/-ext-/win32/test_console_attr.rb (reset): reset attributes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47242 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/-test-/win32/console/attribute.c | 12 ++++++++++++ test/-ext-/win32/test_console_attr.rb | 9 ++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ext/-test-/win32/console/attribute.c b/ext/-test-/win32/console/attribute.c index 6b8bd96c49..8941272ea7 100644 --- a/ext/-test-/win32/console/attribute.c +++ b/ext/-test-/win32/console/attribute.c @@ -18,6 +18,17 @@ console_info(VALUE io) INT2FIX(csbi.wAttributes)); } +static VALUE +console_set_attribute(VALUE io, VALUE attr) +{ + int fd = NUM2INT(rb_funcallv(io, rb_intern("fileno"), 0, 0)); + HANDLE h = (HANDLE)rb_w32_get_osfhandle(fd); + + if (h == (HANDLE)-1) rb_raise(rb_eIOError, "invalid io"); + SetConsoleTextAttribute(h, NUM2INT(attr)); + return Qnil; +} + #define FOREGROUND_MASK (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY) #define BACKGROUND_MASK (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY) @@ -29,6 +40,7 @@ Init_attribute(VALUE m) "cur_x", "cur_y", "attr", NULL); rb_define_method(rb_cIO, "console_info", console_info, 0); + rb_define_method(rb_cIO, "console_attribute", console_set_attribute, 1); rb_define_const(m, "FOREGROUND_MASK", INT2FIX(FOREGROUND_MASK)); rb_define_const(m, "FOREGROUND_BLUE", INT2FIX(FOREGROUND_BLUE)); diff --git a/test/-ext-/win32/test_console_attr.rb b/test/-ext-/win32/test_console_attr.rb index 6e8f93ab99..3afb2d9378 100644 --- a/test/-ext-/win32/test_console_attr.rb +++ b/test/-ext-/win32/test_console_attr.rb @@ -4,13 +4,12 @@ if /mswin|mingw/ =~ RUBY_PLATFORM and STDOUT.tty? require 'test/unit' class Test_Win32Console < Test::Unit::TestCase - def setup - print "\e[m!" + def reset + STDOUT.console_attribute(7) end - def teardown - print "\e[m!" - end + alias setup reset + alias teardown reset def test_default info = STDOUT.console_info