##// END OF EJS Templates
Rails3: mercurial: git: fix error of test_isodatesec at unit model test...
Toshi MARUYAMA -
r6981:0130f6265115
parent child
Show More
@@ -1,296 +1,298
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 @repository.fetch_changesets
83 @repository.fetch_changesets
83 @repository.reload
84 @project.reload
85 assert_equal NUM_REV, @repository.changesets.count
84 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
86 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
85 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
86 end
88 end
87 end
89 end
88
90
89 def test_changeset_order_by_revision
91 def test_changeset_order_by_revision
90 @repository.fetch_changesets
92 @repository.fetch_changesets
91 @repository.reload
93 @repository.reload
92
94
93 c0 = @repository.latest_changeset
95 c0 = @repository.latest_changeset
94 c1 = @repository.changesets.find_by_revision('0')
96 c1 = @repository.changesets.find_by_revision('0')
95 # sorted by revision (id), not by date
97 # sorted by revision (id), not by date
96 assert c0.revision.to_i > c1.revision.to_i
98 assert c0.revision.to_i > c1.revision.to_i
97 assert c0.committed_on < c1.committed_on
99 assert c0.committed_on < c1.committed_on
98 end
100 end
99
101
100 def test_latest_changesets
102 def test_latest_changesets
101 @repository.fetch_changesets
103 @repository.fetch_changesets
102 @repository.reload
104 @repository.reload
103
105
104 # with_limit
106 # with_limit
105 changesets = @repository.latest_changesets('', nil, 2)
107 changesets = @repository.latest_changesets('', nil, 2)
106 assert_equal %w|28 27|, changesets.collect(&:revision)
108 assert_equal %w|28 27|, changesets.collect(&:revision)
107
109
108 # with_filepath
110 # with_filepath
109 changesets = @repository.latest_changesets(
111 changesets = @repository.latest_changesets(
110 '/sql_escape/percent%dir/percent%file1.txt', nil)
112 '/sql_escape/percent%dir/percent%file1.txt', nil)
111 assert_equal %w|11 10 9|, changesets.collect(&:revision)
113 assert_equal %w|11 10 9|, changesets.collect(&:revision)
112
114
113 changesets = @repository.latest_changesets(
115 changesets = @repository.latest_changesets(
114 '/sql_escape/underscore_dir/understrike_file.txt', nil)
116 '/sql_escape/underscore_dir/understrike_file.txt', nil)
115 assert_equal %w|12 9|, changesets.collect(&:revision)
117 assert_equal %w|12 9|, changesets.collect(&:revision)
116
118
117 changesets = @repository.latest_changesets('README', nil)
119 changesets = @repository.latest_changesets('README', nil)
118 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)
119
121
120 changesets = @repository.latest_changesets('README','8')
122 changesets = @repository.latest_changesets('README','8')
121 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
123 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
122
124
123 changesets = @repository.latest_changesets('README','8', 2)
125 changesets = @repository.latest_changesets('README','8', 2)
124 assert_equal %w|8 6|, changesets.collect(&:revision)
126 assert_equal %w|8 6|, changesets.collect(&:revision)
125
127
126 # with_dirpath
128 # with_dirpath
127 changesets = @repository.latest_changesets('images', nil)
129 changesets = @repository.latest_changesets('images', nil)
128 assert_equal %w|1 0|, changesets.collect(&:revision)
130 assert_equal %w|1 0|, changesets.collect(&:revision)
129
131
130 path = 'sql_escape/percent%dir'
132 path = 'sql_escape/percent%dir'
131 changesets = @repository.latest_changesets(path, nil)
133 changesets = @repository.latest_changesets(path, nil)
132 assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
134 assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
133
135
134 changesets = @repository.latest_changesets(path, '11')
136 changesets = @repository.latest_changesets(path, '11')
135 assert_equal %w|11 10 9|, changesets.collect(&:revision)
137 assert_equal %w|11 10 9|, changesets.collect(&:revision)
136
138
137 changesets = @repository.latest_changesets(path, '11', 2)
139 changesets = @repository.latest_changesets(path, '11', 2)
138 assert_equal %w|11 10|, changesets.collect(&:revision)
140 assert_equal %w|11 10|, changesets.collect(&:revision)
139
141
140 path = 'sql_escape/underscore_dir'
142 path = 'sql_escape/underscore_dir'
141 changesets = @repository.latest_changesets(path, nil)
143 changesets = @repository.latest_changesets(path, nil)
142 assert_equal %w|13 12 9|, changesets.collect(&:revision)
144 assert_equal %w|13 12 9|, changesets.collect(&:revision)
143
145
144 changesets = @repository.latest_changesets(path, '12')
146 changesets = @repository.latest_changesets(path, '12')
145 assert_equal %w|12 9|, changesets.collect(&:revision)
147 assert_equal %w|12 9|, changesets.collect(&:revision)
146
148
147 changesets = @repository.latest_changesets(path, '12', 1)
149 changesets = @repository.latest_changesets(path, '12', 1)
148 assert_equal %w|12|, changesets.collect(&:revision)
150 assert_equal %w|12|, changesets.collect(&:revision)
149
151
150 # tag
152 # tag
151 changesets = @repository.latest_changesets('', 'tag_test.00')
153 changesets = @repository.latest_changesets('', 'tag_test.00')
152 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)
153
155
154 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
156 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
155 assert_equal %w|5 4|, changesets.collect(&:revision)
157 assert_equal %w|5 4|, changesets.collect(&:revision)
156
158
157 changesets = @repository.latest_changesets('sources', 'tag_test.00')
159 changesets = @repository.latest_changesets('sources', 'tag_test.00')
158 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
160 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
159
161
160 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
162 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
161 assert_equal %w|4 3|, changesets.collect(&:revision)
163 assert_equal %w|4 3|, changesets.collect(&:revision)
162
164
163 # named branch
165 # named branch
164 changesets = @repository.latest_changesets('', @branch_char_1)
166 changesets = @repository.latest_changesets('', @branch_char_1)
165 assert_equal %w|27 26|, changesets.collect(&:revision)
167 assert_equal %w|27 26|, changesets.collect(&:revision)
166
168
167 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)
168 assert_equal %w|27|, changesets.collect(&:revision)
170 assert_equal %w|27|, changesets.collect(&:revision)
169 end
171 end
170
172
171 def test_copied_files
173 def test_copied_files
172 @repository.fetch_changesets
174 @repository.fetch_changesets
173 @repository.reload
175 @repository.reload
174
176
175 cs1 = @repository.changesets.find_by_revision('13')
177 cs1 = @repository.changesets.find_by_revision('13')
176 assert_not_nil cs1
178 assert_not_nil cs1
177 c1 = cs1.changes.sort_by(&:path)
179 c1 = cs1.changes.sort_by(&:path)
178 assert_equal 2, c1.size
180 assert_equal 2, c1.size
179
181
180 assert_equal 'A', c1[0].action
182 assert_equal 'A', c1[0].action
181 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
183 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
182 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
183 assert_equal '3a330eb32958', c1[0].from_revision
185 assert_equal '3a330eb32958', c1[0].from_revision
184
186
185 assert_equal 'A', c1[1].action
187 assert_equal 'A', c1[1].action
186 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
187 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
188
190
189 cs2 = @repository.changesets.find_by_revision('15')
191 cs2 = @repository.changesets.find_by_revision('15')
190 c2 = cs2.changes
192 c2 = cs2.changes
191 assert_equal 1, c2.size
193 assert_equal 1, c2.size
192
194
193 assert_equal 'A', c2[0].action
195 assert_equal 'A', c2[0].action
194 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
196 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
195 assert_equal '/README', c2[0].from_path
197 assert_equal '/README', c2[0].from_path
196 assert_equal '933ca60293d7', c2[0].from_revision
198 assert_equal '933ca60293d7', c2[0].from_revision
197
199
198 cs3 = @repository.changesets.find_by_revision('19')
200 cs3 = @repository.changesets.find_by_revision('19')
199 c3 = cs3.changes
201 c3 = cs3.changes
200 assert_equal 1, c3.size
202 assert_equal 1, c3.size
201 assert_equal 'A', c3[0].action
203 assert_equal 'A', c3[0].action
202 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
203 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
204 assert_equal '5d9891a1b425', c3[0].from_revision
206 assert_equal '5d9891a1b425', c3[0].from_revision
205 end
207 end
206
208
207 def test_find_changeset_by_name
209 def test_find_changeset_by_name
208 @repository.fetch_changesets
210 @repository.fetch_changesets
209 @repository.reload
211 @repository.reload
210 %w|2 400bb8672109 400|.each do |r|
212 %w|2 400bb8672109 400|.each do |r|
211 assert_equal '2', @repository.find_changeset_by_name(r).revision
213 assert_equal '2', @repository.find_changeset_by_name(r).revision
212 end
214 end
213 end
215 end
214
216
215 def test_find_changeset_by_invalid_name
217 def test_find_changeset_by_invalid_name
216 @repository.fetch_changesets
218 @repository.fetch_changesets
217 @repository.reload
219 @repository.reload
218 assert_nil @repository.find_changeset_by_name('100000')
220 assert_nil @repository.find_changeset_by_name('100000')
219 end
221 end
220
222
221 def test_identifier
223 def test_identifier
222 @repository.fetch_changesets
224 @repository.fetch_changesets
223 @repository.reload
225 @repository.reload
224 c = @repository.changesets.find_by_revision('2')
226 c = @repository.changesets.find_by_revision('2')
225 assert_equal c.scmid, c.identifier
227 assert_equal c.scmid, c.identifier
226 end
228 end
227
229
228 def test_format_identifier
230 def test_format_identifier
229 @repository.fetch_changesets
231 @repository.fetch_changesets
230 @repository.reload
232 @repository.reload
231 c = @repository.changesets.find_by_revision('2')
233 c = @repository.changesets.find_by_revision('2')
232 assert_equal '2:400bb8672109', c.format_identifier
234 assert_equal '2:400bb8672109', c.format_identifier
233 end
235 end
234
236
235 def test_find_changeset_by_empty_name
237 def test_find_changeset_by_empty_name
236 @repository.fetch_changesets
238 @repository.fetch_changesets
237 @repository.reload
239 @repository.reload
238 ['', ' ', nil].each do |r|
240 ['', ' ', nil].each do |r|
239 assert_nil @repository.find_changeset_by_name(r)
241 assert_nil @repository.find_changeset_by_name(r)
240 end
242 end
241 end
243 end
242
244
243 def test_activities
245 def test_activities
244 c = Changeset.new(:repository => @repository,
246 c = Changeset.new(:repository => @repository,
245 :committed_on => Time.now,
247 :committed_on => Time.now,
246 :revision => '123',
248 :revision => '123',
247 :scmid => 'abc400bb8672',
249 :scmid => 'abc400bb8672',
248 :comments => 'test')
250 :comments => 'test')
249 assert c.event_title.include?('123:abc400bb8672:')
251 assert c.event_title.include?('123:abc400bb8672:')
250 assert_equal 'abc400bb8672', c.event_url[:rev]
252 assert_equal 'abc400bb8672', c.event_url[:rev]
251 end
253 end
252
254
253 def test_previous
255 def test_previous
254 @repository.fetch_changesets
256 @repository.fetch_changesets
255 @repository.reload
257 @repository.reload
256 %w|28 3ae45e2d177d 3ae45|.each do |r1|
258 %w|28 3ae45e2d177d 3ae45|.each do |r1|
257 changeset = @repository.find_changeset_by_name(r1)
259 changeset = @repository.find_changeset_by_name(r1)
258 %w|27 7bbf4c738e71 7bbf|.each do |r2|
260 %w|27 7bbf4c738e71 7bbf|.each do |r2|
259 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
261 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
260 end
262 end
261 end
263 end
262 end
264 end
263
265
264 def test_previous_nil
266 def test_previous_nil
265 @repository.fetch_changesets
267 @repository.fetch_changesets
266 @repository.reload
268 @repository.reload
267 %w|0 0885933ad4f6 0885|.each do |r1|
269 %w|0 0885933ad4f6 0885|.each do |r1|
268 changeset = @repository.find_changeset_by_name(r1)
270 changeset = @repository.find_changeset_by_name(r1)
269 assert_nil changeset.previous
271 assert_nil changeset.previous
270 end
272 end
271 end
273 end
272
274
273 def test_next
275 def test_next
274 @repository.fetch_changesets
276 @repository.fetch_changesets
275 @repository.reload
277 @repository.reload
276 %w|27 7bbf4c738e71 7bbf|.each do |r2|
278 %w|27 7bbf4c738e71 7bbf|.each do |r2|
277 changeset = @repository.find_changeset_by_name(r2)
279 changeset = @repository.find_changeset_by_name(r2)
278 %w|28 3ae45e2d177d 3ae45|.each do |r1|
280 %w|28 3ae45e2d177d 3ae45|.each do |r1|
279 assert_equal @repository.find_changeset_by_name(r1), changeset.next
281 assert_equal @repository.find_changeset_by_name(r1), changeset.next
280 end
282 end
281 end
283 end
282 end
284 end
283
285
284 def test_next_nil
286 def test_next_nil
285 @repository.fetch_changesets
287 @repository.fetch_changesets
286 @repository.reload
288 @repository.reload
287 %w|28 3ae45e2d177d 3ae45|.each do |r1|
289 %w|28 3ae45e2d177d 3ae45|.each do |r1|
288 changeset = @repository.find_changeset_by_name(r1)
290 changeset = @repository.find_changeset_by_name(r1)
289 assert_nil changeset.next
291 assert_nil changeset.next
290 end
292 end
291 end
293 end
292 else
294 else
293 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
295 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
294 def test_fake; assert true end
296 def test_fake; assert true end
295 end
297 end
296 end
298 end
General Comments 0
You need to be logged in to leave comments. Login now