1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
require 'plugin_test_helper'
class Rails::GemDependency
public :install_command, :unpack_command
end
Rails::VendorGemSourceIndex.silence_spec_warnings = true
class GemDependencyTest < Test::Unit::TestCase
def setup
@gem = Rails::GemDependency.new "xhpricotx"
@gem_with_source = Rails::GemDependency.new "xhpricotx", :source => "http://code.whytheluckystiff.net"
@gem_with_version = Rails::GemDependency.new "xhpricotx", :version => "= 0.6"
@gem_with_lib = Rails::GemDependency.new "xaws-s3x", :lib => "aws/s3"
@gem_without_load = Rails::GemDependency.new "xhpricotx", :lib => false
end
def test_configuration_adds_gem_dependency
config = Rails::Configuration.new
config.gem "xaws-s3x", :lib => "aws/s3", :version => "0.4.0"
assert_equal [["install", "xaws-s3x", "--version", '"= 0.4.0"']], config.gems.collect { |g| g.install_command }
end
def test_gem_creates_install_command
assert_equal %w(install xhpricotx), @gem.install_command
end
def test_gem_with_source_creates_install_command
assert_equal %w(install xhpricotx --source http://code.whytheluckystiff.net), @gem_with_source.install_command
end
def test_gem_with_version_creates_install_command
assert_equal ["install", "xhpricotx", "--version", '"= 0.6"'], @gem_with_version.install_command
end
def test_gem_creates_unpack_command
assert_equal %w(unpack xhpricotx), @gem.unpack_command
end
def test_gem_with_version_unpack_install_command
# stub out specification method, or else test will fail if hpricot 0.6 isn't installed
mock_spec = mock()
mock_spec.stubs(:version).returns('0.6')
@gem_with_version.stubs(:specification).returns(mock_spec)
assert_equal ["unpack", "xhpricotx", "--version", '= 0.6'], @gem_with_version.unpack_command
end
def test_gem_adds_load_paths
@gem.expects(:gem).with(@gem)
@gem.add_load_paths
end
def test_gem_with_version_adds_load_paths
@gem_with_version.expects(:gem).with(@gem_with_version)
@gem_with_version.add_load_paths
assert @gem_with_version.load_paths_added?
end
def test_gem_loading
@gem.expects(:gem).with(@gem)
@gem.expects(:require).with(@gem.name)
@gem.add_load_paths
@gem.load
assert @gem.loaded?
end
def test_gem_with_lib_loading
@gem_with_lib.expects(:gem).with(@gem_with_lib)
@gem_with_lib.expects(:require).with(@gem_with_lib.lib)
@gem_with_lib.add_load_paths
@gem_with_lib.load
assert @gem_with_lib.loaded?
end
def test_gem_without_lib_loading
@gem_without_load.expects(:gem).with(@gem_without_load)
@gem_without_load.expects(:require).with(@gem_without_load.lib).never
@gem_without_load.add_load_paths
@gem_without_load.load
end
def test_gem_dependencies_compare_for_uniq
gem1 = Rails::GemDependency.new "gem1"
gem1a = Rails::GemDependency.new "gem1"
gem2 = Rails::GemDependency.new "gem2"
gem2a = Rails::GemDependency.new "gem2"
gem3 = Rails::GemDependency.new "gem2", :version => ">=0.1"
gem3a = Rails::GemDependency.new "gem2", :version => ">=0.1"
gem4 = Rails::GemDependency.new "gem3"
gems = [gem1, gem2, gem1a, gem3, gem2a, gem4, gem3a, gem2, gem4]
assert_equal 4, gems.uniq.size
end
def test_gem_load_frozen
dummy_gem = Rails::GemDependency.new "dummy-gem-a"
dummy_gem.add_load_paths
dummy_gem.load
assert_not_nil DUMMY_GEM_A_VERSION
end
def test_gem_load_frozen_specific_version
dummy_gem = Rails::GemDependency.new "dummy-gem-b", :version => '0.4.0'
dummy_gem.add_load_paths
dummy_gem.load
assert_not_nil DUMMY_GEM_B_VERSION
assert_equal '0.4.0', DUMMY_GEM_B_VERSION
end
def test_gem_load_frozen_minimum_version
dummy_gem = Rails::GemDependency.new "dummy-gem-c", :version => '>=0.5.0'
dummy_gem.add_load_paths
dummy_gem.load
assert_not_nil DUMMY_GEM_C_VERSION
assert_equal '0.6.0', DUMMY_GEM_C_VERSION
end
def test_gem_load_missing_specification
dummy_gem = Rails::GemDependency.new "dummy-gem-d"
dummy_gem.add_load_paths
dummy_gem.load
assert_not_nil DUMMY_GEM_D_VERSION
assert_equal '1.0.0', DUMMY_GEM_D_VERSION
assert_equal ['lib', 'lib/dummy-gem-d.rb'], dummy_gem.specification.files
end
def test_gem_load_bad_specification
dummy_gem = Rails::GemDependency.new "dummy-gem-e", :version => "= 1.0.0"
dummy_gem.add_load_paths
dummy_gem.load
assert_not_nil DUMMY_GEM_E_VERSION
assert_equal '1.0.0', DUMMY_GEM_E_VERSION
end
def test_gem_handle_missing_dependencies
dummy_gem = Rails::GemDependency.new "dummy-gem-g"
dummy_gem.add_load_paths
dummy_gem.load
assert_equal 1, dummy_gem.dependencies.size
assert_equal 1, dummy_gem.dependencies.first.dependencies.size
assert_nothing_raised do
dummy_gem.dependencies.each do |g|
g.dependencies
end
end
end
def test_gem_ignores_development_dependencies
dummy_gem = Rails::GemDependency.new "dummy-gem-k"
dummy_gem.add_load_paths
dummy_gem.load
assert_equal 1, dummy_gem.dependencies.size
end
def test_gem_guards_against_duplicate_unpacks
dummy_gem = Rails::GemDependency.new "dummy-gem-a"
dummy_gem.stubs(:frozen?).returns(true)
dummy_gem.expects(:unpack_base).never
dummy_gem.unpack
end
def test_gem_does_not_unpack_framework_gems
dummy_gem = Rails::GemDependency.new "dummy-gem-a"
dummy_gem.stubs(:framework_gem?).returns(true)
dummy_gem.expects(:unpack_base).never
dummy_gem.unpack
end
def test_gem_from_directory_name_attempts_to_load_specification
assert_raises RuntimeError do
dummy_gem = Rails::GemDependency.from_directory_name('dummy-gem-1.1')
end
end
def test_gem_from_directory_name
dummy_gem = Rails::GemDependency.from_directory_name('dummy-gem-1.1', false)
assert_equal 'dummy-gem', dummy_gem.name
assert_equal '= 1.1', dummy_gem.version_requirements.to_s
end
def test_gem_from_directory_name_loads_specification_successfully
assert_nothing_raised do
dummy_gem = Rails::GemDependency.from_directory_name(File.join(Rails::GemDependency.unpacked_path, 'dummy-gem-g-1.0.0'))
assert_not_nil dummy_gem.specification
end
end
def test_gem_from_invalid_directory_name
assert_raises RuntimeError do
dummy_gem = Rails::GemDependency.from_directory_name('dummy-gem')
end
assert_raises RuntimeError do
dummy_gem = Rails::GemDependency.from_directory_name('dummy')
end
end
def test_gem_determines_build_status
assert_equal true, Rails::GemDependency.new("dummy-gem-a").built?
assert_equal true, Rails::GemDependency.new("dummy-gem-i").built?
assert_equal false, Rails::GemDependency.new("dummy-gem-j").built?
end
def test_gem_determines_build_status_only_on_vendor_gems
framework_gem = Rails::GemDependency.new('dummy-framework-gem')
framework_gem.stubs(:framework_gem?).returns(true) # already loaded
framework_gem.stubs(:vendor_rails?).returns(false) # but not in vendor/rails
framework_gem.stubs(:vendor_gem?).returns(false) # and not in vendor/gems
framework_gem.add_load_paths # freeze framework gem early
assert framework_gem.built?
end
def test_gem_build_passes_options_to_dependencies
start_gem = Rails::GemDependency.new("dummy-gem-g")
dep_gem = Rails::GemDependency.new("dummy-gem-f")
start_gem.stubs(:dependencies).returns([dep_gem])
dep_gem.expects(:build).with({ :force => true }).once
start_gem.build(:force => true)
end
end
|