diff options
Diffstat (limited to 'test/ruby/test_default_gems.rb')
-rw-r--r-- | test/ruby/test_default_gems.rb | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/test/ruby/test_default_gems.rb b/test/ruby/test_default_gems.rb index 3c4aea1561..b82e304cbd 100644 --- a/test/ruby/test_default_gems.rb +++ b/test/ruby/test_default_gems.rb @@ -2,15 +2,28 @@ require 'rubygems' class TestDefaultGems < Test::Unit::TestCase + def self.load(file) + code = File.read(file, mode: "r:UTF-8:-", &:read) + + # These regex patterns are from load_gemspec method of rbinstall.rb. + # - `git ls-files` is useless under ruby's repository + # - `2>/dev/null` works only on Unix-like platforms + code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m, '[]') + code.gsub!(/IO\.popen\(.*git.*?\)/, '[] || itself') + + eval(code, binding, file) + end def test_validate_gemspec - skip "git not found" unless system("git", "rev-parse", %i[out err]=>IO::NULL) srcdir = File.expand_path('../../..', __FILE__) - Dir.glob("#{srcdir}/{lib,ext}/**/*.gemspec").map do |src| - assert_nothing_raised do - raise("invalid spec in #{src}") unless Gem::Specification.load(src) + specs = 0 + Dir.chdir(srcdir) do + all_assertions_foreach(nil, *Dir["{lib,ext}/**/*.gemspec"]) do |src| + specs += 1 + assert_kind_of(Gem::Specification, self.class.load(src), "invalid spec in #{src}") end end + assert_operator specs, :>, 0, "gemspecs not found" end end |