mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
09ebd358e1
This change is aimed to simplify #1843 (Rework the Pry config). Current command state implementation gets in the way. We would like to simplify the Config class. The current implementation penetrates Pry codebase everywhere, and during my rework of the config I discovered that `watch` uses global command state. It means the state should survive `Pry.new` calls. With my (unpublished yet) implementation, the `watch` command fails to do so. I realised that we can refactor command state implementation to be global. It makes sense to me and also helps with the Config refactoring. With help of a dedicated class we can easily manage the command state (resetting).
93 lines
2.7 KiB
Ruby
93 lines
2.7 KiB
Ruby
describe Pry::Command::ShellCommand do
|
|
describe 'cd' do
|
|
before do
|
|
@o = Object.new
|
|
|
|
@t = pry_tester(@o) do
|
|
def command_state
|
|
Pry::CommandState.default.state_for(Pry::Command::ShellCommand.match)
|
|
end
|
|
end
|
|
end
|
|
|
|
after { Pry::CommandState.default.reset(Pry::Command::ShellCommand.match) }
|
|
|
|
describe ".cd" do
|
|
before do
|
|
allow(Dir).to receive(:chdir)
|
|
end
|
|
|
|
it "saves the current working directory" do
|
|
expect(Dir).to receive(:pwd).and_return("initial_path")
|
|
|
|
@t.eval ".cd new_path"
|
|
expect(@t.command_state.old_pwd).to eq("initial_path")
|
|
end
|
|
|
|
describe "given a path" do
|
|
it "sends the path to File.expand_path" do
|
|
expect(Dir).to receive(:chdir).with(File.expand_path("new_path"))
|
|
@t.eval ".cd new_path"
|
|
end
|
|
end
|
|
|
|
describe "given an empty string" do
|
|
it "sends ~ to File.expand_path" do
|
|
expect(Dir).to receive(:chdir).with(File.expand_path("~"))
|
|
@t.eval ".cd "
|
|
end
|
|
end
|
|
|
|
describe "given a dash" do
|
|
describe "given no prior directory" do
|
|
it "raises the correct error" do
|
|
expect { @t.eval ".cd -" }
|
|
.to raise_error(StandardError, "No prior directory available")
|
|
end
|
|
end
|
|
|
|
describe "given a prior directory" do
|
|
it "sends the user's last pry working directory to File.expand_path" do
|
|
expect(Dir).to receive(:pwd).twice.and_return("initial_path")
|
|
|
|
expect(Dir).to receive(:chdir).with(File.expand_path("new_path"))
|
|
@t.eval ".cd new_path"
|
|
|
|
expect(Dir).to receive(:chdir).with(File.expand_path("initial_path"))
|
|
@t.eval ".cd -"
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "with CDPATH" do
|
|
let(:cdpath) { File.expand_path(File.join('spec', 'fixtures', 'cdpathdir')) }
|
|
let(:nonexisting_path) { File.expand_path('nonexisting_path') }
|
|
let(:long_cdpath) do
|
|
[nonexisting_path, cdpath].join(File::PATH_SEPARATOR)
|
|
end
|
|
|
|
describe "when it is defined" do
|
|
before do
|
|
@stub = allow_any_instance_of(described_class).to receive(:cd_path_env)
|
|
end
|
|
|
|
describe "simple cdpath" do
|
|
it "cd's into the dir" do
|
|
@stub.and_return(cdpath)
|
|
expect(Dir).to receive(:chdir).with(cdpath)
|
|
pry_eval '.cd cdpathdir'
|
|
end
|
|
end
|
|
|
|
describe "complex cdpath" do
|
|
it "cd's into the dir" do
|
|
@stub.and_return(long_cdpath)
|
|
expect(Dir).to receive(:chdir).with(cdpath)
|
|
pry_eval '.cd cdpathdir'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|