libgems 0.0.1
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.
- data/ChangeLog +5811 -0
- data/History.txt +887 -0
- data/LICENSE.txt +51 -0
- data/README.md +87 -0
- data/Rakefile +113 -0
- data/lib/gauntlet_libgems.rb +50 -0
- data/lib/libgems.rb +1246 -0
- data/lib/libgems/builder.rb +102 -0
- data/lib/libgems/command.rb +534 -0
- data/lib/libgems/command_manager.rb +182 -0
- data/lib/libgems/commands/build_command.rb +53 -0
- data/lib/libgems/commands/cert_command.rb +86 -0
- data/lib/libgems/commands/check_command.rb +80 -0
- data/lib/libgems/commands/cleanup_command.rb +106 -0
- data/lib/libgems/commands/contents_command.rb +98 -0
- data/lib/libgems/commands/dependency_command.rb +195 -0
- data/lib/libgems/commands/environment_command.rb +133 -0
- data/lib/libgems/commands/fetch_command.rb +67 -0
- data/lib/libgems/commands/generate_index_command.rb +133 -0
- data/lib/libgems/commands/help_command.rb +172 -0
- data/lib/libgems/commands/install_command.rb +178 -0
- data/lib/libgems/commands/list_command.rb +35 -0
- data/lib/libgems/commands/lock_command.rb +110 -0
- data/lib/libgems/commands/mirror_command.rb +111 -0
- data/lib/libgems/commands/outdated_command.rb +33 -0
- data/lib/libgems/commands/owner_command.rb +75 -0
- data/lib/libgems/commands/pristine_command.rb +93 -0
- data/lib/libgems/commands/push_command.rb +56 -0
- data/lib/libgems/commands/query_command.rb +280 -0
- data/lib/libgems/commands/rdoc_command.rb +91 -0
- data/lib/libgems/commands/search_command.rb +31 -0
- data/lib/libgems/commands/server_command.rb +86 -0
- data/lib/libgems/commands/sources_command.rb +157 -0
- data/lib/libgems/commands/specification_command.rb +125 -0
- data/lib/libgems/commands/stale_command.rb +27 -0
- data/lib/libgems/commands/uninstall_command.rb +83 -0
- data/lib/libgems/commands/unpack_command.rb +121 -0
- data/lib/libgems/commands/update_command.rb +160 -0
- data/lib/libgems/commands/which_command.rb +86 -0
- data/lib/libgems/config_file.rb +345 -0
- data/lib/libgems/custom_require.rb +44 -0
- data/lib/libgems/defaults.rb +101 -0
- data/lib/libgems/dependency.rb +227 -0
- data/lib/libgems/dependency_installer.rb +286 -0
- data/lib/libgems/dependency_list.rb +208 -0
- data/lib/libgems/doc_manager.rb +242 -0
- data/lib/libgems/errors.rb +35 -0
- data/lib/libgems/exceptions.rb +91 -0
- data/lib/libgems/ext.rb +18 -0
- data/lib/libgems/ext/builder.rb +56 -0
- data/lib/libgems/ext/configure_builder.rb +25 -0
- data/lib/libgems/ext/ext_conf_builder.rb +24 -0
- data/lib/libgems/ext/rake_builder.rb +39 -0
- data/lib/libgems/format.rb +81 -0
- data/lib/libgems/gem_openssl.rb +92 -0
- data/lib/libgems/gem_path_searcher.rb +100 -0
- data/lib/libgems/gem_runner.rb +79 -0
- data/lib/libgems/gemcutter_utilities.rb +49 -0
- data/lib/libgems/indexer.rb +720 -0
- data/lib/libgems/install_update_options.rb +125 -0
- data/lib/libgems/installer.rb +604 -0
- data/lib/libgems/local_remote_options.rb +135 -0
- data/lib/libgems/old_format.rb +153 -0
- data/lib/libgems/package.rb +97 -0
- data/lib/libgems/package/f_sync_dir.rb +23 -0
- data/lib/libgems/package/tar_header.rb +266 -0
- data/lib/libgems/package/tar_input.rb +222 -0
- data/lib/libgems/package/tar_output.rb +144 -0
- data/lib/libgems/package/tar_reader.rb +106 -0
- data/lib/libgems/package/tar_reader/entry.rb +141 -0
- data/lib/libgems/package/tar_writer.rb +241 -0
- data/lib/libgems/package_task.rb +126 -0
- data/lib/libgems/platform.rb +183 -0
- data/lib/libgems/remote_fetcher.rb +414 -0
- data/lib/libgems/require_paths_builder.rb +18 -0
- data/lib/libgems/requirement.rb +153 -0
- data/lib/libgems/security.rb +814 -0
- data/lib/libgems/server.rb +872 -0
- data/lib/libgems/source_index.rb +597 -0
- data/lib/libgems/source_info_cache.rb +395 -0
- data/lib/libgems/source_info_cache_entry.rb +56 -0
- data/lib/libgems/spec_fetcher.rb +337 -0
- data/lib/libgems/specification.rb +1487 -0
- data/lib/libgems/test_utilities.rb +147 -0
- data/lib/libgems/text.rb +65 -0
- data/lib/libgems/uninstaller.rb +278 -0
- data/lib/libgems/user_interaction.rb +527 -0
- data/lib/libgems/validator.rb +240 -0
- data/lib/libgems/version.rb +316 -0
- data/lib/libgems/version_option.rb +65 -0
- data/lib/rbconfig/datadir.rb +20 -0
- data/test/bogussources.rb +8 -0
- data/test/data/gem-private_key.pem +27 -0
- data/test/data/gem-public_cert.pem +20 -0
- data/test/fake_certlib/openssl.rb +7 -0
- data/test/foo/discover.rb +0 -0
- data/test/gem_installer_test_case.rb +97 -0
- data/test/gem_package_tar_test_case.rb +132 -0
- data/test/gemutilities.rb +605 -0
- data/test/insure_session.rb +43 -0
- data/test/mockgemui.rb +56 -0
- data/test/plugin/exception/libgems_plugin.rb +2 -0
- data/test/plugin/load/libgems_plugin.rb +1 -0
- data/test/plugin/standarderror/libgems_plugin.rb +2 -0
- data/test/private_key.pem +27 -0
- data/test/public_cert.pem +20 -0
- data/test/rubygems_plugin.rb +21 -0
- data/test/simple_gem.rb +66 -0
- data/test/test_config.rb +12 -0
- data/test/test_gem.rb +780 -0
- data/test/test_gem_builder.rb +27 -0
- data/test/test_gem_command.rb +178 -0
- data/test/test_gem_command_manager.rb +207 -0
- data/test/test_gem_commands_build_command.rb +74 -0
- data/test/test_gem_commands_cert_command.rb +124 -0
- data/test/test_gem_commands_check_command.rb +18 -0
- data/test/test_gem_commands_contents_command.rb +156 -0
- data/test/test_gem_commands_dependency_command.rb +216 -0
- data/test/test_gem_commands_environment_command.rb +144 -0
- data/test/test_gem_commands_fetch_command.rb +76 -0
- data/test/test_gem_commands_generate_index_command.rb +135 -0
- data/test/test_gem_commands_install_command.rb +315 -0
- data/test/test_gem_commands_list_command.rb +36 -0
- data/test/test_gem_commands_lock_command.rb +68 -0
- data/test/test_gem_commands_mirror_command.rb +60 -0
- data/test/test_gem_commands_outdated_command.rb +40 -0
- data/test/test_gem_commands_owner_command.rb +105 -0
- data/test/test_gem_commands_pristine_command.rb +108 -0
- data/test/test_gem_commands_push_command.rb +81 -0
- data/test/test_gem_commands_query_command.rb +426 -0
- data/test/test_gem_commands_server_command.rb +59 -0
- data/test/test_gem_commands_sources_command.rb +209 -0
- data/test/test_gem_commands_specification_command.rb +139 -0
- data/test/test_gem_commands_stale_command.rb +38 -0
- data/test/test_gem_commands_uninstall_command.rb +83 -0
- data/test/test_gem_commands_unpack_command.rb +199 -0
- data/test/test_gem_commands_update_command.rb +207 -0
- data/test/test_gem_commands_which_command.rb +66 -0
- data/test/test_gem_config_file.rb +287 -0
- data/test/test_gem_dependency.rb +149 -0
- data/test/test_gem_dependency_installer.rb +661 -0
- data/test/test_gem_dependency_list.rb +230 -0
- data/test/test_gem_doc_manager.rb +31 -0
- data/test/test_gem_ext_configure_builder.rb +84 -0
- data/test/test_gem_ext_ext_conf_builder.rb +173 -0
- data/test/test_gem_ext_rake_builder.rb +81 -0
- data/test/test_gem_format.rb +70 -0
- data/test/test_gem_gem_path_searcher.rb +78 -0
- data/test/test_gem_gem_runner.rb +45 -0
- data/test/test_gem_gemcutter_utilities.rb +103 -0
- data/test/test_gem_indexer.rb +673 -0
- data/test/test_gem_install_update_options.rb +68 -0
- data/test/test_gem_installer.rb +857 -0
- data/test/test_gem_local_remote_options.rb +97 -0
- data/test/test_gem_package_tar_header.rb +130 -0
- data/test/test_gem_package_tar_input.rb +112 -0
- data/test/test_gem_package_tar_output.rb +97 -0
- data/test/test_gem_package_tar_reader.rb +46 -0
- data/test/test_gem_package_tar_reader_entry.rb +109 -0
- data/test/test_gem_package_tar_writer.rb +144 -0
- data/test/test_gem_package_task.rb +59 -0
- data/test/test_gem_platform.rb +264 -0
- data/test/test_gem_remote_fetcher.rb +740 -0
- data/test/test_gem_requirement.rb +292 -0
- data/test/test_gem_server.rb +356 -0
- data/test/test_gem_silent_ui.rb +113 -0
- data/test/test_gem_source_index.rb +461 -0
- data/test/test_gem_spec_fetcher.rb +410 -0
- data/test/test_gem_specification.rb +1334 -0
- data/test/test_gem_stream_ui.rb +218 -0
- data/test/test_gem_text.rb +43 -0
- data/test/test_gem_uninstaller.rb +146 -0
- data/test/test_gem_validator.rb +63 -0
- data/test/test_gem_version.rb +181 -0
- data/test/test_gem_version_option.rb +89 -0
- data/test/test_kernel.rb +59 -0
- metadata +402 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
require File.expand_path('../gemutilities', __FILE__)
|
|
2
|
+
require 'libgems/spec_fetcher'
|
|
3
|
+
|
|
4
|
+
class TestGemSpecFetcher < RubyGemTestCase
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
|
|
9
|
+
@uri = URI.parse @gem_repo
|
|
10
|
+
|
|
11
|
+
util_setup_fake_fetcher
|
|
12
|
+
|
|
13
|
+
@a_pre = quick_gem 'a', '1.a'
|
|
14
|
+
@source_index.add_spec @pl1
|
|
15
|
+
@source_index.add_spec @a_pre
|
|
16
|
+
|
|
17
|
+
@specs = @source_index.gems.sort.map do |name, spec|
|
|
18
|
+
[spec.name, spec.version, spec.original_platform]
|
|
19
|
+
end.sort
|
|
20
|
+
|
|
21
|
+
@latest_specs = @source_index.latest_specs.sort.map do |spec|
|
|
22
|
+
[spec.name, spec.version, spec.original_platform]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
@prerelease_specs = @source_index.prerelease_gems.sort.map do |name, spec|
|
|
26
|
+
[spec.name, spec.version, spec.original_platform]
|
|
27
|
+
end.sort
|
|
28
|
+
|
|
29
|
+
@fetcher.data["#{@gem_repo}specs.#{LibGems.marshal_version}.gz"] =
|
|
30
|
+
util_gzip(Marshal.dump(@specs))
|
|
31
|
+
|
|
32
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}.gz"] =
|
|
33
|
+
util_gzip(Marshal.dump(@latest_specs))
|
|
34
|
+
|
|
35
|
+
@fetcher.data["#{@gem_repo}prerelease_specs.#{LibGems.marshal_version}.gz"] =
|
|
36
|
+
util_gzip(Marshal.dump(@prerelease_specs))
|
|
37
|
+
|
|
38
|
+
@sf = LibGems::SpecFetcher.new
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_fetch_all
|
|
42
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
|
|
43
|
+
util_zip(Marshal.dump(@a1))
|
|
44
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] =
|
|
45
|
+
util_zip(Marshal.dump(@a2))
|
|
46
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] =
|
|
47
|
+
util_zip(Marshal.dump(@a_pre))
|
|
48
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a3a.spec_name}.rz"] =
|
|
49
|
+
util_zip(Marshal.dump(@a3a))
|
|
50
|
+
|
|
51
|
+
dep = LibGems::Dependency.new 'a', 1
|
|
52
|
+
|
|
53
|
+
specs_and_sources = @sf.fetch dep, true
|
|
54
|
+
|
|
55
|
+
spec_names = specs_and_sources.map do |spec, source_uri|
|
|
56
|
+
[spec.full_name, source_uri]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
expected = [[@a1.full_name, @gem_repo], [@a2.full_name, @gem_repo]]
|
|
60
|
+
|
|
61
|
+
assert_equal expected, spec_names
|
|
62
|
+
|
|
63
|
+
assert_same specs_and_sources.first.last, specs_and_sources.last.last
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_fetch_latest
|
|
67
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
|
|
68
|
+
util_zip(Marshal.dump(@a1))
|
|
69
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] =
|
|
70
|
+
util_zip(Marshal.dump(@a2))
|
|
71
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] =
|
|
72
|
+
util_zip(Marshal.dump(@a_pre))
|
|
73
|
+
|
|
74
|
+
dep = LibGems::Dependency.new 'a', 1
|
|
75
|
+
specs_and_sources = @sf.fetch dep
|
|
76
|
+
|
|
77
|
+
spec_names = specs_and_sources.map do |spec, source_uri|
|
|
78
|
+
[spec.full_name, source_uri]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
assert_equal [[@a2.full_name, @gem_repo]], spec_names
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_fetch_prerelease
|
|
85
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
|
|
86
|
+
util_zip(Marshal.dump(@a1))
|
|
87
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] =
|
|
88
|
+
util_zip(Marshal.dump(@a2))
|
|
89
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] =
|
|
90
|
+
util_zip(Marshal.dump(@a_pre))
|
|
91
|
+
|
|
92
|
+
dep = LibGems::Dependency.new 'a', '1.a'
|
|
93
|
+
specs_and_sources = @sf.fetch dep, false, true, true
|
|
94
|
+
|
|
95
|
+
spec_names = specs_and_sources.map do |spec, source_uri|
|
|
96
|
+
[spec.full_name, source_uri]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
assert_equal [[@a_pre.full_name, @gem_repo]], spec_names
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_fetch_platform
|
|
103
|
+
util_set_arch 'i386-linux'
|
|
104
|
+
|
|
105
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
|
|
106
|
+
util_zip(Marshal.dump(@pl1))
|
|
107
|
+
|
|
108
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
109
|
+
specs_and_sources = @sf.fetch dep
|
|
110
|
+
|
|
111
|
+
spec_names = specs_and_sources.map do |spec, source_uri|
|
|
112
|
+
[spec.full_name, source_uri]
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
assert_equal [[@pl1.full_name, @gem_repo]], spec_names
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_fetch_with_errors_mismatched_platform
|
|
119
|
+
util_set_arch 'hrpa-989'
|
|
120
|
+
|
|
121
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
|
|
122
|
+
util_zip(Marshal.dump(@pl1))
|
|
123
|
+
|
|
124
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
125
|
+
specs_and_sources, errors = @sf.fetch_with_errors dep
|
|
126
|
+
|
|
127
|
+
assert_equal 0, specs_and_sources.size
|
|
128
|
+
assert_equal 1, errors.size
|
|
129
|
+
|
|
130
|
+
assert_equal "i386-linux", errors[0].platforms.first
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_fetch_spec
|
|
134
|
+
spec_uri = "#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}"
|
|
135
|
+
@fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1))
|
|
136
|
+
|
|
137
|
+
spec = @sf.fetch_spec ['a', LibGems::Version.new(1), 'ruby'], @uri
|
|
138
|
+
assert_equal @a1.full_name, spec.full_name
|
|
139
|
+
|
|
140
|
+
cache_dir = @sf.cache_dir URI.parse(spec_uri)
|
|
141
|
+
|
|
142
|
+
cache_file = File.join cache_dir, @a1.spec_name
|
|
143
|
+
|
|
144
|
+
assert File.exist?(cache_file)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def test_fetch_spec_cached
|
|
148
|
+
spec_uri = "#{@gem_repo}/#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}"
|
|
149
|
+
@fetcher.data["#{spec_uri}.rz"] = nil
|
|
150
|
+
|
|
151
|
+
cache_dir = @sf.cache_dir URI.parse(spec_uri)
|
|
152
|
+
FileUtils.mkdir_p cache_dir
|
|
153
|
+
|
|
154
|
+
cache_file = File.join cache_dir, @a1.spec_name
|
|
155
|
+
|
|
156
|
+
open cache_file, 'wb' do |io|
|
|
157
|
+
Marshal.dump @a1, io
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
spec = @sf.fetch_spec ['a', LibGems::Version.new(1), 'ruby'], @uri
|
|
161
|
+
assert_equal @a1.full_name, spec.full_name
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_fetch_spec_platform
|
|
165
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
|
|
166
|
+
util_zip(Marshal.dump(@pl1))
|
|
167
|
+
|
|
168
|
+
spec = @sf.fetch_spec ['pl', LibGems::Version.new(1), 'i386-linux'], @uri
|
|
169
|
+
|
|
170
|
+
assert_equal @pl1.full_name, spec.full_name
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_fetch_spec_platform_ruby
|
|
174
|
+
@fetcher.data["#{@gem_repo}#{LibGems::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
|
|
175
|
+
util_zip(Marshal.dump(@a1))
|
|
176
|
+
|
|
177
|
+
spec = @sf.fetch_spec ['a', LibGems::Version.new(1), nil], @uri
|
|
178
|
+
assert_equal @a1.full_name, spec.full_name
|
|
179
|
+
|
|
180
|
+
spec = @sf.fetch_spec ['a', LibGems::Version.new(1), ''], @uri
|
|
181
|
+
assert_equal @a1.full_name, spec.full_name
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def test_find_matching_all
|
|
185
|
+
dep = LibGems::Dependency.new 'a', 1
|
|
186
|
+
specs = @sf.find_matching dep, true
|
|
187
|
+
|
|
188
|
+
expected = [
|
|
189
|
+
[['a', LibGems::Version.new(1), LibGems::Platform::RUBY], @gem_repo],
|
|
190
|
+
[['a', LibGems::Version.new(2), LibGems::Platform::RUBY], @gem_repo],
|
|
191
|
+
]
|
|
192
|
+
|
|
193
|
+
assert_equal expected, specs
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def test_find_matching_latest
|
|
197
|
+
dep = LibGems::Dependency.new 'a', 1
|
|
198
|
+
specs = @sf.find_matching dep
|
|
199
|
+
|
|
200
|
+
expected = [
|
|
201
|
+
[['a', LibGems::Version.new(2), LibGems::Platform::RUBY], @gem_repo],
|
|
202
|
+
]
|
|
203
|
+
|
|
204
|
+
assert_equal expected, specs
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def test_find_matching_prerelease
|
|
208
|
+
dep = LibGems::Dependency.new 'a', '1.a'
|
|
209
|
+
specs = @sf.find_matching dep, false, true, true
|
|
210
|
+
|
|
211
|
+
expected = [
|
|
212
|
+
[['a', LibGems::Version.new('1.a'), LibGems::Platform::RUBY], @gem_repo],
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
assert_equal expected, specs
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def test_find_matching_platform
|
|
219
|
+
util_set_arch 'i386-linux'
|
|
220
|
+
|
|
221
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
222
|
+
specs = @sf.find_matching dep
|
|
223
|
+
|
|
224
|
+
expected = [
|
|
225
|
+
[['pl', LibGems::Version.new(1), 'i386-linux'], @gem_repo],
|
|
226
|
+
]
|
|
227
|
+
|
|
228
|
+
assert_equal expected, specs
|
|
229
|
+
|
|
230
|
+
util_set_arch 'i386-freebsd6'
|
|
231
|
+
|
|
232
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
233
|
+
specs = @sf.find_matching dep
|
|
234
|
+
|
|
235
|
+
assert_equal [], specs
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def test_find_matching_with_errors_matched_platform
|
|
239
|
+
util_set_arch 'i386-linux'
|
|
240
|
+
|
|
241
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
242
|
+
specs, errors = @sf.find_matching_with_errors dep
|
|
243
|
+
|
|
244
|
+
expected = [
|
|
245
|
+
[['pl', LibGems::Version.new(1), 'i386-linux'], @gem_repo],
|
|
246
|
+
]
|
|
247
|
+
|
|
248
|
+
assert_equal expected, specs
|
|
249
|
+
assert_equal 0, errors.size
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def test_find_matching_with_errors_invalid_platform
|
|
253
|
+
util_set_arch 'hrpa-899'
|
|
254
|
+
|
|
255
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
256
|
+
specs, errors = @sf.find_matching_with_errors dep
|
|
257
|
+
|
|
258
|
+
assert_equal 0, specs.size
|
|
259
|
+
|
|
260
|
+
assert_equal 1, errors.size
|
|
261
|
+
|
|
262
|
+
assert_equal "i386-linux", errors[0].platforms.first
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def test_find_all_platforms
|
|
266
|
+
util_set_arch 'i386-freebsd6'
|
|
267
|
+
|
|
268
|
+
dep = LibGems::Dependency.new 'pl', 1
|
|
269
|
+
specs = @sf.find_matching dep, false, false
|
|
270
|
+
|
|
271
|
+
expected = [
|
|
272
|
+
[['pl', LibGems::Version.new(1), 'i386-linux'], @gem_repo],
|
|
273
|
+
]
|
|
274
|
+
|
|
275
|
+
assert_equal expected, specs
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def test_list
|
|
279
|
+
specs = @sf.list
|
|
280
|
+
|
|
281
|
+
assert_equal [@uri], specs.keys
|
|
282
|
+
assert_equal @latest_specs, specs[@uri].sort
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_list_all
|
|
286
|
+
specs = @sf.list true
|
|
287
|
+
|
|
288
|
+
assert_equal [@uri], specs.keys
|
|
289
|
+
|
|
290
|
+
assert_equal([["a", LibGems::Version.new("1"), "ruby"],
|
|
291
|
+
["a", LibGems::Version.new("2"), "ruby"],
|
|
292
|
+
["a_evil", LibGems::Version.new("9"), "ruby"],
|
|
293
|
+
["c", LibGems::Version.new("1.2"), "ruby"],
|
|
294
|
+
["pl", LibGems::Version.new("1"), "i386-linux"]],
|
|
295
|
+
specs[@uri].sort)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def test_list_cache
|
|
299
|
+
specs = @sf.list
|
|
300
|
+
|
|
301
|
+
refute specs[@uri].empty?
|
|
302
|
+
|
|
303
|
+
@fetcher.data["#{@gem_repo}/latest_specs.#{LibGems.marshal_version}.gz"] = nil
|
|
304
|
+
|
|
305
|
+
cached_specs = @sf.list
|
|
306
|
+
|
|
307
|
+
assert_equal specs, cached_specs
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def test_list_cache_all
|
|
311
|
+
specs = @sf.list true
|
|
312
|
+
|
|
313
|
+
refute specs[@uri].empty?
|
|
314
|
+
|
|
315
|
+
@fetcher.data["#{@gem_repo}/specs.#{LibGems.marshal_version}.gz"] = nil
|
|
316
|
+
|
|
317
|
+
cached_specs = @sf.list true
|
|
318
|
+
|
|
319
|
+
assert_equal specs, cached_specs
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def test_list_latest_all
|
|
323
|
+
specs = @sf.list false
|
|
324
|
+
|
|
325
|
+
assert_equal [@latest_specs], specs.values
|
|
326
|
+
|
|
327
|
+
specs = @sf.list true
|
|
328
|
+
|
|
329
|
+
assert_equal([[["a", LibGems::Version.new("1"), "ruby"],
|
|
330
|
+
["a", LibGems::Version.new("2"), "ruby"],
|
|
331
|
+
["a_evil", LibGems::Version.new("9"), "ruby"],
|
|
332
|
+
["c", LibGems::Version.new("1.2"), "ruby"],
|
|
333
|
+
["pl", LibGems::Version.new("1"), "i386-linux"]]],
|
|
334
|
+
specs.values, 'specs file not loaded')
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def test_list_prerelease
|
|
338
|
+
specs = @sf.list false, true
|
|
339
|
+
|
|
340
|
+
assert_equal @prerelease_specs, specs[@uri].sort
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def test_load_specs
|
|
344
|
+
specs = @sf.load_specs @uri, 'specs'
|
|
345
|
+
|
|
346
|
+
expected = [
|
|
347
|
+
['a', LibGems::Version.new('1.a'), LibGems::Platform::RUBY],
|
|
348
|
+
['a', LibGems::Version.new(1), LibGems::Platform::RUBY],
|
|
349
|
+
['a', LibGems::Version.new(2), LibGems::Platform::RUBY],
|
|
350
|
+
['a', LibGems::Version.new('3.a'), LibGems::Platform::RUBY],
|
|
351
|
+
['a_evil', LibGems::Version.new(9), LibGems::Platform::RUBY],
|
|
352
|
+
['c', LibGems::Version.new('1.2'), LibGems::Platform::RUBY],
|
|
353
|
+
['pl', LibGems::Version.new(1), 'i386-linux'],
|
|
354
|
+
]
|
|
355
|
+
|
|
356
|
+
assert_equal expected, specs
|
|
357
|
+
|
|
358
|
+
cache_dir = File.join LibGems.user_home, '.gem', 'specs', 'gems.example.com%80'
|
|
359
|
+
assert File.exist?(cache_dir), "#{cache_dir} does not exist"
|
|
360
|
+
|
|
361
|
+
cache_file = File.join cache_dir, "specs.#{LibGems.marshal_version}"
|
|
362
|
+
assert File.exist?(cache_file)
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def test_load_specs_cached
|
|
366
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}.gz"] = nil
|
|
367
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}"] =
|
|
368
|
+
' ' * Marshal.dump(@latest_specs).length
|
|
369
|
+
|
|
370
|
+
cache_dir = File.join LibGems.user_home, '.gem', 'specs', 'gems.example.com%80'
|
|
371
|
+
|
|
372
|
+
FileUtils.mkdir_p cache_dir
|
|
373
|
+
|
|
374
|
+
cache_file = File.join cache_dir, "latest_specs.#{LibGems.marshal_version}"
|
|
375
|
+
|
|
376
|
+
open cache_file, 'wb' do |io|
|
|
377
|
+
Marshal.dump @latest_specs, io
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
latest_specs = @sf.load_specs @uri, 'latest_specs'
|
|
381
|
+
|
|
382
|
+
assert_equal @latest_specs, latest_specs
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def test_load_specs_cached_empty
|
|
386
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}.gz"] =
|
|
387
|
+
proc do
|
|
388
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}.gz"] =
|
|
389
|
+
util_gzip(Marshal.dump(@latest_specs))
|
|
390
|
+
|
|
391
|
+
nil
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
cache_dir = File.join LibGems.user_home, '.gem', 'specs', 'gems.example.com%80'
|
|
395
|
+
|
|
396
|
+
FileUtils.mkdir_p cache_dir
|
|
397
|
+
|
|
398
|
+
cache_file = File.join cache_dir, "latest_specs.#{LibGems.marshal_version}"
|
|
399
|
+
|
|
400
|
+
open cache_file, 'wb' do |io|
|
|
401
|
+
io.write Marshal.dump(@latest_specs)[0, 10]
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
latest_specs = @sf.load_specs @uri, 'latest_specs'
|
|
405
|
+
|
|
406
|
+
assert_equal @latest_specs, latest_specs
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
end
|
|
410
|
+
|
|
@@ -0,0 +1,1334 @@
|
|
|
1
|
+
require File.expand_path('../gemutilities', __FILE__)
|
|
2
|
+
require 'stringio'
|
|
3
|
+
require 'libgems/specification'
|
|
4
|
+
|
|
5
|
+
class TestGemSpecification < RubyGemTestCase
|
|
6
|
+
|
|
7
|
+
LEGACY_YAML_SPEC = <<-EOF
|
|
8
|
+
--- !ruby/object:LibGems::Specification
|
|
9
|
+
rubygems_version: "1.0"
|
|
10
|
+
name: keyedlist
|
|
11
|
+
version: !ruby/object:LibGems::Version
|
|
12
|
+
version: 0.4.0
|
|
13
|
+
date: 2004-03-28 15:37:49.828000 +02:00
|
|
14
|
+
platform:
|
|
15
|
+
summary: A Hash which automatically computes keys.
|
|
16
|
+
require_paths:
|
|
17
|
+
- lib
|
|
18
|
+
files:
|
|
19
|
+
- lib/keyedlist.rb
|
|
20
|
+
autorequire: keyedlist
|
|
21
|
+
author: Florian Gross
|
|
22
|
+
email: flgr@ccan.de
|
|
23
|
+
has_rdoc: true
|
|
24
|
+
EOF
|
|
25
|
+
|
|
26
|
+
LEGACY_RUBY_SPEC = <<-EOF
|
|
27
|
+
LibGems::Specification.new do |s|
|
|
28
|
+
s.name = %q{keyedlist}
|
|
29
|
+
s.version = %q{0.4.0}
|
|
30
|
+
s.has_rdoc = true
|
|
31
|
+
s.summary = %q{A Hash which automatically computes keys.}
|
|
32
|
+
s.files = ["lib/keyedlist.rb"]
|
|
33
|
+
s.require_paths = ["lib"]
|
|
34
|
+
s.autorequire = %q{keyedlist}
|
|
35
|
+
s.author = %q{Florian Gross}
|
|
36
|
+
s.email = %q{flgr@ccan.de}
|
|
37
|
+
end
|
|
38
|
+
EOF
|
|
39
|
+
|
|
40
|
+
RUBYGEMS_SPEC = <<-EOF
|
|
41
|
+
Gem::Specification.new do |s|
|
|
42
|
+
s.name = 'rubygems-compatible'
|
|
43
|
+
s.version = '1.0'
|
|
44
|
+
end
|
|
45
|
+
EOF
|
|
46
|
+
|
|
47
|
+
PACKAGED_YAML_SPEC = <<-EOF
|
|
48
|
+
--- !ruby/object:LibGems::Specification
|
|
49
|
+
name: rake
|
|
50
|
+
version: !ruby/object:LibGems::Version
|
|
51
|
+
version: 0.8.6
|
|
52
|
+
EOF
|
|
53
|
+
|
|
54
|
+
PACKAGED_RUBYGEMS_YAML_SPEC = <<-EOF
|
|
55
|
+
--- !ruby/object:Gem::Specification
|
|
56
|
+
name: rake
|
|
57
|
+
version: !ruby/object:Gem::Version
|
|
58
|
+
version: 0.8.6
|
|
59
|
+
EOF
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def setup
|
|
63
|
+
super
|
|
64
|
+
|
|
65
|
+
@a1 = quick_gem 'a', '1' do |s|
|
|
66
|
+
s.executable = 'exec'
|
|
67
|
+
s.extensions << 'ext/a/extconf.rb'
|
|
68
|
+
s.has_rdoc = 'true'
|
|
69
|
+
s.test_file = 'test/suite.rb'
|
|
70
|
+
s.requirements << 'A working computer'
|
|
71
|
+
s.rubyforge_project = 'example'
|
|
72
|
+
s.license = 'MIT'
|
|
73
|
+
|
|
74
|
+
s.add_dependency 'rake', '> 0.4'
|
|
75
|
+
s.add_dependency 'jabber4r', '> 0.0.0'
|
|
76
|
+
s.add_dependency 'pqa', ['> 0.4', '<= 0.6']
|
|
77
|
+
|
|
78
|
+
s.mark_version
|
|
79
|
+
s.files = %w[lib/code.rb]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
@a2 = quick_gem 'a', '2' do |s|
|
|
83
|
+
s.files = %w[lib/code.rb]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
FileUtils.mkdir_p File.join(@tempdir, 'bin')
|
|
87
|
+
File.open File.join(@tempdir, 'bin', 'exec'), 'w' do |fp|
|
|
88
|
+
fp.puts "#!#{LibGems.ruby}"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
@current_version = LibGems::Specification::CURRENT_SPECIFICATION_VERSION
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_self_attribute_names
|
|
95
|
+
expected_value = %w[
|
|
96
|
+
authors
|
|
97
|
+
autorequire
|
|
98
|
+
bindir
|
|
99
|
+
cert_chain
|
|
100
|
+
date
|
|
101
|
+
default_executable
|
|
102
|
+
dependencies
|
|
103
|
+
description
|
|
104
|
+
email
|
|
105
|
+
executables
|
|
106
|
+
extensions
|
|
107
|
+
extra_rdoc_files
|
|
108
|
+
files
|
|
109
|
+
has_rdoc
|
|
110
|
+
homepage
|
|
111
|
+
licenses
|
|
112
|
+
name
|
|
113
|
+
platform
|
|
114
|
+
post_install_message
|
|
115
|
+
rdoc_options
|
|
116
|
+
require_paths
|
|
117
|
+
required_ruby_version
|
|
118
|
+
required_rubygems_version
|
|
119
|
+
requirements
|
|
120
|
+
rubyforge_project
|
|
121
|
+
rubygems_version
|
|
122
|
+
signing_key
|
|
123
|
+
specification_version
|
|
124
|
+
summary
|
|
125
|
+
test_files
|
|
126
|
+
version
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
actual_value = LibGems::Specification.attribute_names.map { |a| a.to_s }.sort
|
|
130
|
+
|
|
131
|
+
assert_equal expected_value, actual_value
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_self__load_future
|
|
135
|
+
spec = LibGems::Specification.new
|
|
136
|
+
spec.name = 'a'
|
|
137
|
+
spec.version = '1'
|
|
138
|
+
spec.specification_version = @current_version + 1
|
|
139
|
+
|
|
140
|
+
new_spec = Marshal.load Marshal.dump(spec)
|
|
141
|
+
|
|
142
|
+
assert_equal 'a', new_spec.name
|
|
143
|
+
assert_equal LibGems::Version.new(1), new_spec.version
|
|
144
|
+
assert_equal @current_version, new_spec.specification_version
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def test_self_load
|
|
148
|
+
spec = File.join @gemhome, 'specifications', @a2.spec_name
|
|
149
|
+
gs = LibGems::Specification.load spec
|
|
150
|
+
|
|
151
|
+
assert_equal @a2, gs
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_self_load_legacy_ruby
|
|
155
|
+
spec = LibGems.gemspec_eval LEGACY_RUBY_SPEC
|
|
156
|
+
assert_equal 'keyedlist', spec.name
|
|
157
|
+
assert_equal '0.4.0', spec.version.to_s
|
|
158
|
+
assert_equal true, spec.has_rdoc?
|
|
159
|
+
assert_equal LibGems::Specification::TODAY, spec.date
|
|
160
|
+
assert spec.required_ruby_version.satisfied_by?(LibGems::Version.new('1'))
|
|
161
|
+
assert_equal false, spec.has_unit_tests?
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_self_load_rubygems_style
|
|
165
|
+
spec = LibGems.gemspec_eval RUBYGEMS_SPEC
|
|
166
|
+
assert_equal LibGems::Specification, spec.class
|
|
167
|
+
assert_equal 'rubygems-compatible', spec.name
|
|
168
|
+
assert_equal '1.0', spec.version.to_s
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_package_yaml_load
|
|
172
|
+
spec = LibGems::Specification.from_yaml(PACKAGED_YAML_SPEC)
|
|
173
|
+
assert_equal LibGems::Specification, spec.class
|
|
174
|
+
assert_equal 'rake', spec.name
|
|
175
|
+
assert_equal '0.8.6', spec.version.to_s
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_rubygems_package_yaml_load
|
|
179
|
+
spec = LibGems::Specification.from_yaml(PACKAGED_RUBYGEMS_YAML_SPEC)
|
|
180
|
+
assert_equal LibGems::Specification, spec.class
|
|
181
|
+
assert_equal 'rake', spec.name
|
|
182
|
+
assert_equal '0.8.6', spec.version.to_s
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_self_normalize_yaml_input_with_183_yaml
|
|
186
|
+
input = "!ruby/object:LibGems::Specification "
|
|
187
|
+
assert_equal "--- #{input}", LibGems::Specification.normalize_yaml_input(input)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def test_self_normalize_yaml_input_with_non_183_yaml
|
|
191
|
+
input = "--- !ruby/object:LibGems::Specification "
|
|
192
|
+
assert_equal input, LibGems::Specification.normalize_yaml_input(input)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def test_self_normalize_yaml_input_with_183_io
|
|
196
|
+
input = "!ruby/object:LibGems::Specification "
|
|
197
|
+
assert_equal "--- #{input}",
|
|
198
|
+
LibGems::Specification.normalize_yaml_input(StringIO.new(input))
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_self_normalize_yaml_input_with_non_183_io
|
|
202
|
+
input = "--- !ruby/object:LibGems::Specification "
|
|
203
|
+
assert_equal input,
|
|
204
|
+
LibGems::Specification.normalize_yaml_input(StringIO.new(input))
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def test_self_normalize_yaml_input_with_192_yaml
|
|
208
|
+
input = "--- !ruby/object:LibGems::Specification \nblah: !!null \n"
|
|
209
|
+
expected = "--- !ruby/object:LibGems::Specification \nblah: \n"
|
|
210
|
+
|
|
211
|
+
assert_equal expected, LibGems::Specification.normalize_yaml_input(input)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_initialize
|
|
215
|
+
spec = LibGems::Specification.new do |s|
|
|
216
|
+
s.name = "blah"
|
|
217
|
+
s.version = "1.3.5"
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
assert_equal "blah", spec.name
|
|
221
|
+
assert_equal "1.3.5", spec.version.to_s
|
|
222
|
+
assert_equal LibGems::Platform::RUBY, spec.platform
|
|
223
|
+
assert_equal nil, spec.summary
|
|
224
|
+
assert_equal [], spec.files
|
|
225
|
+
|
|
226
|
+
assert_equal [], spec.test_files
|
|
227
|
+
assert_equal [], spec.rdoc_options
|
|
228
|
+
assert_equal [], spec.extra_rdoc_files
|
|
229
|
+
assert_equal [], spec.executables
|
|
230
|
+
assert_equal [], spec.extensions
|
|
231
|
+
assert_equal [], spec.requirements
|
|
232
|
+
assert_equal [], spec.dependencies
|
|
233
|
+
assert_equal 'bin', spec.bindir
|
|
234
|
+
assert_equal true, spec.has_rdoc
|
|
235
|
+
assert_equal true, spec.has_rdoc?
|
|
236
|
+
assert_equal '>= 0', spec.required_ruby_version.to_s
|
|
237
|
+
assert_equal '>= 0', spec.required_rubygems_version.to_s
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def test_initialize_future
|
|
241
|
+
version = LibGems::Specification::CURRENT_SPECIFICATION_VERSION + 1
|
|
242
|
+
spec = LibGems::Specification.new do |s|
|
|
243
|
+
s.name = "blah"
|
|
244
|
+
s.version = "1.3.5"
|
|
245
|
+
|
|
246
|
+
s.specification_version = version
|
|
247
|
+
|
|
248
|
+
s.new_unknown_attribute = "a value"
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
assert_equal "blah", spec.name
|
|
252
|
+
assert_equal "1.3.5", spec.version.to_s
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def test_initialize_copy
|
|
256
|
+
spec = LibGems::Specification.new do |s|
|
|
257
|
+
s.name = "blah"
|
|
258
|
+
s.version = "1.3.5"
|
|
259
|
+
s.summary = 'summary'
|
|
260
|
+
s.description = 'description'
|
|
261
|
+
s.authors = 'author a', 'author b'
|
|
262
|
+
s.licenses = 'BSD'
|
|
263
|
+
s.files = 'lib/file.rb'
|
|
264
|
+
s.test_files = 'test/file.rb'
|
|
265
|
+
s.rdoc_options = '--foo'
|
|
266
|
+
s.extra_rdoc_files = 'README.txt'
|
|
267
|
+
s.executables = 'exec'
|
|
268
|
+
s.extensions = 'ext/extconf.rb'
|
|
269
|
+
s.requirements = 'requirement'
|
|
270
|
+
s.add_dependency 'some_gem'
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
new_spec = spec.dup
|
|
274
|
+
|
|
275
|
+
assert_equal "blah", spec.name
|
|
276
|
+
assert_same spec.name, new_spec.name
|
|
277
|
+
|
|
278
|
+
assert_equal "1.3.5", spec.version.to_s
|
|
279
|
+
assert_same spec.version, new_spec.version
|
|
280
|
+
|
|
281
|
+
assert_equal LibGems::Platform::RUBY, spec.platform
|
|
282
|
+
assert_same spec.platform, new_spec.platform
|
|
283
|
+
|
|
284
|
+
assert_equal 'summary', spec.summary
|
|
285
|
+
assert_same spec.summary, new_spec.summary
|
|
286
|
+
|
|
287
|
+
assert_equal %w[lib/file.rb test/file.rb bin/exec README.txt
|
|
288
|
+
ext/extconf.rb],
|
|
289
|
+
spec.files
|
|
290
|
+
refute_same spec.files, new_spec.files, 'files'
|
|
291
|
+
|
|
292
|
+
assert_equal %w[test/file.rb], spec.test_files
|
|
293
|
+
refute_same spec.test_files, new_spec.test_files, 'test_files'
|
|
294
|
+
|
|
295
|
+
assert_equal %w[--foo], spec.rdoc_options
|
|
296
|
+
refute_same spec.rdoc_options, new_spec.rdoc_options, 'rdoc_options'
|
|
297
|
+
|
|
298
|
+
assert_equal %w[README.txt], spec.extra_rdoc_files
|
|
299
|
+
refute_same spec.extra_rdoc_files, new_spec.extra_rdoc_files,
|
|
300
|
+
'extra_rdoc_files'
|
|
301
|
+
|
|
302
|
+
assert_equal %w[exec], spec.executables
|
|
303
|
+
refute_same spec.executables, new_spec.executables, 'executables'
|
|
304
|
+
|
|
305
|
+
assert_equal %w[ext/extconf.rb], spec.extensions
|
|
306
|
+
refute_same spec.extensions, new_spec.extensions, 'extensions'
|
|
307
|
+
|
|
308
|
+
assert_equal %w[requirement], spec.requirements
|
|
309
|
+
refute_same spec.requirements, new_spec.requirements, 'requirements'
|
|
310
|
+
|
|
311
|
+
assert_equal [LibGems::Dependency.new('some_gem', LibGems::Requirement.default)],
|
|
312
|
+
spec.dependencies
|
|
313
|
+
refute_same spec.dependencies, new_spec.dependencies, 'dependencies'
|
|
314
|
+
|
|
315
|
+
assert_equal 'bin', spec.bindir
|
|
316
|
+
assert_same spec.bindir, new_spec.bindir
|
|
317
|
+
|
|
318
|
+
assert_equal true, spec.has_rdoc
|
|
319
|
+
assert_same spec.has_rdoc, new_spec.has_rdoc
|
|
320
|
+
|
|
321
|
+
assert_equal '>= 0', spec.required_ruby_version.to_s
|
|
322
|
+
assert_same spec.required_ruby_version, new_spec.required_ruby_version
|
|
323
|
+
|
|
324
|
+
assert_equal '>= 0', spec.required_rubygems_version.to_s
|
|
325
|
+
assert_same spec.required_rubygems_version,
|
|
326
|
+
new_spec.required_rubygems_version
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
def test__dump
|
|
330
|
+
@a2.platform = LibGems::Platform.local
|
|
331
|
+
@a2.instance_variable_set :@original_platform, 'old_platform'
|
|
332
|
+
|
|
333
|
+
data = Marshal.dump @a2
|
|
334
|
+
|
|
335
|
+
same_spec = Marshal.load data
|
|
336
|
+
|
|
337
|
+
assert_equal 'old_platform', same_spec.original_platform
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def test_add_dependency_with_explicit_type
|
|
341
|
+
gem = quick_gem "awesome", "1.0" do |awesome|
|
|
342
|
+
awesome.add_development_dependency "monkey"
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
monkey = gem.dependencies.detect { |d| d.name == "monkey" }
|
|
346
|
+
assert_equal(:development, monkey.type)
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def test_author
|
|
350
|
+
assert_equal 'A User', @a1.author
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def test_authors
|
|
354
|
+
assert_equal ['A User'], @a1.authors
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
def test_bindir_equals
|
|
358
|
+
@a1.bindir = 'apps'
|
|
359
|
+
|
|
360
|
+
assert_equal 'apps', @a1.bindir
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def test_bindir_equals_nil
|
|
364
|
+
@a2.bindir = nil
|
|
365
|
+
@a2.executable = 'app'
|
|
366
|
+
|
|
367
|
+
assert_equal nil, @a2.bindir
|
|
368
|
+
assert_equal %w[lib/code.rb app], @a2.files
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def test_date
|
|
372
|
+
assert_equal LibGems::Specification::TODAY, @a1.date
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def test_date_equals_date
|
|
376
|
+
@a1.date = Date.new(2003, 9, 17)
|
|
377
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def test_date_equals_string
|
|
381
|
+
@a1.date = '2003-09-17'
|
|
382
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def test_date_equals_time
|
|
386
|
+
@a1.date = Time.local(2003, 9, 17, 0,0,0)
|
|
387
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def test_date_equals_time_local
|
|
391
|
+
# HACK PDT
|
|
392
|
+
@a1.date = Time.local(2003, 9, 17, 19,50,0)
|
|
393
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
def test_date_equals_time_utc
|
|
397
|
+
# HACK PDT
|
|
398
|
+
@a1.date = Time.local(2003, 9, 17, 19,50,0)
|
|
399
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def test_default_executable
|
|
403
|
+
assert_equal 'exec', @a1.default_executable
|
|
404
|
+
|
|
405
|
+
@a1.default_executable = nil
|
|
406
|
+
@a1.instance_variable_set :@executables, nil
|
|
407
|
+
assert_equal nil, @a1.default_executable
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
def test_dependencies
|
|
411
|
+
rake = LibGems::Dependency.new 'rake', '> 0.4'
|
|
412
|
+
jabber = LibGems::Dependency.new 'jabber4r', '> 0.0.0'
|
|
413
|
+
pqa = LibGems::Dependency.new 'pqa', ['> 0.4', '<= 0.6']
|
|
414
|
+
|
|
415
|
+
assert_equal [rake, jabber, pqa], @a1.dependencies
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def test_dependencies_scoped_by_type
|
|
419
|
+
gem = quick_gem "awesome", "1.0" do |awesome|
|
|
420
|
+
awesome.add_runtime_dependency "bonobo", []
|
|
421
|
+
awesome.add_development_dependency "monkey", []
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
bonobo = LibGems::Dependency.new("bonobo", [])
|
|
425
|
+
monkey = LibGems::Dependency.new("monkey", [], :development)
|
|
426
|
+
|
|
427
|
+
assert_equal([bonobo, monkey], gem.dependencies)
|
|
428
|
+
assert_equal([bonobo], gem.runtime_dependencies)
|
|
429
|
+
assert_equal([monkey], gem.development_dependencies)
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
def test_description
|
|
433
|
+
assert_equal 'This is a test description', @a1.description
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def test_eql_eh
|
|
437
|
+
g1 = quick_gem 'gem'
|
|
438
|
+
g2 = quick_gem 'gem'
|
|
439
|
+
|
|
440
|
+
assert_equal g1, g2
|
|
441
|
+
assert_equal g1.hash, g2.hash
|
|
442
|
+
assert_equal true, g1.eql?(g2)
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def test_equals2
|
|
446
|
+
assert_equal @a1, @a1
|
|
447
|
+
assert_equal @a1, @a1.dup
|
|
448
|
+
refute_equal @a1, @a2
|
|
449
|
+
refute_equal @a1, Object.new
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# The cgikit specification was reported to be causing trouble in at least
|
|
453
|
+
# one version of SlimGems, so we test explicitly for it.
|
|
454
|
+
def test_equals2_cgikit
|
|
455
|
+
cgikit = LibGems::Specification.new do |s|
|
|
456
|
+
s.name = %q{cgikit}
|
|
457
|
+
s.version = "1.1.0"
|
|
458
|
+
s.date = %q{2004-03-13}
|
|
459
|
+
s.summary = %q{CGIKit is a componented-oriented web application } +
|
|
460
|
+
%q{framework like Apple Computers WebObjects. } +
|
|
461
|
+
%{This framework services Model-View-Controller architecture } +
|
|
462
|
+
%q{programming by components based on a HTML file, a definition } +
|
|
463
|
+
%q{file and a Ruby source. }
|
|
464
|
+
s.email = %q{info@spice-of-life.net}
|
|
465
|
+
s.homepage = %q{http://www.spice-of-life.net/download/cgikit/}
|
|
466
|
+
s.autorequire = %q{cgikit}
|
|
467
|
+
s.bindir = nil
|
|
468
|
+
s.has_rdoc = true
|
|
469
|
+
s.required_ruby_version = nil
|
|
470
|
+
s.platform = nil
|
|
471
|
+
s.files = ["lib/cgikit", "lib/cgikit.rb", "lib/cgikit/components", "..."]
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
assert_equal cgikit, cgikit
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
def test_equals2_default_executable
|
|
478
|
+
spec = @a1.dup
|
|
479
|
+
spec.default_executable = 'xx'
|
|
480
|
+
|
|
481
|
+
refute_equal @a1, spec
|
|
482
|
+
refute_equal spec, @a1
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
def test_equals2_extensions
|
|
486
|
+
spec = @a1.dup
|
|
487
|
+
spec.extensions = 'xx'
|
|
488
|
+
|
|
489
|
+
refute_equal @a1, spec
|
|
490
|
+
refute_equal spec, @a1
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
def test_executables
|
|
494
|
+
@a1.executable = 'app'
|
|
495
|
+
assert_equal %w[app], @a1.executables
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
def test_executable_equals
|
|
499
|
+
@a2.executable = 'app'
|
|
500
|
+
assert_equal 'app', @a2.executable
|
|
501
|
+
assert_equal %w[lib/code.rb bin/app], @a2.files
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
def test_extensions
|
|
505
|
+
assert_equal ['ext/a/extconf.rb'], @a1.extensions
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
def test_files
|
|
509
|
+
@a1.files = %w(files bin/common)
|
|
510
|
+
@a1.test_files = %w(test_files bin/common)
|
|
511
|
+
@a1.executables = %w(executables common)
|
|
512
|
+
@a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
|
|
513
|
+
@a1.extensions = %w(extensions bin/common)
|
|
514
|
+
|
|
515
|
+
expected = %w[
|
|
516
|
+
bin/common
|
|
517
|
+
bin/executables
|
|
518
|
+
extensions
|
|
519
|
+
extra_rdoc_files
|
|
520
|
+
files
|
|
521
|
+
test_files
|
|
522
|
+
]
|
|
523
|
+
assert_equal expected, @a1.files.sort
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
def test_files_append
|
|
527
|
+
@a1.files = %w(files bin/common)
|
|
528
|
+
@a1.test_files = %w(test_files bin/common)
|
|
529
|
+
@a1.executables = %w(executables common)
|
|
530
|
+
@a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
|
|
531
|
+
@a1.extensions = %w(extensions bin/common)
|
|
532
|
+
|
|
533
|
+
expected = %w[
|
|
534
|
+
bin/common
|
|
535
|
+
bin/executables
|
|
536
|
+
extensions
|
|
537
|
+
extra_rdoc_files
|
|
538
|
+
files
|
|
539
|
+
test_files
|
|
540
|
+
]
|
|
541
|
+
assert_equal expected, @a1.files.sort
|
|
542
|
+
|
|
543
|
+
@a1.files << "generated_file.c"
|
|
544
|
+
|
|
545
|
+
expected << "generated_file.c"
|
|
546
|
+
expected.sort!
|
|
547
|
+
|
|
548
|
+
assert_equal expected, @a1.files.sort
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
def test_files_duplicate
|
|
552
|
+
@a2.files = %w[a b c d b]
|
|
553
|
+
@a2.extra_rdoc_files = %w[x y z x]
|
|
554
|
+
@a2.normalize
|
|
555
|
+
|
|
556
|
+
assert_equal %w[a b c d x y z], @a2.files
|
|
557
|
+
assert_equal %w[x y z], @a2.extra_rdoc_files
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
def test_files_extra_rdoc_files
|
|
561
|
+
@a2.files = %w[a b c d]
|
|
562
|
+
@a2.extra_rdoc_files = %w[x y z]
|
|
563
|
+
@a2.normalize
|
|
564
|
+
assert_equal %w[a b c d x y z], @a2.files
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
def test_files_non_array
|
|
568
|
+
@a1.files = "F"
|
|
569
|
+
@a1.test_files = "TF"
|
|
570
|
+
@a1.executables = "X"
|
|
571
|
+
@a1.extra_rdoc_files = "ERF"
|
|
572
|
+
@a1.extensions = "E"
|
|
573
|
+
|
|
574
|
+
assert_equal %w[E ERF F TF bin/X], @a1.files.sort
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
def test_files_non_array_pathological
|
|
578
|
+
@a1.instance_variable_set :@files, "F"
|
|
579
|
+
@a1.instance_variable_set :@test_files, "TF"
|
|
580
|
+
@a1.instance_variable_set :@extra_rdoc_files, "ERF"
|
|
581
|
+
@a1.instance_variable_set :@extensions, "E"
|
|
582
|
+
@a1.instance_variable_set :@executables, "X"
|
|
583
|
+
|
|
584
|
+
assert_equal %w[E ERF F TF bin/X], @a1.files.sort
|
|
585
|
+
assert_kind_of Integer, @a1.hash
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
def test_full_gem_path
|
|
589
|
+
assert_equal File.join(@gemhome, 'gems', @a1.full_name),
|
|
590
|
+
@a1.full_gem_path
|
|
591
|
+
|
|
592
|
+
@a1.original_platform = 'mswin32'
|
|
593
|
+
|
|
594
|
+
assert_equal File.join(@gemhome, 'gems', @a1.original_name),
|
|
595
|
+
@a1.full_gem_path
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def test_full_gem_path_double_slash
|
|
599
|
+
gemhome = @gemhome.sub(/\w\//, '\&/')
|
|
600
|
+
@a1.loaded_from = File.join gemhome, 'specifications', @a1.spec_name
|
|
601
|
+
|
|
602
|
+
assert_equal File.join(@gemhome, 'gems', @a1.full_name),
|
|
603
|
+
@a1.full_gem_path
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
def test_full_name
|
|
607
|
+
assert_equal 'a-1', @a1.full_name
|
|
608
|
+
|
|
609
|
+
@a1.platform = LibGems::Platform.new ['universal', 'darwin', nil]
|
|
610
|
+
assert_equal 'a-1-universal-darwin', @a1.full_name
|
|
611
|
+
|
|
612
|
+
@a1.instance_variable_set :@new_platform, 'mswin32'
|
|
613
|
+
assert_equal 'a-1-mswin32', @a1.full_name, 'legacy'
|
|
614
|
+
|
|
615
|
+
return if win_platform?
|
|
616
|
+
|
|
617
|
+
@a1.platform = 'current'
|
|
618
|
+
assert_equal 'a-1-x86-darwin-8', @a1.full_name
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
def test_full_name_windows
|
|
622
|
+
test_cases = {
|
|
623
|
+
'i386-mswin32' => 'a-1-x86-mswin32-60',
|
|
624
|
+
'i386-mswin32_80' => 'a-1-x86-mswin32-80',
|
|
625
|
+
'i386-mingw32' => 'a-1-x86-mingw32'
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
test_cases.each do |arch, expected|
|
|
629
|
+
util_set_arch arch
|
|
630
|
+
@a1.platform = 'current'
|
|
631
|
+
assert_equal expected, @a1.full_name
|
|
632
|
+
end
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
def test_has_rdoc_eh
|
|
636
|
+
assert @a1.has_rdoc?
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
def test_has_rdoc_equals
|
|
640
|
+
|
|
641
|
+
use_ui @ui do
|
|
642
|
+
@a1.has_rdoc = false
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
assert_equal '', @ui.output
|
|
646
|
+
|
|
647
|
+
assert_equal false, @a1.has_rdoc
|
|
648
|
+
end
|
|
649
|
+
|
|
650
|
+
def test_hash
|
|
651
|
+
assert_equal @a1.hash, @a1.hash
|
|
652
|
+
assert_equal @a1.hash, @a1.dup.hash
|
|
653
|
+
refute_equal @a1.hash, @a2.hash
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
def test_installation_path
|
|
657
|
+
assert_equal @gemhome, @a1.installation_path
|
|
658
|
+
|
|
659
|
+
@a1.instance_variable_set :@loaded_from, nil
|
|
660
|
+
|
|
661
|
+
e = assert_raises LibGems::Exception do
|
|
662
|
+
@a1.installation_path
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
assert_equal 'spec a-1 is not from an installed gem', e.message
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
def test_lib_files
|
|
669
|
+
@a1.files = %w[lib/foo.rb Rakefile]
|
|
670
|
+
|
|
671
|
+
assert_equal %w[lib/foo.rb], @a1.lib_files
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
def test_license
|
|
675
|
+
assert_equal 'MIT', @a1.license
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
def test_licenses
|
|
679
|
+
assert_equal ['MIT'], @a1.licenses
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
def test_name
|
|
683
|
+
assert_equal 'a', @a1.name
|
|
684
|
+
end
|
|
685
|
+
|
|
686
|
+
def test_original_name
|
|
687
|
+
assert_equal 'a-1', @a1.full_name
|
|
688
|
+
|
|
689
|
+
@a1.platform = 'i386-linux'
|
|
690
|
+
@a1.instance_variable_set :@original_platform, 'i386-linux'
|
|
691
|
+
assert_equal 'a-1-i386-linux', @a1.original_name
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
def test_platform
|
|
695
|
+
assert_equal LibGems::Platform::RUBY, @a1.platform
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
def test_platform_equals
|
|
699
|
+
@a1.platform = nil
|
|
700
|
+
assert_equal LibGems::Platform::RUBY, @a1.platform
|
|
701
|
+
|
|
702
|
+
@a1.platform = LibGems::Platform::RUBY
|
|
703
|
+
assert_equal LibGems::Platform::RUBY, @a1.platform
|
|
704
|
+
|
|
705
|
+
test_cases = {
|
|
706
|
+
'i386-mswin32' => ['x86', 'mswin32', '60'],
|
|
707
|
+
'i386-mswin32_80' => ['x86', 'mswin32', '80'],
|
|
708
|
+
'i386-mingw32' => ['x86', 'mingw32', nil ],
|
|
709
|
+
'x86-darwin8' => ['x86', 'darwin', '8' ],
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
test_cases.each do |arch, expected|
|
|
713
|
+
util_set_arch arch
|
|
714
|
+
@a1.platform = LibGems::Platform::CURRENT
|
|
715
|
+
assert_equal LibGems::Platform.new(expected), @a1.platform
|
|
716
|
+
end
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
def test_platform_equals_current
|
|
720
|
+
@a1.platform = LibGems::Platform::CURRENT
|
|
721
|
+
assert_equal LibGems::Platform.local, @a1.platform
|
|
722
|
+
assert_equal LibGems::Platform.local.to_s, @a1.original_platform
|
|
723
|
+
end
|
|
724
|
+
|
|
725
|
+
def test_platform_equals_legacy
|
|
726
|
+
@a1.platform = 'mswin32'
|
|
727
|
+
assert_equal LibGems::Platform.new('x86-mswin32'), @a1.platform
|
|
728
|
+
|
|
729
|
+
@a1.platform = 'i586-linux'
|
|
730
|
+
assert_equal LibGems::Platform.new('x86-linux'), @a1.platform
|
|
731
|
+
|
|
732
|
+
@a1.platform = 'powerpc-darwin'
|
|
733
|
+
assert_equal LibGems::Platform.new('ppc-darwin'), @a1.platform
|
|
734
|
+
end
|
|
735
|
+
|
|
736
|
+
def test_prerelease_spec_adds_required_rubygems_version
|
|
737
|
+
@prerelease = quick_gem('tardis', '2.2.0.a')
|
|
738
|
+
refute @prerelease.required_rubygems_version.satisfied_by?(LibGems::Version.new('1.3.1'))
|
|
739
|
+
assert @prerelease.required_rubygems_version.satisfied_by?(LibGems::Version.new('1.4.0'))
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
def test_require_paths
|
|
743
|
+
@a1.require_path = 'lib'
|
|
744
|
+
assert_equal %w[lib], @a1.require_paths
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
def test_requirements
|
|
748
|
+
assert_equal ['A working computer'], @a1.requirements
|
|
749
|
+
end
|
|
750
|
+
|
|
751
|
+
def test_runtime_dependencies_legacy
|
|
752
|
+
# legacy gems don't have a type
|
|
753
|
+
@a1.runtime_dependencies.each do |dep|
|
|
754
|
+
dep.instance_variable_set :@type, nil
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
expected = %w[rake jabber4r pqa]
|
|
758
|
+
|
|
759
|
+
assert_equal expected, @a1.runtime_dependencies.map { |d| d.name }
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
def test_spaceship_name
|
|
763
|
+
s1 = quick_gem 'a', '1'
|
|
764
|
+
s2 = quick_gem 'b', '1'
|
|
765
|
+
|
|
766
|
+
assert_equal(-1, (s1 <=> s2))
|
|
767
|
+
assert_equal( 0, (s1 <=> s1))
|
|
768
|
+
assert_equal( 1, (s2 <=> s1))
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def test_spaceship_platform
|
|
772
|
+
s1 = quick_gem 'a', '1'
|
|
773
|
+
s2 = quick_gem 'a', '1' do |s|
|
|
774
|
+
s.platform = LibGems::Platform.new 'x86-my_platform1'
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
assert_equal( -1, (s1 <=> s2))
|
|
778
|
+
assert_equal( 0, (s1 <=> s1))
|
|
779
|
+
assert_equal( 1, (s2 <=> s1))
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
def test_spaceship_version
|
|
783
|
+
s1 = quick_gem 'a', '1'
|
|
784
|
+
s2 = quick_gem 'a', '2'
|
|
785
|
+
|
|
786
|
+
assert_equal( -1, (s1 <=> s2))
|
|
787
|
+
assert_equal( 0, (s1 <=> s1))
|
|
788
|
+
assert_equal( 1, (s2 <=> s1))
|
|
789
|
+
end
|
|
790
|
+
|
|
791
|
+
def test_spec_name
|
|
792
|
+
assert_equal 'a-1.gemspec', @a1.spec_name
|
|
793
|
+
end
|
|
794
|
+
|
|
795
|
+
def test_summary
|
|
796
|
+
assert_equal 'this is a summary', @a1.summary
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
def test_test_files
|
|
800
|
+
@a1.test_file = 'test/suite.rb'
|
|
801
|
+
assert_equal ['test/suite.rb'], @a1.test_files
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
def test_to_ruby
|
|
805
|
+
@a2.add_runtime_dependency 'b', '1'
|
|
806
|
+
@a2.dependencies.first.instance_variable_set :@type, nil
|
|
807
|
+
@a2.required_rubygems_version = LibGems::Requirement.new '> 0'
|
|
808
|
+
|
|
809
|
+
ruby_code = @a2.to_ruby
|
|
810
|
+
|
|
811
|
+
expected = <<-SPEC
|
|
812
|
+
# -*- encoding: utf-8 -*-
|
|
813
|
+
|
|
814
|
+
LibGems::Specification.new do |s|
|
|
815
|
+
s.name = %q{a}
|
|
816
|
+
s.version = \"2\"
|
|
817
|
+
|
|
818
|
+
s.required_rubygems_version = LibGems::Requirement.new(\"> 0\") if s.respond_to? :required_rubygems_version=
|
|
819
|
+
s.authors = [\"A User\"]
|
|
820
|
+
s.date = %q{#{LibGems::Specification::TODAY.strftime "%Y-%m-%d"}}
|
|
821
|
+
s.description = %q{This is a test description}
|
|
822
|
+
s.email = %q{example@example.com}
|
|
823
|
+
s.files = [\"lib/code.rb\"]
|
|
824
|
+
s.homepage = %q{http://example.com}
|
|
825
|
+
s.require_paths = [\"lib\"]
|
|
826
|
+
s.rubygems_version = %q{#{LibGems::GEM_VERSION}}
|
|
827
|
+
s.summary = %q{this is a summary}
|
|
828
|
+
|
|
829
|
+
if s.respond_to? :specification_version then
|
|
830
|
+
s.specification_version = #{LibGems::Specification::CURRENT_SPECIFICATION_VERSION}
|
|
831
|
+
|
|
832
|
+
if LibGems::Version.new(LibGems::GEM_VERSION) >= LibGems::Version.new('1.2.0') then
|
|
833
|
+
s.add_runtime_dependency(%q<b>, [\"= 1\"])
|
|
834
|
+
else
|
|
835
|
+
s.add_dependency(%q<b>, [\"= 1\"])
|
|
836
|
+
end
|
|
837
|
+
else
|
|
838
|
+
s.add_dependency(%q<b>, [\"= 1\"])
|
|
839
|
+
end
|
|
840
|
+
end
|
|
841
|
+
SPEC
|
|
842
|
+
|
|
843
|
+
assert_equal expected, ruby_code
|
|
844
|
+
|
|
845
|
+
same_spec = LibGems.gemspec_eval ruby_code
|
|
846
|
+
|
|
847
|
+
assert_equal @a2, same_spec
|
|
848
|
+
end
|
|
849
|
+
|
|
850
|
+
def test_to_ruby_fancy
|
|
851
|
+
@a1.platform = LibGems::Platform.local
|
|
852
|
+
ruby_code = @a1.to_ruby
|
|
853
|
+
|
|
854
|
+
local = LibGems::Platform.local
|
|
855
|
+
expected_platform = "[#{local.cpu.inspect}, #{local.os.inspect}, #{local.version.inspect}]"
|
|
856
|
+
|
|
857
|
+
expected = <<-SPEC
|
|
858
|
+
# -*- encoding: utf-8 -*-
|
|
859
|
+
|
|
860
|
+
LibGems::Specification.new do |s|
|
|
861
|
+
s.name = %q{a}
|
|
862
|
+
s.version = \"1\"
|
|
863
|
+
s.platform = LibGems::Platform.new(#{expected_platform})
|
|
864
|
+
|
|
865
|
+
s.required_rubygems_version = LibGems::Requirement.new(\">= 0\") if s.respond_to? :required_rubygems_version=
|
|
866
|
+
s.authors = [\"A User\"]
|
|
867
|
+
s.date = %q{#{LibGems::Specification::TODAY.strftime "%Y-%m-%d"}}
|
|
868
|
+
s.default_executable = %q{exec}
|
|
869
|
+
s.description = %q{This is a test description}
|
|
870
|
+
s.email = %q{example@example.com}
|
|
871
|
+
s.executables = [\"exec\"]
|
|
872
|
+
s.extensions = [\"ext/a/extconf.rb\"]
|
|
873
|
+
s.files = [\"lib/code.rb\", \"test/suite.rb\", \"bin/exec\", \"ext/a/extconf.rb\"]
|
|
874
|
+
s.has_rdoc = %q{true}
|
|
875
|
+
s.homepage = %q{http://example.com}
|
|
876
|
+
s.licenses = [\"MIT\"]
|
|
877
|
+
s.require_paths = [\"lib\"]
|
|
878
|
+
s.requirements = [\"A working computer\"]
|
|
879
|
+
s.rubyforge_project = %q{example}
|
|
880
|
+
s.rubygems_version = %q{#{LibGems::GEM_VERSION}}
|
|
881
|
+
s.summary = %q{this is a summary}
|
|
882
|
+
s.test_files = [\"test/suite.rb\"]
|
|
883
|
+
|
|
884
|
+
if s.respond_to? :specification_version then
|
|
885
|
+
s.specification_version = 3
|
|
886
|
+
|
|
887
|
+
if LibGems::Version.new(LibGems::GEM_VERSION) >= LibGems::Version.new('1.2.0') then
|
|
888
|
+
s.add_runtime_dependency(%q<rake>, [\"> 0.4\"])
|
|
889
|
+
s.add_runtime_dependency(%q<jabber4r>, [\"> 0.0.0\"])
|
|
890
|
+
s.add_runtime_dependency(%q<pqa>, [\"> 0.4\", \"<= 0.6\"])
|
|
891
|
+
else
|
|
892
|
+
s.add_dependency(%q<rake>, [\"> 0.4\"])
|
|
893
|
+
s.add_dependency(%q<jabber4r>, [\"> 0.0.0\"])
|
|
894
|
+
s.add_dependency(%q<pqa>, [\"> 0.4\", \"<= 0.6\"])
|
|
895
|
+
end
|
|
896
|
+
else
|
|
897
|
+
s.add_dependency(%q<rake>, [\"> 0.4\"])
|
|
898
|
+
s.add_dependency(%q<jabber4r>, [\"> 0.0.0\"])
|
|
899
|
+
s.add_dependency(%q<pqa>, [\"> 0.4\", \"<= 0.6\"])
|
|
900
|
+
end
|
|
901
|
+
end
|
|
902
|
+
SPEC
|
|
903
|
+
|
|
904
|
+
assert_equal expected, ruby_code
|
|
905
|
+
|
|
906
|
+
same_spec = LibGems.gemspec_eval ruby_code
|
|
907
|
+
|
|
908
|
+
assert_equal @a1, same_spec
|
|
909
|
+
end
|
|
910
|
+
|
|
911
|
+
def test_to_ruby_legacy
|
|
912
|
+
gemspec1 = LibGems.gemspec_eval LEGACY_RUBY_SPEC
|
|
913
|
+
ruby_code = gemspec1.to_ruby
|
|
914
|
+
gemspec2 = LibGems.gemspec_eval ruby_code
|
|
915
|
+
|
|
916
|
+
assert_equal gemspec1, gemspec2
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
def test_to_ruby_platform
|
|
920
|
+
@a2.platform = LibGems::Platform.local
|
|
921
|
+
@a2.instance_variable_set :@original_platform, 'old_platform'
|
|
922
|
+
|
|
923
|
+
ruby_code = @a2.to_ruby
|
|
924
|
+
|
|
925
|
+
same_spec = LibGems.gemspec_eval ruby_code
|
|
926
|
+
|
|
927
|
+
assert_equal 'old_platform', same_spec.original_platform
|
|
928
|
+
end
|
|
929
|
+
|
|
930
|
+
def test_to_yaml
|
|
931
|
+
yaml_str = @a1.to_yaml
|
|
932
|
+
|
|
933
|
+
refute_match '!!null', yaml_str
|
|
934
|
+
|
|
935
|
+
same_spec = YAML.load(yaml_str)
|
|
936
|
+
|
|
937
|
+
assert_equal @a1, same_spec
|
|
938
|
+
end
|
|
939
|
+
|
|
940
|
+
def test_to_yaml_fancy
|
|
941
|
+
@a1.platform = LibGems::Platform.local
|
|
942
|
+
yaml_str = @a1.to_yaml
|
|
943
|
+
|
|
944
|
+
same_spec = YAML.load(yaml_str)
|
|
945
|
+
|
|
946
|
+
assert_equal LibGems::Platform.local, same_spec.platform
|
|
947
|
+
|
|
948
|
+
assert_equal @a1, same_spec
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
def test_to_yaml_platform_empty_string
|
|
952
|
+
@a1.instance_variable_set :@original_platform, ''
|
|
953
|
+
|
|
954
|
+
assert_match %r|^platform: ruby$|, @a1.to_yaml
|
|
955
|
+
end
|
|
956
|
+
|
|
957
|
+
def test_to_yaml_platform_legacy
|
|
958
|
+
@a1.platform = 'powerpc-darwin7.9.0'
|
|
959
|
+
@a1.instance_variable_set :@original_platform, 'powerpc-darwin7.9.0'
|
|
960
|
+
|
|
961
|
+
yaml_str = @a1.to_yaml
|
|
962
|
+
|
|
963
|
+
same_spec = YAML.load yaml_str
|
|
964
|
+
|
|
965
|
+
assert_equal LibGems::Platform.new('powerpc-darwin7'), same_spec.platform
|
|
966
|
+
assert_equal 'powerpc-darwin7.9.0', same_spec.original_platform
|
|
967
|
+
end
|
|
968
|
+
|
|
969
|
+
def test_to_yaml_platform_nil
|
|
970
|
+
@a1.instance_variable_set :@original_platform, nil
|
|
971
|
+
|
|
972
|
+
assert_match %r|^platform: ruby$|, @a1.to_yaml
|
|
973
|
+
end
|
|
974
|
+
|
|
975
|
+
def test_validate
|
|
976
|
+
util_setup_validate
|
|
977
|
+
|
|
978
|
+
Dir.chdir @tempdir do
|
|
979
|
+
assert @a1.validate
|
|
980
|
+
end
|
|
981
|
+
end
|
|
982
|
+
|
|
983
|
+
def test_validate_authors
|
|
984
|
+
util_setup_validate
|
|
985
|
+
|
|
986
|
+
Dir.chdir @tempdir do
|
|
987
|
+
@a1.authors = []
|
|
988
|
+
|
|
989
|
+
use_ui @ui do
|
|
990
|
+
@a1.validate
|
|
991
|
+
end
|
|
992
|
+
|
|
993
|
+
assert_equal "WARNING: no author specified\n", @ui.error, 'error'
|
|
994
|
+
|
|
995
|
+
@a1.authors = [Object.new]
|
|
996
|
+
|
|
997
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
998
|
+
@a1.validate
|
|
999
|
+
end
|
|
1000
|
+
|
|
1001
|
+
assert_equal 'authors must be Array of Strings', e.message
|
|
1002
|
+
|
|
1003
|
+
@a1.authors = ['FIXME (who is writing this software)']
|
|
1004
|
+
|
|
1005
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1006
|
+
@a1.validate
|
|
1007
|
+
end
|
|
1008
|
+
|
|
1009
|
+
assert_equal '"FIXME" or "TODO" is not an author', e.message
|
|
1010
|
+
|
|
1011
|
+
@a1.authors = ['TODO (who is writing this software)']
|
|
1012
|
+
|
|
1013
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1014
|
+
@a1.validate
|
|
1015
|
+
end
|
|
1016
|
+
|
|
1017
|
+
assert_equal '"FIXME" or "TODO" is not an author', e.message
|
|
1018
|
+
end
|
|
1019
|
+
end
|
|
1020
|
+
|
|
1021
|
+
def test_validate_autorequire
|
|
1022
|
+
util_setup_validate
|
|
1023
|
+
|
|
1024
|
+
Dir.chdir @tempdir do
|
|
1025
|
+
@a1.autorequire = 'code'
|
|
1026
|
+
|
|
1027
|
+
use_ui @ui do
|
|
1028
|
+
@a1.validate
|
|
1029
|
+
end
|
|
1030
|
+
|
|
1031
|
+
assert_equal "WARNING: deprecated autorequire specified\n",
|
|
1032
|
+
@ui.error, 'error'
|
|
1033
|
+
end
|
|
1034
|
+
end
|
|
1035
|
+
|
|
1036
|
+
def test_validate_description
|
|
1037
|
+
util_setup_validate
|
|
1038
|
+
|
|
1039
|
+
Dir.chdir @tempdir do
|
|
1040
|
+
@a1.description = ''
|
|
1041
|
+
|
|
1042
|
+
use_ui @ui do
|
|
1043
|
+
@a1.validate
|
|
1044
|
+
end
|
|
1045
|
+
|
|
1046
|
+
assert_equal "WARNING: no description specified\n", @ui.error, 'error'
|
|
1047
|
+
|
|
1048
|
+
@ui = MockGemUi.new
|
|
1049
|
+
@a1.summary = 'this is my summary'
|
|
1050
|
+
@a1.description = @a1.summary
|
|
1051
|
+
|
|
1052
|
+
use_ui @ui do
|
|
1053
|
+
@a1.validate
|
|
1054
|
+
end
|
|
1055
|
+
|
|
1056
|
+
assert_equal "WARNING: description and summary are identical\n",
|
|
1057
|
+
@ui.error, 'error'
|
|
1058
|
+
|
|
1059
|
+
@a1.description = 'FIXME (describe your package)'
|
|
1060
|
+
|
|
1061
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1062
|
+
@a1.validate
|
|
1063
|
+
end
|
|
1064
|
+
|
|
1065
|
+
assert_equal '"FIXME" or "TODO" is not a description', e.message
|
|
1066
|
+
|
|
1067
|
+
@a1.description = 'TODO (describe your package)'
|
|
1068
|
+
|
|
1069
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1070
|
+
@a1.validate
|
|
1071
|
+
end
|
|
1072
|
+
|
|
1073
|
+
assert_equal '"FIXME" or "TODO" is not a description', e.message
|
|
1074
|
+
end
|
|
1075
|
+
end
|
|
1076
|
+
|
|
1077
|
+
def test_validate_email
|
|
1078
|
+
util_setup_validate
|
|
1079
|
+
|
|
1080
|
+
Dir.chdir @tempdir do
|
|
1081
|
+
@a1.email = ''
|
|
1082
|
+
|
|
1083
|
+
use_ui @ui do
|
|
1084
|
+
@a1.validate
|
|
1085
|
+
end
|
|
1086
|
+
|
|
1087
|
+
assert_equal "WARNING: no email specified\n", @ui.error, 'error'
|
|
1088
|
+
|
|
1089
|
+
@a1.email = 'FIXME (your e-mail)'
|
|
1090
|
+
|
|
1091
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1092
|
+
@a1.validate
|
|
1093
|
+
end
|
|
1094
|
+
|
|
1095
|
+
assert_equal '"FIXME" or "TODO" is not an email address', e.message
|
|
1096
|
+
|
|
1097
|
+
@a1.email = 'TODO (your e-mail)'
|
|
1098
|
+
|
|
1099
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1100
|
+
@a1.validate
|
|
1101
|
+
end
|
|
1102
|
+
|
|
1103
|
+
assert_equal '"FIXME" or "TODO" is not an email address', e.message
|
|
1104
|
+
end
|
|
1105
|
+
end
|
|
1106
|
+
|
|
1107
|
+
def test_validate_empty
|
|
1108
|
+
util_setup_validate
|
|
1109
|
+
|
|
1110
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1111
|
+
LibGems::Specification.new.validate
|
|
1112
|
+
end
|
|
1113
|
+
|
|
1114
|
+
assert_equal 'missing value for attribute name', e.message
|
|
1115
|
+
end
|
|
1116
|
+
|
|
1117
|
+
def test_validate_executables
|
|
1118
|
+
util_setup_validate
|
|
1119
|
+
|
|
1120
|
+
FileUtils.mkdir_p File.join(@tempdir, 'bin')
|
|
1121
|
+
File.open File.join(@tempdir, 'bin', 'exec'), 'w' do end
|
|
1122
|
+
FileUtils.mkdir_p File.join(@tempdir, 'exec')
|
|
1123
|
+
|
|
1124
|
+
use_ui @ui do
|
|
1125
|
+
Dir.chdir @tempdir do
|
|
1126
|
+
assert @a1.validate
|
|
1127
|
+
end
|
|
1128
|
+
end
|
|
1129
|
+
|
|
1130
|
+
assert_equal %w[exec], @a1.executables
|
|
1131
|
+
|
|
1132
|
+
assert_equal '', @ui.output, 'output'
|
|
1133
|
+
assert_equal "WARNING: bin/exec is missing #! line\n", @ui.error, 'error'
|
|
1134
|
+
end
|
|
1135
|
+
|
|
1136
|
+
def test_validate_empty_require_paths
|
|
1137
|
+
if win_platform? then
|
|
1138
|
+
skip 'test_validate_empty_require_paths skipped on MS Windows (symlink)'
|
|
1139
|
+
else
|
|
1140
|
+
util_setup_validate
|
|
1141
|
+
|
|
1142
|
+
@a1.require_paths = []
|
|
1143
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1144
|
+
@a1.validate
|
|
1145
|
+
end
|
|
1146
|
+
|
|
1147
|
+
assert_equal 'specification must have at least one require_path',
|
|
1148
|
+
e.message
|
|
1149
|
+
end
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
def test_validate_files
|
|
1153
|
+
skip 'test_validate_files skipped on MS Windows (symlink)' if win_platform?
|
|
1154
|
+
util_setup_validate
|
|
1155
|
+
|
|
1156
|
+
@a1.files += ['lib', 'lib2']
|
|
1157
|
+
|
|
1158
|
+
Dir.chdir @tempdir do
|
|
1159
|
+
FileUtils.ln_s '/root/path', 'lib2' unless vc_windows?
|
|
1160
|
+
|
|
1161
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1162
|
+
@a1.validate
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
assert_equal '["lib2"] are not files', e.message
|
|
1166
|
+
end
|
|
1167
|
+
|
|
1168
|
+
assert_equal %w[lib/code.rb test/suite.rb bin/exec ext/a/extconf.rb lib2],
|
|
1169
|
+
@a1.files
|
|
1170
|
+
end
|
|
1171
|
+
|
|
1172
|
+
def test_validate_homepage
|
|
1173
|
+
util_setup_validate
|
|
1174
|
+
|
|
1175
|
+
Dir.chdir @tempdir do
|
|
1176
|
+
@a1.homepage = nil
|
|
1177
|
+
|
|
1178
|
+
use_ui @ui do
|
|
1179
|
+
@a1.validate
|
|
1180
|
+
end
|
|
1181
|
+
|
|
1182
|
+
assert_equal "WARNING: no homepage specified\n", @ui.error, 'error'
|
|
1183
|
+
|
|
1184
|
+
@ui = MockGemUi.new
|
|
1185
|
+
|
|
1186
|
+
@a1.homepage = ''
|
|
1187
|
+
|
|
1188
|
+
use_ui @ui do
|
|
1189
|
+
@a1.validate
|
|
1190
|
+
end
|
|
1191
|
+
|
|
1192
|
+
assert_equal "WARNING: no homepage specified\n", @ui.error, 'error'
|
|
1193
|
+
|
|
1194
|
+
@a1.homepage = 'over at my cool site'
|
|
1195
|
+
|
|
1196
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1197
|
+
@a1.validate
|
|
1198
|
+
end
|
|
1199
|
+
|
|
1200
|
+
assert_equal '"over at my cool site" is not a URI', e.message
|
|
1201
|
+
end
|
|
1202
|
+
end
|
|
1203
|
+
|
|
1204
|
+
def test_validate_name
|
|
1205
|
+
util_setup_validate
|
|
1206
|
+
|
|
1207
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1208
|
+
@a1.name = :json
|
|
1209
|
+
@a1.validate
|
|
1210
|
+
end
|
|
1211
|
+
|
|
1212
|
+
assert_equal 'invalid value for attribute name: ":json"', e.message
|
|
1213
|
+
end
|
|
1214
|
+
|
|
1215
|
+
def test_validate_platform_legacy
|
|
1216
|
+
util_setup_validate
|
|
1217
|
+
|
|
1218
|
+
Dir.chdir @tempdir do
|
|
1219
|
+
@a1.platform = 'mswin32'
|
|
1220
|
+
assert @a1.validate
|
|
1221
|
+
|
|
1222
|
+
@a1.platform = 'i586-linux'
|
|
1223
|
+
assert @a1.validate
|
|
1224
|
+
|
|
1225
|
+
@a1.platform = 'powerpc-darwin'
|
|
1226
|
+
assert @a1.validate
|
|
1227
|
+
end
|
|
1228
|
+
end
|
|
1229
|
+
|
|
1230
|
+
def test_validate_rubyforge_project
|
|
1231
|
+
util_setup_validate
|
|
1232
|
+
|
|
1233
|
+
Dir.chdir @tempdir do
|
|
1234
|
+
@a1.rubyforge_project = ''
|
|
1235
|
+
|
|
1236
|
+
use_ui @ui do
|
|
1237
|
+
@a1.validate
|
|
1238
|
+
end
|
|
1239
|
+
|
|
1240
|
+
assert_equal "", @ui.error, 'error'
|
|
1241
|
+
end
|
|
1242
|
+
end
|
|
1243
|
+
|
|
1244
|
+
def test_validate_rubygems_version
|
|
1245
|
+
util_setup_validate
|
|
1246
|
+
|
|
1247
|
+
@a1.rubygems_version = "3"
|
|
1248
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1249
|
+
@a1.validate
|
|
1250
|
+
end
|
|
1251
|
+
|
|
1252
|
+
assert_equal "expected RubyGems version #{LibGems::GEM_VERSION}, was 3",
|
|
1253
|
+
e.message
|
|
1254
|
+
end
|
|
1255
|
+
|
|
1256
|
+
def test_validate_specification_version
|
|
1257
|
+
util_setup_validate
|
|
1258
|
+
|
|
1259
|
+
Dir.chdir @tempdir do
|
|
1260
|
+
@a1.specification_version = '1.0'
|
|
1261
|
+
|
|
1262
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1263
|
+
use_ui @ui do
|
|
1264
|
+
@a1.validate
|
|
1265
|
+
end
|
|
1266
|
+
end
|
|
1267
|
+
|
|
1268
|
+
err = 'specification_version must be a Fixnum (did you mean version?)'
|
|
1269
|
+
assert_equal err, e.message
|
|
1270
|
+
end
|
|
1271
|
+
end
|
|
1272
|
+
|
|
1273
|
+
def test_validate_summary
|
|
1274
|
+
util_setup_validate
|
|
1275
|
+
|
|
1276
|
+
Dir.chdir @tempdir do
|
|
1277
|
+
@a1.summary = ''
|
|
1278
|
+
|
|
1279
|
+
use_ui @ui do
|
|
1280
|
+
@a1.validate
|
|
1281
|
+
end
|
|
1282
|
+
|
|
1283
|
+
assert_equal "WARNING: no summary specified\n", @ui.error, 'error'
|
|
1284
|
+
|
|
1285
|
+
@a1.summary = 'FIXME (describe your package)'
|
|
1286
|
+
|
|
1287
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1288
|
+
@a1.validate
|
|
1289
|
+
end
|
|
1290
|
+
|
|
1291
|
+
assert_equal '"FIXME" or "TODO" is not a summary', e.message
|
|
1292
|
+
|
|
1293
|
+
@a1.summary = 'TODO (describe your package)'
|
|
1294
|
+
|
|
1295
|
+
e = assert_raises LibGems::InvalidSpecificationException do
|
|
1296
|
+
@a1.validate
|
|
1297
|
+
end
|
|
1298
|
+
|
|
1299
|
+
assert_equal '"FIXME" or "TODO" is not a summary', e.message
|
|
1300
|
+
end
|
|
1301
|
+
end
|
|
1302
|
+
|
|
1303
|
+
def test_version
|
|
1304
|
+
assert_equal LibGems::Version.new('1'), @a1.version
|
|
1305
|
+
end
|
|
1306
|
+
|
|
1307
|
+
def test_load_errors_contain_filename
|
|
1308
|
+
specfile = Tempfile.new(self.class.name.downcase)
|
|
1309
|
+
specfile.write "raise 'boom'"
|
|
1310
|
+
specfile.close
|
|
1311
|
+
begin
|
|
1312
|
+
LibGems::Specification.load(specfile.path)
|
|
1313
|
+
rescue => e
|
|
1314
|
+
name_rexp = Regexp.new(Regexp.escape(specfile.path))
|
|
1315
|
+
assert e.backtrace.grep(name_rexp).any?
|
|
1316
|
+
end
|
|
1317
|
+
ensure
|
|
1318
|
+
specfile.delete
|
|
1319
|
+
end
|
|
1320
|
+
|
|
1321
|
+
def util_setup_validate
|
|
1322
|
+
Dir.chdir @tempdir do
|
|
1323
|
+
FileUtils.mkdir_p File.join('ext', 'a')
|
|
1324
|
+
FileUtils.mkdir_p 'lib'
|
|
1325
|
+
FileUtils.mkdir_p 'test'
|
|
1326
|
+
|
|
1327
|
+
FileUtils.touch File.join('ext', 'a', 'extconf.rb')
|
|
1328
|
+
FileUtils.touch File.join('lib', 'code.rb')
|
|
1329
|
+
FileUtils.touch File.join('test', 'suite.rb')
|
|
1330
|
+
end
|
|
1331
|
+
end
|
|
1332
|
+
|
|
1333
|
+
end
|
|
1334
|
+
|