diff options
Diffstat (limited to 'test/rubygems/test_gem_specification.rb')
-rw-r--r-- | test/rubygems/test_gem_specification.rb | 217 |
1 files changed, 215 insertions, 2 deletions
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index d63b9bd30e..c64be793fd 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -136,7 +136,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 +159,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 + + 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 if RUBY_VERSION < '1.9' + 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: [email protected] +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 +343,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 +406,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 +1208,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 +1563,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'" @@ -1505,4 +1693,29 @@ end # ignore end end + + def with_psych + begin + require "yaml" + old_engine = YAML::ENGINE.yamler + YAML::ENGINE.yamler = 'psych' + rescue NameError + # probably on 1.8, ignore + end + + yield + ensure + begin + YAML::ENGINE.yamler = old_engine + rescue NameError + # ignore + end + end + + def silence_warnings + old_verbose, $VERBOSE = $VERBOSE, false + yield + ensure + $VERBOSE = old_verbose + end end |