aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-11-28 12:22:46 -0500
committerPeter Zhu <peter@peterzhu.ca>2023-11-28 12:22:46 -0500
commitfadd28c7ba6b55ec934f379cfc30a8111e340404 (patch)
tree7168bfe5e6c102f6d32853e7b2e72e9ce263d9c4 /test
parent476a231e7e2c2a370ea9f47c9b62e8d6d3d9442d (diff)
downloadruby-fadd28c7ba6b55ec934f379cfc30a8111e340404.tar.gz
[ruby/irb] Change show_source tests into integration tests
* Remove trailing spaces * Migrate show_source tests to integration tests Because show_source tests often need to define class and/or methods, they can easily leak state to other tests. Changing them to integration tests will ensure that they are run in a clean environment. * Fix NoMethodError caused by SourceFinder#method_target https://github.com/ruby/irb/commit/3c39f13397c72a8db24e50afdcb8942e6c4ea12f
Diffstat (limited to 'test')
-rw-r--r--test/irb/cmd/test_show_source.rb263
-rw-r--r--test/irb/test_cmd.rb228
2 files changed, 263 insertions, 228 deletions
diff --git a/test/irb/cmd/test_show_source.rb b/test/irb/cmd/test_show_source.rb
new file mode 100644
index 0000000000..89b1142390
--- /dev/null
+++ b/test/irb/cmd/test_show_source.rb
@@ -0,0 +1,263 @@
+# frozen_string_literal: false
+require 'irb'
+
+require_relative "../helper"
+
+module TestIRB
+ class ShowSourceTest < IntegrationTestCase
+ def setup
+ super
+
+ write_rc <<~'RUBY'
+ IRB.conf[:USE_PAGER] = false
+ RUBY
+ end
+
+ def test_show_source
+ write_ruby <<~'RUBY'
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source IRB.conf"
+ type "exit"
+ end
+
+ assert_match(%r[/irb\/init\.rb], out)
+ end
+
+ def test_show_source_alias
+ write_ruby <<~'RUBY'
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "$ IRB.conf"
+ type "exit"
+ end
+
+ assert_match(%r[/irb\/init\.rb], out)
+ end
+
+ def test_show_source_string
+ write_ruby <<~'RUBY'
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source 'IRB.conf'"
+ type "exit"
+ end
+
+ assert_match(%r[/irb\/init\.rb], out)
+ end
+
+ def test_show_source_method_s
+ write_ruby <<~RUBY
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#foo -s"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+def foo\r\n end\r\n], out)
+ end
+
+ def test_show_source_method_s_with_incorrect_signature
+ write_ruby <<~RUBY
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#fooo -s"
+ type "exit"
+ end
+
+ assert_match(%r[Error: Couldn't locate a super definition for Bar#fooo], out)
+ end
+
+ def test_show_source_private_method
+ write_ruby <<~RUBY
+ class Bar
+ private def foo
+ end
+ end
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#foo"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+private def foo\r\n end\r\n], out)
+ end
+
+ def test_show_source_private_singleton_method
+ write_ruby <<~RUBY
+ class Bar
+ private def foo
+ end
+ end
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "bar = Bar.new"
+ type "show_source bar.foo"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+private def foo\r\n end\r\n], out)
+ end
+
+ def test_show_source_method_multiple_s
+ write_ruby <<~RUBY
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ class Bob < Bar
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bob#foo -ss"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+def foo\r\n end\r\n], out)
+ end
+
+ def test_show_source_method_no_instance_method
+ write_ruby <<~RUBY
+ class Baz
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#foo -s"
+ type "exit"
+ end
+
+ assert_match(%r[Error: Couldn't locate a super definition for Bar#foo], out)
+ end
+
+ def test_show_source_method_exceeds_super_chain
+ write_ruby <<~RUBY
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#foo -ss"
+ type "exit"
+ end
+
+ assert_match(%r[Error: Couldn't locate a super definition for Bar#foo], out)
+ end
+
+ def test_show_source_method_accidental_characters
+ write_ruby <<~'RUBY'
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "show_source Bar#foo -sddddd"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+def foo\r\n end], out)
+ end
+
+ def test_show_source_receiver_super
+ write_ruby <<~RUBY
+ class Baz
+ def foo
+ end
+ end
+
+ class Bar < Baz
+ def foo
+ super
+ end
+ end
+
+ binding.irb
+ RUBY
+
+ out = run_ruby_file do
+ type "bar = Bar.new"
+ type "show_source bar.foo -s"
+ type "exit"
+ end
+
+ assert_match(%r[#{@ruby_file.to_path}:2\s+def foo\r\n end], out)
+ end
+ end
+end
diff --git a/test/irb/test_cmd.rb b/test/irb/test_cmd.rb
index ee987920f3..345f04bcf2 100644
--- a/test/irb/test_cmd.rb
+++ b/test/irb/test_cmd.rb
@@ -449,234 +449,6 @@ module TestIRB
end
end
- class ShowSourceTest < CommandTestCase
- def test_show_source
- out, err = execute_lines(
- "show_source IRB.conf\n",
- )
- assert_empty err
- assert_match(%r[/irb\/init\.rb], out)
- end
-
- def test_show_source_method
- out, err = execute_lines(
- "p show_source('IRB.conf')\n",
- )
- assert_empty err
- assert_match(%r[/irb\/init\.rb], out)
- end
-
- def test_show_source_method_s
- code = <<~RUBY
- class Baz
- def foo
- end
- end
-
- class Bar < Baz
- def foo
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbar.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbar.rb'\n",
- "show_source Bar#foo -s",
- )
- assert_match(%r[bazbar.rb:2\n\n def foo\n end\n\n=> nil\n], out)
- File.delete("#{@tmpdir}/bazbar.rb")
- end
-
- def test_show_source_method_multiple_s
- code = <<~RUBY
- class Baz
- def fob
- end
- end
-
- class Bar < Baz
- def fob
- super
- end
- end
-
- class Bob < Bar
- def fob
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbarbob.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbarbob.rb'\n",
- "show_source Bob#fob -ss",
- )
- assert_match(%r[bazbarbob.rb:2\n\n def fob\n end\n\n=> nil\n], out)
- File.delete("#{@tmpdir}/bazbarbob.rb")
- end
-
- def test_show_source_method_no_instance_method
- code = <<~RUBY
- class Baz
- end
-
- class Bar < Baz
- def fee
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbar.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbar.rb'\n",
- "show_source Bar#fee -s",
- )
- assert_match(%r[Error: Couldn't locate a super definition for Bar#fee\n], out)
- File.delete("#{@tmpdir}/bazbar.rb")
- end
-
- def test_show_source_method_exceeds_super_chain
- code = <<~RUBY
- class Baz
- def fow
- end
- end
-
- class Bar < Baz
- def fow
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbar.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbar.rb'\n",
- "show_source Bar#fow -ss",
- )
- assert_match(%r[Error: Couldn't locate a super definition for Bar#fow\n], out)
- File.delete("#{@tmpdir}/bazbar.rb")
- end
-
- def test_show_source_method_accidental_characters
- code = <<~RUBY
- class Baz
- def fol
- end
- end
-
- class Bar < Baz
- def fol
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbar.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbar.rb'\n",
- "show_source Bar#fol -sddddd",
- )
-
- assert_match(%r[bazbar.rb:2\n\n def fol\n end\n\n=> nil\n], out)
- File.delete("#{@tmpdir}/bazbar.rb")
- end
-
- def test_show_source_receiver_super
- code = <<~RUBY
- class Baz
- def fot
- end
- end
-
- class Bar < Baz
- def fot
- super
- end
- end
- RUBY
- File.write("#{@tmpdir}/bazbar.rb", code)
- out, err = execute_lines(
- "irb_load '#{@tmpdir}/bazbar.rb'\n",
- "bar = Bar.new",
- "show_source bar.fot -s"
- )
- assert_match(%r[bazbar.rb:2\n\n def fot\n end\n\n=> nil\n], out)
- File.delete("#{@tmpdir}/bazbar.rb")
- end
-
- def test_show_source_string
- out, err = execute_lines(
- "show_source 'IRB.conf'\n",
- )
- assert_empty err
- assert_match(%r[/irb\/init\.rb], out)
- end
-
- def test_show_source_alias
- out, err = execute_lines(
- "$ 'IRB.conf'\n",
- conf: { COMMAND_ALIASES: { :'$' => :show_source } }
- )
- assert_empty err
- assert_match(%r[/irb\/init\.rb], out)
- end
-
- def test_show_source_end_finder
- eval(code = <<-EOS, binding, __FILE__, __LINE__ + 1)
- def show_source_test_method
- unless true
- end
- end unless defined?(show_source_test_method)
- EOS
-
- out, err = execute_lines(
- "show_source '#{self.class.name}#show_source_test_method'\n",
- )
-
- assert_empty err
- assert_include(out, code)
- end
-
- def test_show_source_private_instance
- eval(code = <<-EOS, binding, __FILE__, __LINE__ + 1)
- class PrivateInstanceTest
- private def show_source_test_method
- unless true
- end
- end unless private_method_defined?(:show_source_test_method)
- end
- EOS
-
- out, err = execute_lines(
- "show_source '#{self.class.name}::PrivateInstanceTest#show_source_test_method'\n",
- )
-
- assert_empty err
- assert_include(out, code.lines[1..-2].join)
- end
-
-
- def test_show_source_private
- eval(code = <<-EOS, binding, __FILE__, __LINE__ + 1)
- class PrivateTest
- private def show_source_test_method
- unless true
- end
- end unless private_method_defined?(:show_source_test_method)
- end
-
- Instance = PrivateTest.new unless defined?(Instance)
- EOS
-
- out, err = execute_lines(
- "show_source '#{self.class.name}::Instance.show_source_test_method'\n",
- )
-
- assert_empty err
- assert_include(out, code.lines[1..-4].join)
- end
- end
-
class WorkspaceCommandTestCase < CommandTestCase
def setup
super