rubygems-update 2.6.0 → 3.4.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (804) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5802 -0
  3. data/CODE_OF_CONDUCT.md +76 -35
  4. data/CONTRIBUTING.md +231 -0
  5. data/MAINTAINERS.txt +8 -0
  6. data/Manifest.txt +441 -42
  7. data/POLICIES.md +135 -0
  8. data/README.md +114 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4666 -0
  11. data/bundler/LICENSE.md +22 -0
  12. data/bundler/README.md +58 -0
  13. data/bundler/UPGRADING.md +222 -0
  14. data/bundler/bundler.gemspec +44 -0
  15. data/bundler/exe/bundle +38 -0
  16. data/bundler/exe/bundler +4 -0
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +45 -0
  19. data/bundler/lib/bundler/capistrano.rb +22 -0
  20. data/bundler/lib/bundler/cli/add.rb +47 -0
  21. data/bundler/lib/bundler/cli/binstubs.rb +57 -0
  22. data/bundler/lib/bundler/cli/cache.rb +43 -0
  23. data/bundler/lib/bundler/cli/check.rb +40 -0
  24. data/bundler/lib/bundler/cli/clean.rb +25 -0
  25. data/bundler/lib/bundler/cli/common.rb +130 -0
  26. data/bundler/lib/bundler/cli/config.rb +203 -0
  27. data/bundler/lib/bundler/cli/console.rb +43 -0
  28. data/bundler/lib/bundler/cli/doctor.rb +157 -0
  29. data/bundler/lib/bundler/cli/exec.rb +88 -0
  30. data/bundler/lib/bundler/cli/fund.rb +36 -0
  31. data/bundler/lib/bundler/cli/gem.rb +466 -0
  32. data/bundler/lib/bundler/cli/info.rb +94 -0
  33. data/bundler/lib/bundler/cli/init.rb +51 -0
  34. data/bundler/lib/bundler/cli/inject.rb +60 -0
  35. data/bundler/lib/bundler/cli/install.rb +189 -0
  36. data/bundler/lib/bundler/cli/issue.rb +41 -0
  37. data/bundler/lib/bundler/cli/list.rb +66 -0
  38. data/bundler/lib/bundler/cli/lock.rb +73 -0
  39. data/bundler/lib/bundler/cli/open.rb +29 -0
  40. data/bundler/lib/bundler/cli/outdated.rb +297 -0
  41. data/bundler/lib/bundler/cli/platform.rb +48 -0
  42. data/bundler/lib/bundler/cli/plugin.rb +41 -0
  43. data/bundler/lib/bundler/cli/pristine.rb +52 -0
  44. data/bundler/lib/bundler/cli/remove.rb +17 -0
  45. data/bundler/lib/bundler/cli/show.rb +75 -0
  46. data/bundler/lib/bundler/cli/update.rb +123 -0
  47. data/bundler/lib/bundler/cli/viz.rb +31 -0
  48. data/bundler/lib/bundler/cli.rb +894 -0
  49. data/bundler/lib/bundler/compact_index_client/cache.rb +101 -0
  50. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  51. data/bundler/lib/bundler/compact_index_client/updater.rb +117 -0
  52. data/bundler/lib/bundler/compact_index_client.rb +119 -0
  53. data/bundler/lib/bundler/constants.rb +7 -0
  54. data/bundler/lib/bundler/current_ruby.rb +108 -0
  55. data/bundler/lib/bundler/definition.rb +978 -0
  56. data/bundler/lib/bundler/dependency.rb +97 -0
  57. data/bundler/lib/bundler/deployment.rb +69 -0
  58. data/bundler/lib/bundler/deprecate.rb +44 -0
  59. data/bundler/lib/bundler/digest.rb +71 -0
  60. data/bundler/lib/bundler/dsl.rb +583 -0
  61. data/bundler/lib/bundler/endpoint_specification.rb +143 -0
  62. data/bundler/lib/bundler/env.rb +150 -0
  63. data/bundler/lib/bundler/environment_preserver.rb +86 -0
  64. data/bundler/lib/bundler/errors.rb +190 -0
  65. data/bundler/lib/bundler/feature_flag.rb +53 -0
  66. data/bundler/lib/bundler/fetcher/base.rb +50 -0
  67. data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
  68. data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
  69. data/bundler/lib/bundler/fetcher/downloader.rb +89 -0
  70. data/bundler/lib/bundler/fetcher/index.rb +25 -0
  71. data/bundler/lib/bundler/fetcher.rb +321 -0
  72. data/bundler/lib/bundler/force_platform.rb +18 -0
  73. data/bundler/lib/bundler/friendly_errors.rb +126 -0
  74. data/bundler/lib/bundler/gem_helper.rb +237 -0
  75. data/bundler/lib/bundler/gem_helpers.rb +124 -0
  76. data/bundler/lib/bundler/gem_tasks.rb +7 -0
  77. data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
  78. data/bundler/lib/bundler/graph.rb +152 -0
  79. data/bundler/lib/bundler/index.rb +206 -0
  80. data/bundler/lib/bundler/injector.rb +287 -0
  81. data/bundler/lib/bundler/inline.rb +73 -0
  82. data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
  83. data/bundler/lib/bundler/installer/parallel_installer.rb +194 -0
  84. data/bundler/lib/bundler/installer/standalone.rb +117 -0
  85. data/bundler/lib/bundler/installer.rb +267 -0
  86. data/bundler/lib/bundler/lazy_specification.rb +163 -0
  87. data/bundler/lib/bundler/lockfile_generator.rb +95 -0
  88. data/bundler/lib/bundler/lockfile_parser.rb +218 -0
  89. data/bundler/lib/bundler/man/.document +1 -0
  90. data/bundler/lib/bundler/man/bundle-add.1 +82 -0
  91. data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
  92. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  93. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
  96. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  97. data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
  98. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  99. data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
  100. data/bundler/lib/bundler/man/bundle-config.1 +512 -0
  101. data/bundler/lib/bundler/man/bundle-config.1.ronn +405 -0
  102. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  103. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  104. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  105. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  106. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  107. data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
  108. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  109. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  110. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  111. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  112. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  113. data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
  114. data/bundler/lib/bundler/man/bundle-init.1 +29 -0
  115. data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
  116. data/bundler/lib/bundler/man/bundle-inject.1 +36 -0
  117. data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
  118. data/bundler/lib/bundler/man/bundle-install.1 +313 -0
  119. data/bundler/lib/bundler/man/bundle-install.1.ronn +382 -0
  120. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  121. data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
  122. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  123. data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
  124. data/bundler/lib/bundler/man/bundle-open.1 +52 -0
  125. data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
  126. data/bundler/lib/bundler/man/bundle-outdated.1 +152 -0
  127. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +105 -0
  128. data/bundler/lib/bundler/man/bundle-platform.1 +71 -0
  129. data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
  130. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  131. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  132. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  133. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  134. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  135. data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
  136. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  137. data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
  138. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  139. data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
  140. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  141. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  142. data/bundler/lib/bundler/man/bundle-viz.1 +42 -0
  143. data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
  144. data/bundler/lib/bundler/man/bundle.1 +141 -0
  145. data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
  146. data/bundler/lib/bundler/man/gemfile.5 +747 -0
  147. data/bundler/lib/bundler/man/gemfile.5.ronn +548 -0
  148. data/bundler/lib/bundler/man/index.txt +29 -0
  149. data/bundler/lib/bundler/match_metadata.rb +13 -0
  150. data/bundler/lib/bundler/match_platform.rb +23 -0
  151. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  152. data/bundler/lib/bundler/mirror.rb +221 -0
  153. data/bundler/lib/bundler/plugin/api/source.rb +320 -0
  154. data/bundler/lib/bundler/plugin/api.rb +81 -0
  155. data/bundler/lib/bundler/plugin/dsl.rb +53 -0
  156. data/bundler/lib/bundler/plugin/events.rb +61 -0
  157. data/bundler/lib/bundler/plugin/index.rb +193 -0
  158. data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
  159. data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
  160. data/bundler/lib/bundler/plugin/installer.rb +112 -0
  161. data/bundler/lib/bundler/plugin/source_list.rb +31 -0
  162. data/bundler/lib/bundler/plugin.rb +359 -0
  163. data/bundler/lib/bundler/process_lock.rb +24 -0
  164. data/bundler/lib/bundler/remote_specification.rb +117 -0
  165. data/bundler/lib/bundler/resolver/base.rb +107 -0
  166. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  167. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  168. data/bundler/lib/bundler/resolver/package.rb +77 -0
  169. data/bundler/lib/bundler/resolver/root.rb +25 -0
  170. data/bundler/lib/bundler/resolver/spec_group.rb +82 -0
  171. data/bundler/lib/bundler/resolver.rb +462 -0
  172. data/bundler/lib/bundler/retry.rb +66 -0
  173. data/bundler/lib/bundler/ruby_dsl.rb +45 -0
  174. data/bundler/lib/bundler/ruby_version.rb +131 -0
  175. data/bundler/lib/bundler/rubygems_ext.rb +354 -0
  176. data/bundler/lib/bundler/rubygems_gem_installer.rb +187 -0
  177. data/bundler/lib/bundler/rubygems_integration.rb +562 -0
  178. data/bundler/lib/bundler/runtime.rb +307 -0
  179. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  180. data/bundler/lib/bundler/self_manager.rb +170 -0
  181. data/bundler/lib/bundler/settings/validator.rb +102 -0
  182. data/bundler/lib/bundler/settings.rb +568 -0
  183. data/bundler/lib/bundler/setup.rb +30 -0
  184. data/bundler/lib/bundler/shared_helpers.rb +358 -0
  185. data/bundler/lib/bundler/similarity_detector.rb +63 -0
  186. data/bundler/lib/bundler/source/gemspec.rb +18 -0
  187. data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
  188. data/bundler/lib/bundler/source/git.rb +379 -0
  189. data/bundler/lib/bundler/source/metadata.rb +62 -0
  190. data/bundler/lib/bundler/source/path/installer.rb +53 -0
  191. data/bundler/lib/bundler/source/path.rb +260 -0
  192. data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
  193. data/bundler/lib/bundler/source/rubygems.rb +509 -0
  194. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  195. data/bundler/lib/bundler/source.rb +114 -0
  196. data/bundler/lib/bundler/source_list.rb +227 -0
  197. data/bundler/lib/bundler/source_map.rb +71 -0
  198. data/bundler/lib/bundler/spec_set.rb +219 -0
  199. data/bundler/lib/bundler/stub_specification.rb +118 -0
  200. data/bundler/lib/bundler/templates/.document +1 -0
  201. data/bundler/lib/bundler/templates/Executable +27 -0
  202. data/bundler/lib/bundler/templates/Executable.bundler +109 -0
  203. data/bundler/lib/bundler/templates/Executable.standalone +14 -0
  204. data/bundler/lib/bundler/templates/Gemfile +5 -0
  205. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  206. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
  207. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  208. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
  209. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  210. data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
  211. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +71 -0
  212. data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
  213. data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  214. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  215. data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  217. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  218. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  219. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  220. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  221. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  222. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  223. data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
  224. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  225. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  226. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  227. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
  228. data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
  229. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  230. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  231. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  232. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  233. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  234. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  235. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  236. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  237. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  238. data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
  239. data/bundler/lib/bundler/ui/shell.rb +165 -0
  240. data/bundler/lib/bundler/ui/silent.rb +85 -0
  241. data/bundler/lib/bundler/ui.rb +9 -0
  242. data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
  243. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  244. data/bundler/lib/bundler/vendor/.document +1 -0
  245. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  246. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  247. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  248. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  249. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  250. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  251. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2706 -0
  252. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  253. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  254. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  255. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  256. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  257. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  258. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  259. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  260. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  261. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  262. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  263. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  274. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +84 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  311. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  312. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  313. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  314. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  315. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  316. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  317. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  318. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  319. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  320. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  321. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  322. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  323. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  329. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  330. data/bundler/lib/bundler/vendored_persistent.rb +15 -0
  331. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  332. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  333. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  334. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  335. data/bundler/lib/bundler/version.rb +13 -0
  336. data/bundler/lib/bundler/vlad.rb +17 -0
  337. data/bundler/lib/bundler/worker.rb +117 -0
  338. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  339. data/bundler/lib/bundler.rb +654 -0
  340. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  341. data/exe/update_rubygems +38 -0
  342. data/hide_lib_for_update/note.txt +0 -4
  343. data/lib/rubygems/available_set.rb +9 -9
  344. data/lib/rubygems/basic_specification.rb +56 -37
  345. data/lib/rubygems/bundler_version_finder.rb +77 -0
  346. data/lib/rubygems/command.rb +142 -67
  347. data/lib/rubygems/command_manager.rb +61 -25
  348. data/lib/rubygems/commands/build_command.rb +88 -17
  349. data/lib/rubygems/commands/cert_command.rb +131 -82
  350. data/lib/rubygems/commands/check_command.rb +27 -24
  351. data/lib/rubygems/commands/cleanup_command.rb +56 -37
  352. data/lib/rubygems/commands/contents_command.rb +33 -35
  353. data/lib/rubygems/commands/dependency_command.rb +52 -63
  354. data/lib/rubygems/commands/environment_command.rb +31 -13
  355. data/lib/rubygems/commands/exec_command.rb +249 -0
  356. data/lib/rubygems/commands/fetch_command.rb +36 -19
  357. data/lib/rubygems/commands/generate_index_command.rb +21 -20
  358. data/lib/rubygems/commands/help_command.rb +21 -21
  359. data/lib/rubygems/commands/info_command.rb +38 -0
  360. data/lib/rubygems/commands/install_command.rb +65 -133
  361. data/lib/rubygems/commands/list_command.rb +10 -9
  362. data/lib/rubygems/commands/lock_command.rb +11 -13
  363. data/lib/rubygems/commands/mirror_command.rb +4 -4
  364. data/lib/rubygems/commands/open_command.rb +28 -26
  365. data/lib/rubygems/commands/outdated_command.rb +6 -6
  366. data/lib/rubygems/commands/owner_command.rb +50 -26
  367. data/lib/rubygems/commands/pristine_command.rb +96 -66
  368. data/lib/rubygems/commands/push_command.rb +52 -45
  369. data/lib/rubygems/commands/query_command.rb +22 -328
  370. data/lib/rubygems/commands/rdoc_command.rb +31 -31
  371. data/lib/rubygems/commands/search_command.rb +9 -9
  372. data/lib/rubygems/commands/server_command.rb +15 -76
  373. data/lib/rubygems/commands/setup_command.rb +375 -188
  374. data/lib/rubygems/commands/signin_command.rb +34 -0
  375. data/lib/rubygems/commands/signout_command.rb +32 -0
  376. data/lib/rubygems/commands/sources_command.rb +51 -35
  377. data/lib/rubygems/commands/specification_command.rb +39 -29
  378. data/lib/rubygems/commands/stale_command.rb +5 -4
  379. data/lib/rubygems/commands/uninstall_command.rb +94 -59
  380. data/lib/rubygems/commands/unpack_command.rb +43 -52
  381. data/lib/rubygems/commands/update_command.rb +154 -96
  382. data/lib/rubygems/commands/which_command.rb +13 -16
  383. data/lib/rubygems/commands/yank_command.rb +27 -31
  384. data/lib/rubygems/compatibility.rb +8 -26
  385. data/lib/rubygems/config_file.rb +214 -119
  386. data/lib/rubygems/core_ext/kernel_gem.rb +10 -14
  387. data/lib/rubygems/core_ext/kernel_require.rb +119 -88
  388. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  389. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  390. data/lib/rubygems/defaults.rb +174 -56
  391. data/lib/rubygems/dependency.rb +66 -51
  392. data/lib/rubygems/dependency_installer.rb +70 -225
  393. data/lib/rubygems/dependency_list.rb +32 -33
  394. data/lib/rubygems/deprecate.rb +112 -17
  395. data/lib/rubygems/doctor.rb +30 -30
  396. data/lib/rubygems/errors.rb +51 -9
  397. data/lib/rubygems/exceptions.rb +64 -35
  398. data/lib/rubygems/ext/build_error.rb +3 -1
  399. data/lib/rubygems/ext/builder.rb +96 -75
  400. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  401. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  402. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  403. data/lib/rubygems/ext/configure_builder.rb +6 -9
  404. data/lib/rubygems/ext/ext_conf_builder.rb +41 -60
  405. data/lib/rubygems/ext/rake_builder.rb +18 -21
  406. data/lib/rubygems/ext.rb +8 -7
  407. data/lib/rubygems/gem_runner.rb +22 -24
  408. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  409. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  410. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  411. data/lib/rubygems/gemcutter_utilities.rb +244 -40
  412. data/lib/rubygems/indexer.rb +49 -55
  413. data/lib/rubygems/install_default_message.rb +3 -3
  414. data/lib/rubygems/install_message.rb +3 -3
  415. data/lib/rubygems/install_update_options.rb +103 -96
  416. data/lib/rubygems/installer.rb +370 -214
  417. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  418. data/lib/rubygems/local_remote_options.rb +27 -27
  419. data/lib/rubygems/mock_gem_ui.rb +6 -9
  420. data/lib/rubygems/name_tuple.rb +16 -19
  421. data/lib/rubygems/openssl.rb +7 -0
  422. data/lib/rubygems/optparse/.document +1 -0
  423. data/lib/rubygems/optparse/COPYING +56 -0
  424. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  425. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  426. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  427. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  428. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  429. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  430. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  431. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  432. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  433. data/lib/rubygems/optparse.rb +3 -0
  434. data/lib/rubygems/package/digest_io.rb +5 -7
  435. data/lib/rubygems/package/file_source.rb +6 -8
  436. data/lib/rubygems/package/io_source.rb +6 -4
  437. data/lib/rubygems/package/old.rb +18 -27
  438. data/lib/rubygems/package/source.rb +1 -1
  439. data/lib/rubygems/package/tar_header.rb +86 -71
  440. data/lib/rubygems/package/tar_reader/entry.rb +113 -20
  441. data/lib/rubygems/package/tar_reader.rb +13 -37
  442. data/lib/rubygems/package/tar_writer.rb +28 -44
  443. data/lib/rubygems/package.rb +234 -135
  444. data/lib/rubygems/package_task.rb +6 -12
  445. data/lib/rubygems/path_support.rb +18 -12
  446. data/lib/rubygems/platform.rb +123 -77
  447. data/lib/rubygems/psych_tree.rb +3 -2
  448. data/lib/rubygems/query_utils.rb +351 -0
  449. data/lib/rubygems/rdoc.rb +4 -326
  450. data/lib/rubygems/remote_fetcher.rb +89 -171
  451. data/lib/rubygems/request/connection_pools.rb +30 -23
  452. data/lib/rubygems/request/http_pool.rb +6 -7
  453. data/lib/rubygems/request/https_pool.rb +2 -3
  454. data/lib/rubygems/request.rb +88 -41
  455. data/lib/rubygems/request_set/gem_dependency_api.rb +171 -176
  456. data/lib/rubygems/request_set/lockfile/parser.rb +39 -49
  457. data/lib/rubygems/request_set/lockfile/tokenizer.rb +15 -13
  458. data/lib/rubygems/request_set/lockfile.rb +34 -32
  459. data/lib/rubygems/request_set.rb +115 -71
  460. data/lib/rubygems/requirement.rb +72 -63
  461. data/lib/rubygems/resolver/activation_request.rb +35 -60
  462. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  463. data/lib/rubygems/resolver/api_set.rb +40 -32
  464. data/lib/rubygems/resolver/api_specification.rb +37 -18
  465. data/lib/rubygems/resolver/best_set.rb +15 -17
  466. data/lib/rubygems/resolver/composed_set.rb +9 -11
  467. data/lib/rubygems/resolver/conflict.rb +18 -24
  468. data/lib/rubygems/resolver/current_set.rb +2 -4
  469. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  470. data/lib/rubygems/resolver/git_set.rb +8 -10
  471. data/lib/rubygems/resolver/git_specification.rb +11 -13
  472. data/lib/rubygems/resolver/index_set.rb +10 -12
  473. data/lib/rubygems/resolver/index_specification.rb +42 -11
  474. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  475. data/lib/rubygems/resolver/installer_set.rb +93 -46
  476. data/lib/rubygems/resolver/local_specification.rb +5 -7
  477. data/lib/rubygems/resolver/lock_set.rb +13 -15
  478. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  479. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  480. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  481. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  482. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  483. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  484. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  485. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  486. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  487. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  488. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  489. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  490. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  491. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  492. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  493. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  494. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  495. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  496. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  497. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  498. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  499. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  500. data/lib/rubygems/resolver/molinillo.rb +2 -1
  501. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  502. data/lib/rubygems/resolver/set.rb +3 -5
  503. data/lib/rubygems/resolver/source_set.rb +6 -7
  504. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  505. data/lib/rubygems/resolver/specification.rb +25 -10
  506. data/lib/rubygems/resolver/stats.rb +1 -0
  507. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  508. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  509. data/lib/rubygems/resolver.rb +120 -64
  510. data/lib/rubygems/s3_uri_signer.rb +177 -0
  511. data/lib/rubygems/safe_yaml.rb +59 -0
  512. data/lib/rubygems/security/policies.rb +49 -49
  513. data/lib/rubygems/security/policy.rb +44 -47
  514. data/lib/rubygems/security/signer.rb +86 -29
  515. data/lib/rubygems/security/trust_dir.rb +21 -23
  516. data/lib/rubygems/security.rb +111 -78
  517. data/lib/rubygems/security_option.rb +43 -0
  518. data/lib/rubygems/shellwords.rb +3 -0
  519. data/lib/rubygems/source/git.rb +40 -40
  520. data/lib/rubygems/source/installed.rb +5 -7
  521. data/lib/rubygems/source/local.rb +30 -30
  522. data/lib/rubygems/source/lock.rb +9 -7
  523. data/lib/rubygems/source/specific_file.rb +7 -8
  524. data/lib/rubygems/source/vendor.rb +3 -5
  525. data/lib/rubygems/source.rb +73 -63
  526. data/lib/rubygems/source_list.rb +14 -18
  527. data/lib/rubygems/spec_fetcher.rb +66 -78
  528. data/lib/rubygems/specification.rb +823 -1092
  529. data/lib/rubygems/specification_policy.rb +508 -0
  530. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  531. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  532. data/lib/rubygems/stub_specification.rb +52 -53
  533. data/lib/rubygems/text.rb +40 -27
  534. data/lib/rubygems/tsort/.document +1 -0
  535. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  536. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  537. data/lib/rubygems/tsort.rb +3 -0
  538. data/lib/rubygems/uninstaller.rb +149 -84
  539. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  540. data/lib/rubygems/update_suggestion.rb +69 -0
  541. data/lib/rubygems/uri.rb +126 -0
  542. data/lib/rubygems/uri_formatter.rb +3 -6
  543. data/lib/rubygems/user_interaction.rb +95 -143
  544. data/lib/rubygems/util/licenses.rb +679 -314
  545. data/lib/rubygems/util/list.rb +2 -1
  546. data/lib/rubygems/util.rb +58 -73
  547. data/lib/rubygems/validator.rb +23 -47
  548. data/lib/rubygems/version.rb +92 -48
  549. data/lib/rubygems/version_option.rb +20 -9
  550. data/lib/rubygems/yaml_serializer.rb +93 -0
  551. data/lib/rubygems.rb +434 -346
  552. data/rubygems-update.gemspec +38 -0
  553. data/setup.rb +13 -27
  554. data/test/rubygems/alternate_cert.pem +15 -14
  555. data/test/rubygems/alternate_cert_32.pem +16 -15
  556. data/test/rubygems/alternate_key.pem +25 -25
  557. data/test/rubygems/bad_rake.rb +1 -0
  558. data/test/rubygems/bundler_test_gem.rb +424 -0
  559. data/test/rubygems/ca_cert.pem +74 -65
  560. data/test/rubygems/child_cert.pem +16 -15
  561. data/test/rubygems/child_cert_32.pem +16 -15
  562. data/test/rubygems/child_key.pem +25 -25
  563. data/test/rubygems/client.pem +103 -45
  564. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  565. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  566. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  567. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  568. data/test/rubygems/encrypted_private_key.pem +26 -26
  569. data/test/rubygems/expired_cert.pem +15 -14
  570. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  571. data/test/rubygems/future_cert.pem +15 -14
  572. data/test/rubygems/future_cert_32.pem +15 -14
  573. data/test/rubygems/good_rake.rb +1 -0
  574. data/test/rubygems/grandchild_cert.pem +16 -15
  575. data/test/rubygems/grandchild_cert_32.pem +16 -15
  576. data/test/rubygems/grandchild_key.pem +25 -25
  577. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +643 -490
  578. data/{lib → test}/rubygems/installer_test_case.rb +118 -64
  579. data/test/rubygems/invalid_issuer_cert.pem +17 -15
  580. data/test/rubygems/invalid_issuer_cert_32.pem +17 -15
  581. data/test/rubygems/invalid_key.pem +25 -25
  582. data/test/rubygems/invalid_signer_cert.pem +16 -15
  583. data/test/rubygems/invalid_signer_cert_32.pem +16 -15
  584. data/test/rubygems/invalidchild_cert.pem +16 -15
  585. data/test/rubygems/invalidchild_cert_32.pem +16 -15
  586. data/test/rubygems/invalidchild_key.pem +25 -25
  587. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  588. data/{lib → test}/rubygems/package/tar_test_case.rb +54 -26
  589. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  590. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  591. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  592. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  593. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  594. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  595. data/test/rubygems/private3072_key.pem +40 -0
  596. data/test/rubygems/private_ec_key.pem +9 -0
  597. data/test/rubygems/private_key.pem +25 -25
  598. data/test/rubygems/public3072_cert.pem +25 -0
  599. data/test/rubygems/public_cert.pem +17 -15
  600. data/test/rubygems/public_cert_32.pem +16 -15
  601. data/test/rubygems/public_key.pem +7 -7
  602. data/test/rubygems/rubygems/commands/crash_command.rb +1 -2
  603. data/test/rubygems/rubygems_plugin.rb +7 -5
  604. data/test/rubygems/simple_gem.rb +1 -0
  605. data/test/rubygems/specifications/bar-0.0.2.gemspec +1 -1
  606. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +14 -0
  607. data/test/rubygems/ssl_cert.pem +78 -17
  608. data/test/rubygems/ssl_key.pem +25 -13
  609. data/test/rubygems/test_bundled_ca.rb +45 -43
  610. data/test/rubygems/test_config.rb +13 -9
  611. data/test/rubygems/test_deprecate.rb +91 -10
  612. data/test/rubygems/test_exit.rb +17 -0
  613. data/test/rubygems/test_gem.rb +917 -797
  614. data/test/rubygems/test_gem_available_set.rb +25 -25
  615. data/test/rubygems/test_gem_bundler_version_finder.rb +127 -0
  616. data/test/rubygems/test_gem_command.rb +195 -40
  617. data/test/rubygems/test_gem_command_manager.rb +182 -46
  618. data/test/rubygems/test_gem_commands_build_command.rb +646 -28
  619. data/test/rubygems/test_gem_commands_cert_command.rb +321 -126
  620. data/test/rubygems/test_gem_commands_check_command.rb +11 -12
  621. data/test/rubygems/test_gem_commands_cleanup_command.rb +147 -52
  622. data/test/rubygems/test_gem_commands_contents_command.rb +75 -44
  623. data/test/rubygems/test_gem_commands_dependency_command.rb +61 -63
  624. data/test/rubygems/test_gem_commands_environment_command.rb +62 -47
  625. data/test/rubygems/test_gem_commands_exec_command.rb +857 -0
  626. data/test/rubygems/test_gem_commands_fetch_command.rb +164 -33
  627. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  628. data/test/rubygems/test_gem_commands_help_command.rb +36 -17
  629. data/test/rubygems/test_gem_commands_info_command.rb +70 -0
  630. data/test/rubygems/test_gem_commands_install_command.rb +736 -150
  631. data/test/rubygems/test_gem_commands_list_command.rb +6 -7
  632. data/test/rubygems/test_gem_commands_lock_command.rb +12 -14
  633. data/test/rubygems/test_gem_commands_mirror.rb +4 -4
  634. data/test/rubygems/test_gem_commands_open_command.rb +47 -16
  635. data/test/rubygems/test_gem_commands_outdated_command.rb +25 -8
  636. data/test/rubygems/test_gem_commands_owner_command.rb +368 -70
  637. data/test/rubygems/test_gem_commands_pristine_command.rb +318 -101
  638. data/test/rubygems/test_gem_commands_push_command.rb +331 -58
  639. data/test/rubygems/test_gem_commands_query_command.rb +329 -128
  640. data/test/rubygems/test_gem_commands_search_command.rb +3 -5
  641. data/test/rubygems/test_gem_commands_server_command.rb +7 -47
  642. data/test/rubygems/test_gem_commands_setup_command.rb +404 -66
  643. data/test/rubygems/test_gem_commands_signin_command.rb +259 -0
  644. data/test/rubygems/test_gem_commands_signout_command.rb +30 -0
  645. data/test/rubygems/test_gem_commands_sources_command.rb +316 -31
  646. data/test/rubygems/test_gem_commands_specification_command.rb +82 -56
  647. data/test/rubygems/test_gem_commands_stale_command.rb +9 -9
  648. data/test/rubygems/test_gem_commands_uninstall_command.rb +347 -88
  649. data/test/rubygems/test_gem_commands_unpack_command.rb +49 -34
  650. data/test/rubygems/test_gem_commands_update_command.rb +429 -107
  651. data/test/rubygems/test_gem_commands_which_command.rb +13 -15
  652. data/test/rubygems/test_gem_commands_yank_command.rb +227 -28
  653. data/test/rubygems/test_gem_config_file.rb +168 -108
  654. data/test/rubygems/test_gem_dependency.rb +112 -76
  655. data/test/rubygems/test_gem_dependency_installer.rb +346 -391
  656. data/test/rubygems/test_gem_dependency_list.rb +68 -63
  657. data/test/rubygems/test_gem_dependency_resolution_error.rb +6 -8
  658. data/test/rubygems/test_gem_doctor.rb +75 -49
  659. data/test/rubygems/test_gem_ext_builder.rb +121 -125
  660. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  661. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
  662. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +249 -0
  663. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  664. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  665. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  666. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  667. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +249 -0
  668. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  669. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +10 -0
  670. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  671. data/test/rubygems/test_gem_ext_cargo_builder.rb +167 -0
  672. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +34 -0
  673. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  674. data/test/rubygems/test_gem_ext_cmake_builder.rb +33 -36
  675. data/test/rubygems/test_gem_ext_configure_builder.rb +25 -32
  676. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +94 -76
  677. data/test/rubygems/test_gem_ext_rake_builder.rb +79 -31
  678. data/test/rubygems/test_gem_gem_runner.rb +59 -9
  679. data/test/rubygems/test_gem_gemcutter_utilities.rb +210 -84
  680. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -7
  681. data/test/rubygems/test_gem_indexer.rb +121 -107
  682. data/test/rubygems/test_gem_install_update_options.rb +65 -54
  683. data/test/rubygems/test_gem_installer.rb +1517 -557
  684. data/test/rubygems/test_gem_local_remote_options.rb +14 -15
  685. data/test/rubygems/test_gem_name_tuple.rb +5 -7
  686. data/test/rubygems/test_gem_package.rb +673 -243
  687. data/test/rubygems/test_gem_package_old.rb +58 -57
  688. data/test/rubygems/test_gem_package_tar_header.rb +129 -50
  689. data/test/rubygems/test_gem_package_tar_reader.rb +71 -11
  690. data/test/rubygems/test_gem_package_tar_reader_entry.rb +229 -21
  691. data/test/rubygems/test_gem_package_tar_writer.rb +168 -101
  692. data/test/rubygems/test_gem_package_task.rb +59 -25
  693. data/test/rubygems/test_gem_path_support.rb +49 -31
  694. data/test/rubygems/test_gem_platform.rb +393 -204
  695. data/test/rubygems/test_gem_rdoc.rb +23 -156
  696. data/test/rubygems/test_gem_remote_fetcher.rb +580 -404
  697. data/test/rubygems/test_gem_request.rb +270 -86
  698. data/test/rubygems/test_gem_request_connection_pools.rb +57 -35
  699. data/test/rubygems/test_gem_request_set.rb +192 -115
  700. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +300 -278
  701. data/test/rubygems/test_gem_request_set_lockfile.rb +95 -96
  702. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +73 -78
  703. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +138 -137
  704. data/test/rubygems/test_gem_requirement.rb +175 -57
  705. data/test/rubygems/test_gem_resolver.rb +257 -113
  706. data/test/rubygems/test_gem_resolver_activation_request.rb +10 -41
  707. data/test/rubygems/test_gem_resolver_api_set.rb +80 -79
  708. data/test/rubygems/test_gem_resolver_api_specification.rb +64 -42
  709. data/test/rubygems/test_gem_resolver_best_set.rb +44 -23
  710. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -4
  711. data/test/rubygems/test_gem_resolver_conflict.rb +13 -19
  712. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -18
  713. data/test/rubygems/test_gem_resolver_git_set.rb +23 -25
  714. data/test/rubygems/test_gem_resolver_git_specification.rb +23 -23
  715. data/test/rubygems/test_gem_resolver_index_set.rb +15 -17
  716. data/test/rubygems/test_gem_resolver_index_specification.rb +22 -19
  717. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -9
  718. data/test/rubygems/test_gem_resolver_installer_set.rb +110 -48
  719. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -10
  720. data/test/rubygems/test_gem_resolver_lock_set.rb +16 -18
  721. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -20
  722. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -4
  723. data/test/rubygems/test_gem_resolver_specification.rb +10 -12
  724. data/test/rubygems/test_gem_resolver_vendor_set.rb +10 -12
  725. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -13
  726. data/test/rubygems/test_gem_security.rb +116 -82
  727. data/test/rubygems/test_gem_security_policy.rb +128 -134
  728. data/test/rubygems/test_gem_security_signer.rb +58 -49
  729. data/test/rubygems/test_gem_security_trust_dir.rb +19 -21
  730. data/test/rubygems/test_gem_silent_ui.rb +48 -42
  731. data/test/rubygems/test_gem_source.rb +73 -61
  732. data/test/rubygems/test_gem_source_fetch_problem.rb +23 -6
  733. data/test/rubygems/test_gem_source_git.rb +79 -78
  734. data/test/rubygems/test_gem_source_installed.rb +17 -19
  735. data/test/rubygems/test_gem_source_list.rb +6 -5
  736. data/test/rubygems/test_gem_source_local.rb +16 -16
  737. data/test/rubygems/test_gem_source_lock.rb +32 -34
  738. data/test/rubygems/test_gem_source_specific_file.rb +19 -19
  739. data/test/rubygems/test_gem_source_subpath_problem.rb +50 -0
  740. data/test/rubygems/test_gem_source_vendor.rb +14 -16
  741. data/test/rubygems/test_gem_spec_fetcher.rb +89 -62
  742. data/test/rubygems/test_gem_specification.rb +1441 -1104
  743. data/test/rubygems/test_gem_stream_ui.rb +71 -55
  744. data/test/rubygems/test_gem_stub_specification.rb +102 -41
  745. data/test/rubygems/test_gem_text.rb +27 -1
  746. data/test/rubygems/test_gem_uninstaller.rb +289 -99
  747. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -6
  748. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  749. data/test/rubygems/test_gem_uri.rb +41 -0
  750. data/test/rubygems/test_gem_uri_formatter.rb +15 -17
  751. data/test/rubygems/test_gem_util.rb +68 -17
  752. data/test/rubygems/test_gem_validator.rb +12 -16
  753. data/test/rubygems/test_gem_version.rb +123 -40
  754. data/test/rubygems/test_gem_version_option.rb +30 -17
  755. data/test/rubygems/test_kernel.rb +75 -37
  756. data/test/rubygems/test_project_sanity.rb +49 -0
  757. data/test/rubygems/test_remote_fetch_error.rb +20 -0
  758. data/test/rubygems/test_require.rb +527 -117
  759. data/test/rubygems/test_rubygems.rb +76 -0
  760. data/test/rubygems/test_webauthn_listener.rb +143 -0
  761. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  762. data/test/rubygems/test_webauthn_poller.rb +124 -0
  763. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +135 -83
  764. data/test/rubygems/wrong_key_cert.pem +16 -15
  765. data/test/rubygems/wrong_key_cert_32.pem +16 -15
  766. data/test/test_changelog_generator.rb +17 -0
  767. metadata +513 -189
  768. data/.autotest +0 -71
  769. data/.document +0 -5
  770. data/.travis.yml +0 -46
  771. data/CONTRIBUTING.rdoc +0 -129
  772. data/CVE-2013-4287.txt +0 -35
  773. data/CVE-2013-4363.txt +0 -45
  774. data/CVE-2015-3900.txt +0 -40
  775. data/History.txt +0 -3094
  776. data/MAINTAINERS.md +0 -5
  777. data/POLICIES.rdoc +0 -61
  778. data/README.rdoc +0 -54
  779. data/Rakefile +0 -449
  780. data/UPGRADING.rdoc +0 -92
  781. data/appveyor.yml +0 -36
  782. data/bin/gem +0 -25
  783. data/bin/update_rubygems +0 -37
  784. data/lib/gauntlet_rubygems.rb +0 -51
  785. data/lib/rubygems/psych_additions.rb +0 -10
  786. data/lib/rubygems/server.rb +0 -869
  787. data/lib/rubygems/source_local.rb +0 -6
  788. data/lib/rubygems/source_specific_file.rb +0 -5
  789. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  790. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  791. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  792. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  793. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  794. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  795. data/lib/rubygems/syck_hack.rb +0 -77
  796. data/lib/ubygems.rb +0 -11
  797. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  798. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  799. data/test/rubygems/test_gem_server.rb +0 -409
  800. data/util/CL2notes +0 -56
  801. data/util/create_certs.rb +0 -157
  802. data/util/create_encrypted_key.rb +0 -17
  803. data/util/generate_spdx_license_list.rb +0 -51
  804. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/commands/install_command'
