rubygems-update 3.4.21 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (564) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -2
  3. data/Manifest.txt +39 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +74 -0
  6. data/bundler/README.md +1 -2
  7. data/bundler/bundler.gemspec +4 -2
  8. data/bundler/exe/bundle +1 -10
  9. data/bundler/lib/bundler/build_metadata.rb +3 -3
  10. data/bundler/lib/bundler/capistrano.rb +1 -1
  11. data/bundler/lib/bundler/checksum.rb +245 -0
  12. data/bundler/lib/bundler/ci_detector.rb +75 -0
  13. data/bundler/lib/bundler/cli/add.rb +3 -3
  14. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  15. data/bundler/lib/bundler/cli/cache.rb +1 -1
  16. data/bundler/lib/bundler/cli/check.rb +1 -1
  17. data/bundler/lib/bundler/cli/common.rb +9 -1
  18. data/bundler/lib/bundler/cli/config.rb +8 -7
  19. data/bundler/lib/bundler/cli/console.rb +3 -2
  20. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  21. data/bundler/lib/bundler/cli/exec.rb +1 -1
  22. data/bundler/lib/bundler/cli/gem.rb +31 -23
  23. data/bundler/lib/bundler/cli/info.rb +2 -13
  24. data/bundler/lib/bundler/cli/install.rb +5 -4
  25. data/bundler/lib/bundler/cli/issue.rb +1 -1
  26. data/bundler/lib/bundler/cli/lock.rb +4 -4
  27. data/bundler/lib/bundler/cli/open.rb +1 -1
  28. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  29. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  30. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  31. data/bundler/lib/bundler/cli/show.rb +2 -2
  32. data/bundler/lib/bundler/cli/update.rb +5 -5
  33. data/bundler/lib/bundler/cli.rb +215 -263
  34. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  35. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  36. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  37. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  38. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  39. data/bundler/lib/bundler/constants.rb +1 -1
  40. data/bundler/lib/bundler/current_ruby.rb +5 -21
  41. data/bundler/lib/bundler/definition.rb +43 -16
  42. data/bundler/lib/bundler/dependency.rb +16 -12
  43. data/bundler/lib/bundler/digest.rb +2 -2
  44. data/bundler/lib/bundler/dsl.rb +43 -25
  45. data/bundler/lib/bundler/endpoint_specification.rb +6 -2
  46. data/bundler/lib/bundler/env.rb +1 -3
  47. data/bundler/lib/bundler/errors.rb +58 -0
  48. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  50. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  51. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/fetcher.rb +28 -25
  54. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  55. data/bundler/lib/bundler/gem_helper.rb +1 -1
  56. data/bundler/lib/bundler/gem_helpers.rb +12 -2
  57. data/bundler/lib/bundler/graph.rb +9 -9
  58. data/bundler/lib/bundler/index.rb +1 -2
  59. data/bundler/lib/bundler/injector.rb +1 -1
  60. data/bundler/lib/bundler/inline.rb +3 -3
  61. data/bundler/lib/bundler/installer/gem_installer.rb +10 -10
  62. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  63. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  64. data/bundler/lib/bundler/installer.rb +9 -9
  65. data/bundler/lib/bundler/lazy_specification.rb +28 -17
  66. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  67. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  68. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  69. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  70. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  71. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  72. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  73. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  74. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  75. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  77. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  78. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  79. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  80. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  81. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  82. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  83. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  84. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  85. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  86. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  87. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  88. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  89. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  90. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  91. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  92. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  93. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  94. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  95. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  96. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  97. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  98. data/bundler/lib/bundler/man/bundle.1 +5 -44
  99. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  100. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  101. data/bundler/lib/bundler/match_metadata.rb +4 -0
  102. data/bundler/lib/bundler/match_platform.rb +1 -1
  103. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  104. data/bundler/lib/bundler/plugin/index.rb +8 -0
  105. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  106. data/bundler/lib/bundler/plugin.rb +12 -5
  107. data/bundler/lib/bundler/resolver/base.rb +1 -1
  108. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  109. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  110. data/bundler/lib/bundler/resolver.rb +16 -16
  111. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  112. data/bundler/lib/bundler/ruby_version.rb +1 -1
  113. data/bundler/lib/bundler/rubygems_ext.rb +27 -54
  114. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
  115. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  116. data/bundler/lib/bundler/runtime.rb +2 -2
  117. data/bundler/lib/bundler/self_manager.rb +23 -7
  118. data/bundler/lib/bundler/settings.rb +27 -7
  119. data/bundler/lib/bundler/setup.rb +4 -1
  120. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -14
  122. data/bundler/lib/bundler/source/git.rb +4 -3
  123. data/bundler/lib/bundler/source/metadata.rb +16 -16
  124. data/bundler/lib/bundler/source/path.rb +7 -6
  125. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  126. data/bundler/lib/bundler/source.rb +2 -0
  127. data/bundler/lib/bundler/spec_set.rb +43 -12
  128. data/bundler/lib/bundler/stub_specification.rb +1 -0
  129. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  132. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  133. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  135. data/bundler/lib/bundler/ui/shell.rb +2 -2
  136. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  137. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  138. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +36 -36
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  149. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  150. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  151. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  152. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  153. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  154. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  155. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  156. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  161. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  162. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
  163. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
  164. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  165. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
  166. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  167. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  168. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  169. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  170. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  171. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  172. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  173. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  174. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  175. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  176. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  177. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  178. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  179. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  180. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  181. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  182. data/bundler/lib/bundler/version.rb +1 -1
  183. data/bundler/lib/bundler/vlad.rb +1 -1
  184. data/bundler/lib/bundler/yaml_serializer.rb +9 -4
  185. data/bundler/lib/bundler.rb +38 -35
  186. data/lib/rubygems/available_set.rb +4 -4
  187. data/lib/rubygems/basic_specification.rb +35 -37
  188. data/lib/rubygems/bundler_version_finder.rb +4 -4
  189. data/lib/rubygems/ci_detector.rb +75 -0
  190. data/lib/rubygems/command.rb +15 -17
  191. data/lib/rubygems/command_manager.rb +5 -4
  192. data/lib/rubygems/commands/build_command.rb +2 -2
  193. data/lib/rubygems/commands/cert_command.rb +2 -3
  194. data/lib/rubygems/commands/check_command.rb +4 -4
  195. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  196. data/lib/rubygems/commands/contents_command.rb +5 -5
  197. data/lib/rubygems/commands/dependency_command.rb +4 -5
  198. data/lib/rubygems/commands/environment_command.rb +3 -5
  199. data/lib/rubygems/commands/exec_command.rb +1 -1
  200. data/lib/rubygems/commands/fetch_command.rb +2 -2
  201. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  202. data/lib/rubygems/commands/help_command.rb +4 -4
  203. data/lib/rubygems/commands/info_command.rb +2 -2
  204. data/lib/rubygems/commands/install_command.rb +8 -16
  205. data/lib/rubygems/commands/list_command.rb +2 -2
  206. data/lib/rubygems/commands/lock_command.rb +1 -1
  207. data/lib/rubygems/commands/open_command.rb +1 -1
  208. data/lib/rubygems/commands/owner_command.rb +1 -1
  209. data/lib/rubygems/commands/pristine_command.rb +13 -15
  210. data/lib/rubygems/commands/push_command.rb +2 -2
  211. data/lib/rubygems/commands/query_command.rb +4 -5
  212. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  213. data/lib/rubygems/commands/search_command.rb +2 -2
  214. data/lib/rubygems/commands/setup_command.rb +33 -36
  215. data/lib/rubygems/commands/sources_command.rb +12 -12
  216. data/lib/rubygems/commands/specification_command.rb +10 -10
  217. data/lib/rubygems/commands/stale_command.rb +1 -1
  218. data/lib/rubygems/commands/uninstall_command.rb +13 -14
  219. data/lib/rubygems/commands/unpack_command.rb +7 -7
  220. data/lib/rubygems/commands/update_command.rb +11 -13
  221. data/lib/rubygems/commands/which_command.rb +1 -1
  222. data/lib/rubygems/commands/yank_command.rb +1 -1
  223. data/lib/rubygems/compatibility.rb +5 -6
  224. data/lib/rubygems/config_file.rb +7 -7
  225. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  226. data/lib/rubygems/core_ext/kernel_require.rb +20 -49
  227. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  228. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  229. data/lib/rubygems/defaults.rb +15 -3
  230. data/lib/rubygems/dependency.rb +12 -14
  231. data/lib/rubygems/dependency_installer.rb +30 -31
  232. data/lib/rubygems/dependency_list.rb +1 -1
  233. data/lib/rubygems/deprecate.rb +16 -15
  234. data/lib/rubygems/doctor.rb +6 -6
  235. data/lib/rubygems/errors.rb +2 -6
  236. data/lib/rubygems/exceptions.rb +2 -1
  237. data/lib/rubygems/ext/builder.rb +15 -10
  238. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  239. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  240. data/lib/rubygems/ext/rake_builder.rb +1 -1
  241. data/lib/rubygems/gem_runner.rb +4 -4
  242. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  243. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  244. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  245. data/lib/rubygems/install_update_options.rb +18 -19
  246. data/lib/rubygems/installer.rb +66 -45
  247. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  248. data/lib/rubygems/local_remote_options.rb +8 -11
  249. data/lib/rubygems/name_tuple.rb +7 -9
  250. data/lib/rubygems/net/http.rb +3 -0
  251. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  252. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  253. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  254. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  255. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  256. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  257. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  258. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  259. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  260. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  261. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  262. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  263. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  264. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  265. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  266. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  267. data/lib/rubygems/package/digest_io.rb +1 -1
  268. data/lib/rubygems/package/old.rb +2 -2
  269. data/lib/rubygems/package/tar_header.rb +45 -39
  270. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  271. data/lib/rubygems/package/tar_reader.rb +14 -5
  272. data/lib/rubygems/package/tar_writer.rb +20 -18
  273. data/lib/rubygems/package.rb +28 -27
  274. data/lib/rubygems/package_task.rb +2 -2
  275. data/lib/rubygems/path_support.rb +10 -11
  276. data/lib/rubygems/platform.rb +65 -48
  277. data/lib/rubygems/query_utils.rb +7 -9
  278. data/lib/rubygems/remote_fetcher.rb +17 -17
  279. data/lib/rubygems/request/connection_pools.rb +3 -3
  280. data/lib/rubygems/request.rb +20 -17
  281. data/lib/rubygems/request_set/gem_dependency_api.rb +120 -123
  282. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  283. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  284. data/lib/rubygems/request_set/lockfile.rb +6 -11
  285. data/lib/rubygems/request_set.rb +5 -5
  286. data/lib/rubygems/requirement.rb +7 -7
  287. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  288. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  289. data/lib/rubygems/resolver/activation_request.rb +1 -3
  290. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  291. data/lib/rubygems/resolver/best_set.rb +1 -1
  292. data/lib/rubygems/resolver/composed_set.rb +1 -1
  293. data/lib/rubygems/resolver/conflict.rb +4 -12
  294. data/lib/rubygems/resolver/index_set.rb +4 -4
  295. data/lib/rubygems/resolver/index_specification.rb +2 -2
  296. data/lib/rubygems/resolver/installer_set.rb +5 -6
  297. data/lib/rubygems/resolver/lock_set.rb +1 -1
  298. data/lib/rubygems/resolver.rb +6 -13
  299. data/lib/rubygems/s3_uri_signer.rb +6 -6
  300. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  301. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  302. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  303. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  304. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  305. data/lib/rubygems/safe_marshal.rb +74 -0
  306. data/lib/rubygems/safe_yaml.rb +5 -28
  307. data/lib/rubygems/security/policies.rb +36 -38
  308. data/lib/rubygems/security/policy.rb +7 -11
  309. data/lib/rubygems/security/signer.rb +1 -1
  310. data/lib/rubygems/security/trust_dir.rb +4 -4
  311. data/lib/rubygems/security.rb +8 -22
  312. data/lib/rubygems/source/git.rb +1 -3
  313. data/lib/rubygems/source/installed.rb +0 -2
  314. data/lib/rubygems/source/local.rb +7 -9
  315. data/lib/rubygems/source/lock.rb +1 -3
  316. data/lib/rubygems/source/specific_file.rb +0 -1
  317. data/lib/rubygems/source/vendor.rb +0 -2
  318. data/lib/rubygems/source.rb +12 -12
  319. data/lib/rubygems/source_list.rb +5 -5
  320. data/lib/rubygems/spec_fetcher.rb +31 -31
  321. data/lib/rubygems/specification.rb +145 -150
  322. data/lib/rubygems/specification_policy.rb +61 -31
  323. data/lib/rubygems/stub_specification.rb +4 -5
  324. data/lib/rubygems/text.rb +1 -2
  325. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  326. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  327. data/lib/rubygems/timeout.rb +3 -0
  328. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  329. data/lib/rubygems/uninstaller.rb +9 -11
  330. data/lib/rubygems/update_suggestion.rb +5 -18
  331. data/lib/rubygems/uri_formatter.rb +1 -1
  332. data/lib/rubygems/user_interaction.rb +17 -23
  333. data/lib/rubygems/util/licenses.rb +113 -35
  334. data/lib/rubygems/util/list.rb +3 -1
  335. data/lib/rubygems/util.rb +2 -4
  336. data/lib/rubygems/validator.rb +6 -4
  337. data/lib/rubygems/version.rb +35 -29
  338. data/lib/rubygems/version_option.rb +2 -5
  339. data/lib/rubygems/yaml_serializer.rb +9 -4
  340. data/lib/rubygems.rb +42 -42
  341. data/rubygems-update.gemspec +4 -4
  342. data/setup.rb +2 -2
  343. metadata +43 -225
  344. data/lib/rubygems/indexer.rb +0 -428
  345. data/lib/rubygems/mock_gem_ui.rb +0 -86
  346. data/test/rubygems/alternate_cert.pem +0 -19
  347. data/test/rubygems/alternate_cert_32.pem +0 -19
  348. data/test/rubygems/alternate_key.pem +0 -27
  349. data/test/rubygems/bad_rake.rb +0 -3
  350. data/test/rubygems/bundler_test_gem.rb +0 -424
  351. data/test/rubygems/ca_cert.pem +0 -77
  352. data/test/rubygems/child_cert.pem +0 -19
  353. data/test/rubygems/child_cert_32.pem +0 -19
  354. data/test/rubygems/child_key.pem +0 -27
  355. data/test/rubygems/client.pem +0 -107
  356. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  357. data/test/rubygems/data/gem-private_key.pem +0 -27
  358. data/test/rubygems/data/gem-public_cert.pem +0 -20
  359. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  360. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  361. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  362. data/test/rubygems/encrypted_private_key.pem +0 -30
  363. data/test/rubygems/expired_cert.pem +0 -19
  364. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  365. data/test/rubygems/foo/discover.rb +0 -1
  366. data/test/rubygems/future_cert.pem +0 -19
  367. data/test/rubygems/future_cert_32.pem +0 -19
  368. data/test/rubygems/good_rake.rb +0 -3
  369. data/test/rubygems/grandchild_cert.pem +0 -19
  370. data/test/rubygems/grandchild_cert_32.pem +0 -19
  371. data/test/rubygems/grandchild_key.pem +0 -27
  372. data/test/rubygems/helper.rb +0 -1649
  373. data/test/rubygems/installer_test_case.rb +0 -248
  374. data/test/rubygems/invalid_client.pem +0 -49
  375. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  376. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  377. data/test/rubygems/invalid_key.pem +0 -27
  378. data/test/rubygems/invalid_signer_cert.pem +0 -19
  379. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  380. data/test/rubygems/invalidchild_cert.pem +0 -19
  381. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  382. data/test/rubygems/invalidchild_key.pem +0 -27
  383. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  384. data/test/rubygems/package/tar_test_case.rb +0 -175
  385. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  386. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  387. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  388. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  389. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  390. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  391. data/test/rubygems/private3072_key.pem +0 -40
  392. data/test/rubygems/private_ec_key.pem +0 -9
  393. data/test/rubygems/private_key.pem +0 -27
  394. data/test/rubygems/public3072_cert.pem +0 -25
  395. data/test/rubygems/public_cert.pem +0 -20
  396. data/test/rubygems/public_cert_32.pem +0 -19
  397. data/test/rubygems/public_key.pem +0 -9
  398. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  399. data/test/rubygems/rubygems_plugin.rb +0 -24
  400. data/test/rubygems/sff/discover.rb +0 -1
  401. data/test/rubygems/simple_gem.rb +0 -68
  402. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  403. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  404. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  405. data/test/rubygems/ssl_cert.pem +0 -80
  406. data/test/rubygems/ssl_key.pem +0 -27
  407. data/test/rubygems/test_bundled_ca.rb +0 -61
  408. data/test/rubygems/test_config.rb +0 -28
  409. data/test/rubygems/test_deprecate.rb +0 -158
  410. data/test/rubygems/test_exit.rb +0 -17
  411. data/test/rubygems/test_gem.rb +0 -1799
  412. data/test/rubygems/test_gem_available_set.rb +0 -130
  413. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  414. data/test/rubygems/test_gem_command.rb +0 -403
  415. data/test/rubygems/test_gem_command_manager.rb +0 -400
  416. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  417. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  418. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  419. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  420. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  421. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  422. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  423. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  424. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  425. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  426. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  427. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  428. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  429. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  430. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  431. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  432. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  433. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  434. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  435. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  436. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  437. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  438. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  439. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  440. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  441. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  442. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  443. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  444. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  445. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  446. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -522
  447. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  448. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  449. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  450. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  451. data/test/rubygems/test_gem_config_file.rb +0 -551
  452. data/test/rubygems/test_gem_dependency.rb +0 -398
  453. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  454. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  455. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  456. data/test/rubygems/test_gem_doctor.rb +0 -195
  457. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  458. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  459. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  460. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  461. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  462. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  463. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  464. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  465. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  466. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  467. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  468. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  469. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  470. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  471. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  472. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  473. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  474. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  475. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  476. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  477. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  478. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  479. data/test/rubygems/test_gem_indexer.rb +0 -381
  480. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  481. data/test/rubygems/test_gem_installer.rb +0 -2512
  482. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  483. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  484. data/test/rubygems/test_gem_package.rb +0 -1306
  485. data/test/rubygems/test_gem_package_old.rb +0 -91
  486. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  487. data/test/rubygems/test_gem_package_tar_reader.rb +0 -135
  488. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  489. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  490. data/test/rubygems/test_gem_package_task.rb +0 -118
  491. data/test/rubygems/test_gem_path_support.rb +0 -139
  492. data/test/rubygems/test_gem_platform.rb +0 -497
  493. data/test/rubygems/test_gem_rdoc.rb +0 -137
  494. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  495. data/test/rubygems/test_gem_request.rb +0 -547
  496. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  497. data/test/rubygems/test_gem_request_set.rb +0 -672
  498. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  499. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  500. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  501. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  502. data/test/rubygems/test_gem_requirement.rb +0 -505
  503. data/test/rubygems/test_gem_resolver.rb +0 -859
  504. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  505. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  506. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  507. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  508. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  509. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  510. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  511. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  512. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  513. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  514. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  515. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  516. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  517. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  518. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  519. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  520. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  521. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  522. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  523. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  524. data/test/rubygems/test_gem_security.rb +0 -341
  525. data/test/rubygems/test_gem_security_policy.rb +0 -535
  526. data/test/rubygems/test_gem_security_signer.rb +0 -218
  527. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  528. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  529. data/test/rubygems/test_gem_source.rb +0 -254
  530. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  531. data/test/rubygems/test_gem_source_git.rb +0 -310
  532. data/test/rubygems/test_gem_source_installed.rb +0 -35
  533. data/test/rubygems/test_gem_source_list.rb +0 -119
  534. data/test/rubygems/test_gem_source_local.rb +0 -107
  535. data/test/rubygems/test_gem_source_lock.rb +0 -113
  536. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  537. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  538. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  539. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  540. data/test/rubygems/test_gem_specification.rb +0 -3856
  541. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  542. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  543. data/test/rubygems/test_gem_text.rb +0 -103
  544. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  545. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  546. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  547. data/test/rubygems/test_gem_uri.rb +0 -41
  548. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  549. data/test/rubygems/test_gem_util.rb +0 -91
  550. data/test/rubygems/test_gem_validator.rb +0 -42
  551. data/test/rubygems/test_gem_version.rb +0 -305
  552. data/test/rubygems/test_gem_version_option.rb +0 -165
  553. data/test/rubygems/test_kernel.rb +0 -124
  554. data/test/rubygems/test_project_sanity.rb +0 -49
  555. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  556. data/test/rubygems/test_require.rb +0 -732
  557. data/test/rubygems/test_rubygems.rb +0 -76
  558. data/test/rubygems/test_webauthn_listener.rb +0 -143
  559. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  560. data/test/rubygems/test_webauthn_poller.rb +0 -124
  561. data/test/rubygems/utilities.rb +0 -436
  562. data/test/rubygems/wrong_key_cert.pem +0 -19
  563. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  564. data/test/test_changelog_generator.rb +0 -17
