rubygems-update 2.6.1 → 3.5.0

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