rubygems-update 2.6.0 → 3.4.22

Sign up to get free protection for your applications and to get access to all the features.
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,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
- require 'benchmark'
3
- require 'rubygems/test_case'
4
- require 'pathname'
5
- require 'stringio'
6
- require 'rubygems/ext'
7
- require 'rubygems/specification'
8
- require 'rubygems/installer'
9
2
 
10
- class TestGemSpecification < Gem::TestCase
3
+ require "benchmark"
4
+ require_relative "helper"
5
+ require "date"
6
+ require "pathname"
7
+ require "stringio"
8
+ require "rubygems/ext"
9
+ require "rubygems/specification"
10
+ require "rubygems/installer"
11
+ require "rubygems/platform"
11
12
 
13
+ class TestGemSpecification < Gem::TestCase
12
14
  LEGACY_YAML_SPEC = <<-EOF
13
15
  --- !ruby/object:Gem::Specification
14
16
  rubygems_version: "1.0"
@@ -43,329 +45,325 @@ end
43
45
  EOF
44
46
 
45
47
  def make_spec_c1
46
- @c1 = util_spec 'a', '1' do |s|
47
- s.executable = 'exec'
48
- s.extensions << 'ext/a/extconf.rb'
49
- s.test_file = 'test/suite.rb'
50
- s.requirements << 'A working computer'
51
- s.rubyforge_project = 'example'
52
- s.license = 'MIT'
53
-
54
- s.add_dependency 'rake', '> 0.4'
55
- s.add_dependency 'jabber4r', '> 0.0.0'
56
- s.add_dependency 'pqa', ['> 0.4', '<= 0.6']
48
+ @c1 = util_spec "a", "1" do |s|
49
+ s.executable = "exec"
50
+ s.extensions << "ext/a/extconf.rb"
51
+ s.test_file = "test/suite.rb"
52
+ s.requirements << "A working computer"
53
+ s.license = "MIT"
54
+
55
+ s.add_dependency "rake", "> 0.4"
56
+ s.add_dependency "jabber4r", "> 0.0.0"
57
+ s.add_dependency "pqa", ["> 0.4", "<= 0.6"]
57
58
 
58
59
  s.mark_version
59
60
  s.files = %w[lib/code.rb]
60
61
  end
61
62
  end
62
63
 
63
- def ext_spec
64
- @ext = util_spec 'ext', '1' do |s|
65
- s.executable = 'exec'
66
- s.test_file = 'test/suite.rb'
64
+ def ext_spec(platform: Gem::Platform::RUBY)
65
+ @ext = util_spec "ext", "1" do |s|
66
+ s.executable = "exec"
67
+ s.test_file = "test/suite.rb"
67
68
  s.extensions = %w[ext/extconf.rb]
68
- s.license = 'MIT'
69
+ s.license = "MIT"
70
+ s.platform = platform
69
71
 
70
72
  s.mark_version
71
73
  s.files = %w[lib/code.rb]
72
- s.installed_by_version = v('2.2')
74
+ s.installed_by_version = v("2.2")
73
75
  end
74
76
  end
75
77
 
78
+ def assert_date(date)
79
+ assert_kind_of Time, date
80
+ assert_equal [0, 0, 0], [date.hour, date.min, date.sec]
81
+ assert_operator (Gem::Specification::TODAY..Time.now), :cover?, date
82
+ end
83
+
76
84
  def setup
77
85
  super
78
86
 
79
- @a1 = util_spec 'a', '1' do |s|
80
- s.executable = 'exec'
81
- s.test_file = 'test/suite.rb'
82
- s.requirements << 'A working computer'
83
- s.rubyforge_project = 'example'
84
- s.license = 'MIT'
87
+ # Setting `@default_source_date_epoch` to `nil` effectively resets the
88
+ # value used for `Gem.source_date_epoch` whenever `$SOURCE_DATE_EPOCH`
89
+ # is not set.
90
+ Gem.instance_variable_set(:'@default_source_date_epoch', nil)
91
+
92
+ @a1 = util_spec "a", "1" do |s|
93
+ s.executable = "exec"
94
+ s.test_file = "test/suite.rb"
95
+ s.requirements << "A working computer"
96
+ s.license = "MIT"
85
97
 
86
98
  s.mark_version
87
99
  s.files = %w[lib/code.rb]
88
100
  end
89
101
 
90
- @a2 = util_spec 'a', '2' do |s|
102
+ @a2 = util_spec "a", "2" do |s|
91
103
  s.files = %w[lib/code.rb]
92
104
  end
93
105
 
94
- @a3 = util_spec 'a', '3' do |s|
95
- s.metadata['allowed_push_host'] = "https://privategemserver.com"
106
+ @a3 = util_spec "a", "3" do |s|
107
+ s.metadata["allowed_push_host"] = "https://privategemserver.com"
96
108
  end
97
109
 
98
110
  @current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
111
+ end
112
+
113
+ def test_self_find_active_stub_by_path
114
+ spec = util_spec("a", "1", nil, "lib/foo.rb")
115
+ spec.activated = true
99
116
 
100
- load 'rubygems/syck_hack.rb'
117
+ # There used to be a bug (introduced in a9c1aaf) when Gem::Specification
118
+ # objects are present in the @stubs collection. This test verifies that
119
+ # this scenario works correctly.
120
+ Gem::Specification.all = [spec]
121
+ assert_equal spec, Gem::Specification.find_active_stub_by_path("foo")
101
122
  end
102
123
 
103
124
  def test_self_activate
104
- foo = util_spec 'foo', '1'
125
+ foo = util_spec "foo", "1"
105
126
 
106
127
  assert_activate %w[foo-1], foo
107
128
  end
108
129
 
109
130
  def test_self_activate_ambiguous_direct
110
- save_loaded_features do
111
- a1 = new_spec "a", "1", "b" => "> 0"
112
- b1 = new_spec("b", "1", { "c" => ">= 1" }, "lib/d.rb")
113
- b2 = new_spec("b", "2", { "c" => ">= 2" }, "lib/d.rb")
114
- c1 = new_spec "c", "1"
115
- c2 = new_spec "c", "2"
131
+ a1 = util_spec "a", "1", "b" => "> 0"
132
+ b1 = util_spec("b", "1", { "c" => ">= 1" }, "lib/d#{$$}.rb")
133
+ b2 = util_spec("b", "2", { "c" => ">= 2" }, "lib/d#{$$}.rb")
134
+ c1 = util_spec "c", "1"
135
+ c2 = util_spec "c", "2"
116
136
 
117
- Gem::Specification.reset
118
- install_specs c1, c2, b1, b2, a1
137
+ Gem::Specification.reset
138
+ install_specs c1, c2, b1, b2, a1
119
139
 
120
- a1.activate
121
- assert_equal %w(a-1), loaded_spec_names
122
- assert_equal ["b (> 0)"], unresolved_names
140
+ a1.activate
141
+ assert_equal %w[a-1], loaded_spec_names
142
+ assert_equal ["b (> 0)"], unresolved_names
123
143
 
124
- require "d"
144
+ require "d#{$$}"
125
145
 
126
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
127
- assert_equal [], unresolved_names
128
- end
146
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
147
+ assert_equal [], unresolved_names
129
148
  end
130
149
 
131
150
  def test_find_in_unresolved_tree_is_not_exponentiental
132
- save_loaded_features do
133
- num_of_pkg = 7
134
- num_of_version_per_pkg = 3
135
- packages = (0..num_of_pkg).map do |pkgi|
136
- (0..num_of_version_per_pkg).map do |pkg_version|
137
- deps = Hash[((pkgi + 1)..num_of_pkg).map { |deppkgi|
138
- ["pkg#{deppkgi}", ">= 0"]
139
- }]
140
- new_spec "pkg#{pkgi}", pkg_version.to_s, deps
141
- end
151
+ pend "currently slower in CI on TruffleRuby" if RUBY_ENGINE == "truffleruby"
152
+ num_of_pkg = 7
153
+ num_of_version_per_pkg = 3
154
+ packages = (0..num_of_pkg).map do |pkgi|
155
+ (0..num_of_version_per_pkg).map do |pkg_version|
156
+ deps = Hash[((pkgi + 1)..num_of_pkg).map do |deppkgi|
157
+ ["pkg#{deppkgi}", ">= 0"]
158
+ end]
159
+ util_spec "pkg#{pkgi}", pkg_version.to_s, deps
142
160
  end
143
- base = new_spec "pkg_base", "1", {"pkg0" => ">= 0"}
161
+ end
162
+ base = util_spec "pkg_base", "1", { "pkg0" => ">= 0" }
144
163
 
145
- Gem::Specification.reset
146
- install_specs(*packages.flatten.reverse)
147
- install_specs base
148
- base.activate
164
+ Gem::Specification.reset
165
+ install_specs(*packages.flatten.reverse)
166
+ install_specs base
167
+ base.activate
149
168
 
150
- tms = Benchmark.measure {
151
- assert_raises(LoadError) { require 'no_such_file_foo' }
152
- }
153
- assert_operator tms.total, :<=, 10
169
+ tms = Benchmark.measure do
170
+ assert_raise(LoadError) { require "no_such_file_foo" }
154
171
  end
172
+ assert_operator tms.total, :<=, 10
155
173
  end
156
174
 
157
175
  def test_self_activate_ambiguous_indirect
158
- save_loaded_features do
159
- a1 = new_spec "a", "1", "b" => "> 0"
160
- b1 = new_spec "b", "1", "c" => ">= 1"
161
- b2 = new_spec "b", "2", "c" => ">= 2"
162
- c1 = new_spec "c", "1", nil, "lib/d.rb"
163
- c2 = new_spec "c", "2", nil, "lib/d.rb"
176
+ a1 = util_spec "a", "1", "b" => "> 0"
177
+ b1 = util_spec "b", "1", "c" => ">= 1"
178
+ b2 = util_spec "b", "2", "c" => ">= 2"
179
+ c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb"
180
+ c2 = util_spec "c", "2", nil, "lib/d#{$$}.rb"
164
181
 
165
- install_specs c1, c2, b1, b2, a1
182
+ install_specs c1, c2, b1, b2, a1
166
183
 
167
- a1.activate
168
- assert_equal %w(a-1), loaded_spec_names
169
- assert_equal ["b (> 0)"], unresolved_names
184
+ a1.activate
185
+ assert_equal %w[a-1], loaded_spec_names
186
+ assert_equal ["b (> 0)"], unresolved_names
170
187
 
171
- require "d"
188
+ require "d#{$$}"
172
189
 
173
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
174
- assert_equal [], unresolved_names
175
- end
190
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
191
+ assert_equal [], unresolved_names
176
192
  end
177
193
 
178
194
  def test_self_activate_ambiguous_indirect_conflict
179
- save_loaded_features do
180
- a1 = new_spec "a", "1", "b" => "> 0"
181
- a2 = new_spec "a", "2", "b" => "> 0"
182
- b1 = new_spec "b", "1", "c" => ">= 1"
183
- b2 = new_spec "b", "2", "c" => ">= 2"
184
- c1 = new_spec "c", "1", nil, "lib/d.rb"
185
- c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
195
+ a1 = util_spec "a", "1", "b" => "> 0"
196
+ a2 = util_spec "a", "2", "b" => "> 0"
197
+ b1 = util_spec "b", "1", "c" => ">= 1"
198
+ b2 = util_spec "b", "2", "c" => ">= 2"
199
+ c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb"
200
+ c2 = util_spec("c", "2", { "a" => "1" }, "lib/d#{$$}.rb") # conflicts with a-2
186
201
 
187
- install_specs c1, b1, a1, a2, c2, b2
202
+ install_specs c1, b1, a1, a2, c2, b2
188
203
 
189
- a2.activate
190
- assert_equal %w(a-2), loaded_spec_names
191
- assert_equal ["b (> 0)"], unresolved_names
204
+ a2.activate
205
+ assert_equal %w[a-2], loaded_spec_names
206
+ assert_equal ["b (> 0)"], unresolved_names
192
207
 
193
- require "d"
208
+ require "d#{$$}"
194
209
 
195
- assert_equal %w(a-2 b-1 c-1), loaded_spec_names
196
- assert_equal [], unresolved_names
197
- end
210
+ assert_equal %w[a-2 b-1 c-1], loaded_spec_names
211
+ assert_equal [], unresolved_names
198
212
  end
199
213
 
200
214
  def test_self_activate_ambiguous_unrelated
201
- save_loaded_features do
202
- a1 = new_spec "a", "1", "b" => "> 0"
203
- b1 = new_spec "b", "1", "c" => ">= 1"
204
- b2 = new_spec "b", "2", "c" => ">= 2"
205
- c1 = new_spec "c", "1"
206
- c2 = new_spec "c", "2"
207
- d1 = new_spec "d", "1", nil, "lib/d.rb"
215
+ a1 = util_spec "a", "1", "b" => "> 0"
216
+ b1 = util_spec "b", "1", "c" => ">= 1"
217
+ b2 = util_spec "b", "2", "c" => ">= 2"
218
+ c1 = util_spec "c", "1"
219
+ c2 = util_spec "c", "2"
220
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb"
208
221
 
209
- install_specs d1, c1, c2, b1, b2, a1
222
+ install_specs d1, c1, c2, b1, b2, a1
210
223
 
211
- a1.activate
212
- assert_equal %w(a-1), loaded_spec_names
213
- assert_equal ["b (> 0)"], unresolved_names
224
+ a1.activate
225
+ assert_equal %w[a-1], loaded_spec_names
226
+ assert_equal ["b (> 0)"], unresolved_names
214
227
 
215
- require "d"
228
+ require "d#{$$}"
216
229
 
217
- assert_equal %w(a-1 d-1), loaded_spec_names
218
- assert_equal ["b (> 0)"], unresolved_names
219
- end
230
+ assert_equal %w[a-1 d-1], loaded_spec_names
231
+ assert_equal ["b (> 0)"], unresolved_names
220
232
  end
221
233
 
222
234
  def test_require_should_prefer_latest_gem_level1
223
- save_loaded_features do
224
- a1 = new_spec "a", "1", "b" => "> 0"
225
- b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
226
- b2 = new_spec "b", "2", "c" => ">= 0"
227
- c1 = new_spec "c", "1", nil, "lib/c.rb" # 1st level
228
- c2 = new_spec "c", "2", nil, "lib/c.rb"
235
+ a1 = util_spec "a", "1", "b" => "> 0"
236
+ b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
237
+ b2 = util_spec "b", "2", "c" => ">= 0"
238
+ c1 = util_spec "c", "1", nil, "lib/c#{$$}.rb" # 1st level
239
+ c2 = util_spec "c", "2", nil, "lib/c#{$$}.rb"
229
240
 
230
- install_specs c1, c2, b1, b2, a1
241
+ install_specs c1, c2, b1, b2, a1
231
242
 
232
- a1.activate
243
+ a1.activate
233
244
 
234
- require "c"
245
+ require "c#{$$}"
235
246
 
236
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
237
- end
247
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
238
248
  end
239
249
 
240
250
  def test_require_should_prefer_latest_gem_level2
241
- save_loaded_features do
242
- a1 = new_spec "a", "1", "b" => "> 0"
243
- b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
244
- b2 = new_spec "b", "2", "c" => ">= 0"
245
- c1 = new_spec "c", "1", "d" => ">= 0" # 1st level
246
- c2 = new_spec "c", "2", "d" => ">= 0"
247
- d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
248
- d2 = new_spec "d", "2", nil, "lib/d.rb"
251
+ a1 = util_spec "a", "1", "b" => "> 0"
252
+ b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
253
+ b2 = util_spec "b", "2", "c" => ">= 0"
254
+ c1 = util_spec "c", "1", "d" => ">= 0" # 1st level
255
+ c2 = util_spec "c", "2", "d" => ">= 0"
256
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
257
+ d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
249
258
 
250
- install_specs d1, d2, c1, c2, b1, b2, a1
259
+ install_specs d1, d2, c1, c2, b1, b2, a1
251
260
 
252
- a1.activate
261
+ a1.activate
253
262
 
254
- require "d"
263
+ require "d#{$$}"
255
264
 
256
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
257
- end
265
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
258
266
  end
259
267
 
260
268
  def test_require_finds_in_2nd_level_indirect
261
- save_loaded_features do
262
- a1 = new_spec "a", "1", "b" => "> 0"
263
- b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
264
- b2 = new_spec "b", "2", "c" => ">= 0"
265
- c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
266
- c2 = new_spec "c", "2", "d" => "<= 2"
267
- d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
268
- d2 = new_spec "d", "2", nil, "lib/d.rb"
269
- d3 = new_spec "d", "3", nil, "lib/d.rb"
269
+ a1 = util_spec "a", "1", "b" => "> 0"
270
+ b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
271
+ b2 = util_spec "b", "2", "c" => ">= 0"
272
+ c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
273
+ c2 = util_spec "c", "2", "d" => "<= 2"
274
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
275
+ d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
276
+ d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb"
270
277
 
271
- install_specs d1, d2, d3, c1, c2, b1, b2, a1
278
+ install_specs d1, d2, d3, c1, c2, b1, b2, a1
272
279
 
273
- a1.activate
280
+ a1.activate
274
281
 
275
- require "d"
282
+ require "d#{$$}"
276
283
 
277
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
278
- end
284
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
279
285
  end
280
286
 
281
287
  def test_require_should_prefer_reachable_gems
282
- save_loaded_features do
283
- a1 = new_spec "a", "1", "b" => "> 0"
284
- b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
285
- b2 = new_spec "b", "2", "c" => ">= 0"
286
- c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
287
- c2 = new_spec "c", "2", "d" => "<= 2"
288
- d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
289
- d2 = new_spec "d", "2", nil, "lib/d.rb"
290
- d3 = new_spec "d", "3", nil, "lib/d.rb"
291
- e = new_spec "anti_d", "1", nil, "lib/d.rb"
288
+ a1 = util_spec "a", "1", "b" => "> 0"
289
+ b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
290
+ b2 = util_spec "b", "2", "c" => ">= 0"
291
+ c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
292
+ c2 = util_spec "c", "2", "d" => "<= 2"
293
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
294
+ d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
295
+ d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb"
296
+ e = util_spec "anti_d", "1", nil, "lib/d#{$$}.rb"
297
+
298
+ install_specs d1, d2, d3, e, c1, c2, b1, b2, a1
292
299
 
293
- install_specs d1, d2, d3, e, c1, c2, b1, b2, a1
294
-
295
- a1.activate
300
+ a1.activate
296
301
 
297
- require "d"
302
+ require "d#{$$}"
298
303
 
299
- assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
300
- end
304
+ assert_equal %w[a-1 b-2 c-2 d-2], loaded_spec_names
301
305
  end
302
306
 
303
307
  def test_require_should_not_conflict
304
- save_loaded_features do
305
- base = new_spec "0", "1", "A" => ">= 1"
306
- a1 = new_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
307
- a2 = new_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
308
- b1 = new_spec "b", "1", {"c" => "= 1"}, "lib/d.rb"
309
- b2 = new_spec "b", "2", {"c" => "= 2"}, "lib/d.rb"
310
- c1 = new_spec "c", "1", {}, "lib/c.rb"
311
- c2 = new_spec "c", "2", {}, "lib/c.rb"
312
- c3 = new_spec "c", "3", {}, "lib/c.rb"
308
+ base = util_spec "0", "1", "A" => ">= 1"
309
+ a1 = util_spec "A", "1", { "c" => ">= 2", "b" => "> 0" }, "lib/a.rb"
310
+ a2 = util_spec "A", "2", { "c" => ">= 2", "b" => "> 0" }, "lib/a.rb"
311
+ b1 = util_spec "b", "1", { "c" => "= 1" }, "lib/d#{$$}.rb"
312
+ b2 = util_spec "b", "2", { "c" => "= 2" }, "lib/d#{$$}.rb"
313
+ c1 = util_spec "c", "1", {}, "lib/c.rb"
314
+ c2 = util_spec "c", "2", {}, "lib/c.rb"
315
+ c3 = util_spec "c", "3", {}, "lib/c.rb"
313
316
 
314
- install_specs c1, c2, c3, b1, b2, a1, a2, base
317
+ install_specs c1, c2, c3, b1, b2, a1, a2, base
315
318
 
316
- base.activate
317
- assert_equal %w(0-1), loaded_spec_names
318
- assert_equal ["A (>= 1)"], unresolved_names
319
+ base.activate
320
+ assert_equal %w[0-1], loaded_spec_names
321
+ assert_equal ["A (>= 1)"], unresolved_names
319
322
 
320
- require "d"
323
+ require "d#{$$}"
321
324
 
322
- assert_equal %w(0-1 A-2 b-2 c-2), loaded_spec_names
323
- assert_equal [], unresolved_names
324
- end
325
+ assert_equal %w[0-1 A-2 b-2 c-2], loaded_spec_names
326
+ assert_equal [], unresolved_names
325
327
  end
326
328
 
327
329
  def test_inner_clonflict_in_indirect_gems
328
- save_loaded_features do
329
- a1 = new_spec "a", "1", "b" => "> 0"
330
- b1 = new_spec "b", "1", "c" => ">= 1" # unresolved
331
- b2 = new_spec "b", "2", "c" => ">= 1", "d" => "< 3"
332
- c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
333
- c2 = new_spec "c", "2", "d" => "<= 2"
334
- c3 = new_spec "c", "3", "d" => "<= 3"
335
- d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
336
- d2 = new_spec "d", "2", nil, "lib/d.rb"
337
- d3 = new_spec "d", "3", nil, "lib/d.rb"
338
-
339
- install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
330
+ a1 = util_spec "a", "1", "b" => "> 0"
331
+ b1 = util_spec "b", "1", "c" => ">= 1" # unresolved
332
+ b2 = util_spec "b", "2", "c" => ">= 1", "d" => "< 3"
333
+ c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
334
+ c2 = util_spec "c", "2", "d" => "<= 2"
335
+ c3 = util_spec "c", "3", "d" => "<= 3"
336
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
337
+ d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
338
+ d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb"
339
+
340
+ install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
340
341
 
341
- a1.activate
342
+ a1.activate
342
343
 
343
- require "d"
344
+ require "d#{$$}"
344
345
 
345
- assert_includes [%w(a-1 b-2 c-3 d-2),%w(a-1 b-2 d-2)], loaded_spec_names
346
- end
346
+ assert_includes [%w[a-1 b-2 c-3 d-2],%w[a-1 b-2 d-2]], loaded_spec_names
347
347
  end
348
348
 
349
349
  def test_inner_clonflict_in_indirect_gems_reversed
350
- save_loaded_features do
351
- a1 = new_spec "a", "1", "b" => "> 0"
352
- b1 = new_spec "b", "1", "xc" => ">= 1" # unresolved
353
- b2 = new_spec "b", "2", "xc" => ">= 1", "d" => "< 3"
354
- c1 = new_spec "xc", "1", "d" => "<= 3" # 1st level
355
- c2 = new_spec "xc", "2", "d" => "<= 2"
356
- c3 = new_spec "xc", "3", "d" => "<= 3"
357
- d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
358
- d2 = new_spec "d", "2", nil, "lib/d.rb"
359
- d3 = new_spec "d", "3", nil, "lib/d.rb"
350
+ a1 = util_spec "a", "1", "b" => "> 0"
351
+ b1 = util_spec "b", "1", "xc" => ">= 1" # unresolved
352
+ b2 = util_spec "b", "2", "xc" => ">= 1", "d" => "< 3"
353
+ c1 = util_spec "xc", "1", "d" => "<= 3" # 1st level
354
+ c2 = util_spec "xc", "2", "d" => "<= 2"
355
+ c3 = util_spec "xc", "3", "d" => "<= 3"
356
+ d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level
357
+ d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb"
358
+ d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb"
359
+
360
+ install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
360
361
 
