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