4
- require 'rubygems/request_set'
5
- require 'rubygems/rdoc'
6
2
 
7
- class TestGemCommandsInstallCommand < Gem::TestCase
3
+ require_relative "helper"
4
+ require_relative "test_gem_update_suggestion"
5
+ require "rubygems/commands/install_command"
6
+ require "rubygems/request_set"
7
+ require "rubygems/rdoc"
8
8
 
9
+ class TestGemCommandsInstallCommand < Gem::TestCase
9
10
  def setup
11
+ @orig_args = Gem::Command.build_args
10
12
  super
11
13
  common_installer_setup
12
14
 
@@ -14,7 +16,6 @@ class TestGemCommandsInstallCommand < Gem::TestCase
14
16
  @cmd.options[:document] = []
15
17
 
16
18
  @gemdeps = "tmp_install_gemdeps"
17
- @orig_args = Gem::Command.build_args
18
19
 
19
20
  common_installer_setup
20
21
  end
@@ -31,51 +32,51 @@ class TestGemCommandsInstallCommand < Gem::TestCase
31
32
 
32
33
  def test_execute_exclude_prerelease
33
34
  spec_fetcher do |fetcher|
34
- fetcher.gem 'a', 2
35
- fetcher.gem 'a', '2.pre'
35
+ fetcher.gem "a", 2
36
+ fetcher.gem "a", "2.pre"
36
37
  end