361
- install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
362
-
363
- a1.activate
362
+ a1.activate
364
363
 
365
- require "d"
364
+ require "d#{$$}"
366
365
 
367
- assert_includes [%w(a-1 b-2 d-2 xc-3), %w(a-1 b-2 d-2)], loaded_spec_names
368
- end
366
+ assert_includes [%w[a-1 b-2 d-2 xc-3], %w[a-1 b-2 d-2]], loaded_spec_names
369
367
  end
370
368
 
371
369
  ##
@@ -375,16 +373,16 @@ end
375
373
  # [B] ~> 1.0 (satisfied by 1.0)
376
374
 
377
375
  def test_self_activate_checks_dependencies
378
- a = util_spec 'a', '1.0'
379
- a.add_dependency 'c', '= 1.0'
380
- a.add_dependency 'b', '~> 1.0'
376
+ a = util_spec "a", "1.0"
377
+ a.add_dependency "c", "= 1.0"
378
+ a.add_dependency "b", "~> 1.0"
381
379
 
382
- b1 = util_spec 'b', '1.0'
383
- b2 = util_spec 'b', '2.0'
384
- c = util_spec 'c', '1.0', 'b' => '= 2.0'
380
+ b1 = util_spec "b", "1.0"
381
+ b2 = util_spec "b", "2.0"
382
+ c = util_spec "c", "1.0", "b" => "= 2.0"
385
383
  install_specs b1, b2, c, a
386
384
 
387
- e = assert_raises Gem::LoadError do
385
+ e = assert_raise Gem::LoadError do
388
386
  assert_activate nil, a, c, "b"
389
387
  end
390
388
 
@@ -399,14 +397,14 @@ end
399
397
  # [B] = 2.0
400
398
 
401
399
  def test_self_activate_divergent
402
- a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
403
- b1 = util_spec 'b', '1.0'
404
- b2 = util_spec 'b', '2.0'
405
- c = util_spec 'c', '1.0', 'b' => '= 2.0'
400
+ a = util_spec "a", "1.0", "b" => "~> 1.0", "c" => "= 1.0"
401
+ b1 = util_spec "b", "1.0"
402
+ b2 = util_spec "b", "2.0"
403
+ c = util_spec "c", "1.0", "b" => "= 2.0"
406
404
 
407
405
  install_specs b1, b2, c, a
408
406
 
409
- e = assert_raises Gem::ConflictError do
407
+ e = assert_raise Gem::ConflictError do
410
408
  assert_activate nil, a, c, "b"
411
409
  end
412
410
 
@@ -418,9 +416,9 @@ end
418
416
  # DOC
419
417
 
420
418
  def test_self_activate_old_required
421
- e1, = util_spec 'e', '1', 'd' => '= 1'
422
- @d1 = util_spec 'd', '1'
423
- @d2 = util_spec 'd', '2'
419
+ e1, = util_spec "e", "1", "d" => "= 1"
420
+ @d1 = util_spec "d", "1"
421
+ @d2 = util_spec "d", "2"
424
422
 
425
423
  install_specs @d1, @d2, e1
426
424
 
@@ -431,17 +429,17 @@ end
431
429
  # DOC
432
430
 
433
431
  def test_self_activate_platform_alternate
434
- @x1_m = util_spec 'x', '1' do |s|
432
+ @x1_m = util_spec "x", "1" do |s|
435
433
  s.platform = Gem::Platform.new %w[cpu my_platform 1]
436
434
  end
437
435
 
438
- @x1_o = util_spec 'x', '1' do |s|
436
+ @x1_o = util_spec "x", "1" do |s|
439
437
  s.platform = Gem::Platform.new %w[cpu other_platform 1]
440
438
  end
441
439
 
442
- @w1 = util_spec 'w', '1', 'x' => nil
440
+ @w1 = util_spec "w", "1", "x" => nil
443
441
 
444
- util_set_arch 'cpu-my_platform1'
442
+ util_set_arch "cpu-my_platform1"
445
443
  install_specs @x1_m, @x1_o, @w1
446
444
 
447
445
  assert_activate %w[x-1-cpu-my_platform-1 w-1], @w1, @x1_m
@@ -451,13 +449,13 @@ end
451
449
  # DOC
452
450
 
453
451
  def test_self_activate_platform_bump
454
- @y1 = util_spec 'y', '1'
452
+ @y1 = util_spec "y", "1"
455
453
 
456
- @y1_1_p = util_spec 'y', '1.1' do |s|
454
+ @y1_1_p = util_spec "y", "1.1" do |s|
457
455
  s.platform = Gem::Platform.new %w[cpu my_platform 1]
458
456
  end
459
457
 
460
- @z1 = util_spec 'z', '1', 'y' => nil
458
+ @z1 = util_spec "z", "1", "y" => nil
461
459
  install_specs @y1, @y1_1_p, @z1
462
460
 
463
461
  assert_activate %w[y-1 z-1], @z1, @y1
@@ -470,11 +468,11 @@ end
470
468
  # [A] >= 0 (satisfied by 1.a)
471
469
 
472
470
  def test_self_activate_prerelease
473
- @c1_pre = util_spec 'c', '1.a', "a" => "1.a", "b" => "1"
474
- @a1_pre = util_spec 'a', '1.a'
475
- @b1 = util_spec 'b', '1' do |s|
476
- s.add_dependency 'a'
477
- s.add_development_dependency 'aa'
471
+ @c1_pre = util_spec "c", "1.a", "a" => "1.a", "b" => "1"
472
+ @a1_pre = util_spec "a", "1.a"
473
+ @b1 = util_spec "b", "1" do |s|
474
+ s.add_dependency "a"
475
+ s.add_development_dependency "aa"
478
476
  end
479
477
  install_specs @a1_pre, @b1, @c1_pre
480
478
 
@@ -482,65 +480,61 @@ end
482
480
  end
483
481
 
484
482
  def test_self_activate_via_require
485
- a1 = new_spec "a", "1", "b" => "= 1"
486
- b1 = new_spec "b", "1", nil, "lib/b/c.rb"
487
- b2 = new_spec "b", "2", nil, "lib/b/c.rb"
483
+ a1 = util_spec "a", "1", "b" => "= 1"
484
+ b1 = util_spec "b", "1", nil, "lib/b/c.rb"
485
+ b2 = util_spec "b", "2", nil, "lib/b/c.rb"
488
486
 
489
487
  install_specs b1, b2, a1
490
488
 
491
489
  a1.activate
492
- save_loaded_features do
493
- require "b/c"
494
- end
490
+ require "b/c"
495
491
 
496
- assert_equal %w(a-1 b-1), loaded_spec_names
492
+ assert_equal %w[a-1 b-1], loaded_spec_names
497
493
  end
498
494
 
499
495
  def test_self_activate_via_require_wtf
500
- save_loaded_features do
501
- a1 = new_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
502
- b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb"
503
- b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" # this
504
- c1 = new_spec "c", "1"
505
- c2 = new_spec "c", "2" # this
506
- d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
507
- d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
496
+ a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
497
+ b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b#{$$}.rb"
498
+ b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b#{$$}.rb" # this
499
+ c1 = util_spec "c", "1"
500
+ c2 = util_spec "c", "2" # this
501
+ d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d#{$$}.rb"
502
+ d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d#{$$}.rb" # this
508
503
 
509
- install_specs c1, c2, b1, b2, d1, d2, a1
504
+ install_specs c1, c2, b1, b2, d1, d2, a1
510
505
 
511
- a1.activate
506
+ a1.activate
512
507
 
513
- assert_equal %w(a-1), loaded_spec_names
514
- assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
508
+ assert_equal %w[a-1], loaded_spec_names
509
+ assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
515
510
 
516
- require "b"
511
+ require "b#{$$}"
517
512
 
518
- e = assert_raises Gem::LoadError do
519
- require "d"
520
- end
513
+ e = assert_raise Gem::LoadError do
514
+ require "d#{$$}"
515
+ end
521
516
 
522
- assert_equal "unable to find a version of 'd' to activate", e.message
517
+ assert_equal "unable to find a version of 'd' to activate", e.message
523
518
 
524
- assert_equal %w(a-1 b-2 c-2), loaded_spec_names
525
- assert_equal ["d (> 0)"], unresolved_names
526
- end
519
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
520
+ assert_equal ["d (> 0)"], unresolved_names
527
521
  end
528
522
 
529
523
  def test_self_activate_deep_unambiguous
530
- a1 = new_spec "a", "1", "b" => "= 1"
531
- b1 = new_spec "b", "1", "c" => "= 1"
532
- b2 = new_spec "b", "2", "c" => "= 2"
533
- c1 = new_spec "c", "1"
534
- c2 = new_spec "c", "2"
524
+ a1 = util_spec "a", "1", "b" => "= 1"
525
+ b1 = util_spec "b", "1", "c" => "= 1"
526
+ b2 = util_spec "b", "2", "c" => "= 2"
527
+ c1 = util_spec "c", "1"
528
+ c2 = util_spec "c", "2"
535
529
 
536
530
  install_specs c1, c2, b1, b2, a1
537
531
 
538
532
  a1.activate
539
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
533
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
540
534
  end
541
535
 
542
536
  def test_self_activate_loaded
543
- foo = util_spec 'foo', '1'
537
+ foo = util_spec "foo", "1"
544
538
 
545
539
  assert foo.activate
546
540
  refute foo.activate
@@ -552,9 +546,9 @@ end
552
546
  # [C] depends on nothing
553
547
 
554
548
  def test_self_activate_unrelated
555
- a = util_spec 'a', '1.0', 'b' => '>= 1.0'
556
- b = util_spec 'b', '1.0'
557
- c = util_spec 'c', '1.0'
549
+ a = util_spec "a", "1.0", "b" => ">= 1.0"
550
+ b = util_spec "b", "1.0"
551
+ c = util_spec "c", "1.0"
558
552
  install_specs b, c, a
559
553
 
560
554
  assert_activate %w[b-1.0 c-1.0 a-1.0], a, c, "b"
@@ -570,11 +564,11 @@ end
570
564
  # TODO: move these to specification
571
565
 
572
566
  def test_self_activate_over
573
- a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '= 1.0'
574
- install_specs util_spec 'b', '1.0'
575
- install_specs util_spec 'b', '1.1'
576
- install_specs util_spec 'b', '2.0'
577
- install_specs util_spec 'c', '1.0', 'b' => '~> 1.0'
567
+ a = util_spec "a", "1.0", "b" => ">= 1.0", "c" => "= 1.0"
568
+ install_specs util_spec "b", "1.0"
569
+ install_specs util_spec "b", "1.1"
570
+ install_specs util_spec "b", "2.0"
571
+ install_specs util_spec "c", "1.0", "b" => "~> 1.0"
578
572
  install_specs a
579
573
 
580
574
  a.activate
@@ -595,10 +589,10 @@ end
595
589
  # first resolve through a dependency that is later pruned.
596
590
 
597
591
  def test_self_activate_under
598
- a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
599
- b1 = util_spec 'b', '1.0'
600
- b1_1 = util_spec 'b', '1.1'
601
- c = util_spec 'c', '1.0', 'b' => '= 1.0'
592
+ a = util_spec "a", "1.0", "b" => "~> 1.0", "c" => "= 1.0"
593
+ b1 = util_spec "b", "1.0"
594
+ b1_1 = util_spec "b", "1.1"
595
+ c = util_spec "c", "1.0", "b" => "= 1.0"
602
596
 
603
597
  install_specs b1, b1_1, c, a
604
598
 
@@ -614,10 +608,10 @@ end
614
608
  # [C1] depends on nothing
615
609
 
616
610
  def test_self_activate_dropped
617
- a1 = util_spec 'a', '1', 'b' => nil
618
- b1 = util_spec 'b', '1', 'c' => nil
619
- b2 = util_spec 'b', '2'
620
- c1 = util_spec 'c', '1'
611
+ a1 = util_spec "a", "1", "b" => nil
612
+ b1 = util_spec "b", "1", "c" => nil
613
+ b2 = util_spec "b", "2"
614
+ c1 = util_spec "c", "1"
621
615
  install_specs c1, b1, b2, a1
622
616
 
623
617
  assert_activate %w[b-2 a-1], a1, "b"
@@ -634,11 +628,11 @@ end
634
628
  # resolve.
635
629
 
636
630
  def test_self_activate_raggi_the_edgecase_generator
637
- a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '>= 1.0'
638
- b1 = util_spec 'b', '1.0'
639
- b1_0 = util_spec 'b', '1.1', 'z' => '>= 1.0'
640
- c = util_spec 'c', '1.0', 'b' => '= 1.0'
641
- z = util_spec 'z', '1'
631
+ a = util_spec "a", "1.0", "b" => ">= 1.0", "c" => ">= 1.0"
632
+ b1 = util_spec "b", "1.0"
633
+ b1_0 = util_spec "b", "1.1", "z" => ">= 1.0"
634
+ c = util_spec "c", "1.0", "b" => "= 1.0"
635
+ z = util_spec "z", "1"
642
636
 
643
637
  install_specs z, b1, b1_0, c, z
644
638
 
@@ -646,23 +640,23 @@ end
646
640
  end
647
641
 
648
642
  def test_self_activate_conflict
649
- install_specs util_spec 'b', '1.0'
650
- install_specs util_spec 'b', '2.0'
643
+ install_specs util_spec "b", "1.0"
644
+ install_specs util_spec "b", "2.0"
651
645
 
652
646
  gem "b", "= 1.0"
653
647
 
654
- assert_raises Gem::LoadError do
648
+ assert_raise Gem::LoadError do
655
649
  gem "b", "= 2.0"
656
650
  end
657
651
  end
658
652
 
659
653
  def test_self_all_equals
660
- a = new_spec "foo", "1", nil, "lib/foo.rb"
654
+ a = util_spec "foo", "1", nil, "lib/foo.rb"
661
655
 
662
656
  install_specs a
663
657
  Gem::Specification.all = [a]
664
658
 
665
- assert_equal a, Gem::Specification.find_inactive_by_path('foo')
659
+ assert_equal a, Gem::Specification.find_inactive_by_path("foo")
666
660
  end
667
661
 
668
662
  def test_self_attribute_names
@@ -690,7 +684,6 @@ end
690
684
  required_ruby_version
691
685
  required_rubygems_version
692
686
  requirements
693
- rubyforge_project
694
687
  rubygems_version
695
688
  signing_key
696
689
  specification_version
@@ -699,22 +692,22 @@ end
699
692
  version
700
693
  ]
701
694
 
702
- actual_value = Gem::Specification.attribute_names.map { |a| a.to_s }.sort
695
+ actual_value = Gem::Specification.attribute_names.map {|a| a.to_s }.sort
703
696
 
704
697
  assert_equal expected_value, actual_value
705
698
  end
706
699
 
707
700
  def test_self__load_future
708
701
  spec = Gem::Specification.new
709
- spec.name = 'a'
710
- spec.version = '1'
702
+ spec.name = "a"
703
+ spec.version = "1"
711
704
  spec.specification_version = @current_version + 1
712
705
 
713
- new_spec = Marshal.load Marshal.dump(spec)
706
+ load_spec = Marshal.load Marshal.dump(spec)
714
707
 
715
- assert_equal 'a', new_spec.name
716
- assert_equal Gem::Version.new(1), new_spec.version
717
- assert_equal @current_version, new_spec.specification_version
708
+ assert_equal "a", load_spec.name
709
+ assert_equal Gem::Version.new(1), load_spec.version
710
+ assert_equal @current_version, load_spec.specification_version
718
711
  end
719
712
 
720
713
  def test_self_from_yaml
@@ -726,125 +719,6 @@ end
726
719
  spec.specification_version
727
720
  end
728
721
 
729
- def test_self_from_yaml_syck_date_bug
730
- # This is equivalent to (and totally valid) psych 1.0 output and
731
- # causes parse errors on syck.
732
- yaml = @a1.to_yaml
733
- yaml.sub!(/^date:.*/, "date: 2011-04-26 00:00:00.000000000Z")
734
-
735
- new_spec = with_syck do
736
- Gem::Specification.from_yaml yaml
737
- end
738
-
739
- assert_kind_of Time, @a1.date
740
- assert_kind_of Time, new_spec.date
741
- end
742
-
743
- def test_self_from_yaml_syck_default_key_bug
744
- # This is equivalent to (and totally valid) psych 1.0 output and
745
- # causes parse errors on syck.
746
- yaml = <<-YAML
747
- --- !ruby/object:Gem::Specification
748
- name: posix-spawn
749
- version: !ruby/object:Gem::Version
750
- version: 0.3.6
751
- prerelease:
752
- dependencies:
753
- - !ruby/object:Gem::Dependency
754
- name: rake-compiler
755
- requirement: &70243867725240 !ruby/object:Gem::Requirement
756
- none: false
757
- requirements:
758
- - - =
759
- - !ruby/object:Gem::Version
760
- version: 0.7.6
761
- type: :development
762
- prerelease: false
763
- version_requirements: *70243867725240
764
- platform: ruby
765
- files: []
766
- test_files: []
767
- bindir:
768
- YAML
769
-
770
- new_spec = with_syck do
771
- Gem::Specification.from_yaml yaml
772
- end
773
-
774
- op = new_spec.dependencies.first.requirement.requirements.first.first
775
- refute_kind_of YAML::Syck::DefaultKey, op
776
-
777
- refute_match %r%DefaultKey%, new_spec.to_ruby
778
- end
779
-
780
- def test_self_from_yaml_cleans_up_defaultkey
781
- yaml = <<-YAML
782
- --- !ruby/object:Gem::Specification
783
- name: posix-spawn
784
- version: !ruby/object:Gem::Version
785
- version: 0.3.6
786
- prerelease:
787
- dependencies:
788
- - !ruby/object:Gem::Dependency
789
- name: rake-compiler
790
- requirement: &70243867725240 !ruby/object:Gem::Requirement
791
- none: false
792
- requirements:
793
- - - !ruby/object:YAML::Syck::DefaultKey {}
794
-
795
- - !ruby/object:Gem::Version
796
- version: 0.7.6
797
- type: :development
798
- prerelease: false
799
- version_requirements: *70243867725240
800
- platform: ruby
801
- files: []
802
- test_files: []
803
- bindir:
804
- YAML
805
-
806
- new_spec = Gem::Specification.from_yaml yaml
807
-
808
- op = new_spec.dependencies.first.requirement.requirements.first.first
809
- refute_kind_of YAML::Syck::DefaultKey, op
810
-
811
- refute_match %r%DefaultKey%, new_spec.to_ruby
812
- end
813
-
814
- def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
815
- yaml = <<-YAML
816
- --- !ruby/object:Gem::Specification
817
- name: posix-spawn
818
- version: !ruby/object:Gem::Version
819
- version: 0.3.6
820
- prerelease:
821
- dependencies:
822
- - !ruby/object:Gem::Dependency
823
- name: rake-compiler
824
- requirement: &70243867725240 !ruby/object:Gem::Requirement
825
- none: false
826
- requirements:
827
- - - !ruby/object:Syck::DefaultKey {}
828
-
829
- - !ruby/object:Gem::Version
830
- version: 0.7.6
831
- type: :development
832
- prerelease: false
833
- version_requirements: *70243867725240
834
- platform: ruby
835
- files: []
836
- test_files: []
837
- bindir:
838
- YAML
839
-
840
- new_spec = Gem::Specification.from_yaml yaml
841
-
842
- op = new_spec.dependencies.first.requirement.requirements.first.first
843
- refute_kind_of YAML::Syck::DefaultKey, op
844
-
845
- refute_match %r%DefaultKey%, new_spec.to_ruby
846
- end
847
-
848
722
  def test_self_from_yaml_cleans_up_Date_objects
849
723
  yaml = <<-YAML
850
724
  --- !ruby/object:Gem::Specification
@@ -860,7 +734,6 @@ require_paths:
860
734
  author: Austin Ziegler
861
735
  email: diff-lcs@halostatue.ca
862
736
  homepage: http://rubyforge.org/projects/ruwiki/
863
- rubyforge_project: ruwiki
864
737
  description: "Test"
865
738
  bindir: bin
866
739
  has_rdoc: true
@@ -892,9 +765,9 @@ requirements: []
892
765
  dependencies: []
893
766
  YAML
894
767
 
895
- new_spec = Gem::Specification.from_yaml yaml
768
+ spec = Gem::Specification.from_yaml yaml
896
769
 
897
- assert_kind_of Time, new_spec.date
770
+ assert_kind_of Time, spec.date
898
771
  end
899
772
 
900
773
  def test_self_load
@@ -911,32 +784,37 @@ dependencies: []
911
784
  end
912
785
 
913
786
  def test_self_load_relative
914
- open 'a-2.gemspec', 'w' do |io|
787
+ File.open "a-2.gemspec", "w" do |io|
915
788
  io.write @a2.to_ruby_for_cache
916
789
  end
917
790
 
918
- spec = Gem::Specification.load 'a-2.gemspec'
791
+ spec = Gem::Specification.load "a-2.gemspec"
919
792
 
920
793
  @a2.files.clear
921
794
 
922
795
  assert_equal @a2, spec
923
796
 
924
- assert_equal File.join(@tempdir, 'a-2.gemspec'), spec.loaded_from
797
+ assert_equal File.join(@tempdir, "a-2.gemspec"), spec.loaded_from
925
798
  end
926
799
 
927
- def test_self_load_tainted
928
- full_path = @a2.spec_file
929
- write_file full_path do |io|
930
- io.write @a2.to_ruby_for_cache
931
- end
800
+ if RUBY_ENGINE == "ruby" && RUBY_VERSION < "2.7"
801
+ def test_self_load_tainted
802
+ full_path = @a2.spec_file
803
+ write_file full_path do |io|
804
+ io.write @a2.to_ruby_for_cache
805
+ end
932
806
 
933
- full_path.taint
934
- loader = Thread.new { $SAFE = 1; Gem::Specification.load full_path }
935
- spec = loader.value
807
+ full_path.taint
808
+ loader = Thread.new { $SAFE = 1; Gem::Specification.load full_path }
809
+ spec = loader.value
936
810
 
937
- @a2.files.clear
811
+ @a2.files.clear
938
812
 
939
- assert_equal @a2, spec
813
+ assert_equal @a2, spec
814
+
815
+ ensure
816
+ $SAFE = 0
817
+ end
940
818
  end
941
819
 
942
820
  def test_self_load_escape_curly
@@ -948,7 +826,7 @@ dependencies: []
948
826
  io.write @a2.to_ruby_for_cache
949
827
  end
950
828
  rescue Errno::EINVAL
951
- skip "cannot create '#{full_path}' on this platform"
829
+ pend "cannot create '#{full_path}' on this platform"
952
830
  end
953
831
 
954
832
  spec = Gem::Specification.load full_path
