##// END OF EJS Templates
scm: mercurial: split latest_changesets tag test with path or not (#14361)...
Toshi MARUYAMA -
r12489:8c96db6e53e5
parent child
Show More
@@ -1,474 +1,481
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2014 Jean-Philippe Lang
2 # Copyright (C) 2006-2014 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 include Redmine::I18n
23 include Redmine::I18n
24
24
25 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
25 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
26 NUM_REV = 32
26 NUM_REV = 32
27 CHAR_1_HEX = "\xc3\x9c"
27 CHAR_1_HEX = "\xc3\x9c"
28
28
29 def setup
29 def setup
30 @project = Project.find(3)
30 @project = Project.find(3)
31 @repository = Repository::Mercurial.create(
31 @repository = Repository::Mercurial.create(
32 :project => @project,
32 :project => @project,
33 :url => REPOSITORY_PATH,
33 :url => REPOSITORY_PATH,
34 :path_encoding => 'ISO-8859-1'
34 :path_encoding => 'ISO-8859-1'
35 )
35 )
36 assert @repository
36 assert @repository
37 @char_1 = CHAR_1_HEX.dup
37 @char_1 = CHAR_1_HEX.dup
38 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
38 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
39 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
39 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
40 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
40 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
41 if @char_1.respond_to?(:force_encoding)
41 if @char_1.respond_to?(:force_encoding)
42 @char_1.force_encoding('UTF-8')
42 @char_1.force_encoding('UTF-8')
43 @tag_char_1.force_encoding('UTF-8')
43 @tag_char_1.force_encoding('UTF-8')
44 @branch_char_0.force_encoding('UTF-8')
44 @branch_char_0.force_encoding('UTF-8')
45 @branch_char_1.force_encoding('UTF-8')
45 @branch_char_1.force_encoding('UTF-8')
46 end
46 end
47 end
47 end
48
48
49 def test_blank_path_to_repository_error_message
49 def test_blank_path_to_repository_error_message
50 set_language_if_valid 'en'
50 set_language_if_valid 'en'
51 repo = Repository::Mercurial.new(
51 repo = Repository::Mercurial.new(
52 :project => @project,
52 :project => @project,
53 :identifier => 'test'
53 :identifier => 'test'
54 )
54 )
55 assert !repo.save
55 assert !repo.save
56 assert_include "Path to repository can't be blank",
56 assert_include "Path to repository can't be blank",
57 repo.errors.full_messages
57 repo.errors.full_messages
58 end
58 end
59
59
60 def test_blank_path_to_repository_error_message_fr
60 def test_blank_path_to_repository_error_message_fr
61 set_language_if_valid 'fr'
61 set_language_if_valid 'fr'
62 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
62 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
63 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
63 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
64 repo = Repository::Mercurial.new(
64 repo = Repository::Mercurial.new(
65 :project => @project,
65 :project => @project,
66 :url => "",
66 :url => "",
67 :identifier => 'test',
67 :identifier => 'test',
68 :path_encoding => ''
68 :path_encoding => ''
69 )
69 )
70 assert !repo.save
70 assert !repo.save
71 assert_include str, repo.errors.full_messages
71 assert_include str, repo.errors.full_messages
72 end
72 end
73
73
74 if File.directory?(REPOSITORY_PATH)
74 if File.directory?(REPOSITORY_PATH)
75 def test_scm_available
75 def test_scm_available
76 klass = Repository::Mercurial
76 klass = Repository::Mercurial
77 assert_equal "Mercurial", klass.scm_name
77 assert_equal "Mercurial", klass.scm_name
78 assert klass.scm_adapter_class
78 assert klass.scm_adapter_class
79 assert_not_equal "", klass.scm_command
79 assert_not_equal "", klass.scm_command
80 assert_equal true, klass.scm_available
80 assert_equal true, klass.scm_available
81 end
81 end
82
82
83 def test_entries_on_tip
83 def test_entries_on_tip
84 entries = @repository.entries
84 entries = @repository.entries
85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
86 end
86 end
87
87
88 def test_entries_short_id
88 def test_entries_short_id
89 assert_equal 0, @repository.changesets.count
89 assert_equal 0, @repository.changesets.count
90 @repository.fetch_changesets
90 @repository.fetch_changesets
91 @project.reload
91 @project.reload
92 assert_equal NUM_REV, @repository.changesets.count
92 assert_equal NUM_REV, @repository.changesets.count
93 [2, '400bb8672109', '400', 400].each do |r|
93 [2, '400bb8672109', '400', 400].each do |r|
94 entries1 = @repository.entries(nil, r)
94 entries1 = @repository.entries(nil, r)
95 assert entries1
95 assert entries1
96 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
96 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
97 assert_equal 3, entries1.size
97 assert_equal 3, entries1.size
98 readme = entries1[2]
98 readme = entries1[2]
99 assert_equal '1', readme.lastrev.revision
99 assert_equal '1', readme.lastrev.revision
100 assert_equal '9d5b5b004199', readme.lastrev.identifier
100 assert_equal '9d5b5b004199', readme.lastrev.identifier
101 assert_equal '1', readme.changeset.revision
101 assert_equal '1', readme.changeset.revision
102 assert_equal '9d5b5b004199', readme.changeset.scmid
102 assert_equal '9d5b5b004199', readme.changeset.scmid
103 end
103 end
104 end
104 end
105
105
106 def test_entry_on_tip
106 def test_entry_on_tip
107 entry = @repository.entry
107 entry = @repository.entry
108 assert_kind_of Redmine::Scm::Adapters::Entry, entry
108 assert_kind_of Redmine::Scm::Adapters::Entry, entry
109 assert_equal "", entry.path
109 assert_equal "", entry.path
110 assert_equal 'dir', entry.kind
110 assert_equal 'dir', entry.kind
111 end
111 end
112
112
113 def test_entry_short_id
113 def test_entry_short_id
114 ["README", "/README"].each do |path|
114 ["README", "/README"].each do |path|
115 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
115 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
116 entry = @repository.entry(path, rev)
116 entry = @repository.entry(path, rev)
117 assert_kind_of Redmine::Scm::Adapters::Entry, entry
117 assert_kind_of Redmine::Scm::Adapters::Entry, entry
118 assert_equal "README", entry.path
118 assert_equal "README", entry.path
119 assert_equal "file", entry.kind
119 assert_equal "file", entry.kind
120 assert_equal '0', entry.lastrev.revision
120 assert_equal '0', entry.lastrev.revision
121 assert_equal '0885933ad4f6', entry.lastrev.identifier
121 assert_equal '0885933ad4f6', entry.lastrev.identifier
122 end
122 end
123 end
123 end
124 ["sources", "/sources", "/sources/"].each do |path|
124 ["sources", "/sources", "/sources/"].each do |path|
125 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
125 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
126 entry = @repository.entry(path, rev)
126 entry = @repository.entry(path, rev)
127 assert_kind_of Redmine::Scm::Adapters::Entry, entry
127 assert_kind_of Redmine::Scm::Adapters::Entry, entry
128 assert_equal "sources", entry.path
128 assert_equal "sources", entry.path
129 assert_equal "dir", entry.kind
129 assert_equal "dir", entry.kind
130 end
130 end
131 end
131 end
132 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
132 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
133 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
133 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
134 entry = @repository.entry(path, rev)
134 entry = @repository.entry(path, rev)
135 assert_kind_of Redmine::Scm::Adapters::Entry, entry
135 assert_kind_of Redmine::Scm::Adapters::Entry, entry
136 assert_equal "sources/watchers_controller.rb", entry.path
136 assert_equal "sources/watchers_controller.rb", entry.path
137 assert_equal "file", entry.kind
137 assert_equal "file", entry.kind
138 assert_equal '0', entry.lastrev.revision
138 assert_equal '0', entry.lastrev.revision
139 assert_equal '0885933ad4f6', entry.lastrev.identifier
139 assert_equal '0885933ad4f6', entry.lastrev.identifier
140 end
140 end
141 end
141 end
142 end
142 end
143
143
144 def test_fetch_changesets_from_scratch
144 def test_fetch_changesets_from_scratch
145 assert_equal 0, @repository.changesets.count
145 assert_equal 0, @repository.changesets.count
146 @repository.fetch_changesets
146 @repository.fetch_changesets
147 @project.reload
147 @project.reload
148 assert_equal NUM_REV, @repository.changesets.count
148 assert_equal NUM_REV, @repository.changesets.count
149 assert_equal 46, @repository.filechanges.count
149 assert_equal 46, @repository.filechanges.count
150 rev0 = @repository.changesets.find_by_revision('0')
150 rev0 = @repository.changesets.find_by_revision('0')
151 assert_equal "Initial import.\nThe repository contains 3 files.",
151 assert_equal "Initial import.\nThe repository contains 3 files.",
152 rev0.comments
152 rev0.comments
153 assert_equal "0885933ad4f6", rev0.scmid
153 assert_equal "0885933ad4f6", rev0.scmid
154 end
154 end
155
155
156 def test_fetch_changesets_incremental
156 def test_fetch_changesets_incremental
157 assert_equal 0, @repository.changesets.count
157 assert_equal 0, @repository.changesets.count
158 @repository.fetch_changesets
158 @repository.fetch_changesets
159 @project.reload
159 @project.reload
160 assert_equal NUM_REV, @repository.changesets.count
160 assert_equal NUM_REV, @repository.changesets.count
161 # Remove changesets with revision > 2
161 # Remove changesets with revision > 2
162 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
162 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
163 @project.reload
163 @project.reload
164 @repository.reload
164 @repository.reload
165 assert_equal 3, @repository.changesets.count
165 assert_equal 3, @repository.changesets.count
166
166
167 @repository.fetch_changesets
167 @repository.fetch_changesets
168 @project.reload
168 @project.reload
169 assert_equal NUM_REV, @repository.changesets.count
169 assert_equal NUM_REV, @repository.changesets.count
170 end
170 end
171
171
172 def test_isodatesec
172 def test_isodatesec
173 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
173 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
174 if @repository.scm.class.client_version_above?([1, 0])
174 if @repository.scm.class.client_version_above?([1, 0])
175 assert_equal 0, @repository.changesets.count
175 assert_equal 0, @repository.changesets.count
176 @repository.fetch_changesets
176 @repository.fetch_changesets
177 @project.reload
177 @project.reload
178 assert_equal NUM_REV, @repository.changesets.count
178 assert_equal NUM_REV, @repository.changesets.count
179 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
179 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
180 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
180 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
181 end
181 end
182 end
182 end
183
183
184 def test_changeset_order_by_revision
184 def test_changeset_order_by_revision
185 assert_equal 0, @repository.changesets.count
185 assert_equal 0, @repository.changesets.count
186 @repository.fetch_changesets
186 @repository.fetch_changesets
187 @project.reload
187 @project.reload
188 assert_equal NUM_REV, @repository.changesets.count
188 assert_equal NUM_REV, @repository.changesets.count
189
189
190 c0 = @repository.latest_changeset
190 c0 = @repository.latest_changeset
191 c1 = @repository.changesets.find_by_revision('0')
191 c1 = @repository.changesets.find_by_revision('0')
192 # sorted by revision (id), not by date
192 # sorted by revision (id), not by date
193 assert c0.revision.to_i > c1.revision.to_i
193 assert c0.revision.to_i > c1.revision.to_i
194 assert c0.committed_on < c1.committed_on
194 assert c0.committed_on < c1.committed_on
195 end
195 end
196
196
197 def test_latest_changesets
197 def test_latest_changesets
198 assert_equal 0, @repository.changesets.count
198 assert_equal 0, @repository.changesets.count
199 @repository.fetch_changesets
199 @repository.fetch_changesets
200 @project.reload
200 @project.reload
201 assert_equal NUM_REV, @repository.changesets.count
201 assert_equal NUM_REV, @repository.changesets.count
202
202
203 # with_limit
203 # with_limit
204 changesets = @repository.latest_changesets('', nil, 2)
204 changesets = @repository.latest_changesets('', nil, 2)
205 assert_equal %w|31 30|, changesets.collect(&:revision)
205 assert_equal %w|31 30|, changesets.collect(&:revision)
206
206
207 # with_filepath
207 # with_filepath
208 changesets = @repository.latest_changesets(
208 changesets = @repository.latest_changesets(
209 '/sql_escape/percent%dir/percent%file1.txt', nil)
209 '/sql_escape/percent%dir/percent%file1.txt', nil)
210 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
210 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
211
211
212 changesets = @repository.latest_changesets(
212 changesets = @repository.latest_changesets(
213 '/sql_escape/underscore_dir/understrike_file.txt', nil)
213 '/sql_escape/underscore_dir/understrike_file.txt', nil)
214 assert_equal %w|30 12 9|, changesets.collect(&:revision)
214 assert_equal %w|30 12 9|, changesets.collect(&:revision)
215
215
216 changesets = @repository.latest_changesets('README', nil)
216 changesets = @repository.latest_changesets('README', nil)
217 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
217 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
218
218
219 changesets = @repository.latest_changesets('README','8')
219 changesets = @repository.latest_changesets('README','8')
220 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
220 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
221
221
222 changesets = @repository.latest_changesets('README','8', 2)
222 changesets = @repository.latest_changesets('README','8', 2)
223 assert_equal %w|8 6|, changesets.collect(&:revision)
223 assert_equal %w|8 6|, changesets.collect(&:revision)
224
224
225 # with_dirpath
225 # with_dirpath
226 changesets = @repository.latest_changesets('images', nil)
226 changesets = @repository.latest_changesets('images', nil)
227 assert_equal %w|1 0|, changesets.collect(&:revision)
227 assert_equal %w|1 0|, changesets.collect(&:revision)
228
228
229 path = 'sql_escape/percent%dir'
229 path = 'sql_escape/percent%dir'
230 changesets = @repository.latest_changesets(path, nil)
230 changesets = @repository.latest_changesets(path, nil)
231 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
231 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
232
232
233 changesets = @repository.latest_changesets(path, '11')
233 changesets = @repository.latest_changesets(path, '11')
234 assert_equal %w|11 10 9|, changesets.collect(&:revision)
234 assert_equal %w|11 10 9|, changesets.collect(&:revision)
235
235
236 changesets = @repository.latest_changesets(path, '11', 2)
236 changesets = @repository.latest_changesets(path, '11', 2)
237 assert_equal %w|11 10|, changesets.collect(&:revision)
237 assert_equal %w|11 10|, changesets.collect(&:revision)
238
238
239 path = 'sql_escape/underscore_dir'
239 path = 'sql_escape/underscore_dir'
240 changesets = @repository.latest_changesets(path, nil)
240 changesets = @repository.latest_changesets(path, nil)
241 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
241 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
242
242
243 changesets = @repository.latest_changesets(path, '12')
243 changesets = @repository.latest_changesets(path, '12')
244 assert_equal %w|12 9|, changesets.collect(&:revision)
244 assert_equal %w|12 9|, changesets.collect(&:revision)
245
245
246 changesets = @repository.latest_changesets(path, '12', 1)
246 changesets = @repository.latest_changesets(path, '12', 1)
247 assert_equal %w|12|, changesets.collect(&:revision)
247 assert_equal %w|12|, changesets.collect(&:revision)
248 end
248 end
249
249
250 def test_latest_changesets_tag
250 def test_latest_changesets_tag
251 assert_equal 0, @repository.changesets.count
251 assert_equal 0, @repository.changesets.count
252 @repository.fetch_changesets
252 @repository.fetch_changesets
253 @project.reload
253 @project.reload
254 assert_equal NUM_REV, @repository.changesets.count
254 assert_equal NUM_REV, @repository.changesets.count
255
255
256 changesets = @repository.latest_changesets('', 'tag_test.00')
256 changesets = @repository.latest_changesets('', 'tag_test.00')
257 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
257 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
258 end
259
260 def test_latest_changesets_tag_with_path
261 assert_equal 0, @repository.changesets.count
262 @repository.fetch_changesets
263 @project.reload
264 assert_equal NUM_REV, @repository.changesets.count
258
265
259 changesets = @repository.latest_changesets('sources', 'tag_test.00')
266 changesets = @repository.latest_changesets('sources', 'tag_test.00')
260 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
267 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
261 end
268 end
262
269
263 def test_latest_changesets_tag_with_limit
270 def test_latest_changesets_tag_with_limit
264 assert_equal 0, @repository.changesets.count
271 assert_equal 0, @repository.changesets.count
265 @repository.fetch_changesets
272 @repository.fetch_changesets
266 @project.reload
273 @project.reload
267 assert_equal NUM_REV, @repository.changesets.count
274 assert_equal NUM_REV, @repository.changesets.count
268
275
269 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
276 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
270 assert_equal %w|5 4|, changesets.collect(&:revision)
277 assert_equal %w|5 4|, changesets.collect(&:revision)
271
278
272 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
279 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
273 assert_equal %w|4 3|, changesets.collect(&:revision)
280 assert_equal %w|4 3|, changesets.collect(&:revision)
274 end
281 end
275
282
276 def test_latest_changesets_branch
283 def test_latest_changesets_branch
277 assert_equal 0, @repository.changesets.count
284 assert_equal 0, @repository.changesets.count
278 @repository.fetch_changesets
285 @repository.fetch_changesets
279 @project.reload
286 @project.reload
280 assert_equal NUM_REV, @repository.changesets.count
287 assert_equal NUM_REV, @repository.changesets.count
281
288
282 if @repository.scm.class.client_version_above?([1, 6])
289 if @repository.scm.class.client_version_above?([1, 6])
283 changesets = @repository.latest_changesets('', @branch_char_1)
290 changesets = @repository.latest_changesets('', @branch_char_1)
284 assert_equal %w|27 26|, changesets.collect(&:revision)
291 assert_equal %w|27 26|, changesets.collect(&:revision)
285 end
292 end
286
293
287 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
294 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
288 assert_equal %w|27|, changesets.collect(&:revision)
295 assert_equal %w|27|, changesets.collect(&:revision)
289 end
296 end
290
297
291 def test_latest_changesets_default_branch
298 def test_latest_changesets_default_branch
292 assert_equal 0, @repository.changesets.count
299 assert_equal 0, @repository.changesets.count
293 @repository.fetch_changesets
300 @repository.fetch_changesets
294 @project.reload
301 @project.reload
295 assert_equal NUM_REV, @repository.changesets.count
302 assert_equal NUM_REV, @repository.changesets.count
296 changesets = @repository.latest_changesets('', 'default')
303 changesets = @repository.latest_changesets('', 'default')
297 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
304 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
298 end
305 end
299
306
300 def test_copied_files
307 def test_copied_files
301 assert_equal 0, @repository.changesets.count
308 assert_equal 0, @repository.changesets.count
302 @repository.fetch_changesets
309 @repository.fetch_changesets
303 @project.reload
310 @project.reload
304 assert_equal NUM_REV, @repository.changesets.count
311 assert_equal NUM_REV, @repository.changesets.count
305
312
306 cs1 = @repository.changesets.find_by_revision('13')
313 cs1 = @repository.changesets.find_by_revision('13')
307 assert_not_nil cs1
314 assert_not_nil cs1
308 c1 = cs1.filechanges.sort_by(&:path)
315 c1 = cs1.filechanges.sort_by(&:path)
309 assert_equal 2, c1.size
316 assert_equal 2, c1.size
310
317
311 assert_equal 'A', c1[0].action
318 assert_equal 'A', c1[0].action
312 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
319 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
313 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
320 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
314 assert_equal '3a330eb32958', c1[0].from_revision
321 assert_equal '3a330eb32958', c1[0].from_revision
315
322
316 assert_equal 'A', c1[1].action
323 assert_equal 'A', c1[1].action
317 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
324 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
318 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
325 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
319
326
320 cs2 = @repository.changesets.find_by_revision('15')
327 cs2 = @repository.changesets.find_by_revision('15')
321 c2 = cs2.filechanges
328 c2 = cs2.filechanges
322 assert_equal 1, c2.size
329 assert_equal 1, c2.size
323
330
324 assert_equal 'A', c2[0].action
331 assert_equal 'A', c2[0].action
325 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
332 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
326 assert_equal '/README', c2[0].from_path
333 assert_equal '/README', c2[0].from_path
327 assert_equal '933ca60293d7', c2[0].from_revision
334 assert_equal '933ca60293d7', c2[0].from_revision
328
335
329 cs3 = @repository.changesets.find_by_revision('19')
336 cs3 = @repository.changesets.find_by_revision('19')
330 c3 = cs3.filechanges
337 c3 = cs3.filechanges
331 assert_equal 1, c3.size
338 assert_equal 1, c3.size
332 assert_equal 'A', c3[0].action
339 assert_equal 'A', c3[0].action
333 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
340 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
334 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
341 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
335 assert_equal '5d9891a1b425', c3[0].from_revision
342 assert_equal '5d9891a1b425', c3[0].from_revision
336 end
343 end
337
344
338 def test_find_changeset_by_name
345 def test_find_changeset_by_name
339 assert_equal 0, @repository.changesets.count
346 assert_equal 0, @repository.changesets.count
340 @repository.fetch_changesets
347 @repository.fetch_changesets
341 @project.reload
348 @project.reload
342 assert_equal NUM_REV, @repository.changesets.count
349 assert_equal NUM_REV, @repository.changesets.count
343 %w|2 400bb8672109 400|.each do |r|
350 %w|2 400bb8672109 400|.each do |r|
344 assert_equal '2', @repository.find_changeset_by_name(r).revision
351 assert_equal '2', @repository.find_changeset_by_name(r).revision
345 end
352 end
346 end
353 end
347
354
348 def test_find_changeset_by_invalid_name
355 def test_find_changeset_by_invalid_name
349 assert_equal 0, @repository.changesets.count
356 assert_equal 0, @repository.changesets.count
350 @repository.fetch_changesets
357 @repository.fetch_changesets
351 @project.reload
358 @project.reload
352 assert_equal NUM_REV, @repository.changesets.count
359 assert_equal NUM_REV, @repository.changesets.count
353 assert_nil @repository.find_changeset_by_name('100000')
360 assert_nil @repository.find_changeset_by_name('100000')
354 end
361 end
355
362
356 def test_identifier
363 def test_identifier
357 assert_equal 0, @repository.changesets.count
364 assert_equal 0, @repository.changesets.count
358 @repository.fetch_changesets
365 @repository.fetch_changesets
359 @project.reload
366 @project.reload
360 assert_equal NUM_REV, @repository.changesets.count
367 assert_equal NUM_REV, @repository.changesets.count
361 c = @repository.changesets.find_by_revision('2')
368 c = @repository.changesets.find_by_revision('2')
362 assert_equal c.scmid, c.identifier
369 assert_equal c.scmid, c.identifier
363 end
370 end
364
371
365 def test_format_identifier
372 def test_format_identifier
366 assert_equal 0, @repository.changesets.count
373 assert_equal 0, @repository.changesets.count
367 @repository.fetch_changesets
374 @repository.fetch_changesets
368 @project.reload
375 @project.reload
369 assert_equal NUM_REV, @repository.changesets.count
376 assert_equal NUM_REV, @repository.changesets.count
370 c = @repository.changesets.find_by_revision('2')
377 c = @repository.changesets.find_by_revision('2')
371 assert_equal '2:400bb8672109', c.format_identifier
378 assert_equal '2:400bb8672109', c.format_identifier
372 end
379 end
373
380
374 def test_format_identifier_long_id
381 def test_format_identifier_long_id
375 assert_equal 0, @repository.changesets.count
382 assert_equal 0, @repository.changesets.count
376 Changeset.create!(:repository => @repository,
383 Changeset.create!(:repository => @repository,
377 :committed_on => Time.now,
384 :committed_on => Time.now,
378 :revision => '0',
385 :revision => '0',
379 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
386 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
380 :comments => 'test')
387 :comments => 'test')
381 c = @repository.changesets.find_by_revision('0')
388 c = @repository.changesets.find_by_revision('0')
382 assert_equal '0:0885933ad4f6', c.format_identifier
389 assert_equal '0:0885933ad4f6', c.format_identifier
383 end
390 end
384
391
385 def test_find_changeset_by_empty_name
392 def test_find_changeset_by_empty_name
386 assert_equal 0, @repository.changesets.count
393 assert_equal 0, @repository.changesets.count
387 @repository.fetch_changesets
394 @repository.fetch_changesets
388 @project.reload
395 @project.reload
389 assert_equal NUM_REV, @repository.changesets.count
396 assert_equal NUM_REV, @repository.changesets.count
390 ['', ' ', nil].each do |r|
397 ['', ' ', nil].each do |r|
391 assert_nil @repository.find_changeset_by_name(r)
398 assert_nil @repository.find_changeset_by_name(r)
392 end
399 end
393 end
400 end
394
401
395 def test_parents
402 def test_parents
396 assert_equal 0, @repository.changesets.count
403 assert_equal 0, @repository.changesets.count
397 @repository.fetch_changesets
404 @repository.fetch_changesets
398 @project.reload
405 @project.reload
399 assert_equal NUM_REV, @repository.changesets.count
406 assert_equal NUM_REV, @repository.changesets.count
400 r1 = @repository.changesets.find_by_revision('0')
407 r1 = @repository.changesets.find_by_revision('0')
401 assert_equal [], r1.parents
408 assert_equal [], r1.parents
402 r2 = @repository.changesets.find_by_revision('1')
409 r2 = @repository.changesets.find_by_revision('1')
403 assert_equal 1, r2.parents.length
410 assert_equal 1, r2.parents.length
404 assert_equal "0885933ad4f6",
411 assert_equal "0885933ad4f6",
405 r2.parents[0].identifier
412 r2.parents[0].identifier
406 r3 = @repository.changesets.find_by_revision('30')
413 r3 = @repository.changesets.find_by_revision('30')
407 assert_equal 2, r3.parents.length
414 assert_equal 2, r3.parents.length
408 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
415 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
409 assert_equal "3a330eb32958", r4[0]
416 assert_equal "3a330eb32958", r4[0]
410 assert_equal "a94b0528f24f", r4[1]
417 assert_equal "a94b0528f24f", r4[1]
411 end
418 end
412
419
413 def test_activities
420 def test_activities
414 c = Changeset.new(:repository => @repository,
421 c = Changeset.new(:repository => @repository,
415 :committed_on => Time.now,
422 :committed_on => Time.now,
416 :revision => '123',
423 :revision => '123',
417 :scmid => 'abc400bb8672',
424 :scmid => 'abc400bb8672',
418 :comments => 'test')
425 :comments => 'test')
419 assert c.event_title.include?('123:abc400bb8672:')
426 assert c.event_title.include?('123:abc400bb8672:')
420 assert_equal 'abc400bb8672', c.event_url[:rev]
427 assert_equal 'abc400bb8672', c.event_url[:rev]
421 end
428 end
422
429
423 def test_previous
430 def test_previous
424 assert_equal 0, @repository.changesets.count
431 assert_equal 0, @repository.changesets.count
425 @repository.fetch_changesets
432 @repository.fetch_changesets
426 @project.reload
433 @project.reload
427 assert_equal NUM_REV, @repository.changesets.count
434 assert_equal NUM_REV, @repository.changesets.count
428 %w|28 3ae45e2d177d 3ae45|.each do |r1|
435 %w|28 3ae45e2d177d 3ae45|.each do |r1|
429 changeset = @repository.find_changeset_by_name(r1)
436 changeset = @repository.find_changeset_by_name(r1)
430 %w|27 7bbf4c738e71 7bbf|.each do |r2|
437 %w|27 7bbf4c738e71 7bbf|.each do |r2|
431 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
438 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
432 end
439 end
433 end
440 end
434 end
441 end
435
442
436 def test_previous_nil
443 def test_previous_nil
437 assert_equal 0, @repository.changesets.count
444 assert_equal 0, @repository.changesets.count
438 @repository.fetch_changesets
445 @repository.fetch_changesets
439 @project.reload
446 @project.reload
440 assert_equal NUM_REV, @repository.changesets.count
447 assert_equal NUM_REV, @repository.changesets.count
441 %w|0 0885933ad4f6 0885|.each do |r1|
448 %w|0 0885933ad4f6 0885|.each do |r1|
442 changeset = @repository.find_changeset_by_name(r1)
449 changeset = @repository.find_changeset_by_name(r1)
443 assert_nil changeset.previous
450 assert_nil changeset.previous
444 end
451 end
445 end
452 end
446
453
447 def test_next
454 def test_next
448 assert_equal 0, @repository.changesets.count
455 assert_equal 0, @repository.changesets.count
449 @repository.fetch_changesets
456 @repository.fetch_changesets
450 @project.reload
457 @project.reload
451 assert_equal NUM_REV, @repository.changesets.count
458 assert_equal NUM_REV, @repository.changesets.count
452 %w|27 7bbf4c738e71 7bbf|.each do |r2|
459 %w|27 7bbf4c738e71 7bbf|.each do |r2|
453 changeset = @repository.find_changeset_by_name(r2)
460 changeset = @repository.find_changeset_by_name(r2)
454 %w|28 3ae45e2d177d 3ae45|.each do |r1|
461 %w|28 3ae45e2d177d 3ae45|.each do |r1|
455 assert_equal @repository.find_changeset_by_name(r1), changeset.next
462 assert_equal @repository.find_changeset_by_name(r1), changeset.next
456 end
463 end
457 end
464 end
458 end
465 end
459
466
460 def test_next_nil
467 def test_next_nil
461 assert_equal 0, @repository.changesets.count
468 assert_equal 0, @repository.changesets.count
462 @repository.fetch_changesets
469 @repository.fetch_changesets
463 @project.reload
470 @project.reload
464 assert_equal NUM_REV, @repository.changesets.count
471 assert_equal NUM_REV, @repository.changesets.count
465 %w|31 31eeee7395c8 31eee|.each do |r1|
472 %w|31 31eeee7395c8 31eee|.each do |r1|
466 changeset = @repository.find_changeset_by_name(r1)
473 changeset = @repository.find_changeset_by_name(r1)
467 assert_nil changeset.next
474 assert_nil changeset.next
468 end
475 end
469 end
476 end
470 else
477 else
471 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
478 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
472 def test_fake; assert true end
479 def test_fake; assert true end
473 end
480 end
474 end
481 end
General Comments 0
You need to be logged in to leave comments. Login now