37
38
 
38
39
  @cmd.options[:args] = %w[a]
39
40
 
40
41
  use_ui @ui do
41
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
42
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
42
43
  @cmd.execute
43
44
  end
44
45
  end
45
46
 
46
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
47
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
47
48
  end
48
49
 
49
50
  def test_execute_explicit_version_includes_prerelease
50
51
  specs = spec_fetcher do |fetcher|
51
- fetcher.gem 'a', 2
52
- fetcher.gem 'a', '2.a'
52
+ fetcher.gem "a", 2
53
+ fetcher.gem "a", "2.a"
53
54
  end
54
55
 
55
- a2_pre = specs['a-2.a']
56
+ a2_pre = specs["a-2.a"]
56
57
 
57
- @cmd.handle_options [a2_pre.name, '--version', a2_pre.version.to_s,
58
- "--no-ri", "--no-rdoc"]
58
+ @cmd.handle_options [a2_pre.name, "--version", a2_pre.version.to_s,
59
+ "--no-document"]
59
60
  assert @cmd.options[:prerelease]
60
61
  assert @cmd.options[:version].satisfied_by?(a2_pre.version)
61
62
 
62
63
  use_ui @ui do
63
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
64
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
64
65
  @cmd.execute
65
66
  end
66
67
  end
67
68
 
