diff --git a/test/rubygems/rubygems_plugin.rb b/test/rubygems/rubygems_plugin.rb index c18f13d2ed..b538487bbf 100644 --- a/test/rubygems/rubygems_plugin.rb +++ b/test/rubygems/rubygems_plugin.rb @@ -1,6 +1,15 @@ # frozen_string_literal: true require "rubygems/command_manager" +## +# This is an example of exactly what NOT to do. +# +# DO NOT include code like this in your rubygems_plugin.rb + +module Gem::Commands + remove_const(:InterruptCommand) if defined?(InterruptCommand) +end + class Gem::Commands::InterruptCommand < Gem::Command def initialize super("interrupt", "Raises an Interrupt Exception", {}) diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index f4c6e8ce76..dd2440b068 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -20,6 +20,8 @@ class TestGem < Gem::TestCase common_installer_setup @additional = %w[a b].map {|d| File.join @tempdir, d } + + util_remove_interrupt_command end def test_self_finish_resolve @@ -1548,10 +1550,14 @@ class TestGem < Gem::TestCase with_plugin("load") { Gem.load_env_plugins } assert_equal :loaded, TEST_PLUGIN_LOAD rescue nil + util_remove_interrupt_command + # Should attempt to cause a StandardError with_plugin("standarderror") { Gem.load_env_plugins } assert_equal :loaded, TEST_PLUGIN_STANDARDERROR rescue nil + util_remove_interrupt_command + # Should attempt to cause an Exception with_plugin("exception") { Gem.load_env_plugins } assert_equal :loaded, TEST_PLUGIN_EXCEPTION rescue nil @@ -2101,6 +2107,11 @@ You may need to `bundle install` to install missing gems spec end + def util_remove_interrupt_command + Gem::Commands.send :remove_const, :InterruptCommand if + Gem::Commands.const_defined? :InterruptCommand + end + def util_cache_dir File.join Gem.dir, "cache" end