/test/rubygems/test_gem_commands_specification_command.rb

https://github.com/wanabe/ruby · Ruby · 276 lines · 203 code · 72 blank · 1 comment · 0 complexity · 8f86c0f531c030304d79f4ec405a542a MD5 · raw file

  1. # frozen_string_literal: true
  2. require_relative 'helper'
  3. require 'rubygems/commands/specification_command'
  4. class TestGemCommandsSpecificationCommand < Gem::TestCase
  5. def setup
  6. super
  7. @cmd = Gem::Commands::SpecificationCommand.new
  8. end
  9. def test_execute
  10. foo = util_spec 'foo'
  11. install_specs foo
  12. @cmd.options[:args] = %w[foo]
  13. use_ui @ui do
  14. @cmd.execute
  15. end
  16. assert_match %r{Gem::Specification}, @ui.output
  17. assert_match %r{name: foo}, @ui.output
  18. assert_equal '', @ui.error
  19. end
  20. def test_execute_all
  21. install_specs util_spec 'foo', '0.0.1'
  22. install_specs util_spec 'foo', '0.0.2'
  23. @cmd.options[:args] = %w[foo]
  24. @cmd.options[:all] = true
  25. use_ui @ui do
  26. @cmd.execute
  27. end
  28. assert_match %r{Gem::Specification}, @ui.output
  29. assert_match %r{name: foo}, @ui.output
  30. assert_match %r{version: 0.0.1}, @ui.output
  31. assert_match %r{version: 0.0.2}, @ui.output
  32. assert_equal '', @ui.error
  33. end
  34. def test_execute_all_conflicts_with_version
  35. util_spec 'foo', '0.0.1'
  36. util_spec 'foo', '0.0.2'
  37. @cmd.options[:args] = %w[foo]
  38. @cmd.options[:all] = true
  39. @cmd.options[:version] = "1"
  40. assert_raise Gem::MockGemUi::TermError do
  41. use_ui @ui do
  42. @cmd.execute
  43. end
  44. end
  45. assert_equal '', @ui.output
  46. assert_equal "ERROR: Specify --all or -v, not both\n", @ui.error
  47. end
  48. def test_execute_bad_name
  49. @cmd.options[:args] = %w[foo]
  50. assert_raise Gem::MockGemUi::TermError do
  51. use_ui @ui do
  52. @cmd.execute
  53. end
  54. end
  55. assert_equal '', @ui.output
  56. assert_equal "ERROR: No gem matching 'foo (>= 0)' found\n", @ui.error
  57. end
  58. def test_execute_bad_name_with_version
  59. @cmd.options[:args] = %w[foo]
  60. @cmd.options[:version] = "1.3.2"
  61. assert_raise Gem::MockGemUi::TermError do
  62. use_ui @ui do
  63. @cmd.execute
  64. end
  65. end
  66. assert_equal '', @ui.output
  67. assert_equal "ERROR: No gem matching 'foo (= 1.3.2)' found\n", @ui.error
  68. end
  69. def test_execute_exact_match
  70. install_specs util_spec 'foo'
  71. install_specs util_spec 'foo_bar'
  72. @cmd.options[:args] = %w[foo]
  73. use_ui @ui do
  74. @cmd.execute
  75. end
  76. assert_match %r{Gem::Specification}, @ui.output
  77. assert_match %r{name: foo}, @ui.output
  78. assert_equal '', @ui.error
  79. end
  80. def test_execute_field
  81. foo = util_spec 'foo', '2'
  82. install_specs foo
  83. @cmd.options[:args] = %w[foo name]
  84. use_ui @ui do
  85. @cmd.execute
  86. end
  87. assert_equal "foo", load_yaml(@ui.output)
  88. end
  89. def test_execute_file
  90. foo = util_spec 'foo' do |s|
  91. s.files = %w[lib/code.rb]
  92. end
  93. util_build_gem foo
  94. @cmd.options[:args] = [foo.cache_file]
  95. use_ui @ui do
  96. @cmd.execute
  97. end
  98. assert_match %r{Gem::Specification}, @ui.output
  99. assert_match %r{name: foo}, @ui.output
  100. assert_equal '', @ui.error
  101. end
  102. def test_execute_marshal
  103. foo = util_spec 'foo', '2'
  104. install_specs foo
  105. @cmd.options[:args] = %w[foo]
  106. @cmd.options[:format] = :marshal
  107. use_ui @ui do
  108. @cmd.execute
  109. end
  110. assert_equal foo, Marshal.load(@ui.output)
  111. assert_equal '', @ui.error
  112. end
  113. def test_execute_remote
  114. spec_fetcher do |fetcher|
  115. fetcher.spec 'foo', 1
  116. end
  117. @cmd.options[:args] = %w[foo]
  118. @cmd.options[:domain] = :remote
  119. use_ui @ui do
  120. @cmd.execute
  121. end
  122. assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
  123. assert_match %r{name: foo}, @ui.output
  124. end
  125. def test_execute_remote_with_version
  126. spec_fetcher do |fetcher|
  127. fetcher.spec 'foo', "1"
  128. fetcher.spec 'foo', "2"
  129. end
  130. @cmd.options[:args] = %w[foo]
  131. @cmd.options[:version] = "1"
  132. @cmd.options[:domain] = :remote
  133. use_ui @ui do
  134. @cmd.execute
  135. end
  136. spec = Gem::Specification.from_yaml @ui.output
  137. assert_equal Gem::Version.new("1"), spec.version
  138. end
  139. def test_execute_remote_with_version_and_platform
  140. original_platforms = Gem.platforms.dup
  141. spec_fetcher do |fetcher|
  142. fetcher.spec 'foo', "1"
  143. fetcher.spec 'foo', "1" do |s|
  144. s.platform = 'x86_64-linux'
  145. end
  146. end
  147. @cmd.options[:args] = %w[foo]
  148. @cmd.options[:version] = "1"
  149. @cmd.options[:domain] = :remote
  150. @cmd.options[:added_platform] = true
  151. Gem.platforms = [Gem::Platform::RUBY, Gem::Platform.new("x86_64-linux")]
  152. use_ui @ui do
  153. @cmd.execute
  154. end
  155. spec = Gem::Specification.from_yaml @ui.output
  156. assert_equal Gem::Version.new("1"), spec.version
  157. assert_equal Gem::Platform.new("x86_64-linux"), spec.platform
  158. ensure
  159. Gem.platforms = original_platforms
  160. end
  161. def test_execute_remote_without_prerelease
  162. spec_fetcher do |fetcher|
  163. fetcher.spec 'foo', '2.0.0'
  164. fetcher.spec 'foo', '2.0.1.pre'
  165. end
  166. @cmd.options[:args] = %w[foo]
  167. @cmd.options[:domain] = :remote
  168. use_ui @ui do
  169. @cmd.execute
  170. end
  171. assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
  172. assert_match %r{name: foo}, @ui.output
  173. spec = load_yaml @ui.output
  174. assert_equal Gem::Version.new("2.0.0"), spec.version
  175. end
  176. def test_execute_remote_with_prerelease
  177. spec_fetcher do |fetcher|
  178. fetcher.spec 'foo', '2.0.0'
  179. fetcher.spec 'foo', '2.0.1.pre'
  180. end
  181. @cmd.options[:args] = %w[foo]
  182. @cmd.options[:domain] = :remote
  183. @cmd.options[:prerelease] = true
  184. use_ui @ui do
  185. @cmd.execute
  186. end
  187. assert_match %r{\A--- !ruby/object:Gem::Specification}, @ui.output
  188. assert_match %r{name: foo}, @ui.output
  189. spec = load_yaml @ui.output
  190. assert_equal Gem::Version.new("2.0.1.pre"), spec.version
  191. end
  192. def test_execute_ruby
  193. foo = util_spec 'foo'
  194. install_specs foo
  195. @cmd.options[:args] = %w[foo]
  196. @cmd.options[:format] = :ruby
  197. use_ui @ui do
  198. @cmd.execute
  199. end
  200. assert_match %r{Gem::Specification.new}, @ui.output
  201. assert_match %r{s.name = "foo"}, @ui.output
  202. assert_equal '', @ui.error
  203. end
  204. end