From 8791bed5edae41ac0f681bd85be185e306d0cc5d Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Sun, 30 Aug 2026 00:08:19 +0200 Subject: [PATCH 1/3] Ignore nonpositive console size overrides --- lib/io/console/size.rb | 6 ++++-- test/io/console/test_io_console.rb | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/io/console/size.rb b/lib/io/console/size.rb index 14b9a74..5a3ed0a 100644 --- a/lib/io/console/size.rb +++ b/lib/io/console/size.rb @@ -1,9 +1,11 @@ # frozen_string_literal: false # fallback to console window size def IO.default_console_size + lines = ENV["LINES"].to_i + columns = ENV["COLUMNS"].to_i [ - ENV["LINES"].to_i.nonzero? || 25, - ENV["COLUMNS"].to_i.nonzero? || 80, + lines.positive? ? lines : 25, + columns.positive? ? columns : 80, ] end diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb index 48743fc..1043156 100644 --- a/test/io/console/test_io_console.rb +++ b/test/io/console/test_io_console.rb @@ -691,7 +691,7 @@ def test_ttyname if noctty require 'tempfile' NOCTTY = noctty - def run_noctty(src) + def run_noctty(src, require: "io/console", env: nil) t = Tempfile.new("noctty_out") t.close t2 = Tempfile.new("noctty_run") @@ -701,12 +701,13 @@ def run_noctty(src) '-e', 'open(ARGV[0], "w") {|f|', '-e', 'STDOUT.reopen(f)', '-e', 'STDERR.reopen(f)', - '-e', 'require "io/console"', + '-e', "require #{require.dump}", '-e', "f.puts (#{src}).inspect", '-e', 'f.flush', '-e', 'File.unlink(ARGV[1])', '-e', '}', '--', t.path, t2.path] + cmd.unshift(env) if env assert_ruby_status(cmd, rubybin: NOCTTY[0]) 30.times do break unless File.exist?(t2.path) @@ -725,6 +726,25 @@ def test_noctty assert_equal(["nil"], run_noctty("STDIN.ttyname rescue $!")) end end + + def test_default_console_size + [ + [40, 100], + [nil, 50], + [30, nil], + [0, 50], + [30, 0], + [-1, 50], + [30, -1], + ].each do |lines, columns| + result = run_noctty("IO.console_size", + require: "io/console/size", + env: {"LINES"=>lines&.to_s, "COLUMNS"=>columns&.to_s}) + lines = 25 unless lines&.positive? + columns = 80 unless columns&.positive? + assert_equal([[lines, columns].inspect], result) + end + end end end From e94292b20f962ee4db450dac6640a65956dbdb49 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 4 Sep 2026 11:15:19 +0900 Subject: [PATCH 2/3] Propagate the path of `io/console/size` --- test/io/console/test_io_console.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb index 1043156..d00ad5c 100644 --- a/test/io/console/test_io_console.rb +++ b/test/io/console/test_io_console.rb @@ -1,6 +1,7 @@ # frozen_string_literal: false begin require 'io/console' + require 'io/console/size' require 'test/unit' require 'pty' rescue LoadError From 4e174e0408ecbcfb43e69b7207611ce2c767f52e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 4 Sep 2026 13:56:44 +0900 Subject: [PATCH 3/3] Add the script library path --- Rakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Rakefile b/Rakefile index db9dd5c..c67301a 100644 --- a/Rakefile +++ b/Rakefile @@ -35,6 +35,7 @@ Rake::TestTask.new(:test) do |t| elsif RUBY_ENGINE == "jruby" t.libs.unshift "jruby/lib" end + t.libs << "lib" t.libs << "test/lib" t.ruby_opts << "-rhelper" t.test_files = FileList["test/**/test_*.rb"]