summaryrefslogtreecommitdiff
path: root/test/irb
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2021-01-04 19:38:22 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2021-01-04 20:14:31 -0800
commit515d6b47ad9e0933c94c9dc4c1f296ef2d555934 (patch)
tree7a06961e52fee0a176a6d35b95ecd393d234fed2 /test/irb
parent451b45605161a801e8a1e3c53e02d74de82a096a (diff)
[ruby/irb] Stringify when a non-object is passed to PP#text
If a nested object is passed to #pp, it may be sometimes passed to the #text method as an object without being stringified. This is fixed on the Ruby main repository; https://github.com/ruby/ruby/commit/433a3be86a811de0b4adbb92e054ee3a6fc6b4d8 but it was a bug of Ripper so still needs this workaround for using irb as a gem on Ruby 3.0.0 or earlier. Co-authored-by: k0kubun <takashikkbn@gmail.com> https://github.com/ruby/irb/commit/8d13df22ee
Diffstat (limited to 'test/irb')
-rw-r--r--test/irb/test_color.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/irb/test_color.rb b/test/irb/test_color.rb
index c0682b1..6ce6521 100644
--- a/test/irb/test_color.rb
+++ b/test/irb/test_color.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: false
require 'test/unit'
require 'irb/color'
+require 'irb/color_printer'
require 'rubygems'
require 'stringio'
@@ -152,6 +153,20 @@ module TestIRB
end
end
+ def test_color_printer
+ unless ripper_lexer_scan_supported?
+ skip 'Ripper::Lexer#scan is supported in Ruby 2.7+'
+ end
+ {
+ 1 => "#{BLUE}#{BOLD}1#{CLEAR}",
+ Struct.new('IRBTestColorPrinter', :a).new('test') => "#{GREEN}#<struct Struct::IRBTestColorPrinter#{CLEAR} a#{GREEN}=#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}#{RED}test#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}#{GREEN}>#{CLEAR}",
+ Ripper::Lexer.new('1').scan => "[#{GREEN}#<Ripper::Lexer::Elem:#{CLEAR} on_int@1:0 END token: #{RED}#{BOLD}\"#{CLEAR}#{RED}1#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}#{GREEN}>#{CLEAR}]",
+ }.each do |object, result|
+ actual = with_term { IRB::ColorPrinter.pp(object, '') }
+ assert_equal(result, actual, "Case: IRB::ColorPrinter.pp(#{object.inspect}, '')")
+ end
+ end
+
def test_inspect_colorable
{
1 => true,
@@ -184,6 +199,10 @@ module TestIRB
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
end
+ def ripper_lexer_scan_supported?
+ Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
+ end
+
def with_term
stdout = $stdout
io = StringIO.new