68
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
69
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
69
70
  end
70
71
 
71
72
  def test_execute_local
72
73
  specs = spec_fetcher do |fetcher|
73
- fetcher.gem 'a', 2
74
+ fetcher.gem "a", 2
74
75
  end
75
76
 
76
77
  @cmd.options[:domain] = :local
77
78
 
78
- FileUtils.mv specs['a-2'].cache_file, @tempdir
79
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
79
80
 
80
81
  @cmd.options[:args] = %w[a]
81
82
 
@@ -83,7 +84,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
83
84
  orig_dir = Dir.pwd
84
85
  begin
85
86
  Dir.chdir @tempdir
86
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
87
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
87
88
  @cmd.execute
88
89
  end
89
90
  ensure
@@ -91,37 +92,129 @@ class TestGemCommandsInstallCommand < Gem::TestCase
91
92
  end
92
93
  end
93
94
 
94
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
95
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
95
96
 
96
97
  assert_match "1 gem installed", @ui.output
97
98
  end
98
99
 
100
+ def test_execute_local_dependency_nonexistent
101
+ specs = spec_fetcher do |fetcher|
102
+ fetcher.gem "foo", 2, "bar" => "0.5"
103
+ end
104
+
105
+ @cmd.options[:domain] = :local
106
+
107
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
108
+
109
+ @cmd.options[:args] = ["foo"]
110
+
111
+ use_ui @ui do
112
+ orig_dir = Dir.pwd
113
+ begin
114
+ Dir.chdir @tempdir
115
+ e = assert_raise Gem::MockGemUi::TermError do
116
+ @cmd.execute
117
+ end
118
+ assert_equal 2, e.exit_code
119
+ ensure
120
+ Dir.chdir orig_dir
121
+ end
122
+ end
123
+
124
+ expected = <<-EXPECTED
125
+ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
126
+ EXPECTED
127
+
128
+ assert_equal expected, @ui.error
129
+ end
130
+
131
+ def test_execute_local_dependency_nonexistent_ignore_dependencies
132
+ specs = spec_fetcher do |fetcher|
133
+ fetcher.gem "foo", 2, "bar" => "0.5"
134
+ end
135
+
136
+ @cmd.options[:domain] = :local
137
+ @cmd.options[:ignore_dependencies] = true
138
+
139
+ FileUtils.mv specs["foo-2"].cache_file, @tempdir
140
+
141
+ @cmd.options[:args] = ["foo"]
142
+
143
+ use_ui @ui do
144
+ orig_dir = Dir.pwd
145
+ begin
146
+ Dir.chdir orig_dir
147
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
148
+ @cmd.execute
149
+ end
150
+ ensure
151
+ Dir.chdir orig_dir
152
+ end
153
+ end
154
+
155
+ assert_match "1 gem installed", @ui.output
156
+ end
157
+
158
+ def test_execute_local_transitive_prerelease
159
+ specs = spec_fetcher do |fetcher|
160
+ fetcher.download "a", 2, "b" => "2.a", "c" => "3"
161
+ fetcher.download "b", "2.a"
162
+ fetcher.download "c", "3"
163
+ end
164
+
165
+ @cmd.options[:domain] = :local
166
+
167
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
168
+ FileUtils.mv specs["b-2.a"].cache_file, @tempdir
169
+ FileUtils.mv specs["c-3"].cache_file, @tempdir
170
+
171
+ @cmd.options[:args] = %w[a]
172
+
173
+ use_ui @ui do
174
+ orig_dir = Dir.pwd
175
+ begin
176
+ Dir.chdir @tempdir
177
+ FileUtils.rm_r [@gemhome, "gems"]
178
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
179
+ @cmd.execute
180
+ end
181
+ ensure
182
+ Dir.chdir orig_dir
183
+ end
184
+ end
185
+
186
+ assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map {|spec| spec.full_name }.sort
187
+
188
+ assert_match "3 gems installed", @ui.output
189
+ end
190
+
99
191
  def test_execute_no_user_install
100
- skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
192
+ pend "skipped on MS Windows (chmod has no effect)" if win_platform?
193
+ pend "skipped in root privilege" if Process.uid.zero?
101
194
 
102
195
  specs = spec_fetcher do |fetcher|
103
- fetcher.gem 'a', 2
196
+ fetcher.gem "a", 2
104
197
  end
105
198
 
106
199
  @cmd.options[:user_install] = false
107
200
 
108
- FileUtils.mv specs['a-2'].cache_file, @tempdir
201
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
109
202
 
110
203
  @cmd.options[:args] = %w[a]
111
204
 
112
205
  use_ui @ui do
113
206
  orig_dir = Dir.pwd
114
207
  begin
115
- FileUtils.chmod 0755, @userhome
116
- FileUtils.chmod 0555, @gemhome
208
+ FileUtils.chmod 0o755, @userhome
209
+ FileUtils.chmod 0o555, @gemhome
117
210
 
118
211
  Dir.chdir @tempdir
119
- assert_raises Gem::FilePermissionError do
212
+ assert_raise Gem::FilePermissionError do
120
213
  @cmd.execute
121
214
  end
122
215
  ensure
123
216
  Dir.chdir orig_dir
124
- FileUtils.chmod 0755, @gemhome
217
+ FileUtils.chmod 0o755, @gemhome
125
218
  end
126
219
  end
127
220
  end
@@ -134,20 +227,39 @@ class TestGemCommandsInstallCommand < Gem::TestCase
134
227
  @cmd.options[:args] = %w[no_such_gem]
135
228
 
136
229
  use_ui @ui do