@@ -967,7 +845,7 @@ dependencies: []
967
845
  io.write @a2.to_ruby_for_cache
968
846
  end
969
847
  rescue Errno::EINVAL
970
- skip "cannot create '#{full_path}' on this platform"
848
+ pend "cannot create '#{full_path}' on this platform"
971
849
  end
972
850
 
973
851
  spec = Gem::Specification.load full_path
@@ -986,7 +864,7 @@ dependencies: []
986
864
  io.write @a2.to_ruby_for_cache
987
865
  end
988
866
  rescue Errno::EINVAL
989
- skip "cannot create '#{full_path}' on this platform"
867
+ pend "cannot create '#{full_path}' on this platform"
990
868
  end
991
869
 
992
870
  spec = Gem::Specification.load full_path
@@ -996,37 +874,32 @@ dependencies: []
996
874
  assert_equal @a2, spec
997
875
  end
998
876
 
999
- if defined?(Encoding)
1000
877
  def test_self_load_utf8_with_ascii_encoding
1001
- int_enc = Encoding.default_internal
1002
- silence_warnings { Encoding.default_internal = 'US-ASCII' }
1003
-
1004
- spec2 = @a2.dup
1005
- bin = "\u5678".dup
1006
- spec2.authors = [bin]
1007
- full_path = spec2.spec_file
1008
- write_file full_path do |io|
1009
- io.write spec2.to_ruby_for_cache.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
1010
- end
878
+ with_internal_encoding("US-ASCII") do
879
+ spec2 = @a2.dup
880
+ bin = "\u5678".dup
881
+ spec2.authors = [bin]
882
+ full_path = spec2.spec_file
883
+ write_file full_path do |io|
884
+ io.write spec2.to_ruby_for_cache.force_encoding("BINARY").sub("\\u{5678}", bin.force_encoding("BINARY"))
885
+ end
1011
886
 
1012
- spec = Gem::Specification.load full_path
887
+ spec = Gem::Specification.load full_path
1013
888
 
1014
- spec2.files.clear
889
+ spec2.files.clear
1015
890
 
1016
- assert_equal spec2, spec
1017
- ensure
1018
- silence_warnings { Encoding.default_internal = int_enc }
1019
- end
891
+ assert_equal spec2, spec
892
+ end
1020
893
  end
1021
894
 
1022
895
  def test_self_load_legacy_ruby
1023
896
  spec = Gem::Deprecate.skip_during do
1024
897
  eval LEGACY_RUBY_SPEC
1025
898
  end
1026
- assert_equal 'keyedlist', spec.name
1027
- assert_equal '0.4.0', spec.version.to_s
1028
- assert_equal Gem::Specification::TODAY, spec.date
1029
- assert spec.required_ruby_version.satisfied_by?(Gem::Version.new('1'))
899
+ assert_equal "keyedlist", spec.name
900
+ assert_equal "0.4.0", spec.version.to_s
901
+ assert_kind_of Time, spec.date
902
+ assert spec.required_ruby_version.satisfied_by?(Gem::Version.new("1"))
1030
903
  assert_equal false, spec.has_unit_tests?
1031
904
  end
1032
905
 
@@ -1061,26 +934,26 @@ dependencies: []
1061
934
 
1062
935
  def test_self_outdated
1063
936
  spec_fetcher do |fetcher|
1064
- fetcher.download 'a', 4
937
+ fetcher.download "a", 4
1065
938
 
1066
- fetcher.spec 'a', 3
939
+ fetcher.spec "a", 3
1067
940
  end
1068
941
 
1069
942
  assert_equal %w[a], Gem::Specification.outdated
1070
943
  end
1071
944
 
1072
945
  def test_self_outdated_and_latest_remotes
1073
- specs = spec_fetcher do |fetcher|
1074
- fetcher.download 'a', 4
1075
- fetcher.download 'b', 3
946
+ spec_fetcher do |fetcher|
947
+ fetcher.download "a", 4
948
+ fetcher.download "b", 3
1076
949
 
1077
- fetcher.spec 'a', '3.a'
1078
- fetcher.spec 'b', 2
950
+ fetcher.spec "a", "3.a"
951
+ fetcher.spec "b", 2
1079
952
  end
1080
953
 
1081
954
  expected = [
1082
- [specs['a-3.a'], v(4)],
1083
- [specs['b-2'], v(3)],
955
+ [Gem::Specification.stubs.find {|s| s.full_name == "a-3.a" }, v(4)],
956
+ [Gem::Specification.stubs.find {|s| s.full_name == "b-2" }, v(3)],
1084
957
  ]
1085
958
 
1086
959
  assert_equal expected, Gem::Specification.outdated_and_latest_version.to_a
@@ -1089,18 +962,18 @@ dependencies: []
1089
962
  def test_self_remove_spec
1090
963
  install_specs @a1
1091
964
 
1092
- assert_includes Gem::Specification.all_names, 'a-1'
1093
- assert_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
965
+ assert_includes Gem::Specification.all_names, "a-1"
966
+ assert_includes Gem::Specification.stubs.map {|s| s.full_name }, "a-1"
1094
967
 
1095
968
  uninstall_gem @a1
1096
969
  Gem::Specification.reset
1097
970
 
1098
- refute_includes Gem::Specification.all_names, 'a-1'
1099
- refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
971
+ refute_includes Gem::Specification.all_names, "a-1"
972
+ refute_includes Gem::Specification.stubs.map {|s| s.full_name }, "a-1"
1100
973
  end
1101
974
 
1102
975
  def test_self_remove_spec_removed
1103
- open @a1.spec_file, 'w' do |io|
976
+ File.open @a1.spec_file, "w" do |io|
1104
977
  io.write @a1.to_ruby
1105
978
  end
1106
979
 
@@ -1110,28 +983,133 @@ dependencies: []
1110
983
 
1111
984
  Gem::Specification.reset
1112
985
 
1113
- refute_includes Gem::Specification.all_names, 'a-1'
1114
- refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
986
+ refute_includes Gem::Specification.all_names, "a-1"
987
+ refute_includes Gem::Specification.stubs.map {|s| s.full_name }, "a-1"
988
+ end
989
+
990
+ def test_self_stubs_for_lazy_loading
991
+ Gem.loaded_specs.clear
992
+ Gem::Specification.class_variable_set(:@@stubs, nil)
993
+
994
+ dir_standard_specs = File.join Gem.dir, "specifications"
995
+
996
+ save_gemspec("a-1", "1", dir_standard_specs) {|s| s.name = "a" }
997
+ save_gemspec("b-1", "1", dir_standard_specs) {|s| s.name = "b" }
998
+
999
+ assert_equal ["a-1"], Gem::Specification.stubs_for("a").map {|s| s.full_name }
1000
+ assert_equal 1, Gem::Specification.class_variable_get(:@@stubs_by_name).length
1001
+ assert_equal ["b-1"], Gem::Specification.stubs_for("b").map {|s| s.full_name }
1002
+ assert_equal 2, Gem::Specification.class_variable_get(:@@stubs_by_name).length
1003
+
1004
+ assert_equal(
1005
+ Gem::Specification.stubs_for("a").map {|s| s.object_id },
1006
+ Gem::Specification.stubs_for("a").map {|s| s.object_id }
1007
+ )
1008
+
1009
+ Gem.loaded_specs.delete "a"
1010
+ Gem.loaded_specs.delete "b"
1011
+ Gem::Specification.class_variable_set(:@@stubs, nil)
1012
+ end
1013
+
1014
+ def test_self_stubs_for_no_lazy_loading_after_all_specs_setup
1015
+ Gem::Specification.all = [util_spec("a", "1")]
1016
+
1017
+ save_gemspec("b-1", "1", File.join(Gem.dir, "specifications")) {|s| s.name = "b" }
1018
+
1019
+ assert_equal [], Gem::Specification.stubs_for("b").map {|s| s.full_name }
1020
+ end
1021
+
1022
+ def test_self_stubs_for_mult_platforms
1023
+ # gems for two different platforms are installed with --user-install
1024
+ # the correct one should be returned in the array
1025
+
1026
+ orig_platform = Gem.platforms.dup
1027
+
1028
+ # create user spec
1029
+ user_spec_dir = File.join Gem.user_dir, "specifications"
1030
+ FileUtils.mkdir_p(user_spec_dir) unless Dir.exist? user_spec_dir
1031
+ # dirs doesn't include user ?
1032
+ Gem::Specification.dirs << user_spec_dir
1033
+
1034
+ gem = "mingw"
1035
+ v = "1.1.1"
1036
+ platforms = ["x86-mingw32", "x64-mingw32"]
1037
+
1038
+ #create specs
1039
+ platforms.each do |plat|
1040
+ spec = Gem::Specification.new(gem, v) {|s| s.platform = plat }
1041
+ File.open File.join(user_spec_dir, "#{gem}-#{v}-#{plat}.gemspec"), "w" do |io|
1042
+ io.write spec.to_ruby
1043
+ end
1044
+ end
1045
+
1046
+ platforms.each do |plat|
1047
+ cur_plat = Gem::Platform.new plat
1048
+ Gem.platforms = ["ruby", cur_plat]
1049
+
1050
+ Gem::Specification.class_variable_set :@@stubs, nil
1051
+ Gem::Specification.stubs if plat == platforms.last # test loading via stubs
1052
+ t = Gem::Specification.stubs_for "mingw"
1053
+
1054
+ assert_equal 1, t.length
1055
+ assert_equal cur_plat, t.first.platform
1056
+ end
1057
+
1058
+ Gem.platforms = orig_platform
1115
1059
  end
1116
1060
 
1117
- DATA_PATH = File.expand_path "../data", __FILE__
1061
+ def test_self_stubs_returns_only_specified_named_specs
1062
+ dir_standard_specs = File.join Gem.dir, "specifications"
1063
+
1064
+ save_gemspec("a-1", "1", dir_standard_specs) {|s| s.name = "a" }
1065
+ save_gemspec("a-2", "2", dir_standard_specs) {|s| s.name = "a" }
1066
+ save_gemspec("a-a", "3", dir_standard_specs) {|s| s.name = "a-a" }
1067
+
1068
+ assert_equal ["a-1", "a-2"], Gem::Specification.stubs_for("a").map(&:full_name).sort
1069
+ end
1118
1070
 
1119
1071
  def test_handles_private_null_type
1120
- path = File.join DATA_PATH, "null-type.gemspec.rz"
1072
+ yaml_defined = Object.const_defined?("YAML")
1121
1073
 
1122
- data = Marshal.load Gem.inflate(Gem.read_binary(path))
1074
+ path = File.expand_path "data/pry-0.4.7.gemspec.rz", __dir__
1123
1075
 
1124
- assert_equal nil, data.rubyforge_project
1076
+ data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
1077
+
1078
+ assert_instance_of Gem::Specification, data
1079
+
1080
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
1125
1081
  end
1126
1082
 
1127
- def test_emits_zulu_timestamps_properly
1128
- t = Time.utc(2012, 3, 12)
1129
- @a2.date = t
1083
+ def test_handles_dependencies_with_syck_requirements_bug
1084
+ yaml_defined = Object.const_defined?("YAML")
1130
1085
 
1131
- yaml = with_psych { @a2.to_yaml }
1086
+ path = File.expand_path "data/excon-0.7.7.gemspec.rz", __dir__
1132
1087
 
1133
- assert_match %r!date: 2012-03-12 00:00:00\.000000000 Z!, yaml
1134
- end if RUBY_VERSION =~ /1\.9\.2/
1088
+ data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
1089
+
1090
+ assert_instance_of Gem::Specification, data
1091
+
1092
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
1093
+ end
1094
+
1095
+ def test_handles_dependencies_with_other_syck_requirements_argument_error
1096
+ yaml_defined = Object.const_defined?("YAML")
1097
+
1098
+ data = Marshal.dump(Gem::Specification.new do |s|
1099
+ v = Gem::Version.allocate
1100
+ v.instance_variable_set :@version, "YAML::Syck::DefaultKey"
1101
+ s.instance_variable_set :@version, v
1102
+ end)
1103
+
1104
+ assert_raise(ArgumentError) { Marshal.load(data) }
1105
+ out, err = capture_output do
1106
+ assert_raise(ArgumentError) { Marshal.load(data) }
1107
+ end
1108
+ assert_empty out
1109
+ assert_empty err
1110
+
1111
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
1112
+ end
1135
1113
 
1136
1114
  def test_initialize
1137
1115
  spec = Gem::Specification.new do |s|
@@ -1142,7 +1120,7 @@ dependencies: []
1142
1120
  assert_equal "blah", spec.name
1143
1121
  assert_equal "1.3.5", spec.version.to_s
1144
1122
  assert_equal Gem::Platform::RUBY, spec.platform
1145
- assert_equal nil, spec.summary
1123
+ assert_nil spec.summary
1146
1124
  assert_equal [], spec.files
1147
1125
 
1148
1126
  assert_equal [], spec.test_files
@@ -1152,9 +1130,9 @@ dependencies: []
1152
1130
  assert_equal [], spec.extensions
1153
1131
  assert_equal [], spec.requirements
1154
1132
  assert_equal [], spec.dependencies
1155
- assert_equal 'bin', spec.bindir
1156
- assert_equal '>= 0', spec.required_ruby_version.to_s
1157
- assert_equal '>= 0', spec.required_rubygems_version.to_s
1133
+ assert_equal "bin", spec.bindir
1134
+ assert_equal ">= 0", spec.required_ruby_version.to_s
1135
+ assert_equal ">= 0", spec.required_rubygems_version.to_s
1158
1136
  end
1159
1137
 
1160
1138
  def test_initialize_future
@@ -1176,99 +1154,118 @@ dependencies: []
1176
1154
  spec = Gem::Specification.new do |s|
1177
1155
  s.name = "blah"
1178
1156
  s.version = "1.3.5"
1179
- s.summary = 'summary'
1180
- s.description = 'description'
1181
- s.authors = 'author a', 'author b'
1182
- s.licenses = 'BSD-2-Clause'
1183
- s.files = 'lib/file.rb'
1184
- s.test_files = 'test/file.rb'
1185
- s.rdoc_options = '--foo'
1186
- s.extra_rdoc_files = 'README.txt'
1187
- s.executables = 'exec'
1188
- s.extensions = 'ext/extconf.rb'
1189
- s.requirements = 'requirement'
1190
- s.add_dependency 'some_gem'
1191
- end
1192
-
1193
- new_spec = spec.dup
1157
+ s.summary = "summary"
1158
+ s.description = "description"
1159
+ s.authors = "author a", "author b"
1160
+ s.licenses = "BSD-2-Clause"
1161
+ s.files = "lib/file.rb"
1162
+ s.test_files = "test/file.rb"
1163
+ s.rdoc_options = "--foo"
1164
+ s.extra_rdoc_files = "README.txt"
1165
+ s.executables = "exec"
1166
+ s.extensions = "ext/extconf.rb"
1167
+ s.requirements = "requirement"
1168
+ s.add_dependency "some_gem"
1169
+ end
1170
+
1171
+ dup_spec = spec.dup
1194
1172
 
1195
1173
  assert_equal "blah", spec.name
1196
- assert_same spec.name, new_spec.name
1174
+ assert_same spec.name, dup_spec.name
1197
1175
 
1198
1176
  assert_equal "1.3.5", spec.version.to_s
1199
- assert_same spec.version, new_spec.version
1177
+ assert_same spec.version, dup_spec.version
1200
1178
 
1201
1179
  assert_equal Gem::Platform::RUBY, spec.platform
1202
- assert_same spec.platform, new_spec.platform
1180
+ assert_same spec.platform, dup_spec.platform
1203
1181
 
1204
- assert_equal 'summary', spec.summary
1205
- assert_same spec.summary, new_spec.summary
1182
+ assert_equal "summary", spec.summary
1183
+ assert_same spec.summary, dup_spec.summary
1206
1184
 
1207
1185
  assert_equal %w[README.txt bin/exec ext/extconf.rb lib/file.rb
1208
1186
  test/file.rb].sort,
1209
1187
  spec.files
1210
- refute_same spec.files, new_spec.files, 'files'
1188
+ refute_same spec.files, dup_spec.files, "files"
1211
1189
 
1212
1190
  assert_equal %w[test/file.rb], spec.test_files
1213
- refute_same spec.test_files, new_spec.test_files, 'test_files'
1191
+ refute_same spec.test_files, dup_spec.test_files, "test_files"
1214
1192
 
1215
1193
  assert_equal %w[--foo], spec.rdoc_options
1216
- refute_same spec.rdoc_options, new_spec.rdoc_options, 'rdoc_options'
1194
+ refute_same spec.rdoc_options, dup_spec.rdoc_options, "rdoc_options"
1217
1195
 
1218
1196
  assert_equal %w[README.txt], spec.extra_rdoc_files
1219
- refute_same spec.extra_rdoc_files, new_spec.extra_rdoc_files,
1220
- 'extra_rdoc_files'
1197
+ refute_same spec.extra_rdoc_files, dup_spec.extra_rdoc_files,
1198
+ "extra_rdoc_files"
1221
1199
 
1222
1200
  assert_equal %w[exec], spec.executables
1223
- refute_same spec.executables, new_spec.executables, 'executables'
1201
+ refute_same spec.executables, dup_spec.executables, "executables"
1224
1202
 
1225
1203
  assert_equal %w[ext/extconf.rb], spec.extensions
1226
- refute_same spec.extensions, new_spec.extensions, 'extensions'
1204
+ refute_same spec.extensions, dup_spec.extensions, "extensions"
1227
1205
 
1228
1206
  assert_equal %w[requirement], spec.requirements
1229
- refute_same spec.requirements, new_spec.requirements, 'requirements'
1207
+ refute_same spec.requirements, dup_spec.requirements, "requirements"
1230
1208
 
1231
- assert_equal [Gem::Dependency.new('some_gem', Gem::Requirement.default)],
1209
+ assert_equal [Gem::Dependency.new("some_gem", Gem::Requirement.default)],
1232
1210
  spec.dependencies
1233
- refute_same spec.dependencies, new_spec.dependencies, 'dependencies'
1211
+ refute_same spec.dependencies, dup_spec.dependencies, "dependencies"
1234
1212
 
1235
- assert_equal 'bin', spec.bindir
1236
- assert_same spec.bindir, new_spec.bindir
1213
+ assert_equal "bin", spec.bindir
1214
+ assert_same spec.bindir, dup_spec.bindir
1237
1215
 
1238
- assert_equal '>= 0', spec.required_ruby_version.to_s
1239
- assert_same spec.required_ruby_version, new_spec.required_ruby_version
1216
+ assert_equal ">= 0", spec.required_ruby_version.to_s
1217
+ assert_same spec.required_ruby_version, dup_spec.required_ruby_version
1240
1218
 
1241
- assert_equal '>= 0', spec.required_rubygems_version.to_s
1219
+ assert_equal ">= 0", spec.required_rubygems_version.to_s
1242
1220
  assert_same spec.required_rubygems_version,
1243
- new_spec.required_rubygems_version
1221
+ dup_spec.required_rubygems_version
1244
1222
  end
1245
1223
 
1246
1224
  def test_initialize_copy_broken
1247
1225
  spec = Gem::Specification.new do |s|
1248
- s.name = 'a'
1249
- s.version = '1'
1226
+ s.name = "a"
1227
+ s.version = "1"
1250
1228
  end
1251
1229
 
1252
- spec.instance_variable_set :@licenses, :blah
1253
- spec.loaded_from = '/path/to/file'
1230
+ spec.instance_variable_set :@licenses, (class << (Object.new);self;end)
1231
+ spec.loaded_from = "/path/to/file"
1254
1232
 
1255
- e = assert_raises Gem::FormatException do
1233
+ e = assert_raise Gem::FormatException do
1256
1234
  spec.dup
1257
1235
  end
1258
1236
 
1259
- assert_equal 'a-1 has an invalid value for @licenses', e.message
1260
- assert_equal '/path/to/file', e.file_path
1237
+ assert_equal "a-1 has an invalid value for @licenses", e.message
1238
+ assert_equal "/path/to/file", e.file_path
1239
+ end
1240
+
1241
+ def test_initialize_prerelease_version_before_name
1242
+ spec = Gem::Specification.new do |s|
1243
+ s.version = "1.0.0.dev"
1244
+ s.name = "a"
1245
+ end
1246
+
1247
+ assert_equal "a", spec.name
1248
+ assert_equal "1.0.0.dev", spec.version.to_s
1249
+ end
1250
+
1251
+ def test_initialize_nil_version
1252
+ expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
1253
+ actual_stdout, actual_stderr = capture_output do
1254
+ Gem::Specification.new.version = nil
1255
+ end
1256
+ assert_empty actual_stdout
1257
+ assert_equal(expected, actual_stderr)
1261
1258
  end
1262
1259
 
1263
1260
  def test__dump
1264
1261
  @a2.platform = Gem::Platform.local
1265
- @a2.instance_variable_set :@original_platform, 'old_platform'
1262
+ @a2.instance_variable_set :@original_platform, "old_platform"
1266
1263
 
1267
1264
  data = Marshal.dump @a2
1268
1265
 
1269
1266
  same_spec = Marshal.load data
1270
1267
 
1271
- assert_equal 'old_platform', same_spec.original_platform
1268
+ assert_equal "old_platform", same_spec.original_platform
1272
1269
  end
1273
1270
 
1274
1271
  def test_activate
@@ -1283,12 +1280,12 @@ dependencies: []
1283
1280
  awesome.add_dependency :gem_name
1284
1281
  end
1285
1282
 
1286
- assert_equal %w[true gem_name], gem.dependencies.map { |dep| dep.name }
1283
+ assert_equal %w[true gem_name], gem.dependencies.map {|dep| dep.name }
1287
1284
  end
1288
1285
 
1289
1286
  def test_add_dependency_from_existing_dependency
1290
- dep = Gem::Dependency.new("existing_dep", Gem::Requirement.new('> 1'), :runtime)
1291
- spec = Gem::Specification.new { |s| s.add_dependency dep }
1287
+ dep = Gem::Dependency.new("existing_dep", Gem::Requirement.new("> 1"), :runtime)
1288
+ spec = Gem::Specification.new {|s| s.add_dependency dep }
1292
1289
  assert_equal dep, spec.dependencies.first
1293
1290
  end
1294
1291
 
@@ -1297,86 +1294,88 @@ dependencies: []
1297
1294
  awesome.add_development_dependency "monkey"
1298
1295
  end
1299
1296
 
1300
- monkey = gem.dependencies.detect { |d| d.name == "monkey" }
1297
+ monkey = gem.dependencies.detect {|d| d.name == "monkey" }
1301
1298
  assert_equal(:development, monkey.type)
1302
1299
  end
1303
1300
 
1304
1301
  def test_author
1305
- assert_equal 'A User', @a1.author
1302
+ assert_equal "A User", @a1.author
1306
1303
  end
1307
1304
 
1308
1305
  def test_authors
1309
- assert_equal ['A User'], @a1.authors
1306
+ assert_equal ["A User"], @a1.authors
1310
1307
  end
1311
1308
 
1312
1309
  def test_bindir_equals
1313
- @a1.bindir = 'apps'
1310
+ @a1.bindir = "apps"
1314
1311
 
