rubygems-update 2.2.5 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.autotest +4 -1
  5. data/CONTRIBUTING +20 -0
  6. data/History.txt +117 -14
  7. data/Manifest.txt +11 -2
  8. data/README.rdoc +1 -1
  9. data/Rakefile +0 -3
  10. data/lib/rubygems.rb +31 -11
  11. data/lib/rubygems/available_set.rb +1 -1
  12. data/lib/rubygems/basic_specification.rb +20 -10
  13. data/lib/rubygems/command.rb +4 -1
  14. data/lib/rubygems/commands/cert_command.rb +11 -13
  15. data/lib/rubygems/commands/cleanup_command.rb +2 -2
  16. data/lib/rubygems/commands/dependency_command.rb +2 -2
  17. data/lib/rubygems/commands/environment_command.rb +5 -2
  18. data/lib/rubygems/commands/help_command.rb +199 -20
  19. data/lib/rubygems/commands/install_command.rb +40 -10
  20. data/lib/rubygems/commands/list_command.rb +2 -2
  21. data/lib/rubygems/commands/open_command.rb +81 -0
  22. data/lib/rubygems/commands/search_command.rb +5 -5
  23. data/lib/rubygems/commands/setup_command.rb +1 -1
  24. data/lib/rubygems/commands/update_command.rb +8 -5
  25. data/lib/rubygems/commands/yank_command.rb +8 -13
  26. data/lib/rubygems/config_file.rb +13 -2
  27. data/lib/rubygems/dependency.rb +29 -16
  28. data/lib/rubygems/dependency_installer.rb +44 -10
  29. data/lib/rubygems/doctor.rb +1 -1
  30. data/lib/rubygems/errors.rb +30 -0
  31. data/lib/rubygems/exceptions.rb +20 -0
  32. data/lib/rubygems/ext/builder.rb +1 -1
  33. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  34. data/lib/rubygems/installer.rb +4 -4
  35. data/lib/rubygems/name_tuple.rb +3 -1
  36. data/lib/rubygems/package.rb +27 -14
  37. data/lib/rubygems/package/file_source.rb +33 -0
  38. data/lib/rubygems/package/io_source.rb +45 -0
  39. data/lib/rubygems/package/old.rb +5 -5
  40. data/lib/rubygems/package/source.rb +3 -0
  41. data/lib/rubygems/platform.rb +2 -1
  42. data/lib/rubygems/rdoc.rb +1 -1
  43. data/lib/rubygems/remote_fetcher.rb +59 -18
  44. data/lib/rubygems/request.rb +71 -101
  45. data/lib/rubygems/request/connection_pools.rb +77 -0
  46. data/lib/rubygems/request/http_pool.rb +38 -0
  47. data/lib/rubygems/request/https_pool.rb +10 -0
  48. data/lib/rubygems/request_set.rb +65 -20
  49. data/lib/rubygems/request_set/gem_dependency_api.rb +234 -14
  50. data/lib/rubygems/request_set/lockfile.rb +65 -22
  51. data/lib/rubygems/requirement.rb +3 -0
  52. data/lib/rubygems/resolver.rb +33 -16
  53. data/lib/rubygems/resolver/activation_request.rb +7 -0
  54. data/lib/rubygems/resolver/api_set.rb +12 -2
  55. data/lib/rubygems/resolver/api_specification.rb +6 -0
  56. data/lib/rubygems/resolver/composed_set.rb +4 -0
  57. data/lib/rubygems/resolver/dependency_request.rb +20 -1
  58. data/lib/rubygems/resolver/git_set.rb +1 -1
  59. data/lib/rubygems/resolver/git_specification.rb +1 -1
  60. data/lib/rubygems/resolver/index_set.rb +3 -1
  61. data/lib/rubygems/resolver/installed_specification.rb +19 -1
  62. data/lib/rubygems/resolver/installer_set.rb +84 -4
  63. data/lib/rubygems/resolver/local_specification.rb +25 -0
  64. data/lib/rubygems/resolver/lock_set.rb +13 -9
  65. data/lib/rubygems/resolver/lock_specification.rb +1 -1
  66. data/lib/rubygems/resolver/set.rb +6 -0
  67. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  68. data/lib/rubygems/resolver/specification.rb +23 -2
  69. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  70. data/lib/rubygems/resolver/vendor_specification.rb +1 -1
  71. data/lib/rubygems/security/policy.rb +1 -0
  72. data/lib/rubygems/server.rb +36 -1
  73. data/lib/rubygems/source.rb +6 -2
  74. data/lib/rubygems/source/git.rb +1 -1
  75. data/lib/rubygems/source/installed.rb +4 -0
  76. data/lib/rubygems/source/specific_file.rb +6 -1
  77. data/lib/rubygems/spec_fetcher.rb +6 -13
  78. data/lib/rubygems/specification.rb +91 -63
  79. data/lib/rubygems/stub_specification.rb +9 -0
  80. data/lib/rubygems/test_case.rb +4 -2
  81. data/lib/rubygems/text.rb +15 -5
  82. data/lib/rubygems/uninstaller.rb +4 -1
  83. data/lib/rubygems/user_interaction.rb +8 -0
  84. data/lib/rubygems/version.rb +5 -1
  85. data/test/rubygems/test_gem.rb +88 -2
  86. data/test/rubygems/test_gem_available_set.rb +11 -8
  87. data/test/rubygems/test_gem_command.rb +55 -0
  88. data/test/rubygems/test_gem_commands_cert_command.rb +1 -0
  89. data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
  90. data/test/rubygems/test_gem_commands_help_command.rb +7 -0
  91. data/test/rubygems/test_gem_commands_install_command.rb +71 -4
  92. data/test/rubygems/test_gem_commands_open_command.rb +46 -0
  93. data/test/rubygems/test_gem_commands_setup_command.rb +9 -0
  94. data/test/rubygems/test_gem_commands_update_command.rb +48 -0
  95. data/test/rubygems/test_gem_commands_yank_command.rb +2 -2
  96. data/test/rubygems/test_gem_config_file.rb +19 -7
  97. data/test/rubygems/test_gem_dependency.rb +86 -2
  98. data/test/rubygems/test_gem_dependency_installer.rb +36 -164
  99. data/test/rubygems/test_gem_gemcutter_utilities.rb +9 -0
  100. data/test/rubygems/test_gem_installer.rb +6 -1
  101. data/test/rubygems/test_gem_name_tuple.rb +7 -0
  102. data/test/rubygems/test_gem_package.rb +17 -0
  103. data/test/rubygems/test_gem_remote_fetcher.rb +65 -46
  104. data/test/rubygems/test_gem_request.rb +75 -61
  105. data/test/rubygems/test_gem_request_connection_pools.rb +83 -0
  106. data/test/rubygems/test_gem_request_set.rb +156 -1
  107. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +72 -27
  108. data/test/rubygems/test_gem_request_set_lockfile.rb +335 -0
  109. data/test/rubygems/test_gem_requirement.rb +5 -0
  110. data/test/rubygems/test_gem_resolver.rb +91 -2
  111. data/test/rubygems/test_gem_resolver_activation_request.rb +10 -0
  112. data/test/rubygems/test_gem_resolver_api_set.rb +2 -2
  113. data/test/rubygems/test_gem_resolver_api_specification.rb +40 -0
  114. data/test/rubygems/test_gem_resolver_composed_set.rb +14 -0
  115. data/test/rubygems/test_gem_resolver_dependency_request.rb +55 -0
  116. data/test/rubygems/test_gem_resolver_git_set.rb +26 -0
  117. data/test/rubygems/test_gem_resolver_index_set.rb +28 -2
  118. data/test/rubygems/test_gem_resolver_installer_set.rb +143 -0
  119. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -6
  120. data/test/rubygems/test_gem_resolver_lock_specification.rb +1 -1
  121. data/test/rubygems/test_gem_resolver_specification.rb +32 -0
  122. data/test/rubygems/test_gem_resolver_vendor_set.rb +14 -0
  123. data/test/rubygems/test_gem_security_policy.rb +2 -2
  124. data/test/rubygems/test_gem_server.rb +69 -4
  125. data/test/rubygems/test_gem_source.rb +4 -1
  126. data/test/rubygems/test_gem_source_git.rb +15 -0
  127. data/test/rubygems/test_gem_source_specific_file.rb +4 -0
  128. data/test/rubygems/test_gem_specification.rb +82 -27
  129. data/test/rubygems/test_gem_stub_specification.rb +61 -23
  130. data/test/rubygems/test_gem_uninstaller.rb +23 -0
  131. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +32 -0
  132. metadata +187 -33
  133. metadata.gz.sig +0 -0
  134. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  135. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