137
- e = assert_raises Gem::MockGemUi::TermError do
230
+ e = assert_raise Gem::MockGemUi::TermError do
231
+ @cmd.execute
232
+ end
233
+ assert_equal 2, e.exit_code
234
+ end
235
+
236
+ # HACK: no repository was checked
237
+ assert_match(/ould not find a valid gem 'no_such_gem'/, @ui.error)
238
+ end
239
+
240
+ def test_execute_local_missing_ignore_dependencies
241
+ spec_fetcher
242
+
243
+ @cmd.options[:domain] = :local
244
+ @cmd.options[:ignore_dependencies] = true
245
+
246
+ @cmd.options[:args] = %w[no_such_gem]
247
+
248
+ use_ui @ui do
249
+ e = assert_raise Gem::MockGemUi::TermError do
138
250
  @cmd.execute
139
251
  end
140
252
  assert_equal 2, e.exit_code
141
253
  end
142
254
 
143
- # HACK no repository was checked
255
+ # HACK: no repository was checked
144
256
  assert_match(/ould not find a valid gem 'no_such_gem'/, @ui.error)
145
257
  end
146
258
 
147
259
  def test_execute_no_gem
148
260
  @cmd.options[:args] = %w[]
149
261
 
150
- assert_raises Gem::CommandLineError do
262
+ assert_raise Gem::CommandLineError do
151
263
  @cmd.execute
152
264
  end
153
265
  end
@@ -158,7 +270,23 @@ class TestGemCommandsInstallCommand < Gem::TestCase
158
270
  @cmd.options[:args] = %w[nonexistent]
159
271
 
160
272
  use_ui @ui do
161
- e = assert_raises Gem::MockGemUi::TermError do
273
+ e = assert_raise Gem::MockGemUi::TermError do
274
+ @cmd.execute
275
+ end
276
+ assert_equal 2, e.exit_code
277
+ end
278
+
279
+ assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
280
+ end
281
+
282
+ def test_execute_nonexistent_force
283
+ spec_fetcher
284
+
285
+ @cmd.options[:args] = %w[nonexistent]
286
+ @cmd.options[:force] = true
287
+
288
+ use_ui @ui do
289
+ e = assert_raise Gem::MockGemUi::TermError do
162
290
  @cmd.execute
163
291
  end
164
292
  assert_equal 2, e.exit_code
@@ -167,6 +295,38 @@ class TestGemCommandsInstallCommand < Gem::TestCase
167
295
  assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
168
296
  end
169
297
 
298
+ def test_execute_dependency_nonexistent
299
+ spec_fetcher do |fetcher|
300
+ fetcher.spec "foo", 2, "bar" => "0.5"
301
+ end
302
+
303
+ @cmd.options[:args] = ["foo"]
304
+
305
+ use_ui @ui do
306
+ e = assert_raise Gem::MockGemUi::TermError do
307
+ @cmd.execute
308
+ end
309
+
310
+ assert_equal 2, e.exit_code
311
+ end
312
+
313
+ expected = <<-EXPECTED
314
+ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
315
+ EXPECTED
316
+
317
+ assert_equal expected, @ui.error
318
+ end
319
+
320
+ def test_execute_http_proxy
321
+ use_ui @ui do
322
+ e = assert_raise ArgumentError, @ui.error do
323
+ @cmd.handle_options %w[-p=foo.bar.com]
324
+ end
325
+
326
+ assert_match "Invalid uri scheme for =foo.bar.com\nPreface URLs with one of [\"http://\", \"https://\", \"file://\", \"s3://\"]", e.message
327
+ end
328
+ end
329
+
170
330
  def test_execute_bad_source
171
331
  spec_fetcher
172
332
 
@@ -185,7 +345,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
185
345
  @cmd.options[:args] = %w[nonexistent]
186
346
 
187
347
  use_ui @ui do
188
- e = assert_raises Gem::MockGemUi::TermError do
348
+ e = assert_raise Gem::MockGemUi::TermError do
189
349
  @cmd.execute
190
350
  end
191
351
  assert_equal 2, e.exit_code
@@ -194,7 +354,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
194
354
  errs = @ui.error.split("\n")
195
355
 
196
356
  assert_match(/ould not find a valid gem 'nonexistent'/, errs.shift)
