Skip to content

Commit

Permalink
Merge pull request #690 from Shopify/uk-fix-missing-default-gem-tests
Browse files Browse the repository at this point in the history
  • Loading branch information
paracycle committed Jan 6, 2022
2 parents 44f883f + 56aca2a commit 6fd1e85
Showing 1 changed file with 25 additions and 17 deletions.
42 changes: 25 additions & 17 deletions spec/tapioca/cli/gem_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,29 @@ def fizz; end
end

it "must generate RBI for a default gem" do
@project.require_real_gem("did_you_mean", "= 1.5.0")
gem_name = "ostruct"
gem_top_level_constant = "class OpenStruct"

# `default_stubs` is a private method on Ruby 2.6
gem_spec = Gem::Specification.send(:default_stubs, "*.gemspec").find do |spec|
spec.name == gem_name && spec.default_gem?
end
assert(gem_spec, "Cannot find default '#{gem_name}' gem")

gem_version = gem_spec.version.to_s

@project.require_real_gem(gem_name, gem_version)
@project.bundle_install

out, err, status = @project.tapioca("gem did_you_mean")
out, err, status = @project.tapioca("gem #{gem_name}")

assert_includes(out, <<~OUT)
Compiled did_you_mean
create sorbet/rbi/gems/did_you_mean@1.5.0.rbi
Compiled #{gem_name}
create sorbet/rbi/gems/#{gem_name}@#{gem_version}.rbi
OUT

assert_includes(@project.read("sorbet/rbi/gems/did_you_mean@1.5.0.rbi"), "module DidYouMean")
rbi_contents = @project.read("sorbet/rbi/gems/#{gem_name}@#{gem_version}.rbi")
assert_includes(rbi_contents, gem_top_level_constant)

assert_empty(err)
assert(status)
Expand Down Expand Up @@ -550,39 +562,35 @@ class Foo::Secret; end

it "must not generate RBIs for missing gem specs" do
@project.gemfile(<<~GEMFILE, append: true)
gem "minitest"
platform :truffleruby do
gem "minitest-excludes"
platform :rbx do
gem "ruby2_keywords", "0.0.5"
end
GEMFILE

@project.bundle_install

out, err, status = @project.tapioca("gem --all")

assert_includes(out, "completed with missing specs: minitest-excludes (2.0.1)")
refute_includes(out, "Compiling minitest-excludes, this may take a few seconds")
assert_includes(out, "completed with missing specs: ruby2_keywords (0.0.5)")
refute_includes(out, "Compiled ruby2_keywords")

assert_empty(err)
assert(status)
end

it "must not generate RBIs for missing gem specs on Bundler 2.2.22" do
@project.gemfile(<<~GEMFILE, append: true)
gem "minitest"
platform :truffleruby do
gem "minitest-excludes"
platform :rbx do
gem "ruby2_keywords", "0.0.5"
end
GEMFILE

@project.bundle_install(version: "2.2.22")

out, _, status = @project.tapioca("gem --all")

assert_includes(out, "completed with missing specs: minitest-excludes (2.0.1)")
refute_includes(out, "Compiling minitest-excludes, this may take a few seconds")
assert_includes(out, "completed with missing specs: ruby2_keywords (0.0.5)")
refute_includes(out, "Compiled ruby2_keywords")

# StdErr will have some messages about incompatibilities, so we don't check for clean err
assert(status)
Expand Down

0 comments on commit 6fd1e85

Please sign in to comment.