@@ -19,6 +19,16 @@ class TestGemResolverActivationRequest < Gem::TestCase
19
19
  @req = @DR::ActivationRequest.new @a3, @dep, [@a1, @a2]
20
20
  end
21
21
 
22
+ def test_development_eh
23
+ refute @req.development?
24
+
25
+ dep_req = @DR::DependencyRequest.new dep('a', '>= 0', :development), nil
26
+
27
+ act_req = @DR::ActivationRequest.new @a3, dep_req, [@a1, @a2]
28
+
29
+ assert act_req.development?
30
+ end
31
+
22
32
  def test_inspect
23
33
  assert_match 'a-3', @req.inspect
24
34
  assert_match 'from a (>= 0)', @req.inspect
@@ -73,13 +73,13 @@ class TestGemResolverAPISet < Gem::TestCase
73
73
 
74
74
  set.prefetch [a_dep]
75
75
 
76
- @fetcher.data.delete "#{@dep_uri}?gems=a"
77
-
78
76
  expected = [
79
77
  @DR::APISpecification.new(set, data.first)
80
78
  ]
81
79
 
82
80
  assert_equal expected, set.find_all(a_dep)
81
+
82
+ @fetcher.data.delete "#{@dep_uri}?gems=a"
83
83
  end
84
84
 
