aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems/test_gem_specification.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_specification.rb')
-rw-r--r--test/rubygems/test_gem_specification.rb223
1 files changed, 221 insertions, 2 deletions
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index d63b9bd30e..20c8d71ff1 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -61,6 +61,8 @@ end
end
@current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+
+ load 'rubygems/syck_hack.rb'
end
def test_self_attribute_names
@@ -136,7 +138,7 @@ end
name: posix-spawn
version: !ruby/object:Gem::Version
version: 0.3.6
- prerelease:
+ prerelease:
dependencies:
- !ruby/object:Gem::Dependency
name: rake-compiler
@@ -159,8 +161,131 @@ bindir:
Gem::Specification.from_yaml yaml
end
+ op = new_spec.dependencies.first.requirement.requirements.first.first
+ refute_kind_of YAML::Syck::DefaultKey, op
+
+ refute_match %r%DefaultKey%, new_spec.to_ruby
+ end
+
+ def test_self_from_yaml_cleans_up_defaultkey
+ yaml = <<-YAML
+--- !ruby/object:Gem::Specification
+name: posix-spawn
+version: !ruby/object:Gem::Version
+ version: 0.3.6
+ prerelease:
+dependencies:
+- !ruby/object:Gem::Dependency
+ name: rake-compiler
+ requirement: &70243867725240 !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - !ruby/object:YAML::Syck::DefaultKey {}
+
+ - !ruby/object:Gem::Version
+ version: 0.7.6
+ type: :development
+ prerelease: false
+ version_requirements: *70243867725240
+platform: ruby
+files: []
+test_files: []
+bindir:
+ YAML
+
+ new_spec = Gem::Specification.from_yaml yaml
+
+ op = new_spec.dependencies.first.requirement.requirements.first.first
+ refute_kind_of YAML::Syck::DefaultKey, op
+
refute_match %r%DefaultKey%, new_spec.to_ruby
- end if RUBY_VERSION < '1.9'
+ end
+
+ def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
+ yaml = <<-YAML
+--- !ruby/object:Gem::Specification
+name: posix-spawn
+version: !ruby/object:Gem::Version
+ version: 0.3.6
+ prerelease:
+dependencies:
+- !ruby/object:Gem::Dependency
+ name: rake-compiler
+ requirement: &70243867725240 !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - !ruby/object:Syck::DefaultKey {}
+
+ - !ruby/object:Gem::Version
+ version: 0.7.6
+ type: :development
+ prerelease: false
+ version_requirements: *70243867725240
+platform: ruby
+files: []
+test_files: []
+bindir:
+ YAML
+
+ new_spec = Gem::Specification.from_yaml yaml
+
+ op = new_spec.dependencies.first.requirement.requirements.first.first
+ refute_kind_of YAML::Syck::DefaultKey, op
+
+ refute_match %r%DefaultKey%, new_spec.to_ruby
+ end
+
+ def test_self_from_yaml_cleans_up_Date_objects
+ yaml = <<-YAML
+--- !ruby/object:Gem::Specification
+rubygems_version: 0.8.1
+specification_version: 1
+name: diff-lcs
+version: !ruby/object:Gem::Version
+ version: 1.1.2
+date: 2004-10-20
+summary: Provides a list of changes that represent the difference between two sequenced collections.
+require_paths:
+ - lib
+author: Austin Ziegler
+email: diff-lcs@halostatue.ca
+homepage: http://rubyforge.org/projects/ruwiki/
+rubyforge_project: ruwiki
+description: "Test"
+bindir: bin
+has_rdoc: true
+required_ruby_version: !ruby/object:Gem::Version::Requirement
+ requirements:
+ -
+ - ">="
+ - !ruby/object:Gem::Version
+ version: 1.8.1
+ version:
+platform: ruby
+files:
+ - tests/00test.rb
+rdoc_options:
+ - "--title"
+ - "Diff::LCS -- A Diff Algorithm"
+ - "--main"
+ - README
+ - "--line-numbers"
+extra_rdoc_files:
+ - README
+ - ChangeLog
+ - Install
+executables:
+ - ldiff
+ - htmldiff
+extensions: []
+requirements: []
+dependencies: []
+ YAML
+
+ new_spec = Gem::Specification.from_yaml yaml
+
+ assert_kind_of Time, new_spec.date
+ end
def test_self_load
full_path = @a2.spec_file
@@ -220,6 +345,29 @@ bindir:
assert_equal @a2, spec
end
+ if defined?(Encoding)
+ def test_self_load_utf8_with_ascii_encoding
+ int_enc = Encoding.default_internal
+ silence_warnings { Encoding.default_internal = 'US-ASCII' }
+
+ spec2 = @a2.dup
+ bin = "\u5678"
+ spec2.authors = [bin]
+ full_path = spec2.spec_file
+ write_file full_path do |io|
+ io.write spec2.to_ruby_for_cache.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
+ end
+
+ spec = Gem::Specification.load full_path
+
+ spec2.files.clear
+
+ assert_equal spec2, spec
+ ensure
+ silence_warnings { Encoding.default_internal = int_enc }
+ end
+ end
+
def test_self_load_legacy_ruby
spec = Gem::Deprecate.skip_during do
eval LEGACY_RUBY_SPEC
@@ -260,6 +408,27 @@ bindir:
assert_equal expected, Gem::Specification.normalize_yaml_input(input)
end
+ DATA_PATH = File.expand_path "../data", __FILE__
+
+ def test_handles_private_null_type
+ path = File.join DATA_PATH, "null-type.gemspec.rz"
+
+ data = Marshal.load Gem.inflate(Gem.read_binary(path))
+
+ assert_equal nil, data.rubyforge_project
+ end
+
+ def test_emits_zulu_timestamps_properly
+ skip "bug only on 1.9.2" unless RUBY_VERSION =~ /1\.9\.2/
+
+ t = Time.utc(2012, 3, 12)
+ @a2.date = t
+
+ yaml = with_psych { @a2.to_yaml }
+
+ assert_match %r!date: 2012-03-12 00:00:00\.000000000 Z!, yaml
+ end
+
def test_initialize
spec = Gem::Specification.new do |s|
s.name = "blah"
@@ -1041,6 +1210,18 @@ end
assert_match %r|^platform: ruby$|, @a1.to_yaml
end
+ def test_to_yaml_emits_syck_compat_yaml
+ if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck?
+ @a1.add_dependency "gx", "1.0.0"
+
+ y = @a1.to_yaml
+
+ refute_match %r!^\s*- - =!, y
+ else
+ skip "Only validates psych yaml"
+ end
+ end
+
def test_validate
util_setup_validate
@@ -1384,6 +1565,15 @@ end
assert_equal Gem::Version.new('1'), @a1.version
end
+ def test__load_fixes_Date_objects
+ spec = new_spec "a", 1
+ spec.instance_variable_set :@date, Date.today
+
+ spec = Marshal.load Marshal.dump(spec)
+
+ assert_kind_of Time, spec.date
+ end
+
def test_load_errors_contain_filename
specfile = Tempfile.new(self.class.name.downcase)
specfile.write "raise 'boom'"
@@ -1493,6 +1683,7 @@ end
require "yaml"
old_engine = YAML::ENGINE.yamler
YAML::ENGINE.yamler = 'syck'
+ load 'rubygems/syck_hack.rb'
rescue NameError
# probably on 1.8, ignore
end
@@ -1501,8 +1692,36 @@ end
ensure
begin
YAML::ENGINE.yamler = old_engine
+ load 'rubygems/syck_hack.rb'
rescue NameError
# ignore
end
end
+
+ def with_psych
+ begin
+ require "yaml"
+ old_engine = YAML::ENGINE.yamler
+ YAML::ENGINE.yamler = 'psych'
+ load 'rubygems/syck_hack.rb'
+ rescue NameError
+ # probably on 1.8, ignore
+ end
+
+ yield
+ ensure
+ begin
+ YAML::ENGINE.yamler = old_engine
+ load 'rubygems/syck_hack.rb'
+ rescue NameError
+ # ignore
+ end
+ end
+
+ def silence_warnings
+ old_verbose, $VERBOSE = $VERBOSE, false
+ yield
+ ensure
+ $VERBOSE = old_verbose
+ end
end