summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorStan Lo <stan001212@gmail.com>2024-07-03 18:17:38 +0100
committergit <svn-admin@ruby-lang.org>2024-07-03 17:17:42 +0000
commit7fe5f0a1d0e628e9e330169a5c2dedae0d40dedd (patch)
treea7cabf054f4ed2e1388437c564f57fe6150dd1dd /test
parentf4b313f7338f5fbe37f73aae29f70aeb474f7f5b (diff)
[ruby/irb] Introduce cd command
(https://github.com/ruby/irb/pull/971) It's essentially a combination of pushws and popws commands that are easier to use. Help message: ``` Usage: cd ([target]|..) IRB uses a stack of workspaces to keep track of context(s), with `pushws` and `popws` commands to manipulate the stack. The `cd` command is an attempt to simplify the operation and will be subject to change. When given: - an object, cd will use that object as the new context by pushing it onto the workspace stack. - "..", cd will leave the current context by popping the top workspace off the stack. - no arguments, cd will move to the top workspace on the stack by popping off all workspaces. Examples: cd Foo cd Foo.new cd @ivar cd .. cd ``` https://github.com/ruby/irb/commit/4a0e0e89b7
Diffstat (limited to 'test')
-rw-r--r--test/irb/command/test_cd.rb65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/irb/command/test_cd.rb b/test/irb/command/test_cd.rb
new file mode 100644
index 0000000000..4537286f73
--- /dev/null
+++ b/test/irb/command/test_cd.rb
@@ -0,0 +1,65 @@
+require "tempfile"
+require_relative "../helper"
+
+module TestIRB
+ class CDTest < IntegrationTestCase
+ def setup
+ super
+
+ write_ruby <<~'RUBY'
+ class Foo
+ class Bar
+ def bar
+ "this is bar"
+ end
+ end
+
+ def foo
+ "this is foo"
+ end
+ end
+
+ binding.irb
+ RUBY
+ end
+
+ def test_cd
+ out = run_ruby_file do
+ type "cd Foo"
+ type "ls"
+ type "cd Bar"
+ type "ls"
+ type "cd .."
+ type "exit"
+ end
+
+ assert_match(/irb\(Foo\):002>/, out)
+ assert_match(/Foo#methods: foo/, out)
+ assert_match(/irb\(Foo::Bar\):004>/, out)
+ assert_match(/Bar#methods: bar/, out)
+ assert_match(/irb\(Foo\):006>/, out)
+ end
+
+ def test_cd_moves_top_level_with_no_args
+ out = run_ruby_file do
+ type "cd Foo"
+ type "cd Bar"
+ type "cd"
+ type "exit"
+ end
+
+ assert_match(/irb\(Foo::Bar\):003>/, out)
+ assert_match(/irb\(main\):004>/, out)
+ end
+
+ def test_cd_with_error
+ out = run_ruby_file do
+ type "cd Baz"
+ type "exit"
+ end
+
+ assert_match(/Error: uninitialized constant Baz/, out)
+ assert_match(/irb\(main\):002>/, out) # the context should not change
+ end
+ end
+end