1315
- assert_equal 'apps', @a1.bindir
1312
+ assert_equal "apps", @a1.bindir
1316
1313
  end
1317
1314
 
1318
1315
  def test_bindir_equals_nil
1319
1316
  @a2.bindir = nil
1320
- @a2.executable = 'app'
1317
+ @a2.executable = "app"
1321
1318
 
1322
- assert_equal nil, @a2.bindir
1319
+ assert_nil @a2.bindir
1323
1320
  assert_equal %w[app lib/code.rb].sort, @a2.files
1324
1321
  end
1325
1322
 
1326
1323
  def test_extensions_equals_nil
1327
1324
  @a2.instance_variable_set(:@extensions, nil)
1328
- assert_equal nil, @a2.instance_variable_get(:@extensions)
1325
+ assert_nil @a2.instance_variable_get(:@extensions)
1329
1326
  assert_equal %w[lib/code.rb], @a2.files
1330
1327
  end
1331
1328
 
1332
1329
  def test_test_files_equals_nil
1333
1330
  @a2.instance_variable_set(:@test_files, nil)
1334
- assert_equal nil, @a2.instance_variable_get(:@test_files)
1331
+ assert_nil @a2.instance_variable_get(:@test_files)
1335
1332
  assert_equal %w[lib/code.rb], @a2.files
1336
1333
  end
1337
1334
 
1338
1335
  def test_executables_equals_nil
1339
1336
  @a2.instance_variable_set(:@executables, nil)
1340
- assert_equal nil, @a2.instance_variable_get(:@executables)
1337
+ assert_nil @a2.instance_variable_get(:@executables)
1341
1338
  assert_equal %w[lib/code.rb], @a2.files
1342
1339
  end
1343
1340
 
1344
1341
  def test_extra_rdoc_files_equals_nil
1345
1342
  @a2.instance_variable_set(:@extra_rdoc_files, nil)
1346
- assert_equal nil, @a2.instance_variable_get(:@extra_rdoc_files)
1343
+ assert_nil @a2.instance_variable_get(:@extra_rdoc_files)
1347
1344
  assert_equal %w[lib/code.rb], @a2.files
1348
1345
  end
1349
1346
 
1350
1347
  def test_build_args
1348
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1351
1349
  ext_spec
1352
1350
 
1353
1351
  assert_empty @ext.build_args
1354
1352
 
1355
- open @ext.build_info_file, 'w' do |io|
1353
+ File.open @ext.build_info_file, "w" do |io|
1356
1354
  io.puts
1357
1355
  end
1358
1356
 
1359
1357
  assert_empty @ext.build_args
1360
1358
 
1361
- open @ext.build_info_file, 'w' do |io|
1362
- io.puts '--with-foo-dir=wherever'
1359
+ File.open @ext.build_info_file, "w" do |io|
1360
+ io.puts "--with-foo-dir=wherever"
1363
1361
  end
1364
1362
 
1365
1363
  assert_equal %w[--with-foo-dir=wherever], @ext.build_args
1366
1364
  end
1367
1365
 
1368
1366
  def test_build_extensions
1367
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1369
1368
  ext_spec
1370
1369
 
1371
- refute_path_exists @ext.extension_dir, 'sanity check'
1372
- refute_empty @ext.extensions, 'sanity check'
1370
+ assert_path_not_exist @ext.extension_dir, "sanity check"
1371
+ refute_empty @ext.extensions, "sanity check"
1373
1372
 
1374
1373
  extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
1375
1374
  FileUtils.mkdir_p File.dirname extconf_rb
1376
1375
 
1377
- open extconf_rb, 'w' do |f|
1376
+ File.open extconf_rb, "w" do |f|
1378
1377
  f.write <<-'RUBY'
1379
- open 'Makefile', 'w' do |f|
1378
+ File.open 'Makefile', 'w' do |f|
1380
1379
  f.puts "clean:\n\techo clean"
1381
1380
  f.puts "default:\n\techo built"
1382
1381
  f.puts "install:\n\techo installed"
@@ -1386,47 +1385,48 @@ dependencies: []
1386
1385
 
1387
1386
  @ext.build_extensions
1388
1387
 
1389
- assert_path_exists @ext.extension_dir
1388
+ assert_path_exist @ext.extension_dir
1390
1389
  end
1391
1390
 
1392
1391
  def test_default_spec_stub_is_marked_default
1393
- default = new_default_spec 'default', 2
1392
+ default = new_default_spec "default", 2
1394
1393
  install_default_gems default
1395
1394
 
1396
- stub = Gem::Specification.stubs.find { |s| s.name == 'default' }
1395
+ stub = Gem::Specification.stubs.find {|s| s.name == "default" }
1397
1396
  assert_predicate stub, :default_gem?
1398
1397
 
1399
- stub = Gem::Specification.find_all_by_name('default').first
1398
+ stub = Gem::Specification.find_all_by_name("default").first
1400
1399
  assert_predicate stub, :default_gem?
1401
1400
  end
1402
1401
 
1403
1402
  def test_build_extensions_built
1403
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1404
1404
  ext_spec
1405
1405
 
1406
- refute_empty @ext.extensions, 'sanity check'
1406
+ refute_empty @ext.extensions, "sanity check"
1407
1407
 
1408
1408
  gem_build_complete =
1409
- File.join @ext.extension_dir, 'gem.build_complete'
1409
+ File.join @ext.extension_dir, "gem.build_complete"
1410
1410
 
1411
1411
  FileUtils.mkdir_p @ext.extension_dir
1412
1412
  FileUtils.touch gem_build_complete
1413
1413
 
1414
1414
  @ext.build_extensions
1415
1415
 
1416
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
1417
- refute_path_exists gem_make_out
1416
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
1417
+ assert_path_not_exist gem_make_out
1418
1418
  end
1419
1419
 
1420
1420
  def test_build_extensions_default_gem
1421
- spec = new_default_spec 'default', 1
1422
- spec.extensions << 'extconf.rb'
1421
+ spec = new_default_spec "default", 1
1422
+ spec.extensions << "extconf.rb"
1423
1423
 
1424
1424
  extconf_rb = File.join spec.gem_dir, spec.extensions.first
1425
1425
  FileUtils.mkdir_p File.dirname extconf_rb
1426
1426
 
1427
- open extconf_rb, 'w' do |f|
1427
+ File.open extconf_rb, "w" do |f|
1428
1428
  f.write <<-'RUBY'
1429
- open 'Makefile', 'w' do |f|
1429
+ File.open 'Makefile', 'w' do |f|
1430
1430
  f.puts "default:\n\techo built"
1431
1431
  f.puts "install:\n\techo installed"
1432
1432
  end
@@ -1435,32 +1435,35 @@ dependencies: []
1435
1435
 
1436
1436
  spec.build_extensions
1437
1437
 
1438
- refute_path_exists spec.extension_dir
1438
+ assert_path_not_exist spec.extension_dir
1439
1439
  end
1440
1440
 
1441
1441
  def test_build_extensions_error
1442
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1442
1443
  ext_spec
1443
1444
 
1444
- refute_empty @ext.extensions, 'sanity check'
1445
+ refute_empty @ext.extensions, "sanity check"
1445
1446
 
1446
- assert_raises Gem::Ext::BuildError do
1447
+ assert_raise Gem::Ext::BuildError do
1447
1448
  @ext.build_extensions
1448
1449
  end
1449
1450
  end
1450
1451
 
1451
1452
  def test_build_extensions_extensions_dir_unwritable
1452
- skip 'chmod not supported' if Gem.win_platform?
1453
+ pend "chmod not supported" if Gem.win_platform?
1454
+ pend "skipped in root privilege" if Process.uid.zero?
1453
1455
 
1456
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1454
1457
  ext_spec
1455
1458
 
1456
- refute_empty @ext.extensions, 'sanity check'
1459
+ refute_empty @ext.extensions, "sanity check"
1457
1460
 
1458
1461
  extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
1459
1462
  FileUtils.mkdir_p File.dirname extconf_rb
1460
1463
 
1461
- open extconf_rb, 'w' do |f|
1464
+ File.open extconf_rb, "w" do |f|
1462
1465
  f.write <<-'RUBY'
1463
- open 'Makefile', 'w' do |f|
1466
+ File.open 'Makefile', 'w' do |f|
1464
1467
  f.puts "clean:\n\techo clean"
1465
1468
  f.puts "default:\n\techo built"
1466
1469
  f.puts "install:\n\techo installed"
@@ -1468,32 +1471,32 @@ dependencies: []
1468
1471
  RUBY
1469
1472
  end
1470
1473
 
1471
- FileUtils.mkdir_p File.join @ext.base_dir, 'extensions'
1472
- FileUtils.chmod 0555, @ext.base_dir
1473
- FileUtils.chmod 0555, File.join(@ext.base_dir, 'extensions')
1474
+ FileUtils.mkdir_p File.join @ext.base_dir, "extensions"
1475
+ FileUtils.chmod 0o555, @ext.base_dir
1476
+ FileUtils.chmod 0o555, File.join(@ext.base_dir, "extensions")
1474
1477
 
1475
1478
  @ext.build_extensions
1476
- refute_path_exists @ext.extension_dir
1479
+ assert_path_not_exist @ext.extension_dir
1477
1480
  ensure
1478
- unless ($DEBUG or win_platform?) then
1479
- FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions')
1480
- FileUtils.chmod 0755, @ext.base_dir
1481
+ unless ($DEBUG || win_platform? || Process.uid.zero? || Gem.java_platform?)
1482
+ FileUtils.chmod 0o755, File.join(@ext.base_dir, "extensions")
1483
+ FileUtils.chmod 0o755, @ext.base_dir
1481
1484
  end
1482
1485
  end
1483
1486
 
1484
1487
  def test_build_extensions_no_extensions_dir_unwritable
1485
- skip 'chmod not supported' if Gem.win_platform?
1486
-
1488
+ pend "chmod not supported" if Gem.win_platform?
1489
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1487
1490
  ext_spec
1488
1491
 
1489
- refute_empty @ext.extensions, 'sanity check'
1492
+ refute_empty @ext.extensions, "sanity check"
1490
1493
 
1491
1494
  extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
1492
1495
  FileUtils.mkdir_p File.dirname extconf_rb
1493
1496
 
1494
- open extconf_rb, 'w' do |f|
1497
+ File.open extconf_rb, "w" do |f|
1495
1498
  f.write <<-'RUBY'
1496
- open 'Makefile', 'w' do |f|
1499
+ File.open 'Makefile', 'w' do |f|
1497
1500
  f.puts "clean:\n\techo clean"
1498
1501
  f.puts "default:\n\techo built"
1499
1502
  f.puts "install:\n\techo installed"
@@ -1501,48 +1504,36 @@ dependencies: []
1501
1504
  RUBY
1502
1505
  end
1503
1506
 
1504
- FileUtils.rm_r File.join @gemhome, 'extensions'
1505
- FileUtils.chmod 0555, @gemhome
1507
+ FileUtils.rm_r File.join @gemhome, "extensions"
1508
+ FileUtils.chmod 0o555, @gemhome
1506
1509
 
1507
1510
  @ext.build_extensions
1508
1511
 
1509
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
1510
- refute_path_exists gem_make_out
1512
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
1513
+ assert_path_not_exist gem_make_out
1511
1514
  ensure
1512
- FileUtils.chmod 0755, @gemhome
1515
+ FileUtils.chmod 0o755, @gemhome
1513
1516
  end
1514
1517
 
1515
1518
  def test_build_extensions_none
1516
- refute_path_exists @a1.extension_dir, 'sanity check'
1517
- assert_empty @a1.extensions, 'sanity check'
1519
+ assert_path_not_exist @a1.extension_dir, "sanity check"
1520
+ assert_empty @a1.extensions, "sanity check"
1518
1521
 
1519
1522
  @a1.build_extensions
1520
1523
 
1521
- refute_path_exists @a1.extension_dir
1522
- end
1523
-
1524
- def test_build_extensions_old
1525
- ext_spec
1526
-
1527
- refute_empty @ext.extensions, 'sanity check'
1528
-
1529
- @ext.installed_by_version = v(0)
1530
-
1531
- @ext.build_extensions
1532
-
1533
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
1534
- refute_path_exists gem_make_out
1524
+ assert_path_not_exist @a1.extension_dir
1535
1525
  end
1536
1526
 
1537
1527
  def test_build_extensions_preview
1528
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1538
1529
  ext_spec
1539
1530
 
1540
1531
  extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
1541
1532
  FileUtils.mkdir_p File.dirname extconf_rb
1542
1533
 
1543
- open extconf_rb, 'w' do |f|
1534
+ File.open extconf_rb, "w" do |f|
1544
1535
  f.write <<-'RUBY'
1545
- open 'Makefile', 'w' do |f|
1536
+ File.open 'Makefile', 'w' do |f|
1546
1537
  f.puts "clean:\n\techo clean"
1547
1538
  f.puts "default:\n\techo built"
1548
1539
  f.puts "install:\n\techo installed"
@@ -1550,39 +1541,50 @@ dependencies: []
1550
1541
  RUBY
1551
1542
  end
1552
1543
 
1553
- refute_empty @ext.extensions, 'sanity check'
1544
+ refute_empty @ext.extensions, "sanity check"
1554
1545
 
1555
- @ext.installed_by_version = v('2.2.0.preview.2')
1546
+ @ext.installed_by_version = v("2.2.0.preview.2")
1556
1547
 
1557
1548
  @ext.build_extensions
1558
1549
 
1559
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
1560
- assert_path_exists gem_make_out
1550
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
1551
+ assert_path_exist gem_make_out
1561
1552
  end
1562
1553
 
1563
1554
  def test_contains_requirable_file_eh
1564
- code_rb = File.join @a1.gem_dir, 'lib', 'code.rb'
1555
+ code_rb = File.join @a1.gem_dir, "lib", "code.rb"
1565
1556
  FileUtils.mkdir_p File.dirname code_rb
1566
1557
  FileUtils.touch code_rb
1567
1558
 
1568
- assert @a1.contains_requirable_file? 'code'
1559
+ assert @a1.contains_requirable_file? "code"
1569
1560
  end
1570
1561
 
1571
1562
  def test_contains_requirable_file_eh_extension
1563
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1572
1564
  ext_spec
1573
1565
 
1574
- _, err = capture_io do
1575
- refute @ext.contains_requirable_file? 'nonexistent'
1566
+ _, err = capture_output do
1567
+ refute @ext.contains_requirable_file? "nonexistent"
1576
1568
  end
1577
1569
 
1578
- expected = "Ignoring ext-1 because its extensions are not built. " +
1570
+ expected = "Ignoring ext-1 because its extensions are not built. " +
1579
1571
  "Try: gem pristine ext --version 1\n"
1580
1572
 
1581
1573
  assert_equal expected, err
1582
1574
  end
1583
1575
 
1576
+ def test_contains_requirable_file_eh_extension_java_platform
1577
+ ext_spec(platform: Gem::Platform.new("java"))
1578
+
1579
+ _, err = capture_output do
1580
+ refute @ext.contains_requirable_file? "nonexistent"
1581
+ end
1582
+
1583
+ assert_empty err
1584
+ end
1585
+
1584
1586
  def test_date
1585
- assert_equal Gem::Specification::TODAY, @a1.date
1587
+ assert_date @a1.date
1586
1588
  end
1587
1589
 
1588
1590
  def test_date_equals_date
@@ -1591,13 +1593,13 @@ dependencies: []
1591
1593
  end
1592
1594
 
1593
1595
  def test_date_equals_string
1594
- @a1.date = '2003-09-17'
1596
+ @a1.date = "2003-09-17"
1595
1597
  assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date
1596
1598
  end
1597
1599
 
1598
1600
  def test_date_equals_string_bad
1599
- assert_raises Gem::InvalidSpecificationException do
1600
- @a1.date = '9/11/2003'
1601
+ assert_raise Gem::InvalidSpecificationException do
1602
+ @a1.date = "9/11/2003"
1601
1603
  end
1602
1604
  end
1603
1605
 
@@ -1618,12 +1620,20 @@ dependencies: []
1618
1620
 
1619
1621
  def test_date_tolerates_hour_sec_zulu
1620
1622
  @a1.date = "2012-01-12 11:22:33.4444444 Z"
1621
- assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
1623
+ assert_equal Time.utc(2012,0o1,12,0,0,0), @a1.date
1622
1624
  end
1623
1625
 
1624
1626
  def test_date_tolerates_hour_sec_and_timezone
1625
1627
  @a1.date = "2012-01-12 11:22:33.4444444 +02:33"
1626
- assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
1628
+ assert_equal Time.utc(2012,0o1,12,0,0,0), @a1.date
1629
+ end
1630
+
1631
+ def test_date_use_env_source_date_epoch
1632
+ epoch = ENV["SOURCE_DATE_EPOCH"]
1633
+ ENV["SOURCE_DATE_EPOCH"] = "123456789"
1634
+ assert_equal Time.utc(1973,11,29,0,0,0), @a1.date
1635
+ ensure
1636
+ ENV["SOURCE_DATE_EPOCH"] = epoch
1627
1637
  end
1628
1638
 
1629
1639
  def test_dependencies
@@ -1636,7 +1646,7 @@ dependencies: []
1636
1646
 
1637
1647
  assert_empty @gem.dependent_gems
1638
1648
 
1639
- bonobo = util_spec 'bonobo', 1
1649
+ bonobo = util_spec "bonobo", 1
1640
1650
  install_gem bonobo
1641
1651
  install_gem @gem
1642
1652
 
@@ -1648,11 +1658,11 @@ dependencies: []
1648
1658
  end
1649
1659
 
1650
1660
  def test_doc_dir
1651
- assert_equal File.join(@gemhome, 'doc', 'a-1'), @a1.doc_dir
1661
+ assert_equal File.join(@gemhome, "doc", "a-1"), @a1.doc_dir
1652
1662
  end
1653
1663
 
1654
1664
  def test_doc_dir_type
1655
- assert_equal File.join(@gemhome, 'doc', 'a-1', 'ri'), @a1.doc_dir('ri')
1665
+ assert_equal File.join(@gemhome, "doc", "a-1", "ri"), @a1.doc_dir("ri")
1656
1666
  end
1657
1667
 
1658
1668
  def test_runtime_dependencies
@@ -1666,12 +1676,12 @@ dependencies: []
1666
1676
  end
1667
1677
 
1668
1678
  def test_description
1669
- assert_equal 'This is a test description', @a1.description
1679
+ assert_equal "This is a test description", @a1.description
1670
1680
  end
1671
1681
 
1672
1682
  def test_eql_eh
1673
- g1 = new_spec 'gem', 1
1674
- g2 = new_spec 'gem', 1
1683
+ g1 = util_spec "gem", 1
1684
+ g2 = util_spec "gem", 1
1675
1685
 
1676
1686
  assert_equal g1, g2
1677
1687
  assert_equal g1.hash, g2.hash
@@ -1680,47 +1690,47 @@ dependencies: []
1680
1690
 
1681
1691
  def test_eql_eh_extensions
1682
1692
  spec = @a1.dup
1683
- spec.extensions = 'xx'
1693
+ spec.extensions = "xx"
1684
1694
 
1685
1695
  refute_operator @a1, :eql?, spec
1686
1696
  refute_operator spec, :eql?, @a1
1687
1697
  end
1688
1698
 
1689
1699
  def test_executables
1690
- @a1.executable = 'app'
1700
+ @a1.executable = "app"
1691
1701
  assert_equal %w[app], @a1.executables
1692
1702
  end
1693
1703
 
1694
1704
  def test_executable_equals
1695
- @a2.executable = 'app'
1696
- assert_equal 'app', @a2.executable
1705
+ @a2.executable = "app"
1706
+ assert_equal "app", @a2.executable
1697
1707
  assert_equal %w[bin/app lib/code.rb].sort, @a2.files
1698
1708
  end
1699
1709
 
1700
1710
  def test_extensions
1701
- assert_equal ['ext/extconf.rb'], ext_spec.extensions
1711
+ assert_equal ["ext/extconf.rb"], ext_spec.extensions
1702
1712
  end
1703
1713
 
1704
1714
  def test_extension_dir
1705
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
1706
- RbConfig::CONFIG['ENABLE_SHARED'], 'no'
1715
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
1716
+ RbConfig::CONFIG["ENABLE_SHARED"] = "no"
1707
1717
 
1708
1718
  ext_spec
1709
1719
 
1710
1720
  refute_empty @ext.extensions
1711
1721
 
1712
1722
  expected =
