mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00

* add Pry::Testable, and friends. This commit replaces lib/pry/test/helper.rb by using category modules. There's now: * Pry::Testable: * Pry::Testable::Evalable * Pry::Testable::Mockable * Pry::Testable::Utility * Pry::Testable::PryTester 'include Pry::Testable' includes all of the above. For the pry test suite it worked out best to include 'Pry::Testable' at the top-level. In plugins I've written though this hasn't been the case, and I only normally need: Pry::Testable::Evalable. So it reduces pollution for the third-party cases, which this code is intended for since it lives within lib/ of the project. What do you think? * breaking change: add set_testenv_variables and unset_testenv_variables * breaking change: add Pry::Testable::Variables, and rename constant_scope() to temporary_constants(). * breaking change: rename inject_var as insert_variable, and move its definition to Pry::Testable::Variables. * include Pry::Testable::Evalable & include Pry::Testable::Variables into the top-level, but keep the other two modules spec-local. * document third argument of insert_variable. * update CHANGELOG.md * note changelog entry is a breaking change * update documentation
14 lines
436 B
Ruby
14 lines
436 B
Ruby
module Pry::Testable::Mockable
|
|
def mock_command(cmd, args=[], opts={})
|
|
output = StringIO.new
|
|
pry = Pry.new(output: output)
|
|
ret = cmd.new(opts.merge(pry_instance: pry, :output => output)).call_safely(*args)
|
|
Struct.new(:output, :return).new(output.string, ret)
|
|
end
|
|
|
|
def mock_exception(*mock_backtrace)
|
|
StandardError.new.tap do |e|
|
|
e.define_singleton_method(:backtrace) { mock_backtrace }
|
|
end
|
|
end
|
|
end
|