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