##// END OF EJS Templates
scm: mercurial: replace RAILS_ROOT to Rails.root in unit model test....
Toshi MARUYAMA -
r5931:7e38ccab55f5
parent child
Show More
@@ -1,293 +1,290
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 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
19
20 class RepositoryMercurialTest < ActiveSupport::TestCase
20 class RepositoryMercurialTest < ActiveSupport::TestCase
21 fixtures :projects
21 fixtures :projects
22
22
23 # No '..' in the repository path
23 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
25
26 CHAR_1_HEX = "\xc3\x9c"
24 CHAR_1_HEX = "\xc3\x9c"
27
25
28 if File.directory?(REPOSITORY_PATH)
26 if File.directory?(REPOSITORY_PATH)
29
30 def setup
27 def setup
31 klass = Repository::Mercurial
28 klass = Repository::Mercurial
32 assert_equal "Mercurial", klass.scm_name
29 assert_equal "Mercurial", klass.scm_name
33 assert klass.scm_adapter_class
30 assert klass.scm_adapter_class
34 assert_not_equal "", klass.scm_command
31 assert_not_equal "", klass.scm_command
35 assert_equal true, klass.scm_available
32 assert_equal true, klass.scm_available
36
33
37 @project = Project.find(3)
34 @project = Project.find(3)
38 @repository = Repository::Mercurial.create(
35 @repository = Repository::Mercurial.create(
39 :project => @project,
36 :project => @project,
40 :url => REPOSITORY_PATH,
37 :url => REPOSITORY_PATH,
41 :path_encoding => 'ISO-8859-1'
38 :path_encoding => 'ISO-8859-1'
42 )
39 )
43 assert @repository
40 assert @repository
44 @char_1 = CHAR_1_HEX.dup
41 @char_1 = CHAR_1_HEX.dup
45 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
42 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
46 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
43 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
47 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
44 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
48 if @char_1.respond_to?(:force_encoding)
45 if @char_1.respond_to?(:force_encoding)
49 @char_1.force_encoding('UTF-8')
46 @char_1.force_encoding('UTF-8')
50 @tag_char_1.force_encoding('UTF-8')
47 @tag_char_1.force_encoding('UTF-8')
51 @branch_char_0.force_encoding('UTF-8')
48 @branch_char_0.force_encoding('UTF-8')
52 @branch_char_1.force_encoding('UTF-8')
49 @branch_char_1.force_encoding('UTF-8')
53 end
50 end
54 end
51 end
55
52
56 def test_fetch_changesets_from_scratch
53 def test_fetch_changesets_from_scratch
57 @repository.fetch_changesets
54 @repository.fetch_changesets
58 @repository.reload
55 @repository.reload
59 assert_equal 29, @repository.changesets.count
56 assert_equal 29, @repository.changesets.count
60 assert_equal 37, @repository.changes.count
57 assert_equal 37, @repository.changes.count
61 assert_equal "Initial import.\nThe repository contains 3 files.",
58 assert_equal "Initial import.\nThe repository contains 3 files.",
62 @repository.changesets.find_by_revision('0').comments
59 @repository.changesets.find_by_revision('0').comments
63 end
60 end
64
61
65 def test_fetch_changesets_incremental
62 def test_fetch_changesets_incremental
66 @repository.fetch_changesets
63 @repository.fetch_changesets
67 # Remove changesets with revision > 2
64 # Remove changesets with revision > 2
68 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
65 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
69 @repository.reload
66 @repository.reload
70 assert_equal 3, @repository.changesets.count
67 assert_equal 3, @repository.changesets.count
71
68
72 @repository.fetch_changesets
69 @repository.fetch_changesets
73 assert_equal 29, @repository.changesets.count
70 assert_equal 29, @repository.changesets.count
74 end
71 end
75
72
76 def test_isodatesec
73 def test_isodatesec
77 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
74 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
78 if @repository.scm.class.client_version_above?([1, 0])
75 if @repository.scm.class.client_version_above?([1, 0])
79 @repository.fetch_changesets
76 @repository.fetch_changesets
80 @repository.reload
77 @repository.reload
81 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
78 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
82 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
79 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
83 end
80 end
84 end
81 end
85
82
86 def test_changeset_order_by_revision
83 def test_changeset_order_by_revision
87 @repository.fetch_changesets
84 @repository.fetch_changesets
88 @repository.reload
85 @repository.reload
89
86
90 c0 = @repository.latest_changeset
87 c0 = @repository.latest_changeset
91 c1 = @repository.changesets.find_by_revision('0')
88 c1 = @repository.changesets.find_by_revision('0')
92 # sorted by revision (id), not by date
89 # sorted by revision (id), not by date
93 assert c0.revision.to_i > c1.revision.to_i
90 assert c0.revision.to_i > c1.revision.to_i
94 assert c0.committed_on < c1.committed_on
91 assert c0.committed_on < c1.committed_on
95 end
92 end
96
93
97 def test_latest_changesets
94 def test_latest_changesets
98 @repository.fetch_changesets
95 @repository.fetch_changesets
99 @repository.reload
96 @repository.reload
100
97
101 # with_limit
98 # with_limit
102 changesets = @repository.latest_changesets('', nil, 2)
99 changesets = @repository.latest_changesets('', nil, 2)
103 assert_equal %w|28 27|, changesets.collect(&:revision)
100 assert_equal %w|28 27|, changesets.collect(&:revision)
104
101
105 # with_filepath
102 # with_filepath
106 changesets = @repository.latest_changesets(
103 changesets = @repository.latest_changesets(
107 '/sql_escape/percent%dir/percent%file1.txt', nil)
104 '/sql_escape/percent%dir/percent%file1.txt', nil)
108 assert_equal %w|11 10 9|, changesets.collect(&:revision)
105 assert_equal %w|11 10 9|, changesets.collect(&:revision)
109
106
110 changesets = @repository.latest_changesets(
107 changesets = @repository.latest_changesets(
111 '/sql_escape/underscore_dir/understrike_file.txt', nil)
108 '/sql_escape/underscore_dir/understrike_file.txt', nil)
112 assert_equal %w|12 9|, changesets.collect(&:revision)
109 assert_equal %w|12 9|, changesets.collect(&:revision)
113
110
114 changesets = @repository.latest_changesets('README', nil)
111 changesets = @repository.latest_changesets('README', nil)
115 assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
112 assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
116
113
117 changesets = @repository.latest_changesets('README','8')
114 changesets = @repository.latest_changesets('README','8')
118 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
115 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
119
116
120 changesets = @repository.latest_changesets('README','8', 2)
117 changesets = @repository.latest_changesets('README','8', 2)
121 assert_equal %w|8 6|, changesets.collect(&:revision)
118 assert_equal %w|8 6|, changesets.collect(&:revision)
122
119
123 # with_dirpath
120 # with_dirpath
124 changesets = @repository.latest_changesets('images', nil)
121 changesets = @repository.latest_changesets('images', nil)
125 assert_equal %w|1 0|, changesets.collect(&:revision)
122 assert_equal %w|1 0|, changesets.collect(&:revision)
126
123
127 path = 'sql_escape/percent%dir'
124 path = 'sql_escape/percent%dir'
128 changesets = @repository.latest_changesets(path, nil)
125 changesets = @repository.latest_changesets(path, nil)
129 assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
126 assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
130
127
131 changesets = @repository.latest_changesets(path, '11')
128 changesets = @repository.latest_changesets(path, '11')
132 assert_equal %w|11 10 9|, changesets.collect(&:revision)
129 assert_equal %w|11 10 9|, changesets.collect(&:revision)
133
130
134 changesets = @repository.latest_changesets(path, '11', 2)
131 changesets = @repository.latest_changesets(path, '11', 2)
135 assert_equal %w|11 10|, changesets.collect(&:revision)
132 assert_equal %w|11 10|, changesets.collect(&:revision)
136
133
137 path = 'sql_escape/underscore_dir'
134 path = 'sql_escape/underscore_dir'
138 changesets = @repository.latest_changesets(path, nil)
135 changesets = @repository.latest_changesets(path, nil)
139 assert_equal %w|13 12 9|, changesets.collect(&:revision)
136 assert_equal %w|13 12 9|, changesets.collect(&:revision)
140
137
141 changesets = @repository.latest_changesets(path, '12')
138 changesets = @repository.latest_changesets(path, '12')
142 assert_equal %w|12 9|, changesets.collect(&:revision)
139 assert_equal %w|12 9|, changesets.collect(&:revision)
143
140
144 changesets = @repository.latest_changesets(path, '12', 1)
141 changesets = @repository.latest_changesets(path, '12', 1)
145 assert_equal %w|12|, changesets.collect(&:revision)
142 assert_equal %w|12|, changesets.collect(&:revision)
146
143
147 # tag
144 # tag
148 changesets = @repository.latest_changesets('', 'tag_test.00')
145 changesets = @repository.latest_changesets('', 'tag_test.00')
149 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
146 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
150
147
151 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
148 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
152 assert_equal %w|5 4|, changesets.collect(&:revision)
149 assert_equal %w|5 4|, changesets.collect(&:revision)
153
150
154 changesets = @repository.latest_changesets('sources', 'tag_test.00')
151 changesets = @repository.latest_changesets('sources', 'tag_test.00')
155 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
152 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
156
153
157 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
154 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
158 assert_equal %w|4 3|, changesets.collect(&:revision)
155 assert_equal %w|4 3|, changesets.collect(&:revision)
159
156
160 # named branch
157 # named branch
161 changesets = @repository.latest_changesets('', @branch_char_1)
158 changesets = @repository.latest_changesets('', @branch_char_1)
162 assert_equal %w|27 26|, changesets.collect(&:revision)
159 assert_equal %w|27 26|, changesets.collect(&:revision)
163
160
164 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
161 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
165 assert_equal %w|27|, changesets.collect(&:revision)
162 assert_equal %w|27|, changesets.collect(&:revision)
166 end
163 end
167
164
168 def test_copied_files
165 def test_copied_files
169 @repository.fetch_changesets
166 @repository.fetch_changesets
170 @repository.reload
167 @repository.reload
171
168
172 cs1 = @repository.changesets.find_by_revision('13')
169 cs1 = @repository.changesets.find_by_revision('13')
173 assert_not_nil cs1
170 assert_not_nil cs1
174 c1 = cs1.changes.sort_by(&:path)
171 c1 = cs1.changes.sort_by(&:path)
175 assert_equal 2, c1.size
172 assert_equal 2, c1.size
176
173
177 assert_equal 'A', c1[0].action
174 assert_equal 'A', c1[0].action
178 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
175 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
179 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
176 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
180 assert_equal '3a330eb32958', c1[0].from_revision
177 assert_equal '3a330eb32958', c1[0].from_revision
181
178
182 assert_equal 'A', c1[1].action
179 assert_equal 'A', c1[1].action
183 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
180 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
184 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
181 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
185
182
186 cs2 = @repository.changesets.find_by_revision('15')
183 cs2 = @repository.changesets.find_by_revision('15')
187 c2 = cs2.changes
184 c2 = cs2.changes
188 assert_equal 1, c2.size
185 assert_equal 1, c2.size
189
186
190 assert_equal 'A', c2[0].action
187 assert_equal 'A', c2[0].action
191 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
188 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
192 assert_equal '/README', c2[0].from_path
189 assert_equal '/README', c2[0].from_path
193 assert_equal '933ca60293d7', c2[0].from_revision
190 assert_equal '933ca60293d7', c2[0].from_revision
194
191
195 cs3 = @repository.changesets.find_by_revision('19')
192 cs3 = @repository.changesets.find_by_revision('19')
196 c3 = cs3.changes
193 c3 = cs3.changes
197 assert_equal 1, c3.size
194 assert_equal 1, c3.size
198 assert_equal 'A', c3[0].action
195 assert_equal 'A', c3[0].action
199 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
196 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
200 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
197 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
201 assert_equal '5d9891a1b425', c3[0].from_revision
198 assert_equal '5d9891a1b425', c3[0].from_revision
202 end
199 end
203
200
204 def test_find_changeset_by_name
201 def test_find_changeset_by_name
205 @repository.fetch_changesets
202 @repository.fetch_changesets
206 @repository.reload
203 @repository.reload
207 %w|2 400bb8672109 400|.each do |r|
204 %w|2 400bb8672109 400|.each do |r|
208 assert_equal '2', @repository.find_changeset_by_name(r).revision
205 assert_equal '2', @repository.find_changeset_by_name(r).revision
209 end
206 end
210 end
207 end
211
208
212 def test_find_changeset_by_invalid_name
209 def test_find_changeset_by_invalid_name
213 @repository.fetch_changesets
210 @repository.fetch_changesets
214 @repository.reload
211 @repository.reload
215 assert_nil @repository.find_changeset_by_name('100000')
212 assert_nil @repository.find_changeset_by_name('100000')
216 end
213 end
217
214
218 def test_identifier
215 def test_identifier
219 @repository.fetch_changesets
216 @repository.fetch_changesets
220 @repository.reload
217 @repository.reload
221 c = @repository.changesets.find_by_revision('2')
218 c = @repository.changesets.find_by_revision('2')
222 assert_equal c.scmid, c.identifier
219 assert_equal c.scmid, c.identifier
223 end
220 end
224
221
225 def test_format_identifier
222 def test_format_identifier
226 @repository.fetch_changesets
223 @repository.fetch_changesets
227 @repository.reload
224 @repository.reload
228 c = @repository.changesets.find_by_revision('2')
225 c = @repository.changesets.find_by_revision('2')
229 assert_equal '2:400bb8672109', c.format_identifier
226 assert_equal '2:400bb8672109', c.format_identifier
230 end
227 end
231
228
232 def test_find_changeset_by_empty_name
229 def test_find_changeset_by_empty_name
233 @repository.fetch_changesets
230 @repository.fetch_changesets
234 @repository.reload
231 @repository.reload
235 ['', ' ', nil].each do |r|
232 ['', ' ', nil].each do |r|
236 assert_nil @repository.find_changeset_by_name(r)
233 assert_nil @repository.find_changeset_by_name(r)
237 end
234 end
238 end
235 end
239
236
240 def test_activities
237 def test_activities
241 c = Changeset.new(:repository => @repository,
238 c = Changeset.new(:repository => @repository,
242 :committed_on => Time.now,
239 :committed_on => Time.now,
243 :revision => '123',
240 :revision => '123',
244 :scmid => 'abc400bb8672',
241 :scmid => 'abc400bb8672',
245 :comments => 'test')
242 :comments => 'test')
246 assert c.event_title.include?('123:abc400bb8672:')
243 assert c.event_title.include?('123:abc400bb8672:')
247 assert_equal 'abc400bb8672', c.event_url[:rev]
244 assert_equal 'abc400bb8672', c.event_url[:rev]
248 end
245 end
249
246
250 def test_previous
247 def test_previous
251 @repository.fetch_changesets
248 @repository.fetch_changesets
252 @repository.reload
249 @repository.reload
253 %w|28 3ae45e2d177d 3ae45|.each do |r1|
250 %w|28 3ae45e2d177d 3ae45|.each do |r1|
254 changeset = @repository.find_changeset_by_name(r1)
251 changeset = @repository.find_changeset_by_name(r1)
255 %w|27 7bbf4c738e71 7bbf|.each do |r2|
252 %w|27 7bbf4c738e71 7bbf|.each do |r2|
256 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
253 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
257 end
254 end
258 end
255 end
259 end
256 end
260
257
261 def test_previous_nil
258 def test_previous_nil
262 @repository.fetch_changesets
259 @repository.fetch_changesets
263 @repository.reload
260 @repository.reload
264 %w|0 0885933ad4f6 0885|.each do |r1|
261 %w|0 0885933ad4f6 0885|.each do |r1|
265 changeset = @repository.find_changeset_by_name(r1)
262 changeset = @repository.find_changeset_by_name(r1)
266 assert_nil changeset.previous
263 assert_nil changeset.previous
267 end
264 end
268 end
265 end
269
266
270 def test_next
267 def test_next
271 @repository.fetch_changesets
268 @repository.fetch_changesets
272 @repository.reload
269 @repository.reload
273 %w|27 7bbf4c738e71 7bbf|.each do |r2|
270 %w|27 7bbf4c738e71 7bbf|.each do |r2|
274 changeset = @repository.find_changeset_by_name(r2)
271 changeset = @repository.find_changeset_by_name(r2)
275 %w|28 3ae45e2d177d 3ae45|.each do |r1|
272 %w|28 3ae45e2d177d 3ae45|.each do |r1|
276 assert_equal @repository.find_changeset_by_name(r1), changeset.next
273 assert_equal @repository.find_changeset_by_name(r1), changeset.next
277 end
274 end
278 end
275 end
279 end
276 end
280
277
281 def test_next_nil
278 def test_next_nil
282 @repository.fetch_changesets
279 @repository.fetch_changesets
283 @repository.reload
280 @repository.reload
284 %w|28 3ae45e2d177d 3ae45|.each do |r1|
281 %w|28 3ae45e2d177d 3ae45|.each do |r1|
285 changeset = @repository.find_changeset_by_name(r1)
282 changeset = @repository.find_changeset_by_name(r1)
286 assert_nil changeset.next
283 assert_nil changeset.next
287 end
284 end
288 end
285 end
289 else
286 else
290 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
287 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
291 def test_fake; assert true end
288 def test_fake; assert true end
292 end
289 end
293 end
290 end
General Comments 0
You need to be logged in to leave comments. Login now