@@ -1,255 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/user_interaction"
5
- require "timeout"
6
-
7
- class TestGemStreamUI < Gem::TestCase
8
- # increase timeout with RJIT for --jit-wait testing
9
- rjit_enabled = defined?(RubyVM::RJIT) && RubyVM::RJIT.enabled?
10
- SHORT_TIMEOUT = (RUBY_ENGINE == "ruby" && !rjit_enabled) ? 0.1 : 1.0
11
-
12
- module IsTty
13
- attr_accessor :tty
14
-
15
- def tty?
16
- @tty = true unless defined? @tty
17
- return @tty
18
- end
19
-
20
- alias_method :isatty, :tty?
21
-
22
- def noecho
23
- yield self
24
- end
25
- end
26
-
27
- def setup
28
- super
29
-
30
- @cfg = Gem.configuration
31
-
32
- @in = StringIO.new
33
- @out = StringIO.new
34
- @err = StringIO.new
35
-
36
- @in.extend IsTty
37
- @out.extend IsTty
38
-
39
- @sui = Gem::StreamUI.new @in, @out, @err, true
40
- end
41
-
42
- def test_ask
43
- Timeout.timeout(5) do
44
- expected_answer = "Arthur, King of the Britons"
45
- @in.string = "#{expected_answer}\n"
46
- actual_answer = @sui.ask("What is your name?")
47
- assert_equal expected_answer, actual_answer
48
- end
49
- end
50
-
51
- def test_ask_no_tty
52
- @in.tty = false
53
-
54
- Timeout.timeout(SHORT_TIMEOUT) do
55
- answer = @sui.ask("what is your favorite color?")
56
- assert_nil answer
57
- end
58
- end
59
-
60
- def test_ask_for_password
61
- Timeout.timeout(5) do
62
- expected_answer = "Arthur, King of the Britons"
63
- @in.string = "#{expected_answer}\n"
64
- actual_answer = @sui.ask_for_password("What is your name?")
65
- assert_equal expected_answer, actual_answer
66
- end
67
- end
68
-
69
- def test_ask_for_password_no_tty
70
- @in.tty = false
71
-
72
- Timeout.timeout(SHORT_TIMEOUT) do
73
- answer = @sui.ask_for_password("what is the airspeed velocity of an unladen swallow?")
74
- assert_nil answer
75
- end
76
- end
77
-
78
- def test_ask_yes_no_no_tty_with_default
79
- @in.tty = false
80
-
81
- Timeout.timeout(SHORT_TIMEOUT) do
82
- answer = @sui.ask_yes_no("do coconuts migrate?", false)
83
- assert_equal false, answer
84
-
85
- answer = @sui.ask_yes_no("do coconuts migrate?", true)
86
- assert_equal true, answer
87
- end
88
- end
89
-
90
- def test_ask_yes_no_no_tty_without_default
91
- @in.tty = false
92
-
93
- Timeout.timeout(SHORT_TIMEOUT) do
94
- assert_raise(Gem::OperationNotSupportedError) do
95
- @sui.ask_yes_no("do coconuts migrate?")
96
- end
97
- end
98
- end
99
-
100
- def test_choose_from_list
101
- @in.puts "1"
102
- @in.rewind
103
-
104
- result = @sui.choose_from_list "which one?", %w[foo bar]
105
-
106
- assert_equal ["foo", 0], result
107
- assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
108
- end
109
-
110
- def test_choose_from_list_EOF
111
- result = @sui.choose_from_list "which one?", %w[foo bar]
112
-
113
- assert_equal [nil, nil], result
114
- assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
115
- end
116
-
117
- def test_choose_from_list_0
118
- @in.puts "0"
119
- @in.rewind
120
-
121
- result = @sui.choose_from_list "which one?", %w[foo bar]
122
-
123
- assert_equal [nil, nil], result
124
- assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
125
- end
126
-
127
- def test_choose_from_list_over
128
- @in.puts "3"
129
- @in.rewind
130
-
131
- result = @sui.choose_from_list "which one?", %w[foo bar]
132
-
133
- assert_equal [nil, nil], result
134
- assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
135
- end
136
-
137
- def test_choose_from_list_negative
138
- @in.puts "-1"
139
- @in.rewind
140
-
141
- result = @sui.choose_from_list "which one?", %w[foo bar]
142
-
143
- assert_equal [nil, nil], result
144
- assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
145
- end
146
-
147
- def test_progress_reporter_silent_nil
148
- @cfg.verbose = nil
149
- reporter = @sui.progress_reporter 10, "hi"
150
- assert_kind_of Gem::StreamUI::SilentProgressReporter, reporter
151
- end
152
-
153
- def test_progress_reporter_silent_false
154
- @cfg.verbose = false
155
- reporter = @sui.progress_reporter 10, "hi"
156
- assert_kind_of Gem::StreamUI::SilentProgressReporter, reporter
157
- assert_equal "", @out.string
158
- end
159
-
160
- def test_progress_reporter_simple
161
- @cfg.verbose = true
162
- reporter = @sui.progress_reporter 10, "hi"
163
- assert_kind_of Gem::StreamUI::SimpleProgressReporter, reporter
164
- assert_equal "hi\n", @out.string
165
- end
166
-
167
- def test_progress_reporter_verbose
168
- @cfg.verbose = 0
169
- reporter = @sui.progress_reporter 10, "hi"
170
- assert_kind_of Gem::StreamUI::VerboseProgressReporter, reporter
171
- assert_equal "hi\n", @out.string
172
- end
173
-
174
- def test_download_reporter_silent_nil
175
- @cfg.verbose = nil
176
- reporter = @sui.download_reporter
177
- reporter.fetch "a.gem", 1024
178
- assert_kind_of Gem::StreamUI::SilentDownloadReporter, reporter
179
- assert_equal "", @out.string
180
- end
181
-
182
- def test_download_reporter_silent_false
183
- @cfg.verbose = false
184
- reporter = @sui.download_reporter
185
- reporter.fetch "a.gem", 1024
186
- assert_kind_of Gem::StreamUI::SilentDownloadReporter, reporter
187
- assert_equal "", @out.string
188
- end
189
-
190
- def test_download_reporter_anything
191
- @cfg.verbose = 0
192
- reporter = @sui.download_reporter
193
- assert_kind_of Gem::StreamUI::ThreadedDownloadReporter, reporter
194
- end
195
-
196
- def test_threaded_download_reporter
197
- @cfg.verbose = true
198
- reporter = @sui.download_reporter
199
- reporter.fetch "a.gem", 1024
200
- assert_equal "Fetching a.gem\n", @out.string
201
- end
202
-
203
- def test_verbose_download_reporter_progress
204
- @cfg.verbose = true
205
- reporter = @sui.download_reporter
206
- reporter.fetch "a.gem", 1024
207
- reporter.update 512
208
- assert_equal "Fetching a.gem\n", @out.string
209
- end
210
-
211
- def test_verbose_download_reporter_progress_once
212
- @cfg.verbose = true
213
- reporter = @sui.download_reporter
214
- reporter.fetch "a.gem", 1024
215
- reporter.update 510
216
- reporter.update 512
217
- assert_equal "Fetching a.gem\n", @out.string
218
- end
219
-
220
- def test_verbose_download_reporter_progress_complete
221
- @cfg.verbose = true
222
- reporter = @sui.download_reporter
223
- reporter.fetch "a.gem", 1024
224
- reporter.update 510
225
- reporter.done
226
- assert_equal "Fetching a.gem\n", @out.string
227
- end
228
-
229
- def test_verbose_download_reporter_progress_nil_length
230
- @cfg.verbose = true
231
- reporter = @sui.download_reporter
232
- reporter.fetch "a.gem", nil
233
- reporter.update 1024
234
- reporter.done
235
- assert_equal "Fetching a.gem\n", @out.string
236
- end
237
-
238
- def test_verbose_download_reporter_progress_zero_length
239
- @cfg.verbose = true
240
- reporter = @sui.download_reporter
241
- reporter.fetch "a.gem", 0
242
- reporter.update 1024
243
- reporter.done
244
- assert_equal "Fetching a.gem\n", @out.string
245
- end
246
-
247
- def test_verbose_download_reporter_no_tty
248
- @out.tty = false
249
-
250
- @cfg.verbose = true
251
- reporter = @sui.download_reporter
252
- reporter.fetch "a.gem", 1024
253
- assert_equal "", @out.string
254
- end
255
- end
@@ -1,278 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/stub_specification"
5
-
6
- class TestStubSpecification < Gem::TestCase
7
- FOO = File.expand_path File.join("specifications", "foo-0.0.1-x86-mswin32.gemspec"), __dir__
8
- BAR = File.expand_path File.join("specifications", "bar-0.0.2.gemspec"), __dir__
9
-
10
- def setup
11
- super
12
-
13
- @base_dir = __dir__
14
- @gems_dir = File.join __dir__, "gem"
15
- @foo = Gem::StubSpecification.gemspec_stub FOO, @base_dir, @gems_dir
16
- end
17
-
18
- def test_initialize
19
- assert_equal "foo", @foo.name
20
- assert_equal Gem::Version.new("0.0.1"), @foo.version
21
- assert_equal Gem::Platform.new("mswin32"), @foo.platform
22
- assert_equal ["lib", "lib/f oo/ext"], @foo.require_paths
23
- assert @foo.stubbed?
24
- end
25
-
26
- def test_initialize_extension
27
- stub = stub_with_extension
28
-
29
- assert_equal "stub_e", stub.name
30
- assert_equal v(2), stub.version
31
- assert_equal Gem::Platform::RUBY, stub.platform
32
- assert_equal [stub.extension_dir, "lib"], stub.require_paths
33
- assert_equal %w[ext/stub_e/extconf.rb], stub.extensions
34
- end
35
-
36
- def test_initialize_version
37
- stub = stub_with_version
38
-
39
- assert_equal "stub_v", stub.name
40
- assert_equal v(2), stub.version
41
- end
42
-
43
- def test_initialize_with_empty_version
44
- stub = stub_without_version
45
-
46
- assert_equal "stub_v", stub.name
47
- assert_equal v(0), stub.version
48
- end
49
-
50
- def test_initialize_missing_stubline
51
- stub = Gem::StubSpecification.gemspec_stub(BAR, @base_dir, @gems_dir)
52
- assert_equal "bar", stub.name
53
- assert_equal Gem::Version.new("0.0.2"), stub.version
54
- assert_equal Gem::Platform.new("ruby"), stub.platform
55
- assert_equal ["lib"], stub.require_paths
56
- assert !stub.stubbed?
57
- end
58
-
59
- def test_contains_requirable_file_eh
60
- stub = stub_without_extension
61
- code_rb = File.join stub.gem_dir, "lib", "code.rb"
62
- FileUtils.mkdir_p File.dirname code_rb
63
- FileUtils.touch code_rb
64
-
65
- assert stub.contains_requirable_file? "code"
66
- end
67
-
68
- def test_contains_requirable_file_eh_extension
69
- pend "I guess making the stub match the running platform should work" if Gem.java_platform?
70
- stub_with_extension do |stub|
71
- _, err = capture_output do
72
- refute stub.contains_requirable_file? "nonexistent"
73
- end
74
-
75
- expected = "Ignoring stub_e-2 because its extensions are not built. " +
76
- "Try: gem pristine stub_e --version 2\n"
77
-
78
- assert_equal expected, err
79
- end
80
- end
81
-
82
- def test_full_require_paths
83
- stub = stub_with_extension
84
-
85
- expected = [
86
- File.join(stub.full_gem_path, "lib"),
87
- stub.extension_dir,
88
- ]
89
-
90
- assert_equal expected, stub.full_require_paths
91
- end
92
-
93
- def test_lib_dirs_glob
94
- stub = stub_without_extension
95
-
96
- assert_equal File.join(stub.full_gem_path, "lib"), stub.lib_dirs_glob
97
- end
98
-
99
- def test_lib_dirs_glob_with_extension
100
- stub = stub_with_extension
101
-
102
- assert_equal File.join(stub.full_gem_path, "lib"), stub.lib_dirs_glob
103
- end
104
-
105
- def test_matches_for_glob
106
- stub = stub_without_extension
107
- code_rb = File.join stub.gem_dir, "lib", "code.rb"
108
- FileUtils.mkdir_p File.dirname code_rb
109
- FileUtils.touch code_rb
110
-
111
- assert_equal code_rb, stub.matches_for_glob("code*").first
112
- end
113
-
114
- def test_matches_for_glob_with_bundler_inline
115
- stub = stub_with_extension
116
- code_rb = File.join stub.gem_dir, "lib", "code.rb"
117
- FileUtils.mkdir_p File.dirname code_rb
118
- FileUtils.touch code_rb
119
-
120
- stub.stub(:raw_require_paths, nil) do
121
- assert_equal code_rb, stub.matches_for_glob("code*").first
122
- end
123
- end
124
-
125
- def test_missing_extensions_eh
126
- pend "I guess making the stub match the running platform should work" if Gem.java_platform?
127
- stub = stub_with_extension do |s|
128
- extconf_rb = File.join s.gem_dir, s.extensions.first
129
- FileUtils.mkdir_p File.dirname extconf_rb
130
-
131
- File.open extconf_rb, "w" do |f|
132
- f.write <<-'RUBY'
133
- File.open 'Makefile', 'w' do |f|
134
- f.puts "clean:\n\techo clean"
135
- f.puts "default:\n\techo built"
136
- f.puts "install:\n\techo installed"
137
- end
138
- RUBY
139
- end
140
- end
141
-
142
- assert stub.missing_extensions?
143
-
144
- stub.build_extensions
145
-
146
- refute stub.missing_extensions?
147
- end
148
-
149
- def test_missing_extensions_eh_default_gem
150
- spec = new_default_spec "default", 1
151
- spec.extensions << "extconf.rb"
152
-
153
- File.open spec.loaded_from, "w" do |io|
154
- io.write spec.to_ruby_for_cache
155
- end
156
-
157
- default_spec = Gem::StubSpecification.gemspec_stub spec.loaded_from, spec.base_dir, spec.gems_dir
158
-
159
- refute default_spec.missing_extensions?
160
- end
161
-
162
- def test_missing_extensions_eh_none
163
- refute @foo.missing_extensions?
164
- end
165
-
166
- def test_to_spec
167
- real_foo = util_spec @foo.name, @foo.version
168
- real_foo.activate
169
-
170
- assert_equal @foo.version, Gem.loaded_specs[@foo.name].version,
171
- "sanity check"
172
-
173
- assert_same real_foo, @foo.to_spec
174
- end
175
-
176
- def test_to_spec_with_other_specs_loaded_does_not_warn
177
- real_foo = util_spec @foo.name, @foo.version
178
- real_foo.activate
179
- bar = Gem::StubSpecification.gemspec_stub BAR, real_foo.base_dir, real_foo.gems_dir
180
- refute_predicate Gem.loaded_specs, :empty?
181
- assert bar.to_spec
182
- end
183
-
184
- def stub_with_version
185
- spec = File.join @gemhome, "specifications", "stub_e-2.gemspec"
186
- File.open spec, "w" do |io|
187
- io.write <<-STUB
188
- # -*- encoding: utf-8 -*-
189
- # stub: stub_v 2 ruby lib
190
-
191
- Gem::Specification.new do |s|
192
- s.name = 'stub_v'
193
- s.version = Gem::Version.new '2'
194
- end
195
- STUB
196
-
197
- io.flush
198
-
199
- stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, "gems")
200
-
201
- yield stub if block_given?
202
-
203
- return stub
204
- end
205
- end
206
-
207
- def stub_without_version
208
- spec = File.join @gemhome, "specifications", "stub-2.gemspec"
209
- File.open spec, "w" do |io|
210
- io.write <<-STUB
211
- # -*- encoding: utf-8 -*-
212
- # stub: stub_v ruby lib
213
-
214
- Gem::Specification.new do |s|
215
- s.name = 'stub_v'
216
- s.version = ""
217
- end
218
- STUB
219
-
220
- io.flush
221
-
222
- stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, "gems")
223
-
224
- yield stub if block_given?
225
-
226
- return stub
227
- end
228
- end
229
-
230
- def stub_with_extension
231
- spec = File.join @gemhome, "specifications", "stub_e-2.gemspec"
232
- File.open spec, "w" do |io|
233
- io.write <<-STUB
234
- # -*- encoding: utf-8 -*-
235
- # stub: stub_e 2 ruby lib
236
- # stub: ext/stub_e/extconf.rb
237
-
238
- Gem::Specification.new do |s|
239
- s.name = 'stub_e'
240
- s.version = Gem::Version.new '2'
241
- s.extensions = ['ext/stub_e/extconf.rb']
242
- s.installed_by_version = '2.2'
243
- end
244
- STUB
245
-
246
- io.flush
247
-
248
- stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, "gems")
249
-
250
- yield stub if block_given?
251
-
252
- return stub
253
- end
254
- end
255
-
256
- def stub_without_extension
257
- spec = File.join @gemhome, "specifications", "stub-2.gemspec"
258
- File.open spec, "w" do |io|
259
- io.write <<-STUB
260
- # -*- encoding: utf-8 -*-
261
- # stub: stub 2 ruby lib
262
-
263
- Gem::Specification.new do |s|
264
- s.name = 'stub'
265
- s.version = Gem::Version.new '2'
266
- end
267
- STUB
268
-
269
- io.flush
270
-
271
- stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, "gems")
272
-
273
- yield stub if block_given?
274
-
275
- return stub
276
- end
277
- end
278
- end
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/text"
5
-
6
- class TestGemText < Gem::TestCase
7
- include Gem::Text
8
-
9
- def test_format_text
10
- assert_equal "text to\nwrap", format_text("text to wrap", 8)
11
- end
12
-
13
- def test_format_text_indent
14
- assert_equal " text to\n wrap", format_text("text to wrap", 8, 2)
15
- end
16
-
17
- def test_format_text_none
18
- assert_equal "text to wrap", format_text("text to wrap", 40)
19
- end
20
-
21
- def test_format_text_none_indent
22
- assert_equal " text to wrap", format_text("text to wrap", 40, 2)
23
- end
24
-
25
- def test_format_text_no_space
26
- assert_equal "texttowr\nap", format_text("texttowrap", 8)
27
- end
28
-
29
- def test_format_text_trailing # for two spaces after .
30
- text = <<-TEXT
31
- This line is really, really long. So long, in fact, that it is more than eighty characters long! The purpose of this line is for testing wrapping behavior because sometimes people don't wrap their text to eighty characters. Without the wrapping, the text might not look good in the RSS feed.
32
- TEXT
33
-
34
- expected = <<-EXPECTED
35
- This line is really, really long. So long, in fact, that it is more than
36
- eighty characters long! The purpose of this line is for testing wrapping
37
- behavior because sometimes people don't wrap their text to eighty characters.
38
- Without the wrapping, the text might not look good in the RSS feed.
39
- EXPECTED
40
-
41
- assert_equal expected, format_text(text, 78)
42
- end
43
-
44
- def test_format_removes_nonprintable_characters
45
- assert_equal "text with weird .. stuff .", format_text("text with weird \x1b\x02 stuff \x7f", 40)
46
- end
47
-
48
- def test_min3
49
- assert_equal 1, min3(1, 1, 1)
50
- assert_equal 1, min3(1, 1, 2)
51
- assert_equal 1, min3(1, 2, 1)
52
- assert_equal 1, min3(2, 1, 1)
53
- assert_equal 1, min3(1, 2, 2)
54
- assert_equal 1, min3(2, 1, 2)
55
- assert_equal 1, min3(2, 2, 1)
56
- assert_equal 1, min3(1, 2, 3)
57
- assert_equal 1, min3(1, 3, 2)
58
- assert_equal 1, min3(2, 1, 3)
59
- assert_equal 1, min3(2, 3, 1)
60
- assert_equal 1, min3(3, 1, 2)
61
- assert_equal 1, min3(3, 2, 1)
62
- end
63
-
64
- def test_levenshtein_distance_add
65
- assert_equal 2, levenshtein_distance("zentest", "zntst")
66
- assert_equal 2, levenshtein_distance("zntst", "zentest")
67
- end
68
-
69
- def test_levenshtein_distance_empty
70
- assert_equal 5, levenshtein_distance("abcde", "")
71
- assert_equal 5, levenshtein_distance("", "abcde")
72
- end
73
-
74
- def test_levenshtein_distance_remove
75
- assert_equal 3, levenshtein_distance("zentest", "zentestxxx")
76
- assert_equal 3, levenshtein_distance("zentestxxx", "zentest")
77
- assert_equal 13, levenshtein_distance("cat", "thundercatsarego")
78
- assert_equal 13, levenshtein_distance("thundercatsarego", "cat")
79
- end
80
-
81
- def test_levenshtein_distance_replace
82
- assert_equal 2, levenshtein_distance("zentest", "ZenTest")
83
- assert_equal 7, levenshtein_distance("xxxxxxx", "ZenTest")
84
- assert_equal 7, levenshtein_distance("zentest", "xxxxxxx")
85
- end
86
-
87
- def test_levenshtein_distance_all
88
- assert_equal 6, levenshtein_distance("algorithm", "altruistic")
89
- assert_equal 3, levenshtein_distance("saturday", "sunday")
90
- assert_equal 3, levenshtein_distance("kitten", "sitting")
91
- end
92
-
93
- def test_truncate_text
94
- assert_equal "abc", truncate_text("abc", "desc")
95
- assert_equal "Truncating desc to 2 characters:\nab", truncate_text("abc", "desc", 2)
96
- s = "ab" * 500_001
97
- assert_equal "Truncating desc to 1,000,000 characters:\n#{s[0, 1_000_000]}", truncate_text(s, "desc", 1_000_000)
98
- end
99
-
100
- def test_clean_text
101
- assert_equal ".]2;nyan.", clean_text("\e]2;nyan\a")
102
- end
103
- end