197
- assert_match(%r!Unable to download data from http://not-there.nothing!, errs.shift)
357
+ assert_match(%r{Unable to download data from http://not-there.nothing}, errs.shift)
198
358
  end
199
359
 
200
360
  def test_execute_nonexistent_hint_disabled
@@ -209,7 +369,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
209
369
  @cmd.options[:suggest_alternate] = false
210
370
 
211
371
  use_ui @ui do
212
- e = assert_raises Gem::MockGemUi::TermError do
372
+ e = assert_raise Gem::MockGemUi::TermError do
213
373
  @cmd.execute
214
374
  end
215
375
 
@@ -234,7 +394,7 @@ ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any reposit
234
394
  @cmd.options[:args] = [misspelled]
235
395
 
236
396
  use_ui @ui do
237
- e = assert_raises Gem::MockGemUi::TermError do
397
+ e = assert_raise Gem::MockGemUi::TermError do
238
398
  @cmd.execute
239
399
  end
240
400
 
@@ -259,7 +419,7 @@ ERROR: Possible alternatives: non_existent_with_hint
259
419
  @cmd.options[:args] = [misspelled]
260
420
 
261
421
  use_ui @ui do
262
- e = assert_raises Gem::MockGemUi::TermError do
422
+ e = assert_raise Gem::MockGemUi::TermError do
263
423
  @cmd.execute
264
424
  end
265
425
 
@@ -268,7 +428,7 @@ ERROR: Possible alternatives: non_existent_with_hint
268
428
 
269
429
  expected = [
270
430
  "ERROR: Could not find a valid gem 'non-existent_with-hint' (>= 0) in any repository",
271
- "ERROR: Possible alternatives: nonexistent-with_hint"
431
+ "ERROR: Possible alternatives: nonexistent-with_hint",
272
432
  ]
273
433
 
274
434
  output = @ui.error.split "\n"
@@ -281,7 +441,7 @@ ERROR: Possible alternatives: non_existent_with_hint
281
441
  @cmd.options[:install_dir] = "whatever"
282
442
 
283
443
  use_ui @ui do
284
- assert_raises Gem::MockGemUi::TermError do
444
+ assert_raise Gem::MockGemUi::TermError do
285
445
  @cmd.execute
286
446
  end
287
447
  end
@@ -293,62 +453,209 @@ ERROR: Possible alternatives: non_existent_with_hint
293
453
 
294
454
  def test_execute_prerelease_skipped_when_no_flag_set
295
455
  spec_fetcher do |fetcher|
296
- fetcher.gem 'a', 1
297
- fetcher.gem 'a', '3.a'
456
+ fetcher.gem "a", 1
457
+ fetcher.gem "a", "3.a"
298
458
  end
299
459
 
300
460
  @cmd.options[:prerelease] = false
301
461
  @cmd.options[:args] = %w[a]
302
462
 
303
463
  use_ui @ui do
304
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
464
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
305
465
  @cmd.execute
306
466
  end
307
467
  end
308
468
 
309
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
469
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
310
470
  end
311
471
 
312
472
  def test_execute_prerelease_wins_over_previous_ver
313
473
  spec_fetcher do |fetcher|
314
- fetcher.download 'a', 1
315
- fetcher.download 'a', '2.a'
474
+ fetcher.download "a", 1
475
+ fetcher.download "a", "2.a"
316
476
  end
317
477
 
318
478
  @cmd.options[:prerelease] = true
319
479
  @cmd.options[:args] = %w[a]
320
480
 
321
481
  use_ui @ui do
322
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
482
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
323
483
  @cmd.execute
324
484
  end
325
485
  end
326
486
 
327
- assert_equal %w[a-2.a], @cmd.installed_specs.map { |spec| spec.full_name }
487
+ assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
488
+ end
489
+
490
+ def test_execute_with_version_specified_by_colon
491
+ spec_fetcher do |fetcher|
492
+ fetcher.download "a", 1
493
+ fetcher.download "a", 2
494
+ end
495
+
496
+ @cmd.options[:args] = %w[a:1]
497
+
498
+ use_ui @ui do
499
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
500
+ @cmd.execute
501
+ end
502
+ end
503
+
504
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
328
505
  end
329
506
 
330
507
  def test_execute_prerelease_skipped_when_non_pre_available
331
508
  spec_fetcher do |fetcher|
332
- fetcher.gem 'a', '2.pre'
333
- fetcher.gem 'a', 2
509
+ fetcher.gem "a", "2.pre"
510
+ fetcher.gem "a", 2
334
511
  end
335
512
 
336
513
  @cmd.options[:prerelease] = true
337
514
  @cmd.options[:args] = %w[a]
338
515
 
339
516
  use_ui @ui do
340
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
517
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
341
518
  @cmd.execute
342
519
  end
343
520
  end
344
521
 
345
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
522
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
523
+ end
524
+
525
+ def test_execute_required_ruby_version
526
+ next_ruby = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".")
527
+
528
+ local = Gem::Platform.local
529
+ spec_fetcher do |fetcher|
530
+ fetcher.download "a", 2
531
+ fetcher.download "a", 2 do |s|
532
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
533
+ s.platform = local
534
+ end
535
+ fetcher.download "a", 3 do |s|
536
+ s.required_ruby_version = ">= #{next_ruby}"
537
+ end
538
+ fetcher.download "a", 3 do |s|
539
+ s.required_ruby_version = ">= #{next_ruby}"
540
+ s.platform = local
541
+ end
542
+ end
543
+
544
+ @cmd.options[:args] = %w[a]
545
+
546
+ use_ui @ui do
547
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
548
+ @cmd.execute
549
+ end
550
+ end
551
+
552
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
553
+ end
554
+
555
+ def test_execute_required_ruby_version_upper_bound
556
+ local = Gem::Platform.local
557
+ spec_fetcher do |fetcher|
558
+ fetcher.gem "a", 2.0
559
+ fetcher.gem "a", 2.0 do |s|
560
+ s.required_ruby_version = "< #{RUBY_VERSION}.a"
561
+ s.platform = local
562
+ end
563
+ end
564
+
565
+ @cmd.options[:args] = %w[a]
566
+
567
+ use_ui @ui do
568
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
569
+ @cmd.execute
570
+ end
571
+ end
572
+
573
+ assert_equal %w[a-2.0], @cmd.installed_specs.map {|spec| spec.full_name }
574
+ end
575
+
576
+ def test_execute_required_ruby_version_specific_not_met
577
+ spec_fetcher do |fetcher|
578
+ fetcher.gem "a", "1.0" do |s|
579
+ s.required_ruby_version = "= 1.4.6"
580
+ end
581
+ end
582
+
583
+ @cmd.options[:args] = %w[a]
584
+
585
+ use_ui @ui do
586
+ assert_raise Gem::MockGemUi::TermError do
587
+ @cmd.execute
588
+ end
589
+ end
590
+
591
+ errs = @ui.error.split("\n")
592
+ assert_equal "ERROR: Error installing a:", errs.shift
593
+ assert_equal "\ta-1.0 requires Ruby version = 1.4.6. The current ruby version is #{Gem.ruby_version}.", errs.shift
594
+ end
595
+
596
+ def test_execute_required_ruby_version_specific_prerelease_met
597
+ spec_fetcher do |fetcher|
598
+ fetcher.gem "a", "1.0" do |s|
599
+ s.required_ruby_version = ">= 1.4.6.preview2"
600
+ end
601
+ end
602
+
603
+ @cmd.options[:args] = %w[a]
604
+
605
+ use_ui @ui do
606
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
607
+ @cmd.execute
608
+ end
609
+ end
610
+
611
+ assert_equal %w[a-1.0], @cmd.installed_specs.map {|spec| spec.full_name }
612
+ end
613
+
614
+ def test_execute_required_ruby_version_specific_prerelease_not_met
615
+ next_ruby_pre = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".") + ".a"
616
+
617
+ spec_fetcher do |fetcher|
618
+ fetcher.gem "a", "1.0" do |s|
619
+ s.required_ruby_version = "> #{next_ruby_pre}"
620
+ end
621
+ end
622
+
623
+ @cmd.options[:args] = %w[a]
624
+
625
+ use_ui @ui do
626
+ assert_raise Gem::MockGemUi::TermError do
627
+ @cmd.execute
628
+ end
629
+ end
630
+
631
+ errs = @ui.error.split("\n")
632
+ assert_equal "ERROR: Error installing a:", errs.shift
633
+ assert_equal "\ta-1.0 requires Ruby version > #{next_ruby_pre}. The current ruby version is #{Gem.ruby_version}.", errs.shift
634
+ end
635
+
636
+ def test_execute_required_rubygems_version_wrong
637
+ spec_fetcher do |fetcher|
638
+ fetcher.gem "a", "1.0" do |s|
639
+ s.required_rubygems_version = "< 0"
640
+ end
641
+ end
642
+
643
+ @cmd.options[:args] = %w[a]
644
+
645
+ use_ui @ui do
646
+ assert_raise Gem::MockGemUi::TermError do
647
+ @cmd.execute
648
+ end
649
+ end
650
+
651
+ errs = @ui.error.split("\n")
652
+ assert_equal "ERROR: Error installing a:", errs.shift
653
+ assert_equal "\ta-1.0 requires RubyGems version < 0. The current RubyGems version is #{Gem.rubygems_version}. Try 'gem update --system' to update RubyGems itself.", errs.shift
346
654
  end
347
655
 
348
656
  def test_execute_rdoc
349
- skip if RUBY_VERSION <= "1.8.7"
350
657
  specs = spec_fetcher do |fetcher|
351
- fetcher.gem 'a', 2
658
+ fetcher.gem "a", 2
352
659
  end
353
660
 
354
661
  Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@@ -356,7 +663,7 @@ ERROR: Possible alternatives: non_existent_with_hint
356
663
  @cmd.options[:document] = %w[rdoc ri]
357
664
  @cmd.options[:domain] = :local
358
665
 
359
- a2 = specs['a-2']
666
+ a2 = specs["a-2"]
360
667
  FileUtils.mv a2.cache_file, @tempdir
361
668
 
362
669
  @cmd.options[:args] = %w[a]
@@ -368,7 +675,7 @@ ERROR: Possible alternatives: non_existent_with_hint
368
675
 
369
676
  begin
370
677
  Dir.chdir @tempdir
371
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
678
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
372
679
  @cmd.execute
373
680
  end
374
681
  ensure
@@ -378,20 +685,56 @@ ERROR: Possible alternatives: non_existent_with_hint
378
685
 
379
686
  wait_for_child_process_to_exit
380
687
 
381
- assert_path_exists File.join(a2.doc_dir, 'ri')
382
- assert_path_exists File.join(a2.doc_dir, 'rdoc')
688
+ assert_path_exist File.join(a2.doc_dir, "ri")
689
+ assert_path_exist File.join(a2.doc_dir, "rdoc")
690
+ end
691
+
692
+ def test_execute_rdoc_with_path
693
+ specs = spec_fetcher do |fetcher|
694
+ fetcher.gem "a", 2
695
+ end
696
+
697
+ Gem.done_installing(&Gem::RDoc.method(:generation_hook))
698
+
699
+ @cmd.options[:document] = %w[rdoc ri]
700
+ @cmd.options[:domain] = :local
701
+ @cmd.options[:install_dir] = "whatever"
702
+
703
+ a2 = specs["a-2"]
704
+ FileUtils.mv a2.cache_file, @tempdir
705
+
706
+ @cmd.options[:args] = %w[a]
707
+
708
+ use_ui @ui do
709
+ # Don't use Dir.chdir with a block, it warnings a lot because
710
+ # of a downstream Dir.chdir with a block
711
+ old = Dir.getwd
712
+
713
+ begin
714
+ Dir.chdir @tempdir
715
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
716
+ @cmd.execute
717
+ end
718
+ ensure
719
+ Dir.chdir old
720
+ end
721
+ end
722
+
723
+ wait_for_child_process_to_exit
724
+
725
+ assert_path_exist "whatever/doc/a-2", "documentation not installed"
383
726
  end
384
727
 
385
728
  def test_execute_saves_build_args
386
729
  specs = spec_fetcher do |fetcher|
387
- fetcher.gem 'a', 2
730
+ fetcher.gem "a", 2
388
731
  end
389
732
 
390
- args = %w!--with-awesome=true --more-awesome=yes!
733
+ args = %w[--with-awesome=true --more-awesome=yes]
391
734
 
392
735
  Gem::Command.build_args = args
393
736
 
394
- a2 = specs['a-2']
737
+ a2 = specs["a-2"]
395
738
  FileUtils.mv a2.cache_file, @tempdir
396
739
 
397
740
  @cmd.options[:domain] = :local
@@ -405,7 +748,7 @@ ERROR: Possible alternatives: non_existent_with_hint
405
748
 
406
749
  begin
407
750
  Dir.chdir @tempdir
408
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
751
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
409
752
  @cmd.execute
410
753
  end
411
754
  ensure
@@ -414,40 +757,92 @@ ERROR: Possible alternatives: non_existent_with_hint
414
757
  end
415
758
 
416
759
  path = a2.build_info_file
417
- assert_path_exists path
760
+ assert_path_exist path
418
761
 
419
762
  assert_equal args, a2.build_args
420
763
  end
421
764
 
422
-
423
765
  def test_execute_remote
424
766
  spec_fetcher do |fetcher|
425
- fetcher.gem 'a', 2
767
+ fetcher.gem "a", 2
426
768
  end
427
769
 
428
770
  @cmd.options[:args] = %w[a]
429
771
 
430
772
  use_ui @ui do
431
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
773
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
432
774
  @cmd.execute
433
775
  end
434
776
  end
435
777
 
436
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
778
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
437
779
 
438
780
  assert_match "1 gem installed", @ui.output
439
781
  end
440
782
 
783
+ def test_execute_with_invalid_gem_file
784
+ FileUtils.touch("a.gem")
785
+
786
+ spec_fetcher do |fetcher|
787
+ fetcher.gem "a", 2
788
+ end
789
+
790
+ @cmd.options[:args] = %w[a]
791
+
792
+ use_ui @ui do
793
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
794
+ @cmd.execute
795
+ end
796
+ end
797
+
798
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
799
+
800
+ assert_match "1 gem installed", @ui.output
801
+ end
802
+
803
+ def test_execute_remote_truncates_existing_gemspecs
804
+ spec_fetcher do |fetcher|
805
+ fetcher.gem "a", 1
806
+ end
807
+
808
+ @cmd.options[:domain] = :remote
809
+
810
+ @cmd.options[:args] = %w[a]
811
+
812
+ use_ui @ui do
813
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
814
+ @cmd.execute
815
+ end
816
+ end
817
+
818
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
819
+ assert_match "1 gem installed", @ui.output
820
+
821
+ a1_gemspec = File.join(@gemhome, "specifications", "a-1.gemspec")
822
+
823
+ initial_a1_gemspec_content = File.read(a1_gemspec)
824
+ modified_a1_gemspec_content = initial_a1_gemspec_content + "\n # AAAAAAA\n"
825
+ File.write(a1_gemspec, modified_a1_gemspec_content)
826
+
827
+ use_ui @ui do
828
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
829
+ @cmd.execute
830
+ end
831
+ end
832
+
833
+ assert_equal initial_a1_gemspec_content, File.read(a1_gemspec)
834
+ end
835
+
441
836
  def test_execute_remote_ignores_files
442
837
  specs = spec_fetcher do |fetcher|
443
- fetcher.gem 'a', 1
444
- fetcher.gem 'a', 2
838
+ fetcher.gem "a", 1
839
+ fetcher.gem "a", 2
445
840
  end
446
841
 
447
842
  @cmd.options[:domain] = :remote
448
843
 
449
- a1 = specs['a-1']
450
- a2 = specs['a-2']
844
+ a1 = specs["a-1"]
845
+ a2 = specs["a-2"]
451
846
 
452
847
  FileUtils.mv a2.cache_file, @tempdir
453
848
 
@@ -456,7 +851,7 @@ ERROR: Possible alternatives: non_existent_with_hint
456
851
 
457
852
  @cmd.options[:args] = [a2.name]
458
853
 
459
- gemdir = File.join @gemhome, 'specifications'
854
+ gemdir = File.join @gemhome, "specifications"
460
855
 
461
856
  a2_gemspec = File.join(gemdir, "a-2.gemspec")
462
857
  a1_gemspec = File.join(gemdir, "a-1.gemspec")
@@ -468,13 +863,13 @@ ERROR: Possible alternatives: non_existent_with_hint
468
863
 
469
864
  use_ui @ui do
470
865
  Dir.chdir @tempdir do
471
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
866
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
472
867
  @cmd.execute
473
868
  end
474
869
  end
475
870
  end
476
871
 
477
- assert_equal %w[a-1], @cmd.installed_specs.map { |spec| spec.full_name }
872
+ assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
478
873
 
479
874
  assert_match "1 gem installed", @ui.output
480
875
 
@@ -485,12 +880,12 @@ ERROR: Possible alternatives: non_existent_with_hint
485
880
 
486
881
  def test_execute_two
487
882
  specs = spec_fetcher do |fetcher|
488
- fetcher.gem 'a', 2
489
- fetcher.gem 'b', 2
883
+ fetcher.gem "a", 2
884
+ fetcher.gem "b", 2
490
885
  end
491
886
 
492
- FileUtils.mv specs['a-2'].cache_file, @tempdir
493
- FileUtils.mv specs['b-2'].cache_file, @tempdir
887
+ FileUtils.mv specs["a-2"].cache_file, @tempdir
888
+ FileUtils.mv specs["b-2"].cache_file, @tempdir
494
889
 
495
890
  @cmd.options[:domain] = :local
496
891
 
@@ -500,7 +895,7 @@ ERROR: Possible alternatives: non_existent_with_hint
500
895
  orig_dir = Dir.pwd
501
896
  begin
502
897
  Dir.chdir @tempdir
503
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
898
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
504
899
  @cmd.execute
505
900
  end
506
901
  ensure
@@ -508,7 +903,7 @@ ERROR: Possible alternatives: non_existent_with_hint
508
903
  end
509
904
  end
510
905
 
511
- assert_equal %w[a-2 b-2], @cmd.installed_specs.map { |spec| spec.full_name }
906
+ assert_equal %w[a-2 b-2], @cmd.installed_specs.map {|spec| spec.full_name }
512
907
 
513
908
  assert_match "2 gems installed", @ui.output
514
909
  end
@@ -518,7 +913,7 @@ ERROR: Possible alternatives: non_existent_with_hint
518
913
  @cmd.options[:version] = Gem::Requirement.new("> 1")
519
914
 
520
915
  use_ui @ui do
521
- e = assert_raises Gem::MockGemUi::TermError do
916
+ e = assert_raise Gem::MockGemUi::TermError do
522
917
  @cmd.execute
523
918
  end
524
919
 
@@ -527,17 +922,37 @@ ERROR: Possible alternatives: non_existent_with_hint
527
922
 
528
923
  assert_empty @cmd.installed_specs
529
924
 
530
- msg = "ERROR: Can't use --version w/ multiple gems. Use name:ver instead."
925
+ msg = "ERROR: Can't use --version with multiple gems. You can specify multiple gems with" \
926
+ " version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
531
927
 
532
928
  assert_empty @ui.output
533
929
  assert_equal msg, @ui.error.chomp
534
930
  end
535
931
 
932
+ def test_execute_two_version_specified_by_colon
933
+ spec_fetcher do |fetcher|
934
+ fetcher.gem "a", 1
935
+ fetcher.gem "a", 2
936
+ fetcher.gem "b", 1
937
+ fetcher.gem "b", 2
938
+ end
939
+
940
+ @cmd.options[:args] = %w[a:1 b:1]
941
+
942
+ use_ui @ui do
943
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
944
+ @cmd.execute
945
+ end
946
+ end
947
+
948
+ assert_equal %w[a-1 b-1], @cmd.installed_specs.map {|spec| spec.full_name }
949
+ end
950
+
536
951
  def test_execute_conservative
537
952
  spec_fetcher do |fetcher|
538
- fetcher.download 'b', 2
953
+ fetcher.download "b", 2
539
954
 
540
- fetcher.gem 'a', 2
955
+ fetcher.gem "a", 2
541
956
  end
542
957
 
543
958
  @cmd.options[:conservative] = true
@@ -548,7 +963,7 @@ ERROR: Possible alternatives: non_existent_with_hint
548
963
  orig_dir = Dir.pwd
549
964
  begin
550
965
  Dir.chdir @tempdir
551
- assert_raises Gem::MockGemUi::SystemExitException do
966
+ assert_raise Gem::MockGemUi::SystemExitException do
552
967
  @cmd.execute
553
968
  end
554
969
  ensure
@@ -556,7 +971,7 @@ ERROR: Possible alternatives: non_existent_with_hint
556
971
  end
557
972
  end
558
973
 
559
- assert_equal %w[b-2], @cmd.installed_specs.map { |spec| spec.full_name }
974
+ assert_equal %w[b-2], @cmd.installed_specs.map {|spec| spec.full_name }
560
975
 
561
976
  assert_equal "", @ui.error
562
977
  assert_match "1 gem installed", @ui.output
@@ -568,7 +983,7 @@ ERROR: Possible alternatives: non_existent_with_hint
568
983
  done_installing = true
569
984
  end
570
985
 
571
- spec = quick_spec 'a', 2
986
+ spec = util_spec "a", 2
572
987
 
573
988
  util_build_gem spec
574
989
 
@@ -576,27 +991,44 @@ ERROR: Possible alternatives: non_existent_with_hint
576
991
 
577
992
  @cmd.options[:ignore_dependencies] = true
578
993
 
579
- @cmd.install_gem 'a', '>= 0'
994
+ @cmd.install_gem "a", ">= 0"
580
995
 
581
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
996
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
582
997
 
583
- assert done_installing, 'documentation was not generated'
998
+ assert done_installing, "documentation was not generated"
584
999
  end
585
1000
 
586
1001
  def test_install_gem_ignore_dependencies_remote
587
1002
  spec_fetcher do |fetcher|
588
- fetcher.gem 'a', 2
1003
+ fetcher.gem "a", 2
589
1004
  end
590
1005
 
591
1006
  @cmd.options[:ignore_dependencies] = true
592
1007
 
593
- @cmd.install_gem 'a', '>= 0'
1008
+ @cmd.install_gem "a", ">= 0"
594
1009
 
595
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1010
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1011
+ end
1012
+
1013
+ def test_install_gem_ignore_dependencies_remote_platform_local
1014
+ local = Gem::Platform.local
1015
+ spec_fetcher do |fetcher|
1016
+ fetcher.gem "a", 3
1017
+
1018
+ fetcher.gem "a", 3 do |s|
1019
+ s.platform = local
1020
+ end
1021
+ end
1022
+
1023
+ @cmd.options[:ignore_dependencies] = true
1024
+
1025
+ @cmd.install_gem "a", ">= 0"
1026
+
1027
+ assert_equal %W[a-3-#{local}], @cmd.installed_specs.map {|spec| spec.full_name }
596
1028
  end
597
1029
 
598
1030
  def test_install_gem_ignore_dependencies_specific_file
599
- spec = quick_spec 'a', 2
1031
+ spec = util_spec "a", 2
600
1032
 
601
1033
  util_build_gem spec
602
1034
 
@@ -606,13 +1038,13 @@ ERROR: Possible alternatives: non_existent_with_hint
606
1038
 
607
1039
  @cmd.install_gem File.join(@tempdir, spec.file_name), nil
608
1040
 
609
- assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
1041
+ assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
610
1042
  end
611
1043
 
612
1044
  def test_parses_requirement_from_gemname
613
1045
  spec_fetcher do |fetcher|
614
- fetcher.gem 'a', 2
615
- fetcher.gem 'b', 2
1046
+ fetcher.gem "a", 2
1047
+ fetcher.gem "b", 2
616
1048
  end
617
1049
 
618
1050
  @cmd.options[:domain] = :local
@@ -626,7 +1058,7 @@ ERROR: Possible alternatives: non_existent_with_hint
626
1058
  orig_dir = Dir.pwd
627
1059
  begin
628
1060
  Dir.chdir @tempdir
629
- e = assert_raises Gem::MockGemUi::TermError do
1061
+ e = assert_raise Gem::MockGemUi::TermError do
630
1062
  @cmd.execute
631
1063
  end
632
1064
  ensure
@@ -635,7 +1067,7 @@ ERROR: Possible alternatives: non_existent_with_hint
635
1067
  end
636
1068
 
637
1069
  assert_equal 2, e.exit_code
638
- assert_match %r!Could not find a valid gem 'a' \(= 10.0\)!, @ui.error
1070
+ assert_match %r{Could not find a valid gem 'a' \(= 10.0\)}, @ui.error
639
1071
  end
640
1072
 
641
1073
  def test_show_errors_on_failure
@@ -648,7 +1080,7 @@ ERROR: Possible alternatives: non_existent_with_hint
648
1080
  orig_dir = Dir.pwd
649
1081
  begin
650
1082
  Dir.chdir @tempdir
651
- e = assert_raises Gem::MockGemUi::TermError do
1083
+ e = assert_raise Gem::MockGemUi::TermError do
652
1084
  @cmd.execute
653
1085
  end
654
1086
  ensure
@@ -658,12 +1090,12 @@ ERROR: Possible alternatives: non_existent_with_hint
658
1090
 
659
1091
  assert_equal 2, e.exit_code
660
1092
 
661
- assert_match 'Unable to download data', @ui.error
1093
+ assert_match "Unable to download data", @ui.error
662
1094
  end
663
1095
 
664
1096
  def test_show_source_problems_even_on_success
665
1097
  spec_fetcher do |fetcher|
666
- fetcher.download 'a', 2
1098
+ fetcher.download "a", 2
667
1099
  end
668
1100
 
669
1101
  Gem.sources << "http://nonexistent.example"
@@ -671,12 +1103,12 @@ ERROR: Possible alternatives: non_existent_with_hint
671
1103
  @cmd.options[:args] = %w[a]
672
1104
 
673
1105
  use_ui @ui do
674
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1106
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
675
1107
  @cmd.execute
676
1108
  end
677
1109
  end
678
1110
 
679
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1111
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
680
1112
 
681
1113
  assert_match "1 gem installed", @ui.output
682
1114
 
@@ -686,9 +1118,34 @@ ERROR: Possible alternatives: non_existent_with_hint
686
1118
  assert_equal x, e
687
1119
  end
688
1120
 
1121
+ def test_redact_credentials_from_uri_on_warning
1122
+ spec_fetcher do |fetcher|
1123
+ fetcher.download "a", 2
1124
+ end
1125
+
1126
+ Gem.sources << "http://username:SECURE_TOKEN@nonexistent.example"
1127
+
1128
+ @cmd.options[:args] = %w[a]
1129
+
1130
+ use_ui @ui do
1131
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1132
+ @cmd.execute
1133
+ end
1134
+ end
1135
+
1136
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1137
+
1138
+ assert_match "1 gem installed", @ui.output
1139
+
1140
+ e = @ui.error
1141
+
1142
+ x = "WARNING: Unable to pull data from 'http://username:REDACTED@nonexistent.example': no data for http://username:REDACTED@nonexistent.example/specs.4.8.gz (http://username:REDACTED@nonexistent.example/specs.4.8.gz)\n"
1143
+ assert_equal x, e
1144
+ end
1145
+
689
1146
  def test_execute_uses_from_a_gemdeps
690
1147
  spec_fetcher do |fetcher|
691
- fetcher.gem 'a', 2
1148
+ fetcher.gem "a", 2
692
1149
  end
693
1150
 
694
1151
  File.open @gemdeps, "w" do |f|
@@ -698,12 +1155,12 @@ ERROR: Possible alternatives: non_existent_with_hint
698
1155
  @cmd.options[:gemdeps] = @gemdeps
699
1156
 
700
1157
  use_ui @ui do
701
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1158
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
702
1159
  @cmd.execute
703
1160
  end
704
1161
  end
705
1162
 
706
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1163
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
707
1164
 
708
1165
  assert_match "Using a (2)", @ui.output
709
1166
  assert File.exist?("#{@gemdeps}.lock")
@@ -711,7 +1168,7 @@ ERROR: Possible alternatives: non_existent_with_hint
711
1168
 
712
1169
  def test_execute_uses_from_a_gemdeps_with_no_lock
713
1170
  spec_fetcher do |fetcher|
714
- fetcher.gem 'a', 2
1171
+ fetcher.gem "a", 2
715
1172
  end
716
1173
 
717
1174
  File.open @gemdeps, "w" do |f|
@@ -722,12 +1179,12 @@ ERROR: Possible alternatives: non_existent_with_hint
722
1179
  @cmd.options[:gemdeps] = @gemdeps
723
1180
 
724
1181
  use_ui @ui do
725
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1182
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
726
1183
  @cmd.execute
727
1184
  end
728
1185
  end
729
1186
 
730
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1187
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
731
1188
 
732
1189
  assert_match "Using a (2)", @ui.output
733
1190
  assert !File.exist?("#{@gemdeps}.lock")
@@ -735,8 +1192,8 @@ ERROR: Possible alternatives: non_existent_with_hint
735
1192
 
736
1193
  def test_execute_installs_from_a_gemdeps_with_conservative
737
1194
  spec_fetcher do |fetcher|
738
- fetcher.download 'a', 2
739
- fetcher.gem 'a', 1
1195
+ fetcher.download "a", 2
1196
+ fetcher.gem "a", 1
740
1197
  end
741
1198
 
742
1199
  File.open @gemdeps, "w" do |f|
@@ -747,19 +1204,19 @@ ERROR: Possible alternatives: non_existent_with_hint
747
1204
  @cmd.options[:gemdeps] = @gemdeps
748
1205
 
749
1206
  use_ui @ui do
750
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1207
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
751
1208
  @cmd.execute
752
1209
  end
753
1210
  end
754
1211
 
755
- assert_equal %w[], @cmd.installed_specs.map { |spec| spec.full_name }
1212
+ assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
756
1213
 
757
1214
  assert_match "Using a (1)", @ui.output
758
1215
  end
759
1216
 
760
1217
  def test_execute_installs_from_a_gemdeps
761
1218
  spec_fetcher do |fetcher|
762
- fetcher.download 'a', 2
1219
+ fetcher.download "a", 2
763
1220
  end
764
1221
 
765
1222
  File.open @gemdeps, "w" do |f|
@@ -769,20 +1226,20 @@ ERROR: Possible alternatives: non_existent_with_hint
769
1226
  @cmd.options[:gemdeps] = @gemdeps
770
1227
 
771
1228
  use_ui @ui do
772
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1229
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
773
1230
  @cmd.execute
774
1231
  end
775
1232
  end
776
1233
 
777
- assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
1234
+ assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
778
1235
 
779
1236
  assert_match "Installing a (2)", @ui.output
780
1237
  end
781
1238
 
782
1239
  def test_execute_installs_deps_a_gemdeps
783
1240
  spec_fetcher do |fetcher|
784
- fetcher.download 'q', '1.0'
785
- fetcher.download 'r', '2.0', 'q' => nil
1241
+ fetcher.download "q", "1.0"
1242
+ fetcher.download "r", "2.0", "q" => nil
786
1243
  end
787
1244
 
788
1245
  File.open @gemdeps, "w" do |f|
@@ -792,12 +1249,12 @@ ERROR: Possible alternatives: non_existent_with_hint
792
1249
  @cmd.options[:gemdeps] = @gemdeps
793
1250
 
794
1251
  use_ui @ui do
795
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1252
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
796
1253
  @cmd.execute
797
1254
  end
798
1255
  end
799
1256
 
800
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1257
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
801
1258
 
802
1259
  assert_equal %w[q-1.0 r-2.0], names
803
1260
 
@@ -807,9 +1264,9 @@ ERROR: Possible alternatives: non_existent_with_hint
807
1264
 
808
1265
  def test_execute_uses_deps_a_gemdeps
809
1266
  spec_fetcher do |fetcher|
810
- fetcher.download 'r', '2.0', 'q' => nil
1267
+ fetcher.download "r", "2.0", "q" => nil
811
1268
 
812
- fetcher.spec 'q', '1.0'
1269
+ fetcher.spec "q", "1.0"
813
1270
  end
814
1271
 
815
1272
  File.open @gemdeps, "w" do |f|
@@ -819,12 +1276,12 @@ ERROR: Possible alternatives: non_existent_with_hint
819
1276
  @cmd.options[:gemdeps] = @gemdeps
820
1277
 
821
1278
  use_ui @ui do
822
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1279
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
823
1280
  @cmd.execute
824
1281
  end
825
1282
  end
826
1283
 
827
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1284
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
828
1285
 
829
1286
  assert_equal %w[r-2.0], names
830
1287
 
@@ -834,8 +1291,8 @@ ERROR: Possible alternatives: non_existent_with_hint
834
1291
 
835
1292
  def test_execute_installs_deps_a_gemdeps_into_a_path
836
1293
  spec_fetcher do |fetcher|
837
- fetcher.download 'q', '1.0'
838
- fetcher.download 'r', '2.0', 'q' => nil
1294
+ fetcher.download "q", "1.0"
1295
+ fetcher.download "r", "2.0", "q" => nil
839
1296
  end
840
1297
 
841
1298
  File.open @gemdeps, "w" do |f|
@@ -846,12 +1303,12 @@ ERROR: Possible alternatives: non_existent_with_hint
846
1303
  @cmd.options[:gemdeps] = @gemdeps
847
1304
 
848
1305
  use_ui @ui do
849
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1306
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
850
1307
  @cmd.execute
851
1308
  end
852
1309
  end
853
1310
 
854
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1311
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
855
1312
 
856
1313
  assert_equal %w[q-1.0 r-2.0], names
857
1314
 
@@ -864,11 +1321,11 @@ ERROR: Possible alternatives: non_existent_with_hint
864
1321
 
865
1322
  def test_execute_with_gemdeps_path_ignores_system
866
1323
  specs = spec_fetcher do |fetcher|
867
- fetcher.download 'q', '1.0'
868
- fetcher.download 'r', '2.0', 'q' => nil
1324
+ fetcher.download "q", "1.0"
1325
+ fetcher.download "r", "2.0", "q" => nil
869
1326
  end
870
1327
 
871
- install_specs specs['q-1.0']
1328
+ install_specs specs["q-1.0"]
872
1329
 
873
1330
  File.open @gemdeps, "w" do |f|
874
1331
  f << "gem 'r'"
@@ -878,12 +1335,12 @@ ERROR: Possible alternatives: non_existent_with_hint
878
1335
  @cmd.options[:gemdeps] = @gemdeps
879
1336
 
880
1337
  use_ui @ui do
881
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1338
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
882
1339
  @cmd.execute
883
1340
  end
884
1341
  end
885
1342
 
886
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1343
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
887
1344
 
888
1345
  assert_equal %w[q-1.0 r-2.0], names
889
1346
 
@@ -896,11 +1353,11 @@ ERROR: Possible alternatives: non_existent_with_hint
896
1353
 
897
1354
  def test_execute_uses_deps_a_gemdeps_with_a_path
898
1355
  specs = spec_fetcher do |fetcher|
899
- fetcher.gem 'q', '1.0'
900
- fetcher.gem 'r', '2.0', 'q' => nil
1356
+ fetcher.gem "q", "1.0"
1357
+ fetcher.gem "r", "2.0", "q" => nil
901
1358
  end
902
1359
 
903
- i = Gem::Installer.at specs['q-1.0'].cache_file, :install_dir => "gf-path"
1360
+ i = Gem::Installer.at specs["q-1.0"].cache_file, :install_dir => "gf-path"
904
1361
  i.install
905
1362
 
906
1363
  assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
@@ -913,12 +1370,12 @@ ERROR: Possible alternatives: non_existent_with_hint
913
1370
  @cmd.options[:gemdeps] = @gemdeps
914
1371
 
915
1372
  use_ui @ui do
916
- assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
1373
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
917
1374
  @cmd.execute
918
1375
  end
919
1376
  end
920
1377
 
921
- names = @cmd.installed_specs.map { |spec| spec.full_name }
1378
+ names = @cmd.installed_specs.map {|spec| spec.full_name }
922
1379
 
923
1380
  assert_equal %w[r-2.0], names
924
1381
 
@@ -927,39 +1384,39 @@ ERROR: Possible alternatives: non_existent_with_hint
927
1384
  end
928
1385
 
929
1386
  def test_handle_options_file
930
- FileUtils.touch 'Gemfile'
1387
+ FileUtils.touch "Gemfile"
931
1388
 
932
1389
  @cmd.handle_options %w[-g Gemfile]
933
1390
 
934
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1391
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
935
1392
 
936
- FileUtils.rm 'Gemfile'
1393
+ FileUtils.rm "Gemfile"
937
1394
 
938
- FileUtils.touch 'gem.deps.rb'
1395
+ FileUtils.touch "gem.deps.rb"
939
1396
 
940
1397
  @cmd.handle_options %w[--file gem.deps.rb]
941
1398
 
942
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1399
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
943
1400
 
944
- FileUtils.rm 'gem.deps.rb'
1401
+ FileUtils.rm "gem.deps.rb"
945
1402
 
946
- FileUtils.touch 'Isolate'
1403
+ FileUtils.touch "Isolate"
947
1404
 
948
1405
  @cmd.handle_options %w[-g]
949
1406
 
950
- assert_equal 'Isolate', @cmd.options[:gemdeps]
1407
+ assert_equal "Isolate", @cmd.options[:gemdeps]
951
1408
 
952
- FileUtils.touch 'Gemfile'
1409
+ FileUtils.touch "Gemfile"
953
1410
 
954
1411
  @cmd.handle_options %w[-g]
955
1412
 
956
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1413
+ assert_equal "Gemfile", @cmd.options[:gemdeps]
957
1414
 
958
- FileUtils.touch 'gem.deps.rb'
1415
+ FileUtils.touch "gem.deps.rb"
959
1416
 
960
1417
  @cmd.handle_options %w[-g]
961
1418
 
962
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1419
+ assert_equal "gem.deps.rb", @cmd.options[:gemdeps]
963
1420
  end
964
1421
 
965
1422
  def test_handle_options_suggest
@@ -984,4 +1441,133 @@ ERROR: Possible alternatives: non_existent_with_hint
984
1441
  assert_equal [:test, :development], @cmd.options[:without_groups]
985
1442
  end
986
1443
 
1444
+ def test_explain_platform_local
1445
+ local = Gem::Platform.local
1446
+ spec_fetcher do |fetcher|
1447
+ fetcher.spec "a", 2
1448
+
1449
+ fetcher.spec "a", 2 do |s|
1450
+ s.platform = local
1451
+ end
1452
+ end
1453
+
1454
+ @cmd.options[:explain] = true
1455
+ @cmd.options[:args] = %w[a]
1456
+
1457
+ use_ui @ui do
1458
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1459
+ @cmd.execute
1460
+ end
1461
+ end
1462
+
1463
+ out = @ui.output.split "\n"
1464
+
1465
+ assert_equal "Gems to install:", out.shift
1466
+ assert_equal " a-2-#{local}", out.shift
1467
+ assert_empty out
1468
+ end
1469
+
1470
+ def test_explain_platform_local_ignore_dependencies
1471
+ local = Gem::Platform.local
1472
+ spec_fetcher do |fetcher|
1473
+ fetcher.spec "a", 3
1474
+
1475
+ fetcher.spec "a", 3 do |s|
1476
+ s.platform = local
1477
+ end
1478
+ end
1479
+
1480
+ @cmd.options[:ignore_dependencies] = true
1481
+ @cmd.options[:explain] = true
1482
+ @cmd.options[:args] = %w[a]
1483
+
1484
+ use_ui @ui do
1485
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1486
+ @cmd.execute
1487
+ end
1488
+ end
1489
+
1490
+ out = @ui.output.split "\n"
1491
+
1492
+ assert_equal "Gems to install:", out.shift
1493
+ assert_equal " a-3-#{local}", out.shift
1494
+ assert_empty out
1495
+ end
1496
+
1497
+ def test_explain_platform_ruby
1498
+ local = Gem::Platform.local
1499
+ spec_fetcher do |fetcher|
1500
+ fetcher.spec "a", 2
1501
+
1502
+ fetcher.spec "a", 2 do |s|
1503
+ s.platform = local
1504
+ end
1505
+ end
1506
+
1507
+ # equivalent to --platform=ruby
1508
+ Gem.platforms = [Gem::Platform::RUBY]
1509
+
1510
+ @cmd.options[:explain] = true
1511
+ @cmd.options[:args] = %w[a]
1512
+
1513
+ use_ui @ui do
1514
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1515
+ @cmd.execute
1516
+ end
1517
+ end
1518
+
1519
+ out = @ui.output.split "\n"
1520
+
1521
+ assert_equal "Gems to install:", out.shift
1522
+ assert_equal " a-2", out.shift
1523
+ assert_empty out
1524
+ end
1525
+
1526
+ def test_explain_platform_ruby_ignore_dependencies
1527
+ local = Gem::Platform.local
1528
+ spec_fetcher do |fetcher|
1529
+ fetcher.spec "a", 3
1530
+
1531
+ fetcher.spec "a", 3 do |s|
1532
+ s.platform = local
1533
+ end
1534
+ end
1535
+
1536
+ # equivalent to --platform=ruby
1537
+ Gem.platforms = [Gem::Platform::RUBY]
1538
+
1539
+ @cmd.options[:ignore_dependencies] = true
1540
+ @cmd.options[:explain] = true
1541
+ @cmd.options[:args] = %w[a]
1542
+
1543
+ use_ui @ui do
1544
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1545
+ @cmd.execute
1546
+ end
1547
+ end
1548
+
1549
+ out = @ui.output.split "\n"
1550
+
1551
+ assert_equal "Gems to install:", out.shift
1552
+ assert_equal " a-3", out.shift
1553
+ assert_empty out
1554
+ end
1555
+
1556
+ def test_suggest_update_if_enabled
1557
+ TestUpdateSuggestion.with_eglible_environment(cmd: @cmd) do
1558
+ spec_fetcher do |fetcher|
1559
+ fetcher.gem "a", 2
1560
+ end
1561
+
1562
+ @cmd.options[:args] = %w[a]
1563
+
1564
+ use_ui @ui do
1565
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1566
+ @cmd.execute
1567
+ end
1568
+ end
1569
+
1570
+ assert_includes @ui.output, "A new release of RubyGems is available: 1.2.3 → 2.0.0!"
1571
+ end
1572
+ end
987
1573
  end