rubygems-update 3.4.10 → 3.5.22

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