PageRenderTime 23ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/rake_tasks/gem_spec.rb

https://bitbucket.org/ToadJamb/gems_rake_tasks
Ruby | 122 lines | 95 code | 27 blank | 0 comment | 0 complexity | 68770d065f3d872fd74877684c218870 MD5 | raw file
  1. require_relative '../spec_helper'
  2. describe RakeTasks::Gem do
  3. let(:klass) { RakeTasks::Gem }
  4. describe '::gem_spec_file' do
  5. let(:gemspecs) { Faker::Lorem.words }
  6. before { Util.stubs dir_glob: gemspecs }
  7. it 'returns a string' do
  8. assert_kind_of String, klass.gem_spec_file
  9. end
  10. context 'given a single gemspec' do
  11. let(:gemspecs) { [Faker::Lorem.words.first] }
  12. before { assert_equal 1, gemspecs.count }
  13. it 'returns the gemspec file name' do
  14. assert_equal gemspecs[0], klass.gem_spec_file
  15. end
  16. end
  17. context 'given multiple gemspecs' do
  18. let(:gemspecs) { Faker::Lorem.words }
  19. before { assert gemspecs.count > 1 }
  20. it 'returns the first gemspec file name' do
  21. assert_equal gemspecs[0], klass.gem_spec_file
  22. end
  23. end
  24. context 'given no gemspecs' do
  25. let(:gemspecs) { [] }
  26. before { assert_equal [], gemspecs }
  27. it 'returns nil' do
  28. assert_nil klass.gem_spec_file
  29. end
  30. end
  31. end
  32. describe '::version' do
  33. let(:new_version) { '%d.%d.%d' % [rand(98) + 1, rand(98) + 1, 2] }
  34. context 'given a gemspec file' do
  35. let(:gemspec_file) { "#{gem_name}.gemspec" }
  36. let(:gem_name) { Faker::Lorem.word }
  37. old_version = '%d.%d.%d' % [rand(98) + 1, rand(98) + 1, 1]
  38. let(:gemspec) { Gem::Specification.new(gem_name, old_version) }
  39. let(:gemspec_contents) {
  40. %Q{
  41. Gem::Specification.new do |s|
  42. s.name = 'test_gem'
  43. %s
  44. s.summary = 'Basic test gem.'
  45. s.description = <<DESC
  46. This gem is a test gem.
  47. It is used in tests.
  48. DESC
  49. s.author = 'Travis Herrick'
  50. s.email = 'tthetoad@gmail.com'
  51. s.homepage = 'http://www.bitbucket.org/ToadJamb/gems_test_gem'
  52. s.license = 'LGPLv3'
  53. end
  54. }.strip
  55. }
  56. before { refute_equal old_version, new_version }
  57. [
  58. " version = '#{old_version}'",
  59. " s.version = '#{old_version}'",
  60. " s.version='#{old_version}'",
  61. " s.version = '#{old_version}'",
  62. " s.version = \"#{old_version}\"",
  63. " s.version =\"#{old_version}\"",
  64. ].each do |version|
  65. context "given a version of '#{version}'" do
  66. let(:input) { StringIO.new(gemspec_contents % version) }
  67. let(:output) { StringIO.new(gemspec_contents % version) }
  68. before do
  69. Util.stubs(:dir_glob).with('*.gemspec').returns [gemspec_file]
  70. Util.stubs(:open_file).with(gemspec_file, 'r').yields input
  71. Util.stubs(:open_file).with(gemspec_file, 'w').yields output
  72. Gem::Specification.stubs(:load).with(gemspec_file).returns gemspec
  73. end
  74. it 'sets the version in the gemspec file' do
  75. klass.version! new_version
  76. output.rewind
  77. assert_match(/'#{new_version}'$/, output.read)
  78. end
  79. it 'accepts the gemspec as the second parameter' do
  80. klass.version! new_version, gemspec
  81. output.rewind
  82. assert_match(/'#{new_version}'$/, output.read)
  83. end
  84. end
  85. end
  86. end
  87. context 'given no gemspec' do
  88. before { Util.stubs(:dir_glob).with('*.gemspec').returns [] }
  89. before { assert_nil klass.gem_spec }
  90. it 'does nothing' do
  91. assert_nothing_raised { klass.version! new_version }
  92. end
  93. end
  94. end
  95. end