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
|
require 'abstract_unit'
require 'initializer'
require "#{File.dirname(__FILE__)}/../lib/generators/rails/app/templates/config/boot"
require 'rails/gem_dependency'
class BootTest < Test::Unit::TestCase
def test_boot_returns_if_booted
Rails.expects(:booted?).returns(true)
Rails.expects(:pick_boot).never
assert_nil Rails.boot!
end
def test_boot_preinitializes_then_picks_and_runs_if_not_booted
Rails.expects(:booted?).returns(false)
Rails.expects(:preinitialize)
Rails.expects(:pick_boot).returns(mock(:run => 'result'))
assert_equal 'result', Rails.boot!
end
def test_preinitialize_does_not_raise_exception_if_preinitializer_file_does_not_exist
Rails.stubs(:preinitializer_path).returns('/there/is/no/such/file')
assert_nothing_raised { Rails.preinitialize }
end
def test_load_preinitializer_loads_preinitializer_file
Rails.stubs(:preinitializer_path).returns("#{File.dirname(__FILE__)}/fixtures/environment_with_constant.rb")
assert_nil $initialize_test_set_from_env
Rails.preinitialize
assert_equal "success", $initialize_test_set_from_env
ensure
$initialize_test_set_from_env = nil
end
def test_boot_vendor_rails_by_default
Rails.expects(:booted?).returns(false)
Rails.expects(:preinitialize)
File.expects(:exist?).with("#{RAILS_ROOT}/vendor/rails").returns(true)
Rails::VendorBoot.any_instance.expects(:run).returns('result')
assert_equal 'result', Rails.boot!
end
def test_boot_gem_rails_otherwise
Rails.expects(:booted?).returns(false)
Rails.expects(:preinitialize)
File.expects(:exist?).with("#{RAILS_ROOT}/vendor/rails").returns(false)
Rails::GemBoot.any_instance.expects(:run).returns('result')
assert_equal 'result', Rails.boot!
end
def test_run_loads_initializer_and_sets_load_path
boot = Rails::Boot.new
boot.expects(:load_initializer)
Rails::Initializer.expects(:run).with(:set_load_path)
boot.run
end
end
class VendorBootTest < Test::Unit::TestCase
include Rails
def test_load_initializer_requires_from_vendor_rails
boot = VendorBoot.new
boot.expects(:require).with("#{RAILS_ROOT}/vendor/rails/railties/lib/initializer")
Rails::Initializer.expects(:run).with(:install_gem_spec_stubs)
Rails::GemDependency.expects(:add_frozen_gem_path)
boot.load_initializer
end
end
class GemBootTest < Test::Unit::TestCase
include Rails
def test_load_initializer_loads_rubygems_and_the_rails_gem
boot = GemBoot.new
GemBoot.expects(:load_rubygems)
boot.expects(:load_rails_gem)
boot.expects(:require).with('initializer')
boot.load_initializer
end
def test_load_rubygems_exits_with_error_if_missing
GemBoot.expects(:require).with('rubygems').raises(LoadError, 'missing rubygems')
STDERR.expects(:puts)
GemBoot.expects(:exit).with(1)
GemBoot.load_rubygems
end
def test_load_rubygems_exits_with_error_if_too_old
GemBoot.stubs(:rubygems_version).returns('0.0.1')
GemBoot.expects(:require).with('rubygems').returns(true)
STDERR.expects(:puts)
GemBoot.expects(:exit).with(1)
GemBoot.load_rubygems
end
def test_load_rails_gem_activates_specific_gem_if_version_given
GemBoot.stubs(:gem_version).returns('0.0.1')
boot = GemBoot.new
boot.expects(:gem).with('rails', '0.0.1')
boot.load_rails_gem
end
def test_load_rails_gem_activates_latest_gem_if_no_version_given
GemBoot.stubs(:gem_version).returns(nil)
boot = GemBoot.new
boot.expects(:gem).with('rails')
boot.load_rails_gem
end
def test_load_rails_gem_exits_with_error_if_missing
GemBoot.stubs(:gem_version).returns('0.0.1')
boot = GemBoot.new
boot.expects(:gem).with('rails', '0.0.1').raises(Gem::LoadError, 'missing rails 0.0.1 gem')
STDERR.expects(:puts)
boot.expects(:exit).with(1)
boot.load_rails_gem
end
end
class ParseGemVersionTest < Test::Unit::TestCase
def test_should_return_nil_if_no_lines_are_passed
assert_equal nil, parse('')
assert_equal nil, parse(nil)
end
def test_should_accept_either_single_or_double_quotes
assert_equal "1.2.3", parse("RAILS_GEM_VERSION = '1.2.3'")
assert_equal "1.2.3", parse('RAILS_GEM_VERSION = "1.2.3"')
end
def test_should_return_nil_if_no_lines_match
assert_equal nil, parse('nothing matches on this line\nor on this line')
end
def test_should_parse_with_no_leading_space
assert_equal "1.2.3", parse("RAILS_GEM_VERSION = '1.2.3' unless defined? RAILS_GEM_VERSION")
assert_equal "1.2.3", parse("RAILS_GEM_VERSION = '1.2.3'")
end
def test_should_parse_with_any_number_of_leading_spaces
assert_equal nil, parse([])
assert_equal "1.2.3", parse(" RAILS_GEM_VERSION = '1.2.3' unless defined? RAILS_GEM_VERSION")
assert_equal "1.2.3", parse(" RAILS_GEM_VERSION = '1.2.3' unless defined? RAILS_GEM_VERSION")
assert_equal "1.2.3", parse(" RAILS_GEM_VERSION = '1.2.3'")
assert_equal "1.2.3", parse(" RAILS_GEM_VERSION = '1.2.3'")
end
def test_should_ignore_unrelated_comments
assert_equal "1.2.3", parse("# comment\nRAILS_GEM_VERSION = '1.2.3'\n# comment")
end
def test_should_ignore_commented_version_lines
assert_equal "1.2.3", parse("#RAILS_GEM_VERSION = '9.8.7'\nRAILS_GEM_VERSION = '1.2.3'")
assert_equal "1.2.3", parse("# RAILS_GEM_VERSION = '9.8.7'\nRAILS_GEM_VERSION = '1.2.3'")
assert_equal "1.2.3", parse("RAILS_GEM_VERSION = '1.2.3'\n# RAILS_GEM_VERSION = '9.8.7'")
end
def test_should_allow_advanced_rubygems_version_specifications
# See http://rubygems.org/read/chapter/16
assert_equal "=1.2.3", parse("RAILS_GEM_VERSION = '=1.2.3'") # equal sign
assert_equal "= 1.2.3", parse("RAILS_GEM_VERSION = '= 1.2.3'") # with space
assert_equal "!=1.2.3", parse("RAILS_GEM_VERSION = '!=1.2.3'") # not equal
assert_equal ">1.2.3", parse("RAILS_GEM_VERSION = '>1.2.3'") # greater than
assert_equal "<1.2.3", parse("RAILS_GEM_VERSION = '<1.2.3'") # less than
assert_equal ">=1.2.3", parse("RAILS_GEM_VERSION = '>=1.2.3'") # greater than or equal
assert_equal "<=1.2.3", parse("RAILS_GEM_VERSION = '<=1.2.3'") # less than or equal
assert_equal "~>1.2.3.0", parse("RAILS_GEM_VERSION = '~>1.2.3.0'") # approximately greater than
end
private
def parse(text)
Rails::GemBoot.parse_gem_version(text)
end
end
|