diff options
author | Carl Lerche <carllerche@mac.com> | 2010-06-03 15:32:32 -0700 |
---|---|---|
committer | Carl Lerche <carllerche@mac.com> | 2010-06-03 17:09:14 -0700 |
commit | 3edfddbf7ebe4b942e1e2b6d693afd582e9a8147 (patch) | |
tree | d3c9c1da2a060c23f00d58172830089e1e7d0089 /spec | |
parent | abf42df5e20d11ea381848655edc71df4449fe84 (diff) | |
download | bundler-3edfddbf7ebe4b942e1e2b6d693afd582e9a8147.tar.gz |
Hacked together some crap that doesn't really work
Diffstat (limited to 'spec')
-rw-r--r-- | spec/resolver/basic_spec.rb | 11 | ||||
-rw-r--r-- | spec/resolver/platform_spec.rb | 43 | ||||
-rw-r--r-- | spec/support/builders.rb | 22 | ||||
-rw-r--r-- | spec/support/indexes.rb | 43 |
4 files changed, 109 insertions, 10 deletions
diff --git a/spec/resolver/basic_spec.rb b/spec/resolver/basic_spec.rb index a202db66..177a7b0c 100644 --- a/spec/resolver/basic_spec.rb +++ b/spec/resolver/basic_spec.rb @@ -3,13 +3,18 @@ require "spec_helper" describe "Resolving" do before :each do - @deps = [] @index = an_awesome_index end - it "resolves" do + it "resolves a single gem" do dep "rack" - should_resolve_as [gem("rack", "1.1")] + should_resolve_as %w(rack-1.1) + end + + it "resolves a gem with dependencies" do + dep "actionpack" + + should_resolve_as %w(actionpack-2.3.5 activesupport-2.3.5 rack-1.0) end end
\ No newline at end of file diff --git a/spec/resolver/platform_spec.rb b/spec/resolver/platform_spec.rb new file mode 100644 index 00000000..bc7bce45 --- /dev/null +++ b/spec/resolver/platform_spec.rb @@ -0,0 +1,43 @@ +require "spec_helper" + +describe "Resolving platform craziness" do + describe "with semi real cases" do + before :each do + @index = an_awesome_index + end + + it "resolves a simple multi platform gem" do + dep "nokogiri" + platforms "ruby", "java" + + should_resolve_as %w(nokogiri-1.4.2.1 nokogiri-1.4.2.1-java weakling-0.0.3) + end + end + + describe "with conflicting cases" do + before :each do + @index = build_index do + gem "foo", "1.0.0" do + dep "bar", ">= 0" + end + + gem 'bar', "1.0.0" do + dep "baz", "~> 1.0.0" + end + + gem "bar", "1.0.0", "java" do + dep "baz", " ~> 1.1.0" + end + + gem "baz", %w(1.0.0 1.1.0 1.2.0) + end + end + + it "does something" do + platforms "ruby", "java" + dep "foo" + + should_conflict_on "baz" + end + end +end
\ No newline at end of file diff --git a/spec/support/builders.rb b/spec/support/builders.rb index e5072fa5..9459b299 100644 --- a/spec/support/builders.rb +++ b/spec/support/builders.rb @@ -8,6 +8,10 @@ module Spec Gem::Version.new(version) end + def pl(platform) + Gem::Platform.new(pl) + end + def build_repo1 build_repo gem_repo1 do build_gem "rack", %w(0.9.1 1.0.0) do |s| @@ -239,8 +243,9 @@ module Spec def build_spec(name, version, platform = nil, &block) Array(version).map do |v| Gem::Specification.new do |s| - s.name = name - s.version = Gem::Version.new(v) + s.name = name + s.version = Gem::Version.new(v) + s.platform = platform DepBuilder.run(s, &block) if block_given? end end @@ -308,6 +313,19 @@ module Spec end end + def platforms(platforms) + platforms.split(/\s+/).each do |platform| + platform = 'x86-mswin32' if platform == 'mswin32' + platform = Gem::Platform.new(platform) + if String === platform + class << platform + alias =~ == + end + end + yield Gem::Platform.new(platform) + end + end + def versions(versions) versions.split(/\s+/).each { |version| yield v(version) } end diff --git a/spec/support/indexes.rb b/spec/support/indexes.rb index da168ada..7afa88ff 100644 --- a/spec/support/indexes.rb +++ b/spec/support/indexes.rb @@ -1,14 +1,35 @@ module Spec module Indexes def dep(name, reqs = nil) + @deps ||= [] @deps << Bundler::Dependency.new(name, :version => reqs) end + def platform(*args) + @platforms ||= [] + @platforms.concat args.map { |p| Gem::Platform.new(p) } + end + + alias platforms platform + + def resolve + Bundler::Resolver.resolve(@deps, @index, {}, [], @platforms || ['ruby']) + end + def should_resolve_as(specs) - got = Bundler::Resolver.resolve(@deps, @index) - got = got.map { |s| s.full_name } + got = resolve + got = got.map { |s| s.full_name }.sort + + got.should == specs.sort + end - got.should == specs.flatten.map { |s| s.full_name } + def should_conflict_on(names) + begin + got = resolve + flunk "The resolve succeeded with: #{got.map { |s| s.full_name }.sort.inspect}" + rescue Bundler::VersionConflict => e + names.sort.should == e.conflicts.sort + end end def gem(*args, &blk) @@ -28,8 +49,8 @@ module Spec if version >= v('3.0.0.beta') dep "rack", '~> 1.1' dep "rack-mount", ">= 0.5" - elsif version > v('2.3.5') then dep "rack", '~> 1.0' - elsif version > v('2.0.0') then dep "rack", '~> 0.9' + elsif version > v('2.3') then dep "rack", '~> 1.0.0' + elsif version > v('2.0.0') then dep "rack", '~> 0.9.0' end end gem "activerecord", version do @@ -59,6 +80,18 @@ module Spec end end + versions '1.0 1.2 1.2.1 1.2.2 1.3 1.3.0.1 1.3.5 1.4.0 1.4.2 1.4.2.1' do |version| + platforms "ruby java mswin32" do |platform| + gem "nokogiri", version, platform do + dep "weakling", ">= 0.0.3" if platform =~ 'java' + end + end + end + + versions '0.0.1 0.0.2 0.0.3' do |version| + gem "weakling", version #, pl('java') + end + # --- Rails related versions '1.2.3 2.2.3 2.3.5' do |version| gem "activemerchant", version do |