summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2023-04-18 13:30:21 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2023-04-19 15:59:59 +0900
commit74772840430fc3fca3f5fb0ad585d9cc48f512fb (patch)
tree97b34a1df92aee977e01890fd710f10d3940314f /test
parentd1c42da7a1212fe04dc86ed7a7439dd69380f08a (diff)
downloadruby-74772840430fc3fca3f5fb0ad585d9cc48f512fb.tar.gz
Hide Gem::MockGemUi. It's only used by tests
Diffstat (limited to 'test')
-rw-r--r--test/rubygems/helper.rb2
-rw-r--r--test/rubygems/mock_gem_ui.rb86
2 files changed, 87 insertions, 1 deletions
diff --git a/test/rubygems/helper.rb b/test/rubygems/helper.rb
index 9f4dc6616b..a9c1438272 100644
--- a/test/rubygems/helper.rb
+++ b/test/rubygems/helper.rb
@@ -20,7 +20,7 @@ require "tmpdir"
require "uri"
require "zlib"
require "benchmark" # stdlib
-require "rubygems/mock_gem_ui"
+require_relative "mock_gem_ui"
module Gem
##
diff --git a/test/rubygems/mock_gem_ui.rb b/test/rubygems/mock_gem_ui.rb
new file mode 100644
index 0000000000..1ece78fde7
--- /dev/null
+++ b/test/rubygems/mock_gem_ui.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+require "rubygems/user_interaction"
+
+##
+# This Gem::StreamUI subclass records input and output to StringIO for
+# retrieval during tests.
+
+class Gem::MockGemUi < Gem::StreamUI
+ ##
+ # Raised when you haven't provided enough input to your MockGemUi
+
+ class InputEOFError < RuntimeError
+ def initialize(question)
+ super "Out of input for MockGemUi on #{question.inspect}"
+ end
+ end
+
+ 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 = "")
+ require "stringio"
+ 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 ask(question)
+ raise InputEOFError, question if @ins.eof?
+
+ super
+ 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