1require 'rubygems/test_case' 2require 'rubygems/dependency' 3 4class TestGemDependency < Gem::TestCase 5 def test_initialize 6 d = dep "pkg", "> 1.0" 7 8 assert_equal "pkg", d.name 9 assert_equal req("> 1.0"), d.requirement 10 end 11 12 def test_initialize_type_bad 13 e = assert_raises ArgumentError do 14 Gem::Dependency.new 'monkey' => '1.0' 15 end 16 17 assert_equal 'dependency name must be a String, was {"monkey"=>"1.0"}', 18 e.message 19 end 20 21 def test_initialize_double 22 d = dep "pkg", "> 1.0", "< 2.0" 23 assert_equal req("> 1.0", "< 2.0"), d.requirement 24 end 25 26 def test_initialize_empty 27 d = dep "pkg" 28 assert_equal req(">= 0"), d.requirement 29 end 30 31 def test_initialize_type 32 assert_equal :runtime, dep("pkg").type 33 assert_equal :development, dep("pkg", [], :development).type 34 35 assert_raises ArgumentError do 36 dep "pkg", :sometimes 37 end 38 end 39 40 def test_initialize_version 41 d = dep "pkg", v("2") 42 assert_equal req("= 2"), d.requirement 43 end 44 45 def test_equals2 46 o = dep "other" 47 d = dep "pkg", "> 1.0" 48 d1 = dep "pkg", "> 1.1" 49 50 assert_equal d, d.dup 51 assert_equal d.dup, d 52 53 refute_equal d, d1 54 refute_equal d1, d 55 56 refute_equal d, o 57 refute_equal o, d 58 59 refute_equal d, Object.new 60 refute_equal Object.new, d 61 end 62 63 def test_equals2_type 64 refute_equal dep("pkg", :runtime), dep("pkg", :development) 65 end 66 67 def test_equals_tilde 68 d = dep "a", "0" 69 70 assert_match d, d, "match self" 71 assert_match dep("a", ">= 0"), d, "match version exact" 72 assert_match dep("a", ">= 0"), dep("a", "1"), "match version" 73 refute_match dep("a"), Object.new 74 75 Gem::Deprecate.skip_during do 76 assert_match dep(/a/, ">= 0"), d, "match simple regexp" 77 assert_match dep(/a|b/, ">= 0"), d, "match scary regexp" 78 refute_match dep(/a/), dep("b") 79 end 80 end 81 82 def test_equals_tilde_escape 83 refute_match dep("a|b"), dep("a", "1") 84 Gem::Deprecate.skip_during do 85 assert_match dep(/a|b/), dep("a", "1") 86 end 87 end 88 89 def test_equals_tilde_object 90 o = Object.new 91 def o.name ; 'a' end 92 def o.version ; '0' end 93 94 assert_match dep("a"), o 95 end 96 97 def test_equals_tilde_spec 98 assert_match dep("a", ">= 0"), spec("a", "0") 99 assert_match dep("a", "1"), spec("a", "1") 100 Gem::Deprecate.skip_during do 101 assert_match dep(/a/, ">= 0"), spec("a", "0") 102 assert_match dep(/a|b/, ">= 0"), spec("b", "0") 103 refute_match dep(/a/, ">= 0"), spec("b", "0") 104 end 105 end 106 107 def test_hash 108 d = dep "pkg", "1.0" 109 110 assert_equal d.hash, d.dup.hash 111 assert_equal d.dup.hash, d.hash 112 113 refute_equal dep("pkg", "1.0").hash, dep("pkg", "2.0").hash, "requirement" 114 refute_equal dep("pkg", "1.0").hash, dep("abc", "1.0").hash, "name" 115 refute_equal dep("pkg", :development), dep("pkg", :runtime), "type" 116 end 117 118 def test_merge 119 a1 = dep 'a', '~> 1.0' 120 a2 = dep 'a', '= 1.0' 121 122 a3 = a1.merge a2 123 124 assert_equal dep('a', '~> 1.0', '= 1.0'), a3 125 end 126 127 def test_merge_default 128 a1 = dep 'a' 129 a2 = dep 'a', '1' 130 131 a3 = a1.merge a2 132 133 assert_equal dep('a', '1'), a3 134 end 135 136 def test_merge_name_mismatch 137 a = dep 'a' 138 b = dep 'b' 139 140 e = assert_raises ArgumentError do 141 a.merge b 142 end 143 144 assert_equal 'a (>= 0) and b (>= 0) have different names', 145 e.message 146 end 147 148 def test_merge_other_default 149 a1 = dep 'a', '1' 150 a2 = dep 'a' 151 152 a3 = a1.merge a2 153 154 assert_equal dep('a', '1'), a3 155 end 156 157 def test_prerelease_eh 158 d = dep "pkg", "= 1" 159 160 refute d.prerelease? 161 162 d.prerelease = true 163 164 assert d.prerelease? 165 166 d = dep "pkg", "= 1.a" 167 168 assert d.prerelease? 169 170 d.prerelease = false 171 172 assert d.prerelease? 173 174 d = dep "pkg", "> 1.a", "> 2" 175 176 assert d.prerelease? 177 end 178 179 def test_specific 180 refute dep('a', '> 1').specific? 181 182 assert dep('a', '= 1').specific? 183 end 184 185 def test_to_specs_suggests_other_versions 186 a = util_spec 'a', '1.0', 'b' => '>= 1.0' 187 188 a_file = File.join a.gem_dir, 'lib', 'a_file.rb' 189 190 write_file a_file do |io| 191 io.puts '# a_file.rb' 192 end 193 194 dep = Gem::Dependency.new "a", "= 2.0" 195 196 e = assert_raises Gem::LoadError do 197 dep.to_specs 198 end 199 200 assert_equal "Could not find 'a' (= 2.0) - did find: [a-1.0]", e.message 201 end 202 203 def test_to_specs_indicates_total_gem_set_size 204 a = util_spec 'a', '1.0', 'b' => '>= 1.0' 205 206 a_file = File.join a.gem_dir, 'lib', 'a_file.rb' 207 208 write_file a_file do |io| 209 io.puts '# a_file.rb' 210 end 211 212 dep = Gem::Dependency.new "b", "= 2.0" 213 214 e = assert_raises Gem::LoadError do 215 dep.to_specs 216 end 217 218 assert_equal "Could not find 'b' (= 2.0) among 1 total gem(s)", e.message 219 end 220 221 222end 223 224