##// END OF EJS Templates
scm: mercurial: add named branch test in functional test (#7246)....
Toshi MARUYAMA -
r5010:3285a721b171
parent child
Show More
@@ -1,335 +1,356
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19 require 'repositories_controller'
19 require 'repositories_controller'
20
20
21 # Re-raise errors caught by the controller.
21 # Re-raise errors caught by the controller.
22 class RepositoriesController; def rescue_action(e) raise e end; end
22 class RepositoriesController; def rescue_action(e) raise e end; end
23
23
24 class RepositoriesMercurialControllerTest < ActionController::TestCase
24 class RepositoriesMercurialControllerTest < ActionController::TestCase
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
26
26
27 # No '..' in the repository path
27 # No '..' in the repository path
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
29 CHAR_1_HEX = "\xc3\x9c"
29 CHAR_1_HEX = "\xc3\x9c"
30
30
31 ruby19_non_utf8_pass = (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
31 ruby19_non_utf8_pass = (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
32
32
33 def setup
33 def setup
34 @controller = RepositoriesController.new
34 @controller = RepositoriesController.new
35 @request = ActionController::TestRequest.new
35 @request = ActionController::TestRequest.new
36 @response = ActionController::TestResponse.new
36 @response = ActionController::TestResponse.new
37 User.current = nil
37 User.current = nil
38 @repository = Repository::Mercurial.create(
38 @repository = Repository::Mercurial.create(
39 :project => Project.find(3),
39 :project => Project.find(3),
40 :url => REPOSITORY_PATH,
40 :url => REPOSITORY_PATH,
41 :path_encoding => 'ISO-8859-1'
41 :path_encoding => 'ISO-8859-1'
42 )
42 )
43 assert @repository
43 assert @repository
44 @diff_c_support = true
44 @diff_c_support = true
45 @char_1 = CHAR_1_HEX.dup
45 @char_1 = CHAR_1_HEX.dup
46 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
46 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
47 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
47 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
48 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
48 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
49 if @char_1.respond_to?(:force_encoding)
49 if @char_1.respond_to?(:force_encoding)
50 @char_1.force_encoding('UTF-8')
50 @char_1.force_encoding('UTF-8')
51 @tag_char_1.force_encoding('UTF-8')
51 @tag_char_1.force_encoding('UTF-8')
52 @branch_char_0.force_encoding('UTF-8')
52 @branch_char_0.force_encoding('UTF-8')
53 @branch_char_1.force_encoding('UTF-8')
53 @branch_char_1.force_encoding('UTF-8')
54 end
54 end
55 end
55 end
56
56
57 if ruby19_non_utf8_pass
57 if ruby19_non_utf8_pass
58 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
58 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
59 "and Encoding.default_external is not UTF-8. " +
59 "and Encoding.default_external is not UTF-8. " +
60 "Current value is '#{Encoding.default_external.to_s}'"
60 "Current value is '#{Encoding.default_external.to_s}'"
61 def test_fake; assert true end
61 def test_fake; assert true end
62 elsif File.directory?(REPOSITORY_PATH)
62 elsif File.directory?(REPOSITORY_PATH)
63 def test_show
63 def test_show
64 get :show, :id => 3
64 get :show, :id => 3
65 assert_response :success
65 assert_response :success
66 assert_template 'show'
66 assert_template 'show'
67 assert_not_nil assigns(:entries)
67 assert_not_nil assigns(:entries)
68 assert_not_nil assigns(:changesets)
68 assert_not_nil assigns(:changesets)
69 end
69 end
70
70
71 def test_show_root
71 def test_show_root
72 @repository.fetch_changesets
72 @repository.fetch_changesets
73 @repository.reload
73 @repository.reload
74 get :show, :id => 3
74 get :show, :id => 3
75 assert_response :success
75 assert_response :success
76 assert_template 'show'
76 assert_template 'show'
77 assert_not_nil assigns(:entries)
77 assert_not_nil assigns(:entries)
78 assert_equal 4, assigns(:entries).size
78 assert_equal 4, assigns(:entries).size
79 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
79 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
80 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
80 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
81 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
81 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
82 assert_not_nil assigns(:changesets)
82 assert_not_nil assigns(:changesets)
83 assigns(:changesets).size > 0
83 assigns(:changesets).size > 0
84 end
84 end
85
85
86 def test_show_directory
86 def test_show_directory
87 @repository.fetch_changesets
87 @repository.fetch_changesets
88 @repository.reload
88 @repository.reload
89 get :show, :id => 3, :path => ['images']
89 get :show, :id => 3, :path => ['images']
90 assert_response :success
90 assert_response :success
91 assert_template 'show'
91 assert_template 'show'
92 assert_not_nil assigns(:entries)
92 assert_not_nil assigns(:entries)
93 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
93 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
94 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
94 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
95 assert_not_nil entry
95 assert_not_nil entry
96 assert_equal 'file', entry.kind
96 assert_equal 'file', entry.kind
97 assert_equal 'images/edit.png', entry.path
97 assert_equal 'images/edit.png', entry.path
98 assert_not_nil assigns(:changesets)
98 assert_not_nil assigns(:changesets)
99 assigns(:changesets).size > 0
99 assigns(:changesets).size > 0
100 end
100 end
101
101
102 def test_show_at_given_revision
102 def test_show_at_given_revision
103 @repository.fetch_changesets
103 @repository.fetch_changesets
104 @repository.reload
104 @repository.reload
105 [0, '0', '0885933ad4f6'].each do |r1|
105 [0, '0', '0885933ad4f6'].each do |r1|
106 get :show, :id => 3, :path => ['images'], :rev => r1
106 get :show, :id => 3, :path => ['images'], :rev => r1
107 assert_response :success
107 assert_response :success
108 assert_template 'show'
108 assert_template 'show'
109 assert_not_nil assigns(:entries)
109 assert_not_nil assigns(:entries)
110 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
110 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
111 assert_not_nil assigns(:changesets)
111 assert_not_nil assigns(:changesets)
112 assigns(:changesets).size > 0
112 assigns(:changesets).size > 0
113 end
113 end
114 end
114 end
115
115
116 def test_show_directory_sql_escape_percent
116 def test_show_directory_sql_escape_percent
117 @repository.fetch_changesets
117 @repository.fetch_changesets
118 @repository.reload
118 @repository.reload
119 [13, '13', '3a330eb32958'].each do |r1|
119 [13, '13', '3a330eb32958'].each do |r1|
120 get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => r1
120 get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => r1
121 assert_response :success
121 assert_response :success
122 assert_template 'show'
122 assert_template 'show'
123
123
124 assert_not_nil assigns(:entries)
124 assert_not_nil assigns(:entries)
125 assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
125 assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
126 changesets = assigns(:changesets)
126 changesets = assigns(:changesets)
127 assert_not_nil changesets
127 assert_not_nil changesets
128 assigns(:changesets).size > 0
128 assigns(:changesets).size > 0
129 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
129 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
130 end
130 end
131 end
131 end
132
132
133 def test_show_directory_latin_1
133 def test_show_directory_latin_1
134 @repository.fetch_changesets
134 @repository.fetch_changesets
135 @repository.reload
135 @repository.reload
136 [21, '21', 'adf805632193'].each do |r1|
136 [21, '21', 'adf805632193'].each do |r1|
137 get :show, :id => 3, :path => ['latin-1-dir'], :rev => r1
137 get :show, :id => 3, :path => ['latin-1-dir'], :rev => r1
138 assert_response :success
138 assert_response :success
139 assert_template 'show'
139 assert_template 'show'
140
140
141 assert_not_nil assigns(:entries)
141 assert_not_nil assigns(:entries)
142 assert_equal ["make-latin-1-file.rb",
142 assert_equal ["make-latin-1-file.rb",
143 "test-#{@char_1}-1.txt",
143 "test-#{@char_1}-1.txt",
144 "test-#{@char_1}-2.txt",
144 "test-#{@char_1}-2.txt",
145 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
145 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
146 changesets = assigns(:changesets)
146 changesets = assigns(:changesets)
147 assert_not_nil changesets
147 assert_not_nil changesets
148 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
148 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
149 end
149 end
150 end
150 end
151
151
152 def test_show_branch
153 @repository.fetch_changesets
154 @repository.reload
155 [
156 'default',
157 @branch_char_1,
158 'branch (1)[2]&,%.-3_4',
159 @branch_char_0,
160 'test_branch.latin-1',
161 'test-branch-00',
162 ].each do |bra|
163 get :show, :id => 3, :rev => bra
164 assert_response :success
165 assert_template 'show'
166 assert_not_nil assigns(:entries)
167 assert assigns(:entries).size > 0
168 assert_not_nil assigns(:changesets)
169 assigns(:changesets).size > 0
170 end
171 end
172
152 def test_changes
173 def test_changes
153 get :changes, :id => 3, :path => ['images', 'edit.png']
174 get :changes, :id => 3, :path => ['images', 'edit.png']
154 assert_response :success
175 assert_response :success
155 assert_template 'changes'
176 assert_template 'changes'
156 assert_tag :tag => 'h2', :content => 'edit.png'
177 assert_tag :tag => 'h2', :content => 'edit.png'
157 end
178 end
158
179
159 def test_entry_show
180 def test_entry_show
160 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
181 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
161 assert_response :success
182 assert_response :success
162 assert_template 'entry'
183 assert_template 'entry'
163 # Line 10
184 # Line 10
164 assert_tag :tag => 'th',
185 assert_tag :tag => 'th',
165 :content => '10',
186 :content => '10',
166 :attributes => { :class => 'line-num' },
187 :attributes => { :class => 'line-num' },
167 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
188 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
168 end
189 end
169
190
170 def test_entry_show_latin_1
191 def test_entry_show_latin_1
171 [21, '21', 'adf805632193'].each do |r1|
192 [21, '21', 'adf805632193'].each do |r1|
172 get :entry, :id => 3, :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
193 get :entry, :id => 3, :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
173 assert_response :success
194 assert_response :success
174 assert_template 'entry'
195 assert_template 'entry'
175 assert_tag :tag => 'th',
196 assert_tag :tag => 'th',
176 :content => '1',
197 :content => '1',
177 :attributes => { :class => 'line-num' },
198 :attributes => { :class => 'line-num' },
178 :sibling => { :tag => 'td', :content => /Mercurial is a distributed version control system/ }
199 :sibling => { :tag => 'td', :content => /Mercurial is a distributed version control system/ }
179 end
200 end
180 end
201 end
181
202
182 def test_entry_download
203 def test_entry_download
183 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
204 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
184 assert_response :success
205 assert_response :success
185 # File content
206 # File content
186 assert @response.body.include?('WITHOUT ANY WARRANTY')
207 assert @response.body.include?('WITHOUT ANY WARRANTY')
187 end
208 end
188
209
189 def test_directory_entry
210 def test_directory_entry
190 get :entry, :id => 3, :path => ['sources']
211 get :entry, :id => 3, :path => ['sources']
191 assert_response :success
212 assert_response :success
192 assert_template 'show'
213 assert_template 'show'
193 assert_not_nil assigns(:entry)
214 assert_not_nil assigns(:entry)
194 assert_equal 'sources', assigns(:entry).name
215 assert_equal 'sources', assigns(:entry).name
195 end
216 end
196
217
197 def test_diff
218 def test_diff
198 @repository.fetch_changesets
219 @repository.fetch_changesets
199 @repository.reload
220 @repository.reload
200
221
201 [4, '4', 'def6d2f1254a'].each do |r1|
222 [4, '4', 'def6d2f1254a'].each do |r1|
202 # Full diff of changeset 4
223 # Full diff of changeset 4
203 get :diff, :id => 3, :rev => r1
224 get :diff, :id => 3, :rev => r1
204 assert_response :success
225 assert_response :success
205 assert_template 'diff'
226 assert_template 'diff'
206
227
207 if @diff_c_support
228 if @diff_c_support
208 # Line 22 removed
229 # Line 22 removed
209 assert_tag :tag => 'th',
230 assert_tag :tag => 'th',
210 :content => '22',
231 :content => '22',
211 :sibling => { :tag => 'td',
232 :sibling => { :tag => 'td',
212 :attributes => { :class => /diff_out/ },
233 :attributes => { :class => /diff_out/ },
213 :content => /def remove/ }
234 :content => /def remove/ }
214 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
235 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
215 end
236 end
216 end
237 end
217 end
238 end
218
239
219 def test_diff_two_revs
240 def test_diff_two_revs
220 @repository.fetch_changesets
241 @repository.fetch_changesets
221 @repository.reload
242 @repository.reload
222
243
223 [2, '400bb8672109', '400', 400].each do |r1|
244 [2, '400bb8672109', '400', 400].each do |r1|
224 [4, 'def6d2f1254a'].each do |r2|
245 [4, 'def6d2f1254a'].each do |r2|
225 get :diff, :id => 3, :rev => r1,
246 get :diff, :id => 3, :rev => r1,
226 :rev_to => r2
247 :rev_to => r2
227 assert_response :success
248 assert_response :success
228 assert_template 'diff'
249 assert_template 'diff'
229
250
230 diff = assigns(:diff)
251 diff = assigns(:diff)
231 assert_not_nil diff
252 assert_not_nil diff
232 assert_tag :tag => 'h2', :content => /4:def6d2f1254a 2:400bb8672109/
253 assert_tag :tag => 'h2', :content => /4:def6d2f1254a 2:400bb8672109/
233 end
254 end
234 end
255 end
235 end
256 end
236
257
237 def test_diff_latin_1
258 def test_diff_latin_1
238 [21, 'adf805632193'].each do |r1|
259 [21, 'adf805632193'].each do |r1|
239 get :diff, :id => 3, :rev => r1
260 get :diff, :id => 3, :rev => r1
240 assert_response :success
261 assert_response :success
241 assert_template 'diff'
262 assert_template 'diff'
242 assert_tag :tag => 'th',
263 assert_tag :tag => 'th',
243 :content => '2',
264 :content => '2',
244 :sibling => { :tag => 'td',
265 :sibling => { :tag => 'td',
245 :attributes => { :class => /diff_in/ },
266 :attributes => { :class => /diff_in/ },
246 :content => /It is written in Python/ }
267 :content => /It is written in Python/ }
247 end
268 end
248 end
269 end
249
270
250 def test_annotate
271 def test_annotate
251 get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
272 get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
252 assert_response :success
273 assert_response :success
253 assert_template 'annotate'
274 assert_template 'annotate'
254 # Line 23, revision 4:def6d2f1254a
275 # Line 23, revision 4:def6d2f1254a
255 assert_tag :tag => 'th',
276 assert_tag :tag => 'th',
256 :content => '23',
277 :content => '23',
257 :attributes => { :class => 'line-num' },
278 :attributes => { :class => 'line-num' },
258 :sibling =>
279 :sibling =>
259 {
280 {
260 :tag => 'td',
281 :tag => 'td',
261 :attributes => { :class => 'revision' },
282 :attributes => { :class => 'revision' },
262 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
283 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
263 }
284 }
264 assert_tag :tag => 'th',
285 assert_tag :tag => 'th',
265 :content => '23',
286 :content => '23',
266 :attributes => { :class => 'line-num' },
287 :attributes => { :class => 'line-num' },
267 :sibling =>
288 :sibling =>
268 {
289 {
269 :tag => 'td' ,
290 :tag => 'td' ,
270 :content => 'jsmith' ,
291 :content => 'jsmith' ,
271 :attributes => { :class => 'author' },
292 :attributes => { :class => 'author' },
272 }
293 }
273 assert_tag :tag => 'th',
294 assert_tag :tag => 'th',
274 :content => '23',
295 :content => '23',
275 :attributes => { :class => 'line-num' },
296 :attributes => { :class => 'line-num' },
276 :sibling => { :tag => 'td', :content => /watcher =/ }
297 :sibling => { :tag => 'td', :content => /watcher =/ }
277 end
298 end
278
299
279 def test_annotate_at_given_revision
300 def test_annotate_at_given_revision
280 @repository.fetch_changesets
301 @repository.fetch_changesets
281 @repository.reload
302 @repository.reload
282 [2, '400bb8672109', '400', 400].each do |r1|
303 [2, '400bb8672109', '400', 400].each do |r1|
283 get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
304 get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
284 assert_response :success
305 assert_response :success
285 assert_template 'annotate'
306 assert_template 'annotate'
286 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
307 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
287 end
308 end
288 end
309 end
289
310
290 def test_annotate_latin_1
311 def test_annotate_latin_1
291 [21, '21', 'adf805632193'].each do |r1|
312 [21, '21', 'adf805632193'].each do |r1|
292 get :annotate, :id => 3, :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
313 get :annotate, :id => 3, :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
293 assert_response :success
314 assert_response :success
294 assert_template 'annotate'
315 assert_template 'annotate'
295 assert_tag :tag => 'th',
316 assert_tag :tag => 'th',
296 :content => '1',
317 :content => '1',
297 :attributes => { :class => 'line-num' },
318 :attributes => { :class => 'line-num' },
298 :sibling =>
319 :sibling =>
299 {
320 {
300 :tag => 'td',
321 :tag => 'td',
301 :attributes => { :class => 'revision' },
322 :attributes => { :class => 'revision' },
302 :child => { :tag => 'a', :content => '20:709858aafd1b' }
323 :child => { :tag => 'a', :content => '20:709858aafd1b' }
303 }
324 }
304 assert_tag :tag => 'th',
325 assert_tag :tag => 'th',
305 :content => '1',
326 :content => '1',
306 :attributes => { :class => 'line-num' },
327 :attributes => { :class => 'line-num' },
307 :sibling =>
328 :sibling =>
308 {
329 {
309 :tag => 'td' ,
330 :tag => 'td' ,
310 :content => 'jsmith' ,
331 :content => 'jsmith' ,
311 :attributes => { :class => 'author' },
332 :attributes => { :class => 'author' },
312
333
313 }
334 }
314 assert_tag :tag => 'th',
335 assert_tag :tag => 'th',
315 :content => '1',
336 :content => '1',
316 :attributes => { :class => 'line-num' },
337 :attributes => { :class => 'line-num' },
317 :sibling => { :tag => 'td', :content => /Mercurial is a distributed version control system/ }
338 :sibling => { :tag => 'td', :content => /Mercurial is a distributed version control system/ }
318
339
319 end
340 end
320 end
341 end
321
342
322 def test_empty_revision
343 def test_empty_revision
323 @repository.fetch_changesets
344 @repository.fetch_changesets
324 @repository.reload
345 @repository.reload
325 ['', ' ', nil].each do |r|
346 ['', ' ', nil].each do |r|
326 get :revision, :id => 3, :rev => r
347 get :revision, :id => 3, :rev => r
327 assert_response 404
348 assert_response 404
328 assert_error_tag :content => /was not found/
349 assert_error_tag :content => /was not found/
329 end
350 end
330 end
351 end
331 else
352 else
332 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
353 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
333 def test_fake; assert true end
354 def test_fake; assert true end
334 end
355 end
335 end
356 end
General Comments 0
You need to be logged in to leave comments. Login now