1713
- File.join(@ext.base_dir, 'extensions', Gem::Platform.local.to_s,
1723
+ File.join(@ext.base_dir, "extensions", Gem::Platform.local.to_s,
1714
1724
  "#{Gem.ruby_api_version}-static", @ext.full_name)
1715
1725
 
1716
1726
  assert_equal expected, @ext.extension_dir
1717
1727
  ensure
1718
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
1728
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
1719
1729
  end
1720
1730
 
1721
1731
  def test_extension_dir_override
1722
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
1723
- RbConfig::CONFIG['ENABLE_SHARED'], 'no'
1732
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
1733
+ RbConfig::CONFIG["ENABLE_SHARED"] = "no"
1724
1734
 
1725
1735
  class << Gem
1726
1736
  alias orig_default_ext_dir_for default_ext_dir_for
@@ -1728,7 +1738,7 @@ dependencies: []
1728
1738
  remove_method :default_ext_dir_for
1729
1739
 
1730
1740
  def Gem.default_ext_dir_for(base_dir)
1731
- 'elsewhere'
1741
+ "elsewhere"
1732
1742
  end
1733
1743
  end
1734
1744
 
@@ -1736,11 +1746,11 @@ dependencies: []
1736
1746
 
1737
1747
  refute_empty @ext.extensions
1738
1748
 
1739
- expected = File.join @tempdir, 'elsewhere', @ext.full_name
1749
+ expected = File.join @tempdir, "elsewhere", @ext.full_name
1740
1750
 
1741
1751
  assert_equal expected, @ext.extension_dir
1742
1752
  ensure
1743
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
1753
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
1744
1754
 
1745
1755
  class << Gem
1746
1756
  remove_method :default_ext_dir_for
@@ -1750,11 +1760,11 @@ dependencies: []
1750
1760
  end
1751
1761
 
1752
1762
  def test_files
1753
- @a1.files = %w(files bin/common)
1754
- @a1.test_files = %w(test_files bin/common)
1755
- @a1.executables = %w(executables common)
1756
- @a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
1757
- @a1.extensions = %w(extensions bin/common)
1763
+ @a1.files = %w[files bin/common]
1764
+ @a1.test_files = %w[test_files bin/common]
1765
+ @a1.executables = %w[executables common]
1766
+ @a1.extra_rdoc_files = %w[extra_rdoc_files bin/common]
1767
+ @a1.extensions = %w[extensions bin/common]
1758
1768
 
1759
1769
  expected = %w[
1760
1770
  bin/common
@@ -1768,11 +1778,11 @@ dependencies: []
1768
1778
  end
1769
1779
 
1770
1780
  def test_files_append
1771
- @a1.files = %w(files bin/common)
1772
- @a1.test_files = %w(test_files bin/common)
1773
- @a1.executables = %w(executables common)
1774
- @a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
1775
- @a1.extensions = %w(extensions bin/common)
1781
+ @a1.files = %w[files bin/common]
1782
+ @a1.test_files = %w[test_files bin/common]
1783
+ @a1.executables = %w[executables common]
1784
+ @a1.extra_rdoc_files = %w[extra_rdoc_files bin/common]
1785
+ @a1.extensions = %w[extensions bin/common]
1776
1786
 
1777
1787
  expected = %w[
1778
1788
  bin/common
@@ -1830,9 +1840,9 @@ dependencies: []
1830
1840
  end
1831
1841
 
1832
1842
  def test_for_cache
1833
- @a2.add_runtime_dependency 'b', '1'
1843
+ @a2.add_runtime_dependency "b", "1"
1834
1844
  @a2.dependencies.first.instance_variable_set :@type, nil
1835
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
1845
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
1836
1846
  @a2.test_files = %w[test/test_b.rb]
1837
1847
 
1838
1848
  refute_empty @a2.files
@@ -1848,11 +1858,11 @@ dependencies: []
1848
1858
  end
1849
1859
 
1850
1860
  def test_full_gem_path
1851
- assert_equal File.join(@gemhome, 'gems', @a1.full_name), @a1.full_gem_path
1861
+ assert_equal File.join(@gemhome, "gems", @a1.full_name), @a1.full_gem_path
1852
1862
 
1853
- @a1.original_platform = 'mswin32'
1863
+ @a1.original_platform = "mswin32"
1854
1864
 
1855
- assert_equal File.join(@gemhome, 'gems', @a1.original_name),
1865
+ assert_equal File.join(@gemhome, "gems", @a1.original_name),
1856
1866
  @a1.full_gem_path
1857
1867
  end
1858
1868
 
@@ -1865,40 +1875,40 @@ dependencies: []
1865
1875
  end
1866
1876
 
1867
1877
  def test_full_name
1868
- assert_equal 'a-1', @a1.full_name
1878
+ assert_equal "a-1", @a1.full_name
1869
1879
 
1870
1880
  @a1 = Gem::Specification.new "a", 1
1871
- @a1.platform = Gem::Platform.new ['universal', 'darwin', nil]
1872
- assert_equal 'a-1-universal-darwin', @a1.full_name
1881
+ @a1.platform = Gem::Platform.new ["universal", "darwin", nil]
1882
+ assert_equal "a-1-universal-darwin", @a1.full_name
1873
1883
 
1874
1884
  @a1 = Gem::Specification.new "a", 1
1875
- @a1.instance_variable_set :@new_platform, 'mswin32'
1876
- assert_equal 'a-1-mswin32', @a1.full_name, 'legacy'
1885
+ @a1.instance_variable_set :@new_platform, "mswin32"
1886
+ assert_equal "a-1-mswin32", @a1.full_name, "legacy"
1877
1887
 
1878
1888
  return if win_platform?
1879
1889
 
1880
1890
  @a1 = Gem::Specification.new "a", 1
1881
- @a1.platform = 'current'
1882
- assert_equal 'a-1-x86-darwin-8', @a1.full_name
1891
+ @a1.platform = "current"
1892
+ assert_equal "a-1-x86-darwin-8", @a1.full_name
1883
1893
  end
1884
1894
 
1885
1895
  def test_full_name_windows
1886
1896
  test_cases = {
1887
- 'i386-mswin32' => 'a-1-x86-mswin32-60',
1888
- 'i386-mswin32_80' => 'a-1-x86-mswin32-80',
1889
- 'i386-mingw32' => 'a-1-x86-mingw32'
1897
+ "i386-mswin32" => "a-1-x86-mswin32-60",
1898
+ "i386-mswin32_80" => "a-1-x86-mswin32-80",
1899
+ "i386-mingw32" => "a-1-x86-mingw32",
1890
1900
  }
1891
1901
 
1892
1902
  test_cases.each do |arch, expected|
1893
1903
  @a1 = Gem::Specification.new "a", 1
1894
1904
  util_set_arch arch
1895
- @a1.platform = 'current'
1905
+ @a1.platform = "current"
1896
1906
  assert_equal expected, @a1.full_name
1897
1907
  end
1898
1908
  end
1899
1909
 
1900
1910
  def test_gem_build_complete_path
1901
- expected = File.join @a1.extension_dir, 'gem.build_complete'
1911
+ expected = File.join @a1.extension_dir, "gem.build_complete"
1902
1912
  assert_equal expected, @a1.gem_build_complete_path
1903
1913
  end
1904
1914
 
@@ -1928,7 +1938,7 @@ dependencies: []
1928
1938
 
1929
1939
  def test_base_dir_default
1930
1940
  default_dir =
1931
- File.join Gem::Specification.default_specifications_dir, @a1.spec_name
1941
+ File.join Gem.default_specifications_dir, @a1.spec_name
1932
1942
 
1933
1943
  @a1.instance_variable_set :@loaded_from, default_dir
1934
1944
 
@@ -1942,23 +1952,23 @@ dependencies: []
1942
1952
  end
1943
1953
 
1944
1954
  def test_license
1945
- assert_equal 'MIT', @a1.license
1955
+ assert_equal "MIT", @a1.license
1946
1956
  end
1947
1957
 
1948
1958
  def test_licenses
1949
- assert_equal ['MIT'], @a1.licenses
1959
+ assert_equal ["MIT"], @a1.licenses
1950
1960
  end
1951
1961
 
1952
1962
  def test_name
1953
- assert_equal 'a', @a1.name
1963
+ assert_equal "a", @a1.name
1954
1964
  end
1955
1965
 
1956
1966
  def test_original_name
1957
- assert_equal 'a-1', @a1.full_name
1967
+ assert_equal "a-1", @a1.full_name
1958
1968
 
1959
- @a1.platform = 'i386-linux'
1960
- @a1.instance_variable_set :@original_platform, 'i386-linux'
1961
- assert_equal 'a-1-i386-linux', @a1.original_name
1969
+ @a1.platform = "i386-linux"
1970
+ @a1.instance_variable_set :@original_platform, "i386-linux"
1971
+ assert_equal "a-1-i386-linux", @a1.original_name
1962
1972
  end
1963
1973
 
1964
1974
  def test_platform
@@ -1987,10 +1997,10 @@ dependencies: []
1987
1997
  assert_equal Gem::Platform::RUBY, @a1.platform
1988
1998
 
1989
1999
  test_cases = {
1990
- 'i386-mswin32' => ['x86', 'mswin32', '60'],
1991
- 'i386-mswin32_80' => ['x86', 'mswin32', '80'],
1992
- 'i386-mingw32' => ['x86', 'mingw32', nil ],
1993
- 'x86-darwin8' => ['x86', 'darwin', '8' ],
2000
+ "i386-mswin32" => ["x86", "mswin32", "60"],
2001
+ "i386-mswin32_80" => ["x86", "mswin32", "80"],
2002
+ "i386-mingw32" => ["x86", "mingw32", nil ],
2003
+ "x86-darwin8" => ["x86", "darwin", "8" ],
1994
2004
  }
1995
2005
 
1996
2006
  test_cases.each do |arch, expected|
@@ -2007,29 +2017,29 @@ dependencies: []
2007
2017
  end
2008
2018
 
2009
2019
  def test_platform_equals_legacy
2010
- @a1.platform = 'mswin32'
2011
- assert_equal Gem::Platform.new('x86-mswin32'), @a1.platform
2020
+ @a1.platform = "mswin32"
2021
+ assert_equal Gem::Platform.new("x86-mswin32"), @a1.platform
2012
2022
 
2013
- @a1.platform = 'i586-linux'
2014
- assert_equal Gem::Platform.new('x86-linux'), @a1.platform
2023
+ @a1.platform = "i586-linux"
2024
+ assert_equal Gem::Platform.new("x86-linux"), @a1.platform
2015
2025
 
2016
- @a1.platform = 'powerpc-darwin'
2017
- assert_equal Gem::Platform.new('ppc-darwin'), @a1.platform
2026
+ @a1.platform = "powerpc-darwin"
2027
+ assert_equal Gem::Platform.new("ppc-darwin"), @a1.platform
2018
2028
  end
2019
2029
 
2020
2030
  def test_prerelease_spec_adds_required_rubygems_version
2021
- @prerelease = util_spec('tardis', '2.2.0.a')
2022
- refute @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.3.1'))
2023
- assert @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.4.0'))
2031
+ @prerelease = util_spec("tardis", "2.2.0.a")
2032
+ refute @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new("1.3.1"))
2033
+ assert @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new("1.4.0"))
2024
2034
  end
2025
2035
 
2026
2036
  def test_require_paths
2027
- enable_shared 'no' do
2037
+ enable_shared "no" do
2028
2038
  ext_spec
2029
2039
 
2030
- @ext.require_paths = 'lib'
2040
+ @ext.require_paths = "lib"
2031
2041
 
2032
- assert_equal [@ext.extension_dir, 'lib'], @ext.require_paths
2042
+ assert_equal [@ext.extension_dir, "lib"], @ext.require_paths
2033
2043
  end
2034
2044
  end
2035
2045
 
@@ -2040,16 +2050,16 @@ dependencies: []
2040
2050
  remove_method :default_ext_dir_for
2041
2051
  end
2042
2052
 
2043
- def Gem.default_ext_dir_for base_dir
2044
- '/foo'
2053
+ def Gem.default_ext_dir_for(base_dir)
2054
+ "/foo"
2045
2055
  end
2046
2056
 
2047
- enable_shared 'no' do
2057
+ enable_shared "no" do
2048
2058
  ext_spec
2049
2059
 
2050
- @ext.require_paths = 'lib'
2060
+ @ext.require_paths = "lib"
2051
2061
 
2052
- assert_equal [File.expand_path('/foo/ext-1'), 'lib'], @ext.require_paths
2062
+ assert_equal [File.expand_path("/foo/ext-1"), "lib"], @ext.require_paths
2053
2063
  end
2054
2064
  ensure
2055
2065
  class << Gem
@@ -2067,7 +2077,7 @@ dependencies: []
2067
2077
  ext_spec
2068
2078
 
2069
2079
  @ext.require_paths = %w[lib ext foo]
2070
- @ext.extensions << 'bar/baz'
2080
+ @ext.extensions << "bar/baz"
2071
2081
 
2072
2082
  expected = %w[
2073
2083
  lib
@@ -2082,10 +2092,10 @@ dependencies: []
2082
2092
  def test_full_require_paths
2083
2093
  ext_spec
2084
2094
 
2085
- @ext.require_paths = 'lib'
2095
+ @ext.require_paths = "lib"
2086
2096
 
2087
2097
  expected = [
2088
- File.join(@gemhome, 'gems', @ext.original_name, 'lib'),
2098
+ File.join(@gemhome, "gems", @ext.original_name, "lib"),
2089
2099
  @ext.extension_dir,
2090
2100
  ]
2091
2101
 
@@ -2095,10 +2105,10 @@ dependencies: []
2095
2105
  def test_to_fullpath
2096
2106
  ext_spec
2097
2107
 
2098
- @ext.require_paths = 'lib'
2108
+ @ext.require_paths = "lib"
2099
2109
 
2100
- dir = File.join(@gemhome, 'gems', @ext.original_name, 'lib')
2101
- expected_rb = File.join(dir, 'code.rb')
2110
+ dir = File.join(@gemhome, "gems", @ext.original_name, "lib")
2111
+ expected_rb = File.join(dir, "code.rb")
2102
2112
  FileUtils.mkdir_p dir
2103
2113
  FileUtils.touch expected_rb
2104
2114
 
@@ -2132,10 +2142,10 @@ dependencies: []
2132
2142
  def test_fullpath_return_rb_extension_file_when_exist_the_same_name_file
2133
2143
  ext_spec
2134
2144
 
2135
- @ext.require_paths = 'lib'
2145
+ @ext.require_paths = "lib"
2136
2146
 
2137
- dir = File.join(@gemhome, 'gems', @ext.original_name, 'lib')
2138
- expected_rb = File.join(dir, 'code.rb')
2147
+ dir = File.join(@gemhome, "gems", @ext.original_name, "lib")
2148
+ expected_rb = File.join(dir, "code.rb")
2139
2149
  FileUtils.mkdir_p dir
2140
2150
  FileUtils.touch expected_rb
2141
2151
 
@@ -2151,52 +2161,48 @@ dependencies: []
2151
2161
  end
2152
2162
 
2153
2163
  def test_require_already_activated
2154
- save_loaded_features do
2155
- a1 = new_spec "a", "1", nil, "lib/d.rb"
2164
+ a1 = util_spec "a", "1", nil, "lib/d#{$$}.rb"
2156
2165
 
2157
- install_specs a1 # , a2, b1, b2, c1, c2
2166
+ install_specs a1 # , a2, b1, b2, c1, c2
2158
2167
 
2159
- a1.activate
2160
- assert_equal %w(a-1), loaded_spec_names
2161
- assert_equal [], unresolved_names
2168
+ a1.activate
2169
+ assert_equal %w[a-1], loaded_spec_names
2170
+ assert_equal [], unresolved_names
2162
2171
 
2163
- assert require "d"
2172
+ assert require "d#{$$}"
2164
2173
 
2165
- assert_equal %w(a-1), loaded_spec_names
2166
- assert_equal [], unresolved_names
2167
- end
2174
+ assert_equal %w[a-1], loaded_spec_names
2175
+ assert_equal [], unresolved_names
2168
2176
  end
2169
2177
 
2170
2178
  def test_require_already_activated_indirect_conflict
2171
- save_loaded_features do
2172
- a1 = new_spec "a", "1", "b" => "> 0"
2173
- a2 = new_spec "a", "2", "b" => "> 0"
2174
- b1 = new_spec "b", "1", "c" => ">= 1"
2175
- b2 = new_spec "b", "2", "c" => ">= 2"
2176
- c1 = new_spec "c", "1", nil, "lib/d.rb"
2177
- c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
2179
+ a1 = util_spec "a", "1", "b" => "> 0"
2180
+ a2 = util_spec "a", "2", "b" => "> 0"
2181
+ b1 = util_spec "b", "1", "c" => ">= 1"
2182
+ b2 = util_spec "b", "2", "c" => ">= 2"
2183
+ c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb"
2184
+ c2 = util_spec("c", "2", { "a" => "1" }, "lib/d#{$$}.rb") # conflicts with a-2
2178
2185
 
2179
- install_specs c1, b1, a1, a2, c2, b2
2186
+ install_specs c1, b1, a1, a2, c2, b2
2180
2187
 
2181
- a1.activate
2182
- c1.activate
2183
- assert_equal %w(a-1 c-1), loaded_spec_names
2184
- assert_equal ["b (> 0)"], unresolved_names
2188
+ a1.activate
2189
+ c1.activate
2190
+ assert_equal %w[a-1 c-1], loaded_spec_names
2191
+ assert_equal ["b (> 0)"], unresolved_names
2185
2192
 
2186
- assert require "d"
2193
+ assert require "d#{$$}"
2187
2194
 
2188
- assert_equal %w(a-1 c-1), loaded_spec_names
2189
- assert_equal ["b (> 0)"], unresolved_names
2190
- end
2195
+ assert_equal %w[a-1 c-1], loaded_spec_names
2196
+ assert_equal ["b (> 0)"], unresolved_names
2191
2197
  end
2192
2198
 
2193
2199
  def test_requirements
2194
- assert_equal ['A working computer'], @a1.requirements
2200
+ assert_equal ["A working computer"], @a1.requirements
2195
2201
  end
2196
2202
 
2197
2203
  def test_allowed_push_host
2198
- assert_equal nil, @a1.metadata['allowed_push_host']
2199
- assert_equal 'https://privategemserver.com', @a3.metadata['allowed_push_host']
2204
+ assert_nil @a1.metadata["allowed_push_host"]
2205
+ assert_equal "https://privategemserver.com", @a3.metadata["allowed_push_host"]
2200
2206
  end
2201
2207
 
2202
2208
  def test_runtime_dependencies_legacy
@@ -2208,58 +2214,58 @@ dependencies: []
2208
2214
 
2209
2215
  expected = %w[rake jabber4r pqa]
2210
2216
 
2211
- assert_equal expected, @c1.runtime_dependencies.map { |d| d.name }
2217
+ assert_equal expected, @c1.runtime_dependencies.map {|d| d.name }
2212
2218
  end
2213
2219
 
2214
2220
  def test_spaceship_name
2215
- s1 = new_spec 'a', '1'
2216
- s2 = new_spec 'b', '1'
2221
+ s1 = util_spec "a", "1"
2222
+ s2 = util_spec "b", "1"
2217
2223
 
2218
2224
  assert_equal(-1, (s1 <=> s2))
2219
- assert_equal( 0, (s1 <=> s1))
2220
- assert_equal( 1, (s2 <=> s1))
2225
+ assert_equal(0, (s1 <=> s1))
2226
+ assert_equal(1, (s2 <=> s1))
2221
2227
  end
2222
2228
 
2223
2229
  def test_spaceship_platform
2224
- s1 = new_spec 'a', '1'
2225
- s2 = new_spec 'a', '1' do |s|
2226
- s.platform = Gem::Platform.new 'x86-my_platform1'
2230
+ s1 = util_spec "a", "1"
2231
+ s2 = util_spec "a", "1" do |s|
2232
+ s.platform = Gem::Platform.new "x86-my_platform1"
2227
2233
  end
2228
2234
 
2229
- assert_equal( -1, (s1 <=> s2))
2230
- assert_equal( 0, (s1 <=> s1))
2231
- assert_equal( 1, (s2 <=> s1))
2235
+ assert_equal(-1, (s1 <=> s2))
2236
+ assert_equal(0, (s1 <=> s1))
2237
+ assert_equal(1, (s2 <=> s1))
2232
2238
  end
2233
2239
 
2234
2240
  def test_spaceship_version
2235
- s1 = new_spec 'a', '1'
2236
- s2 = new_spec 'a', '2'
2241
+ s1 = util_spec "a", "1"
2242
+ s2 = util_spec "a", "2"
2237
2243
 
2238
- assert_equal( -1, (s1 <=> s2))
2239
- assert_equal( 0, (s1 <=> s1))
2240
- assert_equal( 1, (s2 <=> s1))
2244
+ assert_equal(-1, (s1 <=> s2))
2245
+ assert_equal(0, (s1 <=> s1))
2246
+ assert_equal(1, (s2 <=> s1))
2241
2247
  end
2242
2248
 
2243
2249
  def test_spec_file
2244
- assert_equal File.join(@gemhome, 'specifications', 'a-1.gemspec'),
2250
+ assert_equal File.join(@gemhome, "specifications", "a-1.gemspec"),
2245
2251
  @a1.spec_file
2246
2252
  end
2247
2253
 
2248
2254
  def test_spec_name
2249
- assert_equal 'a-1.gemspec', @a1.spec_name
2255
+ assert_equal "a-1.gemspec", @a1.spec_name
2250
2256
  end
2251
2257
 
2252
2258
  def test_summary
2253
- assert_equal 'this is a summary', @a1.summary
2259
+ assert_equal "this is a summary", @a1.summary
2254
2260
  end
2255
2261
 
2256
2262
  def test_test_files
2257
- @a1.test_file = 'test/suite.rb'
2258
- assert_equal ['test/suite.rb'], @a1.test_files
2263
+ @a1.test_file = "test/suite.rb"
2264
+ assert_equal ["test/suite.rb"], @a1.test_files
2259
2265
  end
2260
2266
 
2261
2267
  def test_runtime_predicate_true
2262
- @a2.add_runtime_dependency 'b', '1'
2268
+ @a2.add_runtime_dependency "b", "1"
2263
2269
  assert_predicate @a2.dependencies.first, :runtime?
2264
2270
 
2265
2271
  @a2.dependencies.first.instance_variable_set :@type, nil
@@ -2267,15 +2273,15 @@ dependencies: []
2267
2273
  end
2268
2274
 
2269
2275
  def test_runtime_predicate_false
2270
- @a2.add_development_dependency 'b', '1'
2276
+ @a2.add_development_dependency "b", "1"
2271
2277
  refute_predicate @a2.dependencies.first, :runtime?
2272
2278
  end
2273
2279
 
2274
2280
  def test_to_ruby
2275
- @a2.add_runtime_dependency 'b', '1'
2281
+ @a2.add_runtime_dependency "b", "1"
2276
2282
  @a2.dependencies.first.instance_variable_set :@type, nil
2277
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
2278
- @a2.require_paths << 'other'
2283
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
2284
+ @a2.require_paths << "other"
2279
2285
 
2280
2286
  ruby_code = @a2.to_ruby
2281
2287
 
@@ -2285,12 +2291,12 @@ dependencies: []
2285
2291
 
2286
2292
  Gem::Specification.new do |s|
2287
2293
  s.name = "a".freeze
2288
- s.version = "2"
2294
+ s.version = "2".freeze
2289
2295
 
2290
2296
  s.required_rubygems_version = Gem::Requirement.new(\"> 0\".freeze) if s.respond_to? :required_rubygems_version=
2291
2297
  s.require_paths = ["lib".freeze, "other".freeze]
2292
2298
  s.authors = ["A User".freeze]
2293
- s.date = "#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}"
2299
+ s.date = "#{@a2.date.strftime("%Y-%m-%d")}"
2294
2300
  s.description = "This is a test description".freeze
2295
2301
  s.email = "example@example.com".freeze
2296
2302
  s.files = ["lib/code.rb".freeze]
@@ -2298,17 +2304,9 @@ Gem::Specification.new do |s|
2298
2304
  s.rubygems_version = "#{Gem::VERSION}".freeze
2299
2305
  s.summary = "this is a summary".freeze
2300
2306
 
2301
- if s.respond_to? :specification_version then
2302
- s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
2307
+ s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
2303
2308
 
2304
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
2305
- s.add_runtime_dependency(%q<b>.freeze, [\"= 1\"])
2306
- else
2307
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
2308
- end
2309
- else
2310
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
2311
- end
2309
+ s.add_runtime_dependency(%q<b>.freeze, [\"= 1\".freeze])
2312
2310
  end
2313
2311
  SPEC
2314
2312
 
@@ -2319,10 +2317,42 @@ end
2319
2317
  assert_equal @a2, same_spec
2320
2318
  end
2321
2319
 
2320
+ def test_to_ruby_with_rsa_key
2321
+ require "rubygems/openssl"
2322
+ pend "openssl is missing" unless defined?(OpenSSL::PKey::RSA)
2323
+
2324
+ rsa_key = OpenSSL::PKey::RSA.new(2048)
2325
+ @a2.signing_key = rsa_key
2326
+ ruby_code = @a2.to_ruby
2327
+
2328
+ expected = <<-SPEC
2329
+ # -*- encoding: utf-8 -*-
2330
+ # stub: a 2 ruby lib
2331
+
2332
+ Gem::Specification.new do |s|
2333
+ s.name = "a".freeze
2334
+ s.version = "2".freeze
2335
+
2336
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
2337
+ s.require_paths = ["lib".freeze]
2338
+ s.authors = ["A User".freeze]
2339
+ s.date = "#{@a2.date.strftime("%Y-%m-%d")}"
2340
+ s.description = "This is a test description".freeze
2341
+ s.email = "example@example.com".freeze
2342
+ s.files = ["lib/code.rb".freeze]
2343
+ s.homepage = "http://example.com".freeze
2344
+ s.rubygems_version = "#{Gem::VERSION}".freeze
2345
+ s.summary = "this is a summary".freeze
2346
+ end
2347
+ SPEC
2348
+
2349
+ assert_equal expected, ruby_code
2350
+ end
2351
+
2322
2352
  def test_to_ruby_for_cache
2323
- @a2.add_runtime_dependency 'b', '1'
2353
+ @a2.add_runtime_dependency "b", "1"
2324
2354
  @a2.dependencies.first.instance_variable_set :@type, nil
2325
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
2355
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
2326
2356
  @a2.installed_by_version = Gem.rubygems_version
2327
2357
 
2328
2358
  # cached specs do not have spec.files populated:
@@ -2334,31 +2364,23 @@ end
2334
2364
 
2335
2365
  Gem::Specification.new do |s|
2336
2366
  s.name = "a".freeze
2337
- s.version = "2"
2367
+ s.version = "2".freeze
2338
2368
 
2339
2369
  s.required_rubygems_version = Gem::Requirement.new(\"> 0\".freeze) if s.respond_to? :required_rubygems_version=
2340
2370
  s.require_paths = ["lib".freeze]
2341
2371
  s.authors = ["A User".freeze]
2342
- s.date = "#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}"
2372
+ s.date = "#{@a2.date.strftime("%Y-%m-%d")}"
2343
2373
  s.description = "This is a test description".freeze
2344
2374
  s.email = "example@example.com".freeze
2345
2375
  s.homepage = "http://example.com".freeze
2346
2376
  s.rubygems_version = "#{Gem::VERSION}".freeze
2347
2377
  s.summary = "this is a summary".freeze
2348
2378
 
2349
- s.installed_by_version = "#{Gem::VERSION}" if s.respond_to? :installed_by_version
2379
+ s.installed_by_version = "#{Gem::VERSION}".freeze if s.respond_to? :installed_by_version
2350
2380
 
2351
- if s.respond_to? :specification_version then
2352
- s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
2381
+ s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
2353
2382
 
2354
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
2355
- s.add_runtime_dependency(%q<b>.freeze, [\"= 1\"])
2356
- else
2357
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
2358
- end
2359
- else
2360
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
2361
- end
2383
+ s.add_runtime_dependency(%q<b>.freeze, ["= 1".freeze])
2362
2384
  end
2363
2385
  SPEC
2364
2386
 
@@ -2378,7 +2400,7 @@ end
2378
2400
  ruby_code = @c1.to_ruby
2379
2401
 
2380
2402
  local = Gem::Platform.local
2381
- expected_platform = "[#{local.cpu.inspect}, #{local.os.inspect}, #{local.version.inspect}]"
2403
+ expected_platform = "[#{local.cpu.inspect}.freeze, #{local.os.inspect}.freeze, #{local.version.inspect}.freeze]"
2382
2404
  stub_require_paths =
2383
2405
  @c1.instance_variable_get(:@require_paths).join "\u0000"
2384
2406
  extensions = @c1.extensions.join "\u0000"
@@ -2390,13 +2412,13 @@ end
2390
2412
 
2391
2413
  Gem::Specification.new do |s|
2392
2414
  s.name = "a".freeze
2393
- s.version = "1"
2415
+ s.version = "1".freeze
2394
2416
  s.platform = Gem::Platform.new(#{expected_platform})
2395
2417
 
2396
2418
  s.required_rubygems_version = Gem::Requirement.new(\">= 0\".freeze) if s.respond_to? :required_rubygems_version=
2397
2419
  s.require_paths = ["lib".freeze]
2398
2420
  s.authors = ["A User".freeze]
2399
- s.date = "#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}"
2421
+ s.date = "#{@c1.date.strftime("%Y-%m-%d")}"
2400
2422
  s.description = "This is a test description".freeze
2401
2423
  s.email = "example@example.com".freeze
2402
2424
  s.executables = ["exec".freeze]
@@ -2405,28 +2427,15 @@ Gem::Specification.new do |s|
2405
2427
  s.homepage = "http://example.com".freeze
2406
2428
  s.licenses = ["MIT".freeze]
2407
2429
  s.requirements = ["A working computer".freeze]
2408
- s.rubyforge_project = "example".freeze
2409
2430
  s.rubygems_version = "#{Gem::VERSION}".freeze
2410
2431
  s.summary = "this is a summary".freeze
2411
2432
  s.test_files = ["test/suite.rb".freeze]
2412
2433
 
2413
- if s.respond_to? :specification_version then
2414
- s.specification_version = 4
2434
+ s.specification_version = 4
2415
2435
 
2416
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
2417
- s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\"])
2418
- s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
2419
- s.add_runtime_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
2420
- else
2421
- s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
2422
- s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
2423
- s.add_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
2424
- end
2425
- else
2426
- s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
2427
- s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
2428
- s.add_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
2429
- end
2436
+ s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\".freeze])
2437
+ s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\".freeze])
2438
+ s.add_runtime_dependency(%q<pqa>.freeze, [\"> 0.4\".freeze, \"<= 0.6\".freeze])
2430
2439
  end
2431
2440
  SPEC
2432
2441
 
@@ -2437,6 +2446,14 @@ end
2437
2446
  assert_equal @c1, same_spec
2438
2447
  end
2439
2448
 
2449
+ def test_to_ruby_keeps_requirements_as_originally_specified
2450
+ spec = util_spec "a", "1" do |s|
2451
+ s.add_dependency "b", ["~> 1.0", ">= 1.0.0"]
2452
+ end
2453
+
2454
+ assert_includes spec.to_ruby, '"~> 1.0".freeze, ">= 1.0.0".freeze'
2455
+ end
2456
+
2440
2457
  def test_to_ruby_legacy
2441
2458
  gemspec1 = Gem::Deprecate.skip_during do
2442
2459
  eval LEGACY_RUBY_SPEC
@@ -2460,19 +2477,19 @@ end
2460
2477
 
2461
2478
  def test_to_ruby_platform
2462
2479
  @a2.platform = Gem::Platform.local
2463
- @a2.instance_variable_set :@original_platform, 'old_platform'
2480
+ @a2.instance_variable_set :@original_platform, "old_platform"
2464
2481
 
2465
2482
  ruby_code = @a2.to_ruby
2466
2483
 
2467
2484
  same_spec = eval ruby_code
2468
2485
 
2469
- assert_equal 'old_platform', same_spec.original_platform
2486
+ assert_equal "old_platform", same_spec.original_platform
2470
2487
  end
2471
2488
 
2472
2489
  def test_to_yaml
2473
2490
  yaml_str = @a1.to_yaml
2474
2491
 
2475
- refute_match '!!null', yaml_str
2492
+ refute_match %r{!!null}, yaml_str
2476
2493
 
2477
2494
  same_spec = Gem::Specification.from_yaml(yaml_str)
2478
2495
 
@@ -2491,27 +2508,27 @@ end
2491
2508
  end
2492
2509
 
2493
2510
  def test_to_yaml_platform_empty_string
2494
- @a1.instance_variable_set :@original_platform, ''
2511
+ @a1.instance_variable_set :@original_platform, ""
2495
2512
 
2496
- assert_match %r|^platform: ruby$|, @a1.to_yaml
2513
+ assert_match %r{^platform: ruby$}, @a1.to_yaml
2497
2514
  end
2498
2515
 
2499
2516
  def test_to_yaml_platform_legacy
2500
- @a1.platform = 'powerpc-darwin7.9.0'
2501
- @a1.instance_variable_set :@original_platform, 'powerpc-darwin7.9.0'
2517
+ @a1.platform = "powerpc-darwin7.9.0"
2518
+ @a1.instance_variable_set :@original_platform, "powerpc-darwin7.9.0"
2502
2519
 
2503
2520
  yaml_str = @a1.to_yaml
2504
2521
 
2505
- same_spec = YAML.load yaml_str
2522
+ same_spec = load_yaml yaml_str
2506
2523
 
2507
- assert_equal Gem::Platform.new('powerpc-darwin7'), same_spec.platform
2508
- assert_equal 'powerpc-darwin7.9.0', same_spec.original_platform
2524
+ assert_equal Gem::Platform.new("powerpc-darwin7"), same_spec.platform
2525
+ assert_equal "powerpc-darwin7.9.0", same_spec.original_platform
2509
2526
  end
2510
2527
 
2511
2528
  def test_to_yaml_platform_nil
2512
2529
  @a1.instance_variable_set :@original_platform, nil
2513
2530
 
2514
- assert_match %r|^platform: ruby$|, @a1.to_yaml
2531
+ assert_match %r{^platform: ruby$}, @a1.to_yaml
2515
2532
  end
2516
2533
 
2517
2534
  def test_validate
@@ -2522,7 +2539,7 @@ end
2522
2539
  end
2523
2540
  end
2524
2541
 
2525
- def x s; s.gsub(/xxx/, ''); end
2542
+ def x(s); s.gsub(/xxx/, ""); end
2526
2543
  def w; x "WARxxxNING"; end
2527
2544
  def t; x "TOxxxDO"; end
2528
2545
  def f; x "FxxxIXME"; end
@@ -2537,13 +2554,13 @@ end
2537
2554
  @a1.validate
2538
2555
  end
2539
2556
 
2540
- assert_match "#{w}: no author specified\n", @ui.error, 'error'
2557
+ assert_match "#{w}: no author specified\n", @ui.error, "error"
2541
2558
 
2542
2559
  @a1.authors = [Object.new]
2543
2560
 
2544
2561
  assert_equal [], @a1.authors
2545
2562
 
2546
- e = assert_raises Gem::InvalidSpecificationException do
2563
+ e = assert_raise Gem::InvalidSpecificationException do
2547
2564
  @a1.validate
2548
2565
  end
2549
2566
 
@@ -2551,19 +2568,19 @@ end
2551
2568
 
2552
2569
  @a1.authors = ["#{f} (who is writing this software)"]
2553
2570
 
2554
- e = assert_raises Gem::InvalidSpecificationException do
2571
+ e = assert_raise Gem::InvalidSpecificationException do
2555
2572
  @a1.validate
2556
2573
  end
2557
2574
 
2558
- assert_equal %{"#{f}" or "#{t}" is not an author}, e.message
2575
+ assert_equal %("#{f}" or "#{t}" is not an author), e.message
2559
2576
 
2560
2577
  @a1.authors = ["#{t} (who is writing this software)"]
2561
2578
 
2562
- e = assert_raises Gem::InvalidSpecificationException do
2579
+ e = assert_raise Gem::InvalidSpecificationException do
2563
2580
  @a1.validate
2564
2581
  end
2565
2582
 
2566
- assert_equal %{"#{f}" or "#{t}" is not an author}, e.message
2583
+ assert_equal %("#{f}" or "#{t}" is not an author), e.message
2567
2584
  end
2568
2585
  end
2569
2586
 
@@ -2571,14 +2588,14 @@ end
2571
2588
  util_setup_validate
2572
2589
 
2573
2590
  Dir.chdir @tempdir do
2574
- @a1.autorequire = 'code'
2591
+ @a1.autorequire = "code"
2575
2592
 
2576
2593
  use_ui @ui do
2577
2594
  @a1.validate
2578
2595
  end
2579
2596
 
2580
2597
  assert_match "#{w}: deprecated autorequire specified\n",
2581
- @ui.error, 'error'
2598
+ @ui.error, "error"
2582
2599
  end
2583
2600
  end
2584
2601
 
@@ -2586,18 +2603,19 @@ end
2586
2603
  util_setup_validate
2587
2604
 
2588
2605
  Dir.chdir @tempdir do
2589
- @a1.add_runtime_dependency 'b', '>= 1.0.rc1'
2590
- @a1.add_development_dependency 'c', '>= 2.0.rc2'
2591
- @a1.add_runtime_dependency 'd', '~> 1.2.3'
2592
- @a1.add_runtime_dependency 'e', '~> 1.2.3.4'
2593
- @a1.add_runtime_dependency 'g', '~> 1.2.3', '>= 1.2.3.4'
2594
- @a1.add_runtime_dependency 'h', '>= 1.2.3', '<= 2'
2595
- @a1.add_runtime_dependency 'i', '>= 1.2'
2596
- @a1.add_runtime_dependency 'j', '>= 1.2.3'
2597
- @a1.add_runtime_dependency 'k', '> 1.2'
2598
- @a1.add_runtime_dependency 'l', '> 1.2.3'
2599
- @a1.add_runtime_dependency 'm', '~> 2.1.0'
2600
- @a1.add_runtime_dependency 'n', '~> 0.1.0'
2606
+ @a1.add_runtime_dependency "b", ">= 1.0.rc1"
2607
+ @a1.add_development_dependency "c", ">= 2.0.rc2"
2608
+ @a1.add_runtime_dependency "d", "~> 1.2.3"
2609
+ @a1.add_runtime_dependency "e", "~> 1.2.3.4"
2610
+ @a1.add_runtime_dependency "g", "~> 1.2.3", ">= 1.2.3.4"
2611
+ @a1.add_runtime_dependency "h", ">= 1.2.3", "<= 2"
2612
+ @a1.add_runtime_dependency "i", ">= 1.2"
2613
+ @a1.add_runtime_dependency "j", ">= 1.2.3"
2614
+ @a1.add_runtime_dependency "k", "> 1.2"
2615
+ @a1.add_runtime_dependency "l", "> 1.2.3"
2616
+ @a1.add_runtime_dependency "m", "~> 2.1.0"
2617
+ @a1.add_runtime_dependency "n", "~> 0.1.0"
2618
+ @a1.add_runtime_dependency "o"
2601
2619
 
2602
2620
  use_ui @ui do
2603
2621
  @a1.validate
@@ -2606,12 +2624,6 @@ end
2606
2624
  expected = <<-EXPECTED
2607
2625
  #{w}: prerelease dependency on b (>= 1.0.rc1) is not recommended
2608
2626
  #{w}: prerelease dependency on c (>= 2.0.rc2, development) is not recommended
2609
- #{w}: pessimistic dependency on d (~> 1.2.3) may be overly strict
2610
- if d is semantically versioned, use:
2611
- add_runtime_dependency 'd', '~> 1.2', '>= 1.2.3'
2612
- #{w}: pessimistic dependency on e (~> 1.2.3.4) may be overly strict
2613
- if e is semantically versioned, use:
2614
- add_runtime_dependency 'e', '~> 1.2', '>= 1.2.3.4'
2615
2627
  #{w}: open-ended dependency on i (>= 1.2) is not recommended
2616
2628
  if i is semantically versioned, use:
2617
2629
  add_runtime_dependency 'i', '~> 1.2'
@@ -2624,13 +2636,12 @@ end
2624
2636
  #{w}: open-ended dependency on l (> 1.2.3) is not recommended
2625
2637
  if l is semantically versioned, use:
2626
2638
  add_runtime_dependency 'l', '~> 1.2', '> 1.2.3'
2627
- #{w}: pessimistic dependency on m (~> 2.1.0) may be overly strict
2628
- if m is semantically versioned, use:
2629
- add_runtime_dependency 'm', '~> 2.1', '>= 2.1.0'
2630
- #{w}: See http://guides.rubygems.org/specification-reference/ for help
2639
+ #{w}: open-ended dependency on o (>= 0) is not recommended
2640
+ use a bounded requirement, such as '~> x.y'
2641
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
2631
2642
  EXPECTED
2632
2643
 
2633
- assert_equal expected, @ui.error, 'warning'
2644
+ assert_equal expected, @ui.error, "warning"
2634
2645
  end
2635
2646
  end
2636
2647
 
@@ -2638,13 +2649,13 @@ end
2638
2649
  util_setup_validate
2639
2650
 
2640
2651
  Dir.chdir @tempdir do
2641
- @a1.add_runtime_dependency 'b', '~> 1.2'
2642
- @a1.add_runtime_dependency 'b', '>= 1.2.3'
2643
- @a1.add_development_dependency 'c', '~> 1.2'
2644
- @a1.add_development_dependency 'c', '>= 1.2.3'
2652
+ @a1.add_runtime_dependency "b", "~> 1.2"
2653
+ @a1.add_runtime_dependency "b", ">= 1.2.3"
2654
+ @a1.add_development_dependency "c", "~> 1.2"
2655
+ @a1.add_development_dependency "c", ">= 1.2.3"
2645
2656
 
2646
2657
  use_ui @ui do
2647
- e = assert_raises Gem::InvalidSpecificationException do
2658
+ e = assert_raise Gem::InvalidSpecificationException do
2648
2659
  @a1.validate
2649
2660
  end
2650
2661
 
@@ -2659,7 +2670,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2659
2670
  end
2660
2671
 
2661
2672
  assert_equal <<-EXPECTED, @ui.error
2662
- #{w}: See http://guides.rubygems.org/specification-reference/ for help
2673
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
2663
2674
  EXPECTED
2664
2675
  end
2665
2676
  end
@@ -2668,14 +2679,14 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2668
2679
  util_setup_validate
2669
2680
 
2670
2681
  Dir.chdir @tempdir do
2671
- @a1.add_runtime_dependency 'b', '~> 1.2'
2672
- @a1.add_development_dependency 'b', '= 1.2.3'
2682
+ @a1.add_runtime_dependency "b", "~> 1.2"
2683
+ @a1.add_development_dependency "b", "= 1.2.3"
2673
2684
 
2674
2685
  use_ui @ui do
2675
2686
  @a1.validate
2676
2687
  end
2677
2688
 
2678
- assert_equal '', @ui.error, 'warning'
2689
+ assert_equal "", @ui.error, "warning"
2679
2690
  end
2680
2691
  end
2681
2692
 
@@ -2683,14 +2694,95 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2683
2694
  util_setup_validate
2684
2695
 
2685
2696
  Dir.chdir @tempdir do
2686
- @a1.version = '1.0.0.beta.1'
2687
- @a1.add_runtime_dependency 'b', '~> 1.2.0.beta.1'
2697
+ @a1.version = "1.0.0.beta.1"
2698
+ @a1.add_runtime_dependency "b", "~> 1.2.0.beta.1"
2699
+
2700
+ use_ui @ui do
2701
+ @a1.validate
2702
+ end
2703
+
2704
+ assert_equal "", @ui.error, "warning"
2705
+ end
2706
+ end
2707
+
2708
+ def test_validate_self_referencing_dependencies
2709
+ util_setup_validate
2710
+
2711
+ Dir.chdir @tempdir do
2712
+ @a1.add_runtime_dependency @a1.name, "1"
2713
+
2714
+ use_ui @ui do
2715
+ @a1.validate
2716
+ end
2717
+
2718
+ assert_equal <<-EXPECTED, @ui.error
2719
+ #{w}: Self referencing dependency is unnecessary and strongly discouraged.
2720
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
2721
+ EXPECTED
2722
+ end
2723
+ end
2724
+
2725
+ def test_validate_rake_extension_have_rake_dependency_warning
2726
+ util_setup_validate
2727
+
2728
+ Dir.chdir @tempdir do
2729
+ @a1.extensions = ["Rakefile"]
2730
+ File.write File.join(@tempdir, "Rakefile"), ""
2731
+
2732
+ use_ui @ui do
2733
+ @a1.validate
2734
+ end
2735
+
2736
+ assert_match(/add rake as a dependency/, @ui.error)
2737
+ end
2738
+ end
2739
+
2740
+ def test_validate_rake_extension_have_rake_dependency_no_warning
2741
+ util_setup_validate
2742
+
2743
+ Dir.chdir @tempdir do
2744
+ @a1.extensions = ["Rakefile"]
2745
+ @a1.add_runtime_dependency "rake"
2746
+ File.write File.join(@tempdir, "Rakefile"), ""
2688
2747
 
2689
2748
  use_ui @ui do
2690
2749
  @a1.validate
2691
2750
  end
2692
2751
 
2693
- assert_equal '', @ui.error, 'warning'
2752
+ refute_match(/add rake as a dependency/, @ui.error)
2753
+ end
2754
+ end
2755
+
2756
+ def test_validate_rust_extension_have_missing_cargo_toml_error
2757
+ util_setup_validate
2758
+
2759
+ Dir.chdir @tempdir do
2760
+ @a1.extensions = ["Cargo.toml"]
2761
+ File.write File.join(@tempdir, "Cargo.toml"), ""
2762
+
2763
+ e = assert_raise Gem::InvalidSpecificationException do
2764
+ use_ui @ui do
2765
+ @a1.validate
2766
+ end
2767
+ end
2768
+
2769
+ assert_match(/but Cargo.lock is not part of the gem files/, e.message)
2770
+ end
2771
+ end
2772
+
2773
+ def test_validate_rust_extension_have_no_missing_cargo_toml_error
2774
+ util_setup_validate
2775
+
2776
+ Dir.chdir @tempdir do
2777
+ @a1.extensions = ["Cargo.toml"]
2778
+ @a1.files << "Cargo.toml"
2779
+ @a1.files << "Cargo.lock"
2780
+ File.write File.join(@tempdir, "Cargo.toml"), ""
2781
+ File.write File.join(@tempdir, "Cargo.lock"), ""
2782
+
2783
+ use_ui @ui do
2784
+ @a1.validate
2785
+ end
2694
2786
  end
2695
2787
  end
2696
2788
 
@@ -2698,7 +2790,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2698
2790
  util_setup_validate
2699
2791
 
2700
2792
  Dir.chdir @tempdir do
2701
- @a1.description = ''
2793
+ @a1.description = ""
2702
2794
 
2703
2795
  use_ui @ui do
2704
2796
  @a1.validate
@@ -2717,76 +2809,96 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2717
2809
 
2718
2810
  @a1.description = "#{f} (describe your package)"
2719
2811
 
2720
- e = assert_raises Gem::InvalidSpecificationException do
2812
+ e = assert_raise Gem::InvalidSpecificationException do
2721
2813
  @a1.validate
2722
2814
  end
2723
2815
 
2724
- assert_equal %{"#{f}" or "#{t}" is not a description}, e.message
2816
+ assert_equal %("#{f}" or "#{t}" is not a description), e.message
2725
2817
 
2726
2818
  @a1.description = "#{t} (describe your package)"
2727
2819
 
2728
- e = assert_raises Gem::InvalidSpecificationException do
2820
+ e = assert_raise Gem::InvalidSpecificationException do
2729
2821
  @a1.validate
2730
2822
  end
2731
2823
 
2732
- assert_equal %{"#{f}" or "#{t}" is not a description}, e.message
2733
- end
2734
- end
2824
+ assert_equal %("#{f}" or "#{t}" is not a description), e.message
2735
2825
 
2736
- def test_validate_email
2737
- util_setup_validate
2826
+ # Adding #{f} anywhere after the start of the description should be fine.
2827
+ @a1.description = "(some description) #{f}"
2738
2828
 
2739
- Dir.chdir @tempdir do
2740
- @a1.email = ""
2829
+ assert_nothing_raised do
2830
+ @a1.validate
2831
+ end
2741
2832
 
2742
- use_ui @ui do
2833
+ # Adding #{t} anywhere after the start of the description should be fine.
2834
+ @a1.description = "(some description) #{t}"
2835
+
2836
+ assert_nothing_raised do
2837
+ @a1.validate
2838
+ end
2839
+
2840
+ # Adding #{f} at the start of the second or later line should be fine.
2841
+ @a1.description = "(some description)\n#{f}"
2842
+
2843
+ assert_nothing_raised do
2743
2844
  @a1.validate
2744
2845
  end
2745
2846
 
2746
- assert_match "#{w}: no email specified\n", @ui.error, "error"
2847
+ # Adding #{t} at the start of the second or later line should be fine.
2848
+ @a1.description = "(some description)\n#{t}"
2849
+
2850
+ assert_nothing_raised do
2851
+ @a1.validate
2852
+ end
2853
+ end
2854
+ end
2747
2855
 
2856
+ def test_validate_email
2857
+ util_setup_validate
2858
+
2859
+ Dir.chdir @tempdir do
2748
2860
  @a1.email = "FIxxxXME (your e-mail)".sub(/xxx/, "")
2749
2861
 
2750
- e = assert_raises Gem::InvalidSpecificationException do
2862
+ e = assert_raise Gem::InvalidSpecificationException do
2751
2863
  @a1.validate
2752
2864
  end
2753
2865
 
2754
- assert_equal %{"#{f}" or "#{t}" is not an email}, e.message
2866
+ assert_equal %("#{f}" or "#{t}" is not an email), e.message
2755
2867
 
2756
2868
  @a1.email = "#{t} (your e-mail)"
2757
2869
 
2758
- e = assert_raises Gem::InvalidSpecificationException do
2870
+ e = assert_raise Gem::InvalidSpecificationException do
2759
2871
  @a1.validate
2760
2872
  end
2761
2873
 
2762
- assert_equal %{"#{f}" or "#{t}" is not an email}, e.message
2874
+ assert_equal %("#{f}" or "#{t}" is not an email), e.message
2763
2875
  end
2764
2876
  end
2765
2877
 
2766
2878
  def test_validate_empty
2767
- e = assert_raises Gem::InvalidSpecificationException do
2879
+ e = assert_raise Gem::InvalidSpecificationException do
2768
2880
  Gem::Specification.new.validate
2769
2881
  end
2770
2882
 
2771
- assert_equal 'missing value for attribute name', e.message
2883
+ assert_equal "missing value for attribute name", e.message
2772
2884
  end
2773
2885
 
2774
2886
  def test_validate_error
2775
- assert_raises Gem::InvalidSpecificationException do
2887
+ assert_raise Gem::InvalidSpecificationException do
2776
2888
  use_ui @ui do
2777
2889
  Gem::Specification.new.validate
2778
2890
  end
2779
2891
  end
2780
2892
 
2781
- assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error
2893
+ assert_match "See https://guides.rubygems.org/specification-reference/ for help", @ui.error
2782
2894
  end
2783
2895
 
2784
2896
  def test_validate_executables
2785
2897
  util_setup_validate
2786
2898
 
2787
- FileUtils.mkdir_p File.join(@tempdir, 'bin')
2788
- File.open File.join(@tempdir, 'bin', 'exec'), 'w' do end
2789
- FileUtils.mkdir_p File.join(@tempdir, 'exec')
2899
+ FileUtils.mkdir_p File.join(@tempdir, "bin")
2900
+ File.write File.join(@tempdir, "bin", "exec"), ""
2901
+ FileUtils.mkdir_p File.join(@tempdir, "exec")
2790
2902
 
2791
2903
  use_ui @ui do
2792
2904
  Dir.chdir @tempdir do
@@ -2796,54 +2908,129 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2796
2908
 
2797
2909
  assert_equal %w[exec], @a1.executables
2798
2910
 
2799
- assert_equal '', @ui.output, 'output'
2800
- assert_match "#{w}: bin/exec is missing #! line\n", @ui.error, 'error'
2911
+ assert_equal "", @ui.output, "output"
2912
+ assert_match "#{w}: bin/exec is missing #! line\n", @ui.error, "error"
2801
2913
  end
2802
2914
 
2803
2915
  def test_validate_empty_require_paths
2804
- if win_platform? then
2805
- skip 'test_validate_empty_require_paths skipped on MS Windows (symlink)'
2916
+ if win_platform?
2917
+ pend "test_validate_empty_require_paths skipped on MS Windows (symlink)"
2806
2918
  else
2807
2919
  util_setup_validate
2808
2920
 
2809
2921
  @a1.require_paths = []
2810
- e = assert_raises Gem::InvalidSpecificationException do
2922
+ e = assert_raise Gem::InvalidSpecificationException do
2811
2923
  @a1.validate
2812
2924
  end
2813
2925
 
2814
- assert_equal 'specification must have at least one require_path',
2926
+ assert_equal "specification must have at least one require_path",
2815
2927
  e.message
2816
2928
  end
2817
2929
  end
2818
2930
 
2819
2931
  def test_validate_files
2820
- skip 'test_validate_files skipped on MS Windows (symlink)' if win_platform?
2932
+ pend "test_validate_files skipped on MS Windows (symlink)" if win_platform?
2821
2933
  util_setup_validate
2822
2934
 
2823
- @a1.files += ['lib', 'lib2']
2824
- @a1.extensions << 'ext/a/extconf.rb'
2935
+ @a1.files += ["lib", "lib2"]
2936
+ @a1.extensions << "ext/a/extconf.rb"
2825
2937
 
2826
2938
  Dir.chdir @tempdir do
2827
- FileUtils.ln_s 'lib/code.rb', 'lib2' unless vc_windows?
2939
+ FileUtils.ln_s "lib/code.rb", "lib2" unless vc_windows?
2828
2940
 
2829
2941
  use_ui @ui do
2830
2942
  @a1.validate
2831
2943
  end
2832
2944
 
2833
- assert_match 'WARNING: lib2 is a symlink, which is not supported on all platforms', @ui.error
2945
+ assert_match "WARNING: lib2 is a symlink, which is not supported on all platforms", @ui.error
2834
2946
  end
2835
2947
 
2836
2948
  assert_equal %w[bin/exec ext/a/extconf.rb lib/code.rb lib2 test/suite.rb].sort,
2837
2949
  @a1.files
2838
2950
  end
2839
2951
 
2952
+ def test_unresolved_specs
2953
+ specification = Gem::Specification.clone
2954
+
2955
+ set_orig specification
2956
+
2957
+ specification.define_singleton_method(:unresolved_deps) do
2958
+ { b: Gem::Dependency.new("x","1") }
2959
+ end
2960
+
2961
+ specification.define_singleton_method(:find_all_by_name) do |dep_name|
2962
+ []
2963
+ end
2964
+
2965
+ expected = <<-EXPECTED
2966
+ WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
2967
+ x (= 1)
2968
+ WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
2969
+ Please report a bug if this causes problems.
2970
+ EXPECTED
2971
+
2972
+ actual_stdout, actual_stderr = capture_output do
2973
+ specification.reset
2974
+ end
2975
+ assert_empty actual_stdout
2976
+ assert_equal(expected, actual_stderr)
2977
+ end
2978
+
2979
+ def test_unresolved_specs_with_versions
2980
+ specification = Gem::Specification.clone
2981
+
2982
+ set_orig specification
2983
+
2984
+ specification.define_singleton_method(:unresolved_deps) do
2985
+ { b: Gem::Dependency.new("x","1") }
2986
+ end
2987
+
2988
+ specification.define_singleton_method(:find_all_by_name) do |dep_name|
2989
+ [
2990
+ specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") },
2991
+ specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") },
2992
+ ]
2993
+ end
2994
+
2995
+ expected = <<-EXPECTED
2996
+ WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
2997
+ x (= 1)
2998
+ Available/installed versions of this gem:
2999
+ - 1
3000
+ - 2
3001
+ WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
3002
+ Please report a bug if this causes problems.
3003
+ EXPECTED
3004
+
3005
+ actual_stdout, actual_stderr = capture_output do
3006
+ specification.reset
3007
+ end
3008
+ assert_empty actual_stdout
3009
+ assert_equal(expected, actual_stderr)
3010
+ end
3011
+
3012
+ def test_duplicate_runtime_dependency
3013
+ expected = "WARNING: duplicated b dependency [\"~> 3.0\", \"~> 3.0\"]\n"
3014
+ out, err = capture_output do
3015
+ @a1.add_runtime_dependency "b", "~> 3.0", "~> 3.0"
3016
+ end
3017
+ assert_empty out
3018
+ assert_equal(expected, err)
3019
+ end
3020
+
3021
+ def set_orig(cls)
3022
+ s_cls = cls.singleton_class
3023
+ s_cls.send :alias_method, :orig_unresolved_deps , :unresolved_deps
3024
+ s_cls.send :alias_method, :orig_find_all_by_name, :find_all_by_name
3025
+ end
3026
+
2840
3027
  def test_validate_files_recursive
2841
3028
  util_setup_validate
2842
3029
  FileUtils.touch @a1.file_name
2843
3030
 
2844
3031
  @a1.files = [@a1.file_name]
2845
3032
 
2846
- e = assert_raises Gem::InvalidSpecificationException do
3033
+ e = assert_raise Gem::InvalidSpecificationException do
2847
3034
  @a1.validate
2848
3035
  end
2849
3036
 
@@ -2861,25 +3048,39 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2861
3048
  @a1.validate
2862
3049
  end
2863
3050
 
2864
- assert_match "#{w}: no homepage specified\n", @ui.error, 'error'
3051
+ assert_match "#{w}: no homepage specified\n", @ui.error, "error"
2865
3052
 
2866
3053
  @ui = Gem::MockGemUi.new
2867
3054
 
2868
- @a1.homepage = ''
3055
+ @a1.homepage = ""
2869
3056
 
2870
3057
  use_ui @ui do
2871
3058
  @a1.validate
2872
3059
  end
2873
3060
 
2874
- assert_match "#{w}: no homepage specified\n", @ui.error, 'error'
3061
+ assert_match "#{w}: no homepage specified\n", @ui.error, "error"
2875
3062
 
2876
- @a1.homepage = 'over at my cool site'
3063
+ @a1.homepage = "over at my cool site"
2877
3064
 
2878
- e = assert_raises Gem::InvalidSpecificationException do
3065
+ e = assert_raise Gem::InvalidSpecificationException do
2879
3066
  @a1.validate
2880
3067
  end
2881
3068
 
2882
- assert_equal '"over at my cool site" is not a URI', e.message
3069
+ assert_equal '"over at my cool site" is not a valid HTTP URI', e.message
3070
+
3071
+ @a1.homepage = "ftp://rubygems.org"
3072
+
3073
+ e = assert_raise Gem::InvalidSpecificationException do
3074
+ @a1.validate
3075
+ end
3076
+
3077
+ assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message
3078
+
3079
+ @a1.homepage = "https://rubygems.org/"
3080
+ assert_equal true, @a1.validate
3081
+
3082
+ @a1.homepage = "https://rubygems.org"
3083
+ assert_equal true, @a1.validate
2883
3084
  end
2884
3085
  end
2885
3086
 
@@ -2891,31 +3092,92 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
2891
3092
  @a1.validate
2892
3093
  end
2893
3094
 
2894
- assert_match <<-warning, @ui.error
3095
+ assert_match <<-WARNING, @ui.error
2895
3096
  WARNING: licenses is empty, but is recommended. Use a license identifier from
2896
- http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2897
- warning
3097
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3098
+ or set it to nil if you don't want to specify a license.
3099
+ WARNING
3100
+ end
3101
+
3102
+ def test_validate_nil_license
3103
+ util_setup_validate
3104
+
3105
+ use_ui @ui do
3106
+ @a1.license = nil
3107
+ @a1.validate
3108
+ end
3109
+
3110
+ assert_empty @ui.error
3111
+ end
3112
+
3113
+ def test_validate_license_in_a_non_packaging_context
3114
+ util_setup_validate
3115
+
3116
+ use_ui @ui do
3117
+ @a1.licenses.clear
3118
+ @a1.validate(false)
3119
+ end
3120
+
3121
+ assert_empty @ui.error
3122
+ end
3123
+
3124
+ def test_removed_methods
3125
+ assert_equal Gem::Specification::REMOVED_METHODS, [:rubyforge_project=]
3126
+ end
3127
+
3128
+ def test_validate_removed_rubyforge_project
3129
+ util_setup_validate
3130
+
3131
+ use_ui @ui do
3132
+ @a1.rubyforge_project = "invalid-attribute"
3133
+ @a1.validate
3134
+ end
3135
+
3136
+ assert_match "rubyforge_project= is deprecated", @ui.error
2898
3137
  end
2899
3138
 
2900
3139
  def test_validate_license_values
2901
3140
  util_setup_validate
2902
3141
 
2903
3142
  use_ui @ui do
2904
- @a1.licenses = ['BSD']
3143
+ @a1.licenses = ["BSD"]
2905
3144
  @a1.validate
2906
3145
  end
2907
3146
 
2908
- assert_match <<-warning, @ui.error
3147
+ assert_match <<-WARNING, @ui.error
2909
3148
  WARNING: license value 'BSD' is invalid. Use a license identifier from
2910
- http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2911
- warning
3149
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3150
+ or set it to nil if you don't want to specify a license.
3151
+ WARNING
3152
+ end
3153
+
3154
+ def test_validate_license_ref
3155
+ util_setup_validate
3156
+
3157
+ use_ui @ui do
3158
+ @a1.licenses = ["LicenseRef-LICENSE.md"]
3159
+ @a1.validate
3160
+ end
3161
+
3162
+ assert_empty @ui.error
2912
3163
  end
2913
3164
 
2914
3165
  def test_validate_license_values_plus
2915
3166
  util_setup_validate
2916
3167
 
2917
3168
  use_ui @ui do
2918
- @a1.licenses = ['GPL-2.0+']
3169
+ @a1.licenses = ["GPL-2.0+"]
3170
+ @a1.validate
3171
+ end
3172
+
3173
+ assert_empty @ui.error
3174
+ end
3175
+
3176
+ def test_validate_license_values_or_later
3177
+ util_setup_validate
3178
+
3179
+ use_ui @ui do
3180
+ @a1.licenses = ["GPL-2.0-or-later"]
2919
3181
  @a1.validate
2920
3182
  end
2921
3183
 
@@ -2926,7 +3188,7 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2926
3188
  util_setup_validate
2927
3189
 
2928
3190
  use_ui @ui do
2929
- @a1.licenses = ['GPL-2.0+ WITH Autoconf-exception-2.0']
3191
+ @a1.licenses = ["GPL-2.0+ WITH Autoconf-exception-2.0"]
2930
3192
  @a1.validate
2931
3193
  end
2932
3194
 
@@ -2937,44 +3199,129 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2937
3199
  util_setup_validate
2938
3200
 
2939
3201
  use_ui @ui do
2940
- @a1.licenses = ['GPL-2.0+ FOO', 'GPL-2.0 FOO']
3202
+ @a1.licenses = ["GPL-2.0+ FOO", "GPL-2.0 FOO"]
2941
3203
  @a1.validate
2942
3204
  end
2943
3205
 
2944
- assert_match <<-warning, @ui.error
3206
+ assert_match <<-WARNING, @ui.error
2945
3207
  WARNING: license value 'GPL-2.0+ FOO' is invalid. Use a license identifier from
2946
- http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2947
- warning
2948
- assert_match <<-warning, @ui.error
3208
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3209
+ or set it to nil if you don't want to specify a license.
3210
+ WARNING
3211
+ assert_match <<-WARNING, @ui.error
2949
3212
  WARNING: license value 'GPL-2.0 FOO' is invalid. Use a license identifier from
2950
- http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
2951
- warning
3213
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3214
+ or set it to nil if you don't want to specify a license.
3215
+ WARNING
3216
+ end
3217
+
3218
+ def test_validate_license_with_invalid_exception
3219
+ util_setup_validate
3220
+
3221
+ use_ui @ui do
3222
+ @a1.licenses = ["GPL-2.0+ WITH Autocofn-exception-2.0"]
3223
+ @a1.validate
3224
+ end
3225
+
3226
+ assert_match <<-WARNING, @ui.error
3227
+ WARNING: license value 'GPL-2.0+ WITH Autocofn-exception-2.0' is invalid. Use a license identifier from
3228
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3229
+ or set it to nil if you don't want to specify a license.
3230
+ WARNING
2952
3231
  end
2953
3232
 
2954
3233
  def test_validate_license_gives_suggestions
2955
3234
  util_setup_validate
2956
3235
 
2957
3236
  use_ui @ui do
2958
- @a1.licenses = ['ruby']
3237
+ @a1.licenses = ["ruby"]
2959
3238
  @a1.validate
2960
3239
  end
2961
3240
 
2962
- assert_match <<-warning, @ui.error
3241
+ assert_match <<-WARNING, @ui.error
2963
3242
  WARNING: license value 'ruby' is invalid. Use a license identifier from
2964
- http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
3243
+ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
3244
+ or set it to nil if you don't want to specify a license.
2965
3245
  Did you mean 'Ruby'?
2966
- warning
3246
+ WARNING
3247
+ end
3248
+
3249
+ def test_validate_empty_files
3250
+ util_setup_validate
3251
+
3252
+ use_ui @ui do
3253
+ # we have to set all of these for #files to be empty
3254
+ @a1.files = []
3255
+ @a1.test_files = []
3256
+ @a1.executables = []
3257
+
3258
+ @a1.validate
3259
+ end
3260
+
3261
+ assert_match "no files specified", @ui.error
3262
+ end
3263
+
3264
+ def test_validate_empty_homepage
3265
+ util_setup_validate
3266
+
3267
+ use_ui @ui do
3268
+ @a1.homepage = nil
3269
+ @a1.validate
3270
+ end
3271
+
3272
+ assert_match "no homepage specified", @ui.error
3273
+ end
3274
+
3275
+ def test_validate_empty_summary
3276
+ util_setup_validate
3277
+
3278
+ use_ui @ui do
3279
+ @a1.summary = nil
3280
+ @a1.validate
3281
+ end
3282
+
3283
+ assert_match "no summary specified", @ui.error
2967
3284
  end
2968
3285
 
2969
3286
  def test_validate_name
2970
3287
  util_setup_validate
2971
3288
 
2972
- e = assert_raises Gem::InvalidSpecificationException do
3289
+ e = assert_raise Gem::InvalidSpecificationException do
2973
3290
  @a1.name = :json
2974
3291
  @a1.validate
2975
3292
  end
2976
3293
 
2977
- assert_equal 'invalid value for attribute name: ":json"', e.message
3294
+ assert_equal 'invalid value for attribute name: ":json" must be a string', e.message
3295
+
3296
+ @a1.name = []
3297
+ e = assert_raise Gem::InvalidSpecificationException do
3298
+ @a1.validate
3299
+ end
3300
+ assert_equal "invalid value for attribute name: \"[]\" must be a string", e.message
3301
+
3302
+ @a1.name = ""
3303
+ e = assert_raise Gem::InvalidSpecificationException do
3304
+ @a1.validate
3305
+ end
3306
+ assert_equal "invalid value for attribute name: \"\" must include at least one letter", e.message
3307
+
3308
+ @a1.name = "12345"
3309
+ e = assert_raise Gem::InvalidSpecificationException do
3310
+ @a1.validate
3311
+ end
3312
+ assert_equal "invalid value for attribute name: \"12345\" must include at least one letter", e.message
3313
+
3314
+ @a1.name = "../malicious"
3315
+ e = assert_raise Gem::InvalidSpecificationException do
3316
+ @a1.validate
3317
+ end
3318
+ assert_equal "invalid value for attribute name: \"../malicious\" can only include letters, numbers, dashes, and underscores", e.message
3319
+
3320
+ @a1.name = "\ba\t"
3321
+ e = assert_raise Gem::InvalidSpecificationException do
3322
+ @a1.validate
3323
+ end
3324
+ assert_equal "invalid value for attribute name: \"\\ba\\t\" can only include letters, numbers, dashes, and underscores", e.message
2978
3325
  end
2979
3326
 
2980
3327
  def test_validate_non_nil
@@ -2988,23 +3335,23 @@ Did you mean 'Ruby'?
2988
3335
  spec = @a1.dup
2989
3336
  spec.instance_variable_set "@#{name}", nil
2990
3337
 
2991
- e = assert_raises Gem::InvalidSpecificationException do
3338
+ e = assert_raise Gem::InvalidSpecificationException do
2992
3339
  spec.validate
2993
3340
  end
2994
3341
 
2995
- assert_match %r%^#{name}%, e.message
3342
+ assert_match %r{^#{name}}, e.message
2996
3343
  end
2997
3344
  end
2998
3345
  end
2999
3346
 
3000
3347
  def test_validate_permissions
3001
- skip 'chmod not supported' if Gem.win_platform?
3348
+ pend "chmod not supported" if Gem.win_platform?
3002
3349
 
3003
3350
  util_setup_validate
3004
3351
 
3005
3352
  Dir.chdir @tempdir do
3006
- File.chmod 0640, File.join('lib', 'code.rb')
3007
- File.chmod 0640, File.join('bin', 'exec')
3353
+ File.chmod 0o640, File.join("lib", "code.rb")
3354
+ File.chmod 0o640, File.join("bin", "exec")
3008
3355
 
3009
3356
  use_ui @ui do
3010
3357
  @a1.validate
@@ -3017,12 +3364,12 @@ Did you mean 'Ruby'?
3017
3364
  end
3018
3365
 
3019
3366
  def test_validate_permissions_of_missing_file_non_packaging
3020
- skip 'chmod not supported' if Gem.win_platform?
3367
+ pend "chmod not supported" if Gem.win_platform?
3021
3368
 
3022
3369
  util_setup_validate
3023
3370
 
3024
3371
  Dir.chdir @tempdir do
3025
- File.delete File.join('lib', 'code.rb')
3372
+ File.delete File.join("lib", "code.rb")
3026
3373
 
3027
3374
  use_ui @ui do
3028
3375
  assert @a1.validate(false)
@@ -3034,13 +3381,13 @@ Did you mean 'Ruby'?
3034
3381
  util_setup_validate
3035
3382
 
3036
3383
  Dir.chdir @tempdir do
3037
- @a1.platform = 'mswin32'
3384
+ @a1.platform = "mswin32"
3038
3385
  assert @a1.validate
3039
3386
 
3040
- @a1.platform = 'i586-linux'
3387
+ @a1.platform = "i586-linux"
3041
3388
  assert @a1.validate
3042
3389
 
3043
- @a1.platform = 'powerpc-darwin'
3390
+ @a1.platform = "powerpc-darwin"
3044
3391
  assert @a1.validate
3045
3392
  end
3046
3393
  end
@@ -3049,7 +3396,7 @@ Did you mean 'Ruby'?
3049
3396
  util_setup_validate
3050
3397
 
3051
3398
  @a1.rubygems_version = "3"
3052
- e = assert_raises Gem::InvalidSpecificationException do
3399
+ e = assert_raise Gem::InvalidSpecificationException do
3053
3400
  @a1.validate
3054
3401
  end
3055
3402
 
@@ -3061,15 +3408,15 @@ Did you mean 'Ruby'?
3061
3408
  util_setup_validate
3062
3409
 
3063
3410
  Dir.chdir @tempdir do
3064
- @a1.specification_version = '1.0'
3411
+ @a1.specification_version = "1.0"
3065
3412
 
3066
- e = assert_raises Gem::InvalidSpecificationException do
3413
+ e = assert_raise Gem::InvalidSpecificationException do
3067
3414
  use_ui @ui do
3068
3415
  @a1.validate
3069
3416
  end
3070
3417
  end
3071
3418
 
3072
- err = 'specification_version must be a Fixnum (did you mean version?)'
3419
+ err = "specification_version must be an Integer (did you mean version?)"
3073
3420
  assert_equal err, e.message
3074
3421
  end
3075
3422
  end
@@ -3078,29 +3425,29 @@ Did you mean 'Ruby'?
3078
3425
  util_setup_validate
3079
3426
 
3080
3427
  Dir.chdir @tempdir do
3081
- @a1.summary = ''
3428
+ @a1.summary = ""
3082
3429
 
3083
3430
  use_ui @ui do
3084
3431
  @a1.validate
3085
3432
  end
3086
3433
 
3087
- assert_match "#{w}: no summary specified\n", @ui.error, 'error'
3434
+ assert_match "#{w}: no summary specified\n", @ui.error, "error"
3088
3435
 
3089
3436
  @a1.summary = "#{f} (describe your package)"
3090
3437
 
3091
- e = assert_raises Gem::InvalidSpecificationException do
3438
+ e = assert_raise Gem::InvalidSpecificationException do
3092
3439
  @a1.validate
3093
3440
  end
3094
3441
 
3095
- assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message
3442
+ assert_equal %("#{f}" or "#{t}" is not a summary), e.message
3096
3443
 
3097
3444
  @a1.summary = "#{t} (describe your package)"
3098
3445
 
3099
- e = assert_raises Gem::InvalidSpecificationException do
3446
+ e = assert_raise Gem::InvalidSpecificationException do
3100
3447
  @a1.validate
3101
3448
  end
3102
3449
 
3103
- assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message
3450
+ assert_equal %("#{f}" or "#{t}" is not a summary), e.message
3104
3451
  end
3105
3452
  end
3106
3453
 
@@ -3112,11 +3459,11 @@ Did you mean 'Ruby'?
3112
3459
  @a1.validate
3113
3460
  end
3114
3461
 
3115
- assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error
3462
+ assert_match "See https://guides.rubygems.org/specification-reference/ for help", @ui.error
3116
3463
  end
3117
3464
 
3118
3465
  def test_version
3119
- assert_equal Gem::Version.new('1'), @a1.version
3466
+ assert_equal Gem::Version.new("1"), @a1.version
3120
3467
  end
3121
3468
 
3122
3469
  def test_version_change_reset_full_name
@@ -3136,7 +3483,7 @@ Did you mean 'Ruby'?
3136
3483
  end
3137
3484
 
3138
3485
  def test__load_fixes_Date_objects
3139
- spec = new_spec "a", 1
3486
+ spec = util_spec "a", 1
3140
3487
  spec.instance_variable_set :@date, Date.today
3141
3488
 
3142
3489
  spec = Marshal.load Marshal.dump(spec)
@@ -3149,10 +3496,10 @@ Did you mean 'Ruby'?
3149
3496
  specfile.write "raise 'boom'"
3150
3497
  specfile.close
3151
3498
  begin
3152
- capture_io do
3499
+ capture_output do
3153
3500
  Gem::Specification.load(specfile.path)
3154
3501
  end
3155
- rescue => e
3502
+ rescue StandardError => e
3156
3503
  name_rexp = Regexp.new(Regexp.escape(specfile.path))
3157
3504
  assert e.backtrace.grep(name_rexp).any?
3158
3505
  end
@@ -3160,45 +3507,30 @@ Did you mean 'Ruby'?
3160
3507
  specfile.delete
3161
3508
  end
3162
3509
 
3163
- ##
3164
- # KEEP p-1-x86-darwin-8
3165
- # KEEP p-1
3166
- # KEEP c-1.2
3167
- # KEEP a_evil-9
3168
- # a-1
3169
- # a-1-x86-my_platform-1
3170
- # KEEP a-2
3171
- # a-2-x86-other_platform-1
3172
- # KEEP a-2-x86-my_platform-1
3173
- # a-3.a
3174
- # KEEP a-3-x86-other_platform-1
3175
-
3176
3510
  def test_latest_specs
3177
3511
  spec_fetcher do |fetcher|
3178
- fetcher.spec 'a', 1 do |s|
3179
- s.platform = Gem::Platform.new 'x86-my_platform1'
3512
+ fetcher.spec "a", 1 do |s|
3513
+ s.platform = Gem::Platform.new "x86-my_platform1"
3180
3514
  end
3181
3515
 
3182
- fetcher.spec 'a', 2
3516
+ fetcher.spec "a", 2
3183
3517
 
3184
- fetcher.spec 'a', 2 do |s|
3185
- s.platform = Gem::Platform.new 'x86-my_platform1'
3518
+ fetcher.spec "a", 2 do |s|
3519
+ s.platform = Gem::Platform.new "x86-my_platform1"
3186
3520
  end
3187
3521
 
3188
- fetcher.spec 'a', 2 do |s|
3189
- s.platform = Gem::Platform.new 'x86-other_platform1'
3522
+ fetcher.spec "a", 2 do |s|
3523
+ s.platform = Gem::Platform.new "x86-other_platform1"
3190
3524
  end
3191
3525
 
3192
- fetcher.spec 'a', 3 do |s|
3193
- s.platform = Gem::Platform.new 'x86-other_platform1'
3526
+ fetcher.spec "a", 3 do |s|
3527
+ s.platform = Gem::Platform.new "x86-other_platform1"
3194
3528
  end
3195
3529
  end
3196
3530
 
3197
3531
  expected = %W[
3198
- a-2
3199
- a-2-x86-my_platform-1
3200
- a-3-x86-other_platform-1
3201
- ]
3532
+ a-3-x86-other_platform-1
3533
+ ]
3202
3534
 
3203
3535
  latest_specs = Gem::Specification.latest_specs.map(&:full_name).sort
3204
3536
 
@@ -3209,9 +3541,14 @@ Did you mean 'Ruby'?
3209
3541
  util_setup_validate
3210
3542
 
3211
3543
  Dir.chdir @tempdir do
3212
- @m1 = quick_gem 'm', '1' do |s|
3544
+ @m1 = quick_gem "m", "1" do |s|
3213
3545
  s.files = %w[lib/code.rb]
3214
- s.metadata = { 'one' => "two", 'two' => "three" }
3546
+ s.metadata = {
3547
+ "one" => "two",
3548
+ "home" => "three",
3549
+ "homepage_uri" => "https://example.com/user/repo",
3550
+ "funding_uri" => "https://example.com/donate",
3551
+ }
3215
3552
  end
3216
3553
 
3217
3554
  use_ui @ui do
@@ -3224,12 +3561,12 @@ Did you mean 'Ruby'?
3224
3561
  util_setup_validate
3225
3562
 
3226
3563
  Dir.chdir @tempdir do
3227
- @m2 = quick_gem 'm', '2' do |s|
3564
+ @m2 = quick_gem "m", "2" do |s|
3228
3565
  s.files = %w[lib/code.rb]
3229
3566
  s.metadata = { 1 => "fail" }
3230
3567
  end
3231
3568
 
3232
- e = assert_raises Gem::InvalidSpecificationException do
3569
+ e = assert_raise Gem::InvalidSpecificationException do
3233
3570
  @m2.validate
3234
3571
  end
3235
3572
 
@@ -3241,16 +3578,16 @@ Did you mean 'Ruby'?
3241
3578
  util_setup_validate
3242
3579
 
3243
3580
  Dir.chdir @tempdir do
3244
- @m2 = quick_gem 'm', '2' do |s|
3581
+ @m2 = quick_gem "m", "2" do |s|
3245
3582
  s.files = %w[lib/code.rb]
3246
3583
  s.metadata = { ("x" * 129) => "fail" }
3247
3584
  end
3248
3585
 
3249
- e = assert_raises Gem::InvalidSpecificationException do
3586
+ e = assert_raise Gem::InvalidSpecificationException do
3250
3587
  @m2.validate
3251
3588
  end
3252
3589
 
3253
- assert_equal "metadata key too large (129 > 128)", e.message
3590
+ assert_equal "metadata key is too large (129 > 128)", e.message
3254
3591
  end
3255
3592
  end
3256
3593
 
@@ -3258,16 +3595,16 @@ Did you mean 'Ruby'?
3258
3595
  util_setup_validate
3259
3596
 
3260
3597
  Dir.chdir @tempdir do
3261
- @m2 = quick_gem 'm', '2' do |s|
3598
+ @m2 = quick_gem "m", "2" do |s|
3262
3599
  s.files = %w[lib/code.rb]
3263
- s.metadata = { 'fail' => [] }
3600
+ s.metadata = { "fail" => [] }
3264
3601
  end
3265
3602
 
3266
- e = assert_raises Gem::InvalidSpecificationException do
3603
+ e = assert_raise Gem::InvalidSpecificationException do
3267
3604
  @m2.validate
3268
3605
  end
3269
3606
 
3270
- assert_equal "metadata values must be a String", e.message
3607
+ assert_equal "metadata['fail'] value must be a String", e.message
3271
3608
  end
3272
3609
  end
3273
3610
 
@@ -3275,33 +3612,55 @@ Did you mean 'Ruby'?
3275
3612
  util_setup_validate
3276
3613
 
3277
3614
  Dir.chdir @tempdir do
3278
- @m2 = quick_gem 'm', '2' do |s|
3615
+ @m2 = quick_gem "m", "2" do |s|
3279
3616
  s.files = %w[lib/code.rb]
3280
- s.metadata = { 'fail' => ("x" * 1025) }
3617
+ s.metadata = { "fail" => ("x" * 1025) }
3281
3618
  end
3282
3619
 
3283
- e = assert_raises Gem::InvalidSpecificationException do
3620
+ e = assert_raise Gem::InvalidSpecificationException do
3284
3621
  @m2.validate
3285
3622
  end
3286
3623
 
3287
- assert_equal "metadata value too large (1025 > 1024)", e.message
3624
+ assert_equal "metadata['fail'] value is too large (1025 > 1024)", e.message
3625
+ end
3626
+ end
3627
+
3628
+ def test_metadata_link_validation_fails
3629
+ util_setup_validate
3630
+
3631
+ Dir.chdir @tempdir do
3632
+ @m2 = quick_gem "m", "2" do |s|
3633
+ s.files = %w[lib/code.rb]
3634
+ s.metadata = { "homepage_uri" => "http:/example.com" }
3635
+ end
3636
+
3637
+ e = assert_raise Gem::InvalidSpecificationException do
3638
+ @m2.validate
3639
+ end
3640
+
3641
+ assert_equal "metadata['homepage_uri'] has invalid link: \"http:/example.com\"", e.message
3288
3642
  end
3289
3643
  end
3290
3644
 
3291
3645
  def test_metadata_specs
3646
+ @m1 = quick_gem "m", "1" do |s|
3647
+ s.files = %w[lib/code.rb]
3648
+ s.metadata = { "one" => "two", "two" => "three" }
3649
+ end
3650
+
3292
3651
  valid_ruby_spec = <<-EOF
3293
3652
  # -*- encoding: utf-8 -*-
3294
3653
  # stub: m 1 ruby lib
3295
3654
 
3296
3655
  Gem::Specification.new do |s|
3297
3656
  s.name = "m".freeze
3298
- s.version = "1"
3657
+ s.version = "1".freeze
3299
3658
 
3300
3659
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
3301
3660
  s.metadata = { "one" => "two", "two" => "three" } if s.respond_to? :metadata=
3302
3661
  s.require_paths = ["lib".freeze]
3303
3662
  s.authors = ["A User".freeze]
3304
- s.date = "#{Gem::Specification::TODAY.strftime("%Y-%m-%d")}"
3663
+ s.date = "#{@m1.date.strftime("%Y-%m-%d")}"
3305
3664
  s.description = "This is a test description".freeze
3306
3665
  s.email = "example@example.com".freeze
3307
3666
  s.files = ["lib/code.rb".freeze]
@@ -3311,15 +3670,11 @@ Gem::Specification.new do |s|
3311
3670
  end
3312
3671
  EOF
3313
3672
 
3314
- @m1 = quick_gem 'm', '1' do |s|
3315
- s.files = %w[lib/code.rb]
3316
- s.metadata = { 'one' => "two", 'two' => "three" }
3317
- end
3318
-
3319
3673
  assert_equal @m1.to_ruby, valid_ruby_spec
3320
3674
  end
3321
3675
 
3322
3676
  def test_missing_extensions_eh
3677
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
3323
3678
  ext_spec
3324
3679
 
3325
3680
  assert @ext.missing_extensions?
@@ -3327,9 +3682,9 @@ end
3327
3682
  extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
3328
3683
  FileUtils.mkdir_p File.dirname extconf_rb
3329
3684
 
3330
- open extconf_rb, 'w' do |f|
3685
+ File.open extconf_rb, "w" do |f|
3331
3686
  f.write <<-'RUBY'
3332
- open 'Makefile', 'w' do |f|
3687
+ File.open 'Makefile', 'w' do |f|
3333
3688
  f.puts "clean:\n\techo clean"
3334
3689
  f.puts "default:\n\techo built"
3335
3690
  f.puts "install:\n\techo installed"
@@ -3343,26 +3698,39 @@ end
3343
3698
  end
3344
3699
 
3345
3700
  def test_missing_extensions_eh_default_gem
3346
- spec = new_default_spec 'default', 1
3347
- spec.extensions << 'extconf.rb'
3701
+ spec = new_default_spec "default", 1
3702
+ spec.extensions << "extconf.rb"
3348
3703
 
3349
3704
  refute spec.missing_extensions?
3350
3705
  end
3351
3706
 
3352
- def test_missing_extensions_eh_legacy
3353
- ext_spec
3707
+ def test_missing_extensions_eh_none
3708
+ refute @a1.missing_extensions?
3709
+ end
3354
3710
 
3355
- @ext.installed_by_version = v '2.2.0.preview.2'
3711
+ def test_find_all_by_full_name
3712
+ pl = Gem::Platform.new "i386-linux"
3356
3713
 
3357
- assert @ext.missing_extensions?
3714
+ a1 = util_spec "a", "1"
3715
+ a1_pre = util_spec "a", "1.0.0.pre.1"
3716
+ a_1_platform = util_spec("a", "1") {|s| s.platform = pl }
3717
+ a_b_1 = util_spec "a-b", "1"
3718
+ a_b_1_platform = util_spec("a-b", "1") {|s| s.platform = pl }
3358
3719
 
3359
- @ext.installed_by_version = v '2.2.0.preview.1'
3720
+ a_b_1_1 = util_spec "a-b-1", "1"
3721
+ a_b_1_1_platform = util_spec("a-b-1", "1") {|s| s.platform = pl }
3360
3722
 
3361
- refute @ext.missing_extensions?
3362
- end
3723
+ install_specs(a1, a1_pre, a_1_platform, a_b_1, a_b_1_platform,
3724
+ a_b_1_1, a_b_1_1_platform)
3363
3725
 
3364
- def test_missing_extensions_eh_none
3365
- refute @a1.missing_extensions?
3726
+ assert_equal [a1], Gem::Specification.find_all_by_full_name("a-1")
3727
+ assert_equal [a1_pre], Gem::Specification.find_all_by_full_name("a-1.0.0.pre.1")
3728
+ assert_equal [a_1_platform], Gem::Specification.find_all_by_full_name("a-1-x86-linux")
3729
+ assert_equal [a_b_1_1], Gem::Specification.find_all_by_full_name("a-b-1-1")
3730
+ assert_equal [a_b_1_1_platform], Gem::Specification.find_all_by_full_name("a-b-1-1-x86-linux")
3731
+
3732
+ assert_equal [], Gem::Specification.find_all_by_full_name("monkeys")
3733
+ assert_equal [], Gem::Specification.find_all_by_full_name("a-1-foo")
3366
3734
  end
3367
3735
 
3368
3736
  def test_find_by_name
@@ -3373,11 +3741,18 @@ end
3373
3741
  assert Gem::Specification.find_by_name "a", "1"
3374
3742
  assert Gem::Specification.find_by_name "a", ">1"
3375
3743
 
3376
- assert_raises Gem::LoadError do
3744
+ assert_raise Gem::MissingSpecError do
3377
3745
  Gem::Specification.find_by_name "monkeys"
3378
3746
  end
3379
3747
  end
3380
3748
 
3749
+ def test_find_by_name_with_only_prereleases
3750
+ q = util_spec "q", "2.a"
3751
+ install_specs q
3752
+
3753
+ assert Gem::Specification.find_by_name "q"
3754
+ end
3755
+
3381
3756
  def test_find_by_name_prerelease
3382
3757
  b = util_spec "b", "2.a"
3383
3758
 
@@ -3385,33 +3760,52 @@ end
3385
3760
 
3386
3761
  install_specs b
3387
3762
 
3763
+ Gem::Specification.reset
3764
+
3388
3765
  assert Gem::Specification.find_by_name "b"
3389
3766
 
3390
- assert_raises Gem::LoadError do
3767
+ assert_raise Gem::MissingSpecVersionError do
3391
3768
  Gem::Specification.find_by_name "b", "1"
3392
3769
  end
3393
3770
 
3394
3771
  assert Gem::Specification.find_by_name "b", ">1"
3395
3772
  end
3396
3773
 
3774
+ def test_find_by_full_name
3775
+ pl = Gem::Platform.new "x86_64-linux"
3776
+
3777
+ a = util_spec "a", "1"
3778
+ install_specs a
3779
+
3780
+ a_pl = util_spec("a", "1") {|s| s.platform = pl }
3781
+ install_specs a_pl
3782
+
3783
+ assert_equal a, Gem::Specification.find_by_full_name("a-1")
3784
+ assert_equal a_pl, Gem::Specification.find_by_full_name("a-1-x86_64-linux")
3785
+
3786
+ assert_nil Gem::Specification.find_by_full_name("a-2")
3787
+ assert_nil Gem::Specification.find_by_full_name("b-1")
3788
+ assert_nil Gem::Specification.find_by_full_name("a-1-arm64-linux")
3789
+ end
3790
+
3397
3791
  def test_find_by_path
3398
- a = new_spec "foo", "1", nil, "lib/foo.rb"
3792
+ a = util_spec "foo", "1", nil, "lib/foo.rb"
3399
3793
 
3400
3794
  install_specs a
3401
3795
 
3402
- assert_equal a, Gem::Specification.find_by_path('foo')
3796
+ assert_equal a, Gem::Specification.find_by_path("foo")
3403
3797
  a.activate
3404
- assert_equal a, Gem::Specification.find_by_path('foo')
3798
+ assert_equal a, Gem::Specification.find_by_path("foo")
3405
3799
  end
3406
3800
 
3407
3801
  def test_find_inactive_by_path
3408
- a = new_spec "foo", "1", nil, "lib/foo.rb"
3802
+ a = util_spec "foo", "1", nil, "lib/foo.rb"
3409
3803
 
3410
3804
  install_specs a
3411
3805
 
3412
- assert_equal a, Gem::Specification.find_inactive_by_path('foo')
3806
+ assert_equal a, Gem::Specification.find_inactive_by_path("foo")
3413
3807
  a.activate
3414
- assert_equal nil, Gem::Specification.find_inactive_by_path('foo')
3808
+ assert_nil Gem::Specification.find_inactive_by_path("foo")
3415
3809
  end
3416
3810
 
3417
3811
  def test_load_default_gem
@@ -3420,7 +3814,7 @@ end
3420
3814
 
3421
3815
  default_gem_spec = new_default_spec("default", "2.0.0.0",
3422
3816
  nil, "default/gem.rb")
3423
- spec_path = File.join(@default_spec_dir, default_gem_spec.spec_name)
3817
+ spec_path = File.join(@gemhome, "specifications", "default", default_gem_spec.spec_name)
3424
3818
  write_file(spec_path) do |file|
3425
3819
  file.print(default_gem_spec.to_ruby)
3426
3820
  end
@@ -3428,18 +3822,6 @@ end
3428
3822
  assert_equal ["default-2.0.0.0"], Gem::Specification.map(&:full_name)
3429
3823
  end
3430
3824
 
3431
- def test_detect_bundled_gem_in_old_ruby
3432
- util_set_RUBY_VERSION '1.9.3', 551
3433
-
3434
- spec = new_spec 'bigdecimal', '1.1.0' do |s|
3435
- s.summary = "This bigdecimal is bundled with Ruby"
3436
- end
3437
-
3438
- assert spec.bundled_gem_in_old_ruby?
3439
- ensure
3440
- util_restore_RUBY_VERSION
3441
- end
3442
-
3443
3825
  def util_setup_deps
3444
3826
  @gem = util_spec "awesome", "1.0" do |awesome|
3445
3827
  awesome.add_runtime_dependency "bonobo", []
@@ -3457,63 +3839,18 @@ end
3457
3839
  FileUtils.mkdir_p "test"
3458
3840
  FileUtils.mkdir_p "bin"
3459
3841
 
3460
- FileUtils.touch File.join("ext", "a", "extconf.rb")
3461
- FileUtils.touch File.join("lib", "code.rb")
3462
- FileUtils.touch File.join("test", "suite.rb")
3842
+ begin
3843
+ umask_orig = File.umask(2)
3844
+ FileUtils.touch File.join("ext", "a", "extconf.rb")
3845
+ FileUtils.touch File.join("lib", "code.rb")
3846
+ FileUtils.touch File.join("test", "suite.rb")
3463
3847
 
3464
- File.open "bin/exec", "w", 0755 do |fp|
3465
- fp.puts "#!#{Gem.ruby}"
3848
+ File.open "bin/exec", "w", 0o755 do |fp|
3849
+ fp.puts "#!#{Gem.ruby}"
3850
+ end
3851
+ ensure
3852
+ File.umask(umask_orig)
3466
3853
  end
3467
3854
  end
3468
3855
  end
3469
-
3470
- def with_syck
3471
- begin
3472
- verbose, $VERBOSE = $VERBOSE, nil
3473
- require "yaml"
3474
- old_engine = YAML::ENGINE.yamler
3475
- YAML::ENGINE.yamler = 'syck'
3476
- load 'rubygems/syck_hack.rb'
3477
- rescue NameError
3478
- # probably on 1.8, ignore
3479
- ensure
3480
- $VERBOSE = verbose
3481
- end
3482
-
3483
- yield
3484
- ensure
3485
- begin
3486
- YAML::ENGINE.yamler = old_engine
3487
- load 'rubygems/syck_hack.rb'
3488
- rescue NameError
3489
- # ignore
3490
- end
3491
- end
3492
-
3493
- def with_psych
3494
- begin
3495
- require "yaml"
3496
- old_engine = YAML::ENGINE.yamler
3497
- YAML::ENGINE.yamler = 'psych'
3498
- load 'rubygems/syck_hack.rb'
3499
- rescue NameError
3500
- # probably on 1.8, ignore
3501
- end
3502
-
3503
- yield
3504
- ensure
3505
- begin
3506
- YAML::ENGINE.yamler = old_engine
3507
- load 'rubygems/syck_hack.rb'
3508
- rescue NameError
3509
- # ignore
3510
- end
3511
- end
3512
-
3513
- def silence_warnings
3514
- old_verbose, $VERBOSE = $VERBOSE, false
3515
- yield
3516
- ensure
3517
- $VERBOSE = old_verbose
3518
- end
3519
3856
  end