summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/rubygems/mock_gem_ui.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/rubygems/mock_gem_ui.rb')
-rw-r--r--ruby_1_9_3/lib/rubygems/mock_gem_ui.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/ruby_1_9_3/lib/rubygems/mock_gem_ui.rb b/ruby_1_9_3/lib/rubygems/mock_gem_ui.rb
new file mode 100644
index 0000000000..13f0bf564b
--- /dev/null
+++ b/ruby_1_9_3/lib/rubygems/mock_gem_ui.rb
@@ -0,0 +1,71 @@
+require 'stringio'
+require 'rubygems/user_interaction'
+
+##
+# This Gem::StreamUI subclass records input and output to StringIO for
+# retrieval during tests.
+
+class Gem::MockGemUi < Gem::StreamUI
+ class TermError < RuntimeError
+ attr_reader :exit_code
+
+ def initialize exit_code
+ super
+ @exit_code = exit_code
+ end
+ end
+ class SystemExitException < RuntimeError; end
+
+ module TTY
+
+ attr_accessor :tty
+
+ def tty?()
+ @tty = true unless defined?(@tty)
+ @tty
+ end
+
+ def noecho
+ yield self
+ end
+ end
+
+ def initialize(input = "")
+ ins = StringIO.new input
+ outs = StringIO.new
+ errs = StringIO.new
+
+ ins.extend TTY
+ outs.extend TTY
+ errs.extend TTY
+
+ super ins, outs, errs, true
+
+ @terminated = false
+ end
+
+ def input
+ @ins.string
+ end
+
+ def output
+ @outs.string
+ end
+
+ def error
+ @errs.string
+ end
+
+ def terminated?
+ @terminated
+ end
+
+ def terminate_interaction(status=0)
+ @terminated = true
+
+ raise TermError, status if status != 0
+ raise SystemExitException
+ end
+
+end
+