aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorCarl Lerche <carllerche@mac.com>2010-06-03 15:32:32 -0700
committerCarl Lerche <carllerche@mac.com>2010-06-03 17:09:14 -0700
commit3edfddbf7ebe4b942e1e2b6d693afd582e9a8147 (patch)
treed3c9c1da2a060c23f00d58172830089e1e7d0089 /spec
parentabf42df5e20d11ea381848655edc71df4449fe84 (diff)
downloadbundler-3edfddbf7ebe4b942e1e2b6d693afd582e9a8147.tar.gz
Hacked together some crap that doesn't really work
Diffstat (limited to 'spec')
-rw-r--r--spec/resolver/basic_spec.rb11
-rw-r--r--spec/resolver/platform_spec.rb43
-rw-r--r--spec/support/builders.rb22
-rw-r--r--spec/support/indexes.rb43
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