bundle-new/spec/commands/newgem_spec.rb

424 lines
13 KiB
Ruby

require "spec_helper"
describe "bundle gem" do
before do
@git_name = `git config --global user.name`.chomp
`git config --global user.name "Bundler User"`
@git_email = `git config --global user.email`.chomp
`git config --global user.email user@example.com`
end
after do
`git config --global user.name "#{@git_name}"`
`git config --global user.email #{@git_email}`
end
shared_examples_for "git config is present" do
context "git config user.{name,email} present" do
it "sets gemspec author to git user.name if available" do
expect(generated_gem.gemspec.authors.first).to eq("Bundler User")
end
it "sets gemspec email to git user.email if available" do
expect(generated_gem.gemspec.email.first).to eq("user@example.com")
end
end
end
shared_examples_for "git config is absent" do |hoge|
it "sets gemspec author to default message if git user.name is not set or empty" do
expect(generated_gem.gemspec.authors.first).to eq("TODO: Write your name")
end
it "sets gemspec email to default message if git user.email is not set or empty" do
expect(generated_gem.gemspec.email.first).to eq("TODO: Write your email address")
end
end
context "gem naming with underscore" do
let(:gem_name) { 'test_gem' }
before do
bundle "gem #{gem_name}"
# reset gemspec cache for each test because of commit 3d4163a
Bundler.clear_gemspec_cache
end
let(:generated_gem) { Bundler::GemHelper.new(bundled_app(gem_name).to_s) }
it "generates a gem skeleton" do
expect(bundled_app("test_gem/test_gem.gemspec")).to exist
expect(bundled_app("test_gem/LICENSE.txt")).to exist
expect(bundled_app("test_gem/Gemfile")).to exist
expect(bundled_app("test_gem/Rakefile")).to exist
expect(bundled_app("test_gem/lib/test_gem.rb")).to exist
expect(bundled_app("test_gem/lib/test_gem/version.rb")).to exist
end
it "starts with version 0.0.1" do
expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/VERSION = "0.0.1"/)
end
it "does not nest constants" do
expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/module TestGem/)
expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/module TestGem/)
end
it_should_behave_like "git config is present"
context "git config user.{name,email} is not set" do
before do
`git config --global --unset user.name`
`git config --global --unset user.email`
reset!
in_app_root
bundle "gem #{gem_name}"
end
it_should_behave_like "git config is absent"
end
it "sets gemspec license to MIT by default" do
expect(generated_gem.gemspec.license).to eq("MIT")
end
it "requires the version file" do
expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/require "test_gem\/version"/)
end
it "runs rake without problems" do
system_gems ["rake-10.0.2"]
rakefile = strip_whitespace <<-RAKEFILE
task :default do
puts 'SUCCESS'
end
RAKEFILE
File.open(bundled_app("test_gem/Rakefile"), 'w') do |file|
file.puts rakefile
end
Dir.chdir(bundled_app(gem_name)) do
sys_exec("rake")
expect(out).to include("SUCCESS")
end
end
context "--bin parameter set" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --bin"
end
it "builds bin skeleton" do
expect(bundled_app("test_gem/bin/test_gem")).to exist
end
it "requires 'test-gem'" do
expect(bundled_app("test_gem/bin/test_gem").read).to match(/require 'test_gem'/)
end
end
context "no --test parameter" do
before do
reset!
in_app_root
bundle "gem #{gem_name}"
end
it "doesn't create any spec/test file" do
expect(bundled_app("test_gem/.rspec")).to_not exist
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to_not exist
expect(bundled_app("test_gem/spec/spec_helper.rb")).to_not exist
expect(bundled_app("test_gem/test/test_test_gem.rb")).to_not exist
expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist
end
end
context "--test parameter set to rspec" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test=rspec"
end
it "builds spec skeleton" do
expect(bundled_app("test_gem/.rspec")).to exist
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to exist
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
end
it "requires 'test-gem'" do
expect(bundled_app("test_gem/spec/spec_helper.rb").read).to include("require 'test_gem'")
end
it "creates a default test which fails" do
expect(bundled_app("test_gem/spec/test_gem_spec.rb").read).to include("expect(false).to eq(true)")
end
end
context "--test parameter set to minitest" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test=minitest"
end
it "builds spec skeleton" do
expect(bundled_app("test_gem/test/test_test_gem.rb")).to exist
expect(bundled_app("test_gem/test/minitest_helper.rb")).to exist
end
it "requires 'test-gem'" do
expect(bundled_app("test_gem/test/minitest_helper.rb").read).to include("require 'test_gem'")
end
it "requires 'minitest_helper'" do
expect(bundled_app("test_gem/test/test_test_gem.rb").read).to include("require 'minitest_helper'")
end
it "creates a default test which fails" do
expect(bundled_app("test_gem/test/test_test_gem.rb").read).to include("assert false")
end
end
context "--test with no arguments" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test"
end
it "defaults to rspec" do
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist
end
it "creates a .travis.yml file to test the library against the current Ruby version on Travis CI" do
expect(bundled_app("test_gem/.travis.yml").read).to match(%r(- #{RUBY_VERSION}))
end
end
context "--edit option" do
it "opens the generated gemspec in the user's text editor" do
reset!
in_app_root
output = bundle "gem #{gem_name} --edit=echo"
gemspec_path = File.join(Dir.pwd, gem_name, "#{gem_name}.gemspec")
expect(output).to include("echo \"#{gemspec_path}\"")
end
end
end
context "gem naming with dashed" do
let(:gem_name) { 'test-gem' }
before do
bundle "gem #{gem_name}"
# reset gemspec cache for each test because of commit 3d4163a
Bundler.clear_gemspec_cache
end
let(:generated_gem) { Bundler::GemHelper.new(bundled_app(gem_name).to_s) }
it "generates a gem skeleton" do
expect(bundled_app("test-gem/test-gem.gemspec")).to exist
expect(bundled_app("test-gem/LICENSE.txt")).to exist
expect(bundled_app("test-gem/Gemfile")).to exist
expect(bundled_app("test-gem/Rakefile")).to exist
expect(bundled_app("test-gem/lib/test/gem.rb")).to exist
expect(bundled_app("test-gem/lib/test/gem/version.rb")).to exist
end
it "starts with version 0.0.1" do
expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/VERSION = "0.0.1"/)
end
it "nests constants so they work" do
expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/module Test\n module Gem/)
expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(/module Test\n module Gem/)
end
it_should_behave_like "git config is present"
context "git config user.{name,email} is not set" do
before do
`git config --global --unset user.name`
`git config --global --unset user.email`
reset!
in_app_root
bundle "gem #{gem_name}"
end
it_should_behave_like "git config is absent"
end
it "sets gemspec license to MIT by default" do
expect(generated_gem.gemspec.license).to eq("MIT")
end
it "requires the version file" do
expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(/require "test\/gem\/version"/)
end
it "runs rake without problems" do
system_gems ["rake-10.0.2"]
rakefile = strip_whitespace <<-RAKEFILE
task :default do
puts 'SUCCESS'
end
RAKEFILE
File.open(bundled_app("test-gem/Rakefile"), 'w') do |file|
file.puts rakefile
end
Dir.chdir(bundled_app(gem_name)) do
sys_exec("rake")
expect(out).to include("SUCCESS")
end
end
context "--bin parameter set" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --bin"
end
it "builds bin skeleton" do
expect(bundled_app("test-gem/bin/test-gem")).to exist
end
it "requires 'test/gem'" do
expect(bundled_app("test-gem/bin/test-gem").read).to match(/require 'test\/gem'/)
end
end
context "no --test parameter" do
before do
reset!
in_app_root
bundle "gem #{gem_name}"
end
it "doesn't create any spec/test file" do
expect(bundled_app("test-gem/.rspec")).to_not exist
expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to_not exist
expect(bundled_app("test-gem/spec/spec_helper.rb")).to_not exist
expect(bundled_app("test-gem/test/test_test/gem.rb")).to_not exist
expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist
end
end
context "--test parameter set to rspec" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test=rspec"
end
it "builds spec skeleton" do
expect(bundled_app("test-gem/.rspec")).to exist
expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to exist
expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist
end
it "requires 'test/gem'" do
expect(bundled_app("test-gem/spec/spec_helper.rb").read).to include("require 'test/gem'")
end
it "creates a default test which fails" do
expect(bundled_app("test-gem/spec/test/gem_spec.rb").read).to include("expect(false).to eq(true)")
end
it "creates a default rake task to run the specs" do
rakefile = strip_whitespace <<-RAKEFILE
require "bundler/gem_tasks"
require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
RAKEFILE
expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile)
end
end
context "--test parameter set to minitest" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test=minitest"
end
it "builds spec skeleton" do
expect(bundled_app("test-gem/test/test_test/gem.rb")).to exist
expect(bundled_app("test-gem/test/minitest_helper.rb")).to exist
end
it "requires 'test/gem'" do
expect(bundled_app("test-gem/test/minitest_helper.rb").read).to match(/require 'test\/gem'/)
end
it "requires 'minitest_helper'" do
expect(bundled_app("test-gem/test/test_test/gem.rb").read).to match(/require 'minitest_helper'/)
end
it "creates a default test which fails" do
expect(bundled_app("test-gem/test/test_test/gem.rb").read).to match(/assert false/)
end
it "creates a default rake task to run the test suite" do
rakefile = strip_whitespace <<-RAKEFILE
require "bundler/gem_tasks"
require "rake/testtask"
Rake::TestTask.new(:test) do |t|
t.libs << "test"
end
task :default => :test
RAKEFILE
expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile)
end
end
context "--test with no arguments" do
before do
reset!
in_app_root
bundle "gem #{gem_name} --test"
end
it "defaults to rspec" do
expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist
expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist
end
end
context "--ext parameter set" do
before do
reset!
in_app_root
bundle "gem test_gem --ext"
end
it "builds ext skeleton" do
expect(bundled_app("test_gem/ext/test_gem/extconf.rb")).to exist
expect(bundled_app("test_gem/ext/test_gem/test_gem.h")).to exist
expect(bundled_app("test_gem/ext/test_gem/test_gem.c")).to exist
end
it "includes rake-compiler" do
expect(bundled_app("test_gem/test_gem.gemspec").read).to include('spec.add_development_dependency "rake-compiler"')
end
end
end
end