85
85
  def test_find_all_local
@@ -28,6 +28,46 @@ class TestGemResolverAPISpecification < Gem::TestCase
28
28
  assert_equal expected, spec.dependencies
29
29
  end
30
30
 
31
+ def test_fetch_development_dependencies
32
+ specs = spec_fetcher do |fetcher|
33
+ fetcher.spec 'rails', '3.0.3' do |s|
34
+ s.add_runtime_dependency 'bundler', '~> 1.0'
35
+ s.add_runtime_dependency 'railties', '= 3.0.3'
36
+ s.add_development_dependency 'a', '= 1'
37
+ end
38
+ end
39
+
40
+ rails = specs['rails-3.0.3']
41
+
42
+ repo = @gem_repo + 'api/v1/dependencies'
43
+
44
+ set = Gem::Resolver::APISet.new repo
45
+
46
+ data = {
47
+ :name => 'rails',
48
+ :number => '3.0.3',
49
+ :platform => 'ruby',
50
+ :dependencies => [
51
+ ['bundler', '~> 1.0'],
52
+ ['railties', '= 3.0.3'],
53
+ ],
54
+ }
55
+
56
+ util_setup_spec_fetcher rails
57
+
58
+ spec = Gem::Resolver::APISpecification.new set, data
59
+
60
+ spec.fetch_development_dependencies
61
+
62
+ expected = [
63
+ Gem::Dependency.new('bundler', '~> 1.0'),
64
+ Gem::Dependency.new('railties', '= 3.0.3'),
65
+ Gem::Dependency.new('a', '= 1', :development),
66
+ ]
67
+
68
+ assert_equal expected, spec.dependencies
69
+ end
70
+
31
71
  def test_installable_platform_eh
32
72
  set = Gem::Resolver::APISet.new
33
73
  data = {
@@ -2,6 +2,20 @@ require 'rubygems/test_case'
2
2
 
3
3
  class TestGemResolverComposedSet < Gem::TestCase
4
4
 
5
+ def test_errors
6
+ index_set = Gem::Resolver::IndexSet.new
7
+ current_set = Gem::Resolver::CurrentSet.new
8
+
9
+ set = Gem::Resolver::ComposedSet.new index_set, current_set
10
+
11
+ set.instance_variable_get(:@errors) << :a
12
+ current_set.errors << :b
13
+
14
+ assert_includes set.errors, :a
15
+ assert_includes set.errors, :b
16
+ assert_includes set.errors, index_set.errors.first
17
+ end
18
+
5
19
  def test_remote_equals
6
20
  best_set = Gem::Resolver::BestSet.new
7
21
  current_set = Gem::Resolver::CurrentSet.new
@@ -8,6 +8,61 @@ class TestGemResolverDependencyRequest < Gem::TestCase
8
8
  @DR = Gem::Resolver::DependencyRequest
9
9
  end
10
10
 
11
+ def test_development_eh
12
+ a_dep = dep 'a', '>= 1'
13
+
14
+ a_dep_req = @DR.new a_dep, nil
15
+
16
+ refute a_dep_req.development?
17
+
18
+ b_dep = dep 'b', '>= 1', :development
19
+
20
+ b_dep_req = @DR.new b_dep, nil
21
+
22
+ assert b_dep_req.development?
23
+ end
24
+
25
+ def test_match_eh
26
+ spec = util_spec 'a', 1
27
+ dependency = dep 'a', '>= 1'
28
+
29
+ dr = @DR.new dependency, nil
30
+
31
+ assert dr.match? spec
32
+ end
33
+
34
+ def test_match_eh_prerelease
35
+ spec = util_spec 'a', '1.a'
36
+
37
+ a_dep = dep 'a', '>= 1'
38
+ a_dr = @DR.new a_dep, nil
39
+
40
+ refute a_dr.match? spec
41
+
42
+ a_pre_dep = dep 'a', '>= 1.a'
43
+ a_pre_dr = @DR.new a_pre_dep, nil
44
+
45
+ assert a_pre_dr.match? spec
46
+ end
47
+
48
+ def test_matches_spec_eh
49
+ spec = util_spec 'a', 1
50
+ dependency = dep 'a', '>= 1'
51
+
52
+ dr = @DR.new dependency, nil
53
+
54
+ assert dr.matches_spec? spec
55
+ end
56
+
57
+ def test_matches_spec_eh_prerelease
58
+ spec = util_spec 'a', '1.a'
59
+
60
+ dependency = dep 'a', '>= 0'
61
+ dr = @DR.new dependency, nil
62
+
63
+ assert dr.matches_spec? spec
64
+ end
65
+
11
66
  def test_requirement
12
67
  dependency = dep 'a', '>= 1'
13
68
 
@@ -85,6 +85,32 @@ class TestGemResolverGitSet < Gem::TestCase
85
85
  assert_empty @set.find_all dependency
86
86
  end
87
87
 
88
+ def test_find_all_prerelease
89
+ name, _, repository, = git_gem 'a', '1.a'
90
+
91
+ @set.add_git_gem name, repository, 'master', false
92
+
93
+ dependency = dep 'a', '>= 0'
94
+ req = Gem::Resolver::DependencyRequest.new dependency, nil
95
+ @reqs.add req
96
+
97
+ @set.prefetch @reqs
98
+
99
+ found = @set.find_all dependency
100
+
101
+ assert_empty found
102
+
103
+ dependency = dep 'a', '>= 0.a'
104
+ req = Gem::Resolver::DependencyRequest.new dependency, nil
105
+ @reqs.add req
106
+
107
+ @set.prefetch @reqs
108
+
109
+ found = @set.find_all dependency
110
+
111
+ refute_empty found
112
+ end
113
+
88
114
  def test_root_dir
89
115
  assert_equal Gem.dir, @set.root_dir
90
116
 
@@ -22,6 +22,8 @@ class TestGemResolverIndexSet < Gem::TestCase
22
22
  fetcher = set.instance_variable_get :@f
23
23
 
24
24
  refute_same Gem::SpecFetcher.fetcher, fetcher
25
+
26
+ refute_empty set.errors
25
27
  end
26
28
 
27
29
  def test_find_all
@@ -31,7 +33,7 @@ class TestGemResolverIndexSet < Gem::TestCase
31
33
  fetcher.spec 'b', 1
32
34
  end
33
35
 
34
- set = @DR::BestSet.new
36
+ set = @DR::IndexSet.new
35
37
 
36
38
  dependency = dep 'a', '~> 1'
37
39
 
@@ -49,7 +51,7 @@ class TestGemResolverIndexSet < Gem::TestCase
49
51
  fetcher.spec 'b', 1
50
52
  end
51
53
 
52
- set = @DR::BestSet.new
54
+ set = @DR::IndexSet.new
53
55
  set.remote = false
54
56
 
55
57
  dependency = dep 'a', '~> 1'
@@ -59,5 +61,29 @@ class TestGemResolverIndexSet < Gem::TestCase
59
61
  assert_empty set.find_all req
60
62
  end
61
63
 
64
+ def test_find_all_prerelease
65
+ spec_fetcher do |fetcher|
66
+ fetcher.spec 'a', '1.a'
67
+ end
68
+
69
+ set = @DR::IndexSet.new
70
+
71
+ dependency = dep 'a'
72
+
73
+ req = @DR::DependencyRequest.new dependency, nil
74
+
75
+ found = set.find_all req
76
+
77
+ assert_empty found
78
+
79
+ dependency.prerelease = true
80
+
81
+ req = @DR::DependencyRequest.new dependency, nil
82
+
83
+ found = set.find_all req
84
+
85
+ assert_equal %w[a-1.a], found.map { |s| s.full_name }
86
+ end
87
+
62
88
  end
63
89
 
@@ -2,6 +2,101 @@ require 'rubygems/test_case'
2
2
 
3
3
  class TestGemResolverInstallerSet < Gem::TestCase
4
4
 
5
+ def test_add_always_install
6
+ spec_fetcher do |fetcher|
7
+ fetcher.spec 'a', 1
8
+ fetcher.spec 'a', 2
9
+ fetcher.clear
10
+ end
11
+
12
+ util_gem 'a', 1
13
+
14
+ set = Gem::Resolver::InstallerSet.new :both
15
+
16
+ set.add_always_install dep('a')
17
+
18
+ assert_equal %w[a-2], set.always_install.map { |s| s.full_name }
19
+
20
+ e = assert_raises Gem::UnsatisfiableDependencyError do
21
+ set.add_always_install dep('b')
22
+ end
23
+
24
+ assert_equal dep('b'), e.dependency.dependency
25
+ end
26
+
27
+ def test_add_always_install_errors
28
+ @fetcher = Gem::FakeFetcher.new
29
+ Gem::RemoteFetcher.fetcher = @fetcher
30
+
31
+ set = Gem::Resolver::InstallerSet.new :both
32
+
33
+ e = assert_raises Gem::UnsatisfiableDependencyError do
34
+ set.add_always_install dep 'a'
35
+ end
36
+
37
+ refute_empty e.errors
38
+ end
39
+
40
+ def test_add_always_install_platform
41
+ spec_fetcher do |fetcher|
42
+ fetcher.spec 'a', 1
43
+ fetcher.spec 'a', 2 do |s|
44
+ s.platform = Gem::Platform.new 'x86-freebsd-9'
45
+ end
46
+ fetcher.clear
47
+ end
48
+
49
+ set = Gem::Resolver::InstallerSet.new :both
50
+
51
+ set.add_always_install dep('a')
52
+
53
+ assert_equal %w[a-1], set.always_install.map { |s| s.full_name }
54
+ end
55
+
56
+ def test_add_always_install_prerelease
57
+ spec_fetcher do |fetcher|
58
+ fetcher.gem 'a', 1
59
+ fetcher.gem 'a', '3.a'
60
+ end
61
+
62
+ set = Gem::Resolver::InstallerSet.new :both
63
+
64
+ set.add_always_install dep('a')
65
+
66
+ assert_equal %w[a-1], set.always_install.map { |s| s.full_name }
67
+ end
68
+
69
+ def test_add_always_install_prerelease_only
70
+ spec_fetcher do |fetcher|
71
+ fetcher.gem 'a', '3.a'
72
+ end
73
+
74
+ set = Gem::Resolver::InstallerSet.new :both
75
+
76
+ assert_raises Gem::UnsatisfiableDependencyError do
77
+ set.add_always_install dep('a')
78
+ end
79
+ end
80
+
81
+ def test_add_local
82
+ a_1, a_1_gem = util_gem 'a', 1
83
+
84
+ a_1_source = Gem::Source::SpecificFile.new a_1_gem
85
+
86
+ set = Gem::Resolver::InstallerSet.new :both
87
+
88
+ set.add_local File.basename(a_1_gem), a_1, a_1_source
89
+
90
+ assert set.local? File.basename(a_1_gem)
91
+
92
+ FileUtils.rm a_1_gem
93
+ util_clear_gems
94
+
95
+ req = Gem::Resolver::DependencyRequest.new dep('a'), nil
96
+
97
+ assert_equal %w[a-1], set.find_all(req).map { |spec| spec.full_name }
98
+ end
99
+
5
100
  def test_consider_local_eh
6
101
  set = Gem::Resolver::InstallerSet.new :remote
7
102
 
@@ -30,6 +125,54 @@ class TestGemResolverInstallerSet < Gem::TestCase
30
125
  refute set.consider_remote?
31
126
  end
32
127
 
128
+ def test_errors
129
+ set = Gem::Resolver::InstallerSet.new :both
130
+
131
+ set.instance_variable_get(:@errors) << :a
132
+
133
+ req = Gem::Resolver::DependencyRequest.new dep('a'), nil
134
+
135
+ set.find_all req
136
+
137
+ assert_equal [:a, set.remote_set.errors.first], set.errors
138
+ end
139
+
140
+ def test_find_all_always_install
141
+ spec_fetcher do |fetcher|
142
+ fetcher.spec 'a', 2
143
+ fetcher.clear
144
+ end
145
+
146
+ util_gem 'a', 1
147
+
148
+ set = Gem::Resolver::InstallerSet.new :both
149
+
150
+ set.add_always_install dep 'a'
151
+
152
+ req = Gem::Resolver::DependencyRequest.new dep('a'), nil
153
+
154
+ assert_equal %w[a-2], set.find_all(req).map { |spec| spec.full_name }
155
+ end
156
+
157
+ def test_find_all_prerelease
158
+ spec_fetcher do |fetcher|
159
+ fetcher.spec 'a', '1'
160
+ fetcher.spec 'a', '1.a'
161
+ fetcher.clear
162
+ end
163
+
164
+ set = Gem::Resolver::InstallerSet.new :both
165
+
166
+ req = Gem::Resolver::DependencyRequest.new dep('a'), nil
167
+
168
+ assert_equal %w[a-1], set.find_all(req).map { |spec| spec.full_name }
169
+
170
+ req = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil
171
+
172
+ assert_equal %w[a-1 a-1.a],
173
+ set.find_all(req).map { |spec| spec.full_name }.sort
174
+ end
175
+
33
176
  def test_load_spec
34
177
  specs = spec_fetcher do |fetcher|
35
178
  fetcher.spec 'a', 2
@@ -5,14 +5,15 @@ class TestGemResolverLockSet < Gem::TestCase
5
5
  def setup
6
6
  super
7
7
 
8
- @source = Gem::Source.new @gem_repo
9
- @lock_source = Gem::Source::Lock.new @source
8
+ @sources = [Gem::Source.new(@gem_repo)]
9
+ @lock_source = Gem::Source::Lock.new @sources.first
10
10
 
11
- @set = Gem::Resolver::LockSet.new @source
11
+ @set = Gem::Resolver::LockSet.new @sources
12
12
  end
13
13
 
14
14
  def test_add
15
- spec = @set.add 'a', '2', Gem::Platform::RUBY
15
+ specs = @set.add 'a', '2', Gem::Platform::RUBY
16
+ spec = specs.first
16
17
 
17
18
  assert_equal %w[a-2], @set.specs.map { |t| t.full_name }
18
19
 
@@ -26,12 +27,17 @@ class TestGemResolverLockSet < Gem::TestCase
26
27
  end
27
28
 
28
29
  def test_find_all
29
- @set.add 'a', '2', Gem::Platform::RUBY
30
- @set.add 'b', '2', Gem::Platform::RUBY
30
+ @set.add 'a', '1.a', Gem::Platform::RUBY
31
+ @set.add 'a', '2', Gem::Platform::RUBY
32
+ @set.add 'b', '2', Gem::Platform::RUBY
31
33
 
32
34
  found = @set.find_all dep 'a'
33
35
 
34
36
  assert_equal %w[a-2], found.map { |s| s.full_name }
37
+
38
+ found = @set.find_all dep 'a', '>= 0.a'
39
+
40
+ assert_equal %w[a-1.a a-2], found.map { |s| s.full_name }
35
41
  end
36
42
 
37
43
  def test_load_spec