##// END OF EJS Templates
scm: mercurial: add adapter entry test (#14361)...
Toshi MARUYAMA -
r12481:d26b4fc5b7bf
parent child
Show More
@@ -1,434 +1,475
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 begin
19 begin
20 require 'mocha/setup'
20 require 'mocha/setup'
21
21
22 class MercurialAdapterTest < ActiveSupport::TestCase
22 class MercurialAdapterTest < ActiveSupport::TestCase
23 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
23 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
24 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
24 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
25 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
25 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
26
26
27 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
27 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
28 CHAR_1_HEX = "\xc3\x9c"
28 CHAR_1_HEX = "\xc3\x9c"
29
29
30 if File.directory?(REPOSITORY_PATH)
30 if File.directory?(REPOSITORY_PATH)
31 def setup
31 def setup
32 adapter_class = Redmine::Scm::Adapters::MercurialAdapter
32 adapter_class = Redmine::Scm::Adapters::MercurialAdapter
33 assert adapter_class
33 assert adapter_class
34 assert adapter_class.client_command
34 assert adapter_class.client_command
35 assert_equal true, adapter_class.client_available
35 assert_equal true, adapter_class.client_available
36 assert_equal true, adapter_class.client_version_above?([0, 9, 5])
36 assert_equal true, adapter_class.client_version_above?([0, 9, 5])
37
37
38 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
38 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
39 REPOSITORY_PATH,
39 REPOSITORY_PATH,
40 nil,
40 nil,
41 nil,
41 nil,
42 nil,
42 nil,
43 'ISO-8859-1')
43 'ISO-8859-1')
44 @diff_c_support = true
44 @diff_c_support = true
45 @char_1 = CHAR_1_HEX.dup
45 @char_1 = CHAR_1_HEX.dup
46 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
46 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
47 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
47 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
48 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
48 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
49 if @tag_char_1.respond_to?(:force_encoding)
49 if @tag_char_1.respond_to?(:force_encoding)
50 @char_1.force_encoding('UTF-8')
50 @char_1.force_encoding('UTF-8')
51 @tag_char_1.force_encoding('UTF-8')
51 @tag_char_1.force_encoding('UTF-8')
52 @branch_char_0.force_encoding('UTF-8')
52 @branch_char_0.force_encoding('UTF-8')
53 @branch_char_1.force_encoding('UTF-8')
53 @branch_char_1.force_encoding('UTF-8')
54 end
54 end
55 end
55 end
56
56
57 def test_hgversion
57 def test_hgversion
58 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
58 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
59 "Mercurial Distributed SCM (1.0)\n" => [1,0],
59 "Mercurial Distributed SCM (1.0)\n" => [1,0],
60 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
60 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
61 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
61 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
62 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
62 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
63 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
63 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
64 "(1.6)\n(1.7)\n(1.8)" => [1,6],
64 "(1.6)\n(1.7)\n(1.8)" => [1,6],
65 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
65 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
66
66
67 to_test.each do |s, v|
67 to_test.each do |s, v|
68 test_hgversion_for(s, v)
68 test_hgversion_for(s, v)
69 end
69 end
70 end
70 end
71
71
72 def test_template_path
72 def test_template_path
73 to_test = {
73 to_test = {
74 [1,2] => "1.0",
74 [1,2] => "1.0",
75 [] => "1.0",
75 [] => "1.0",
76 [1,2,1] => "1.0",
76 [1,2,1] => "1.0",
77 [1,7] => "1.0",
77 [1,7] => "1.0",
78 [1,7,1] => "1.0",
78 [1,7,1] => "1.0",
79 [2,0] => "1.0",
79 [2,0] => "1.0",
80 }
80 }
81 to_test.each do |v, template|
81 to_test.each do |v, template|
82 test_template_path_for(v, template)
82 test_template_path_for(v, template)
83 end
83 end
84 end
84 end
85
85
86 def test_info
86 def test_info
87 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
87 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
88 REPOSITORY_PATH + "//"].each do |repo|
88 REPOSITORY_PATH + "//"].each do |repo|
89 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
89 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
90 repo_path = adp.info.root_url.gsub(/\\/, "/")
90 repo_path = adp.info.root_url.gsub(/\\/, "/")
91 assert_equal REPOSITORY_PATH, repo_path
91 assert_equal REPOSITORY_PATH, repo_path
92 assert_equal '31', adp.info.lastrev.revision
92 assert_equal '31', adp.info.lastrev.revision
93 assert_equal '31eeee7395c8',adp.info.lastrev.scmid
93 assert_equal '31eeee7395c8',adp.info.lastrev.scmid
94 end
94 end
95 end
95 end
96
96
97 def test_revisions
97 def test_revisions
98 revisions = @adapter.revisions(nil, 2, 4)
98 revisions = @adapter.revisions(nil, 2, 4)
99 assert_equal 3, revisions.size
99 assert_equal 3, revisions.size
100 assert_equal '2', revisions[0].revision
100 assert_equal '2', revisions[0].revision
101 assert_equal '400bb8672109', revisions[0].scmid
101 assert_equal '400bb8672109', revisions[0].scmid
102 assert_equal '4', revisions[2].revision
102 assert_equal '4', revisions[2].revision
103 assert_equal 'def6d2f1254a', revisions[2].scmid
103 assert_equal 'def6d2f1254a', revisions[2].scmid
104
104
105 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
105 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
106 assert_equal 2, revisions.size
106 assert_equal 2, revisions.size
107 assert_equal '2', revisions[0].revision
107 assert_equal '2', revisions[0].revision
108 assert_equal '400bb8672109', revisions[0].scmid
108 assert_equal '400bb8672109', revisions[0].scmid
109 end
109 end
110
110
111 def test_parents
111 def test_parents
112 revs1 = @adapter.revisions(nil, 0, 0)
112 revs1 = @adapter.revisions(nil, 0, 0)
113 assert_equal 1, revs1.size
113 assert_equal 1, revs1.size
114 assert_equal [], revs1[0].parents
114 assert_equal [], revs1[0].parents
115 revs2 = @adapter.revisions(nil, 1, 1)
115 revs2 = @adapter.revisions(nil, 1, 1)
116 assert_equal 1, revs2.size
116 assert_equal 1, revs2.size
117 assert_equal 1, revs2[0].parents.size
117 assert_equal 1, revs2[0].parents.size
118 assert_equal "0885933ad4f6", revs2[0].parents[0]
118 assert_equal "0885933ad4f6", revs2[0].parents[0]
119 revs3 = @adapter.revisions(nil, 30, 30)
119 revs3 = @adapter.revisions(nil, 30, 30)
120 assert_equal 1, revs3.size
120 assert_equal 1, revs3.size
121 assert_equal 2, revs3[0].parents.size
121 assert_equal 2, revs3[0].parents.size
122 assert_equal "a94b0528f24f", revs3[0].parents[0]
122 assert_equal "a94b0528f24f", revs3[0].parents[0]
123 assert_equal "3a330eb32958", revs3[0].parents[1]
123 assert_equal "3a330eb32958", revs3[0].parents[1]
124 end
124 end
125
125
126 def test_diff
126 def test_diff
127 if @adapter.class.client_version_above?([1, 2])
127 if @adapter.class.client_version_above?([1, 2])
128 assert_nil @adapter.diff(nil, '100000')
128 assert_nil @adapter.diff(nil, '100000')
129 end
129 end
130 assert_nil @adapter.diff(nil, '100000', '200000')
130 assert_nil @adapter.diff(nil, '100000', '200000')
131 [2, '400bb8672109', '400', 400].each do |r1|
131 [2, '400bb8672109', '400', 400].each do |r1|
132 diff1 = @adapter.diff(nil, r1)
132 diff1 = @adapter.diff(nil, r1)
133 if @diff_c_support
133 if @diff_c_support
134 assert_equal 28, diff1.size
134 assert_equal 28, diff1.size
135 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
135 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
136 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
136 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
137 else
137 else
138 assert_equal 0, diff1.size
138 assert_equal 0, diff1.size
139 end
139 end
140 [4, 'def6d2f1254a'].each do |r2|
140 [4, 'def6d2f1254a'].each do |r2|
141 diff2 = @adapter.diff(nil, r1, r2)
141 diff2 = @adapter.diff(nil, r1, r2)
142 assert_equal 49, diff2.size
142 assert_equal 49, diff2.size
143 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
143 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
144 assert_equal "+class WelcomeController < ApplicationController", buf
144 assert_equal "+class WelcomeController < ApplicationController", buf
145 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
145 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
146 assert_equal 20, diff3.size
146 assert_equal 20, diff3.size
147 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
147 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
148 assert_equal "+ @watched.remove_watcher(user)", buf
148 assert_equal "+ @watched.remove_watcher(user)", buf
149
149
150 diff4 = @adapter.diff(nil, r2, r1)
150 diff4 = @adapter.diff(nil, r2, r1)
151 assert_equal 49, diff4.size
151 assert_equal 49, diff4.size
152 buf = diff4[41].gsub(/\r\n|\r|\n/, "")
152 buf = diff4[41].gsub(/\r\n|\r|\n/, "")
153 assert_equal "-class WelcomeController < ApplicationController", buf
153 assert_equal "-class WelcomeController < ApplicationController", buf
154 diff5 = @adapter.diff('sources/watchers_controller.rb', r2, r1)
154 diff5 = @adapter.diff('sources/watchers_controller.rb', r2, r1)
155 assert_equal 20, diff5.size
155 assert_equal 20, diff5.size
156 buf = diff5[9].gsub(/\r\n|\r|\n/, "")
156 buf = diff5[9].gsub(/\r\n|\r|\n/, "")
157 assert_equal "- @watched.remove_watcher(user)", buf
157 assert_equal "- @watched.remove_watcher(user)", buf
158 end
158 end
159 end
159 end
160 end
160 end
161
161
162 def test_diff_made_by_revision
162 def test_diff_made_by_revision
163 if @diff_c_support
163 if @diff_c_support
164 [24, '24', '4cddb4e45f52'].each do |r1|
164 [24, '24', '4cddb4e45f52'].each do |r1|
165 diff1 = @adapter.diff(nil, r1)
165 diff1 = @adapter.diff(nil, r1)
166 assert_equal 5, diff1.size
166 assert_equal 5, diff1.size
167 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
167 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
168 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
168 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
169 end
169 end
170 end
170 end
171 end
171 end
172
172
173 def test_cat
173 def test_cat
174 [2, '400bb8672109', '400', 400].each do |r|
174 [2, '400bb8672109', '400', 400].each do |r|
175 buf = @adapter.cat('sources/welcome_controller.rb', r)
175 buf = @adapter.cat('sources/welcome_controller.rb', r)
176 assert buf
176 assert buf
177 lines = buf.split("\r\n")
177 lines = buf.split("\r\n")
178 assert_equal 25, lines.length
178 assert_equal 25, lines.length
179 assert_equal 'class WelcomeController < ApplicationController', lines[17]
179 assert_equal 'class WelcomeController < ApplicationController', lines[17]
180 end
180 end
181 assert_nil @adapter.cat('sources/welcome_controller.rb')
181 assert_nil @adapter.cat('sources/welcome_controller.rb')
182 end
182 end
183
183
184 def test_annotate
184 def test_annotate
185 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
185 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
186 [2, '400bb8672109', '400', 400].each do |r|
186 [2, '400bb8672109', '400', 400].each do |r|
187 ann = @adapter.annotate('sources/welcome_controller.rb', r)
187 ann = @adapter.annotate('sources/welcome_controller.rb', r)
188 assert ann
188 assert ann
189 assert_equal '1', ann.revisions[17].revision
189 assert_equal '1', ann.revisions[17].revision
190 assert_equal '9d5b5b004199', ann.revisions[17].identifier
190 assert_equal '9d5b5b004199', ann.revisions[17].identifier
191 assert_equal 'jsmith', ann.revisions[0].author
191 assert_equal 'jsmith', ann.revisions[0].author
192 assert_equal 25, ann.lines.length
192 assert_equal 25, ann.lines.length
193 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
193 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
194 end
194 end
195 end
195 end
196
196
197 def test_entries
197 def test_entries
198 assert_nil @adapter.entries(nil, '100000')
198 assert_nil @adapter.entries(nil, '100000')
199
199
200 assert_equal 1, @adapter.entries("sources", 3).size
200 assert_equal 1, @adapter.entries("sources", 3).size
201 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
201 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
202
202
203 [2, '400bb8672109', '400', 400].each do |r|
203 [2, '400bb8672109', '400', 400].each do |r|
204 entries1 = @adapter.entries(nil, r)
204 entries1 = @adapter.entries(nil, r)
205 assert entries1
205 assert entries1
206 assert_equal 3, entries1.size
206 assert_equal 3, entries1.size
207 assert_equal 'sources', entries1[1].name
207 assert_equal 'sources', entries1[1].name
208 assert_equal 'sources', entries1[1].path
208 assert_equal 'sources', entries1[1].path
209 assert_equal 'dir', entries1[1].kind
209 assert_equal 'dir', entries1[1].kind
210 readme = entries1[2]
210 readme = entries1[2]
211 assert_equal 'README', readme.name
211 assert_equal 'README', readme.name
212 assert_equal 'README', readme.path
212 assert_equal 'README', readme.path
213 assert_equal 'file', readme.kind
213 assert_equal 'file', readme.kind
214 assert_equal 27, readme.size
214 assert_equal 27, readme.size
215 assert_equal '1', readme.lastrev.revision
215 assert_equal '1', readme.lastrev.revision
216 assert_equal '9d5b5b004199', readme.lastrev.identifier
216 assert_equal '9d5b5b004199', readme.lastrev.identifier
217 # 2007-12-14 10:24:01 +0100
217 # 2007-12-14 10:24:01 +0100
218 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
218 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
219
219
220 entries2 = @adapter.entries('sources', r)
220 entries2 = @adapter.entries('sources', r)
221 assert entries2
221 assert entries2
222 assert_equal 2, entries2.size
222 assert_equal 2, entries2.size
223 assert_equal 'watchers_controller.rb', entries2[0].name
223 assert_equal 'watchers_controller.rb', entries2[0].name
224 assert_equal 'sources/watchers_controller.rb', entries2[0].path
224 assert_equal 'sources/watchers_controller.rb', entries2[0].path
225 assert_equal 'file', entries2[0].kind
225 assert_equal 'file', entries2[0].kind
226 assert_equal 'welcome_controller.rb', entries2[1].name
226 assert_equal 'welcome_controller.rb', entries2[1].name
227 assert_equal 'sources/welcome_controller.rb', entries2[1].path
227 assert_equal 'sources/welcome_controller.rb', entries2[1].path
228 assert_equal 'file', entries2[1].kind
228 assert_equal 'file', entries2[1].kind
229 end
229 end
230 end
230 end
231
231
232 def test_entries_tag
232 def test_entries_tag
233 entries1 = @adapter.entries(nil, 'tag_test.00')
233 entries1 = @adapter.entries(nil, 'tag_test.00')
234 assert entries1
234 assert entries1
235 assert_equal 3, entries1.size
235 assert_equal 3, entries1.size
236 assert_equal 'sources', entries1[1].name
236 assert_equal 'sources', entries1[1].name
237 assert_equal 'sources', entries1[1].path
237 assert_equal 'sources', entries1[1].path
238 assert_equal 'dir', entries1[1].kind
238 assert_equal 'dir', entries1[1].kind
239 readme = entries1[2]
239 readme = entries1[2]
240 assert_equal 'README', readme.name
240 assert_equal 'README', readme.name
241 assert_equal 'README', readme.path
241 assert_equal 'README', readme.path
242 assert_equal 'file', readme.kind
242 assert_equal 'file', readme.kind
243 assert_equal 21, readme.size
243 assert_equal 21, readme.size
244 assert_equal '0', readme.lastrev.revision
244 assert_equal '0', readme.lastrev.revision
245 assert_equal '0885933ad4f6', readme.lastrev.identifier
245 assert_equal '0885933ad4f6', readme.lastrev.identifier
246 # 2007-12-14 10:22:52 +0100
246 # 2007-12-14 10:22:52 +0100
247 assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
247 assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
248 end
248 end
249
249
250 def test_entries_branch
250 def test_entries_branch
251 entries1 = @adapter.entries(nil, 'test-branch-00')
251 entries1 = @adapter.entries(nil, 'test-branch-00')
252 assert entries1
252 assert entries1
253 assert_equal 5, entries1.size
253 assert_equal 5, entries1.size
254 assert_equal 'sql_escape', entries1[2].name
254 assert_equal 'sql_escape', entries1[2].name
255 assert_equal 'sql_escape', entries1[2].path
255 assert_equal 'sql_escape', entries1[2].path
256 assert_equal 'dir', entries1[2].kind
256 assert_equal 'dir', entries1[2].kind
257 readme = entries1[4]
257 readme = entries1[4]
258 assert_equal 'README', readme.name
258 assert_equal 'README', readme.name
259 assert_equal 'README', readme.path
259 assert_equal 'README', readme.path
260 assert_equal 'file', readme.kind
260 assert_equal 'file', readme.kind
261 assert_equal 365, readme.size
261 assert_equal 365, readme.size
262 assert_equal '8', readme.lastrev.revision
262 assert_equal '8', readme.lastrev.revision
263 assert_equal 'c51f5bb613cd', readme.lastrev.identifier
263 assert_equal 'c51f5bb613cd', readme.lastrev.identifier
264 # 2001-02-01 00:00:00 -0900
264 # 2001-02-01 00:00:00 -0900
265 assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
265 assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
266 end
266 end
267
267
268 def test_entry
269 entry = @adapter.entry()
270 assert_equal "", entry.path
271 assert_equal "dir", entry.kind
272 entry = @adapter.entry('')
273 assert_equal "", entry.path
274 assert_equal "dir", entry.kind
275 assert_nil @adapter.entry('invalid')
276 assert_nil @adapter.entry('/invalid')
277 assert_nil @adapter.entry('/invalid/')
278 assert_nil @adapter.entry('invalid/invalid')
279 assert_nil @adapter.entry('invalid/invalid/')
280 assert_nil @adapter.entry('/invalid/invalid')
281 assert_nil @adapter.entry('/invalid/invalid/')
282 ["README", "/README"].each do |path|
283 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
284 entry = @adapter.entry(path, rev)
285 assert_equal "README", entry.path
286 assert_equal "file", entry.kind
287 assert_equal '0', entry.lastrev.revision
288 assert_equal '0885933ad4f6', entry.lastrev.identifier
289 end
290 end
291 ["sources", "/sources", "/sources/"].each do |path|
292 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
293 entry = @adapter.entry(path, rev)
294 assert_equal "sources", entry.path
295 assert_equal "dir", entry.kind
296 end
297 end
298 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
299 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
300 entry = @adapter.entry(path, rev)
301 assert_equal "sources/watchers_controller.rb", entry.path
302 assert_equal "file", entry.kind
303 assert_equal '0', entry.lastrev.revision
304 assert_equal '0885933ad4f6', entry.lastrev.identifier
305 end
306 end
307 end
308
268 def test_locate_on_outdated_repository
309 def test_locate_on_outdated_repository
269 assert_equal 1, @adapter.entries("images", 0).size
310 assert_equal 1, @adapter.entries("images", 0).size
270 assert_equal 2, @adapter.entries("images").size
311 assert_equal 2, @adapter.entries("images").size
271 assert_equal 2, @adapter.entries("images", 2).size
312 assert_equal 2, @adapter.entries("images", 2).size
272 end
313 end
273
314
274 def test_access_by_nodeid
315 def test_access_by_nodeid
275 path = 'sources/welcome_controller.rb'
316 path = 'sources/welcome_controller.rb'
276 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
317 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
277 end
318 end
278
319
279 def test_access_by_fuzzy_nodeid
320 def test_access_by_fuzzy_nodeid
280 path = 'sources/welcome_controller.rb'
321 path = 'sources/welcome_controller.rb'
281 # falls back to nodeid
322 # falls back to nodeid
282 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
323 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
283 end
324 end
284
325
285 def test_tags
326 def test_tags
286 assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
327 assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
287 end
328 end
288
329
289 def test_tagmap
330 def test_tagmap
290 tm = {
331 tm = {
291 @tag_char_1 => 'adf805632193',
332 @tag_char_1 => 'adf805632193',
292 'tag_test.00' => '6987191f453a',
333 'tag_test.00' => '6987191f453a',
293 'tag-init-revision' => '0885933ad4f6',
334 'tag-init-revision' => '0885933ad4f6',
294 }
335 }
295 assert_equal tm, @adapter.tagmap
336 assert_equal tm, @adapter.tagmap
296 end
337 end
297
338
298 def test_branches
339 def test_branches
299 brs = []
340 brs = []
300 @adapter.branches.each do |b|
341 @adapter.branches.each do |b|
301 brs << b
342 brs << b
302 end
343 end
303 assert_equal 7, brs.length
344 assert_equal 7, brs.length
304 assert_equal 'default', brs[0].to_s
345 assert_equal 'default', brs[0].to_s
305 assert_equal '31', brs[0].revision
346 assert_equal '31', brs[0].revision
306 assert_equal '31eeee7395c8', brs[0].scmid
347 assert_equal '31eeee7395c8', brs[0].scmid
307 assert_equal 'test-branch-01', brs[1].to_s
348 assert_equal 'test-branch-01', brs[1].to_s
308 assert_equal '30', brs[1].revision
349 assert_equal '30', brs[1].revision
309 assert_equal 'ad4dc4f80284', brs[1].scmid
350 assert_equal 'ad4dc4f80284', brs[1].scmid
310 assert_equal @branch_char_1, brs[2].to_s
351 assert_equal @branch_char_1, brs[2].to_s
311 assert_equal '27', brs[2].revision
352 assert_equal '27', brs[2].revision
312 assert_equal '7bbf4c738e71', brs[2].scmid
353 assert_equal '7bbf4c738e71', brs[2].scmid
313 assert_equal 'branch (1)[2]&,%.-3_4', brs[3].to_s
354 assert_equal 'branch (1)[2]&,%.-3_4', brs[3].to_s
314 assert_equal '25', brs[3].revision
355 assert_equal '25', brs[3].revision
315 assert_equal 'afc61e85bde7', brs[3].scmid
356 assert_equal 'afc61e85bde7', brs[3].scmid
316 assert_equal @branch_char_0, brs[4].to_s
357 assert_equal @branch_char_0, brs[4].to_s
317 assert_equal '23', brs[4].revision
358 assert_equal '23', brs[4].revision
318 assert_equal 'c8d3e4887474', brs[4].scmid
359 assert_equal 'c8d3e4887474', brs[4].scmid
319 assert_equal 'test_branch.latin-1', brs[5].to_s
360 assert_equal 'test_branch.latin-1', brs[5].to_s
320 assert_equal '22', brs[5].revision
361 assert_equal '22', brs[5].revision
321 assert_equal 'c2ffe7da686a', brs[5].scmid
362 assert_equal 'c2ffe7da686a', brs[5].scmid
322 assert_equal 'test-branch-00', brs[6].to_s
363 assert_equal 'test-branch-00', brs[6].to_s
323 assert_equal '13', brs[6].revision
364 assert_equal '13', brs[6].revision
324 assert_equal '3a330eb32958', brs[6].scmid
365 assert_equal '3a330eb32958', brs[6].scmid
325 end
366 end
326
367
327 def test_branchmap
368 def test_branchmap
328 bm = {
369 bm = {
329 'default' => '31eeee7395c8',
370 'default' => '31eeee7395c8',
330 'test_branch.latin-1' => 'c2ffe7da686a',
371 'test_branch.latin-1' => 'c2ffe7da686a',
331 'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
372 'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
332 'test-branch-00' => '3a330eb32958',
373 'test-branch-00' => '3a330eb32958',
333 "test-branch-01" => 'ad4dc4f80284',
374 "test-branch-01" => 'ad4dc4f80284',
334 @branch_char_0 => 'c8d3e4887474',
375 @branch_char_0 => 'c8d3e4887474',
335 @branch_char_1 => '7bbf4c738e71',
376 @branch_char_1 => '7bbf4c738e71',
336 }
377 }
337 assert_equal bm, @adapter.branchmap
378 assert_equal bm, @adapter.branchmap
338 end
379 end
339
380
340 def test_path_space
381 def test_path_space
341 p = 'README (1)[2]&,%.-3_4'
382 p = 'README (1)[2]&,%.-3_4'
342 [15, '933ca60293d7'].each do |r1|
383 [15, '933ca60293d7'].each do |r1|
343 assert @adapter.diff(p, r1)
384 assert @adapter.diff(p, r1)
344 assert @adapter.cat(p, r1)
385 assert @adapter.cat(p, r1)
345 assert_equal 1, @adapter.annotate(p, r1).lines.length
386 assert_equal 1, @adapter.annotate(p, r1).lines.length
346 [25, 'afc61e85bde7'].each do |r2|
387 [25, 'afc61e85bde7'].each do |r2|
347 assert @adapter.diff(p, r1, r2)
388 assert @adapter.diff(p, r1, r2)
348 end
389 end
349 end
390 end
350 end
391 end
351
392
352 def test_tag_non_ascii
393 def test_tag_non_ascii
353 p = "latin-1-dir/test-#{@char_1}-1.txt"
394 p = "latin-1-dir/test-#{@char_1}-1.txt"
354 assert @adapter.cat(p, @tag_char_1)
395 assert @adapter.cat(p, @tag_char_1)
355 assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
396 assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
356 end
397 end
357
398
358 def test_branch_non_ascii
399 def test_branch_non_ascii
359 p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
400 p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
360 assert @adapter.cat(p, @branch_char_1)
401 assert @adapter.cat(p, @branch_char_1)
361 assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
402 assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
362 end
403 end
363
404
364 def test_nodes_in_branch
405 def test_nodes_in_branch
365 [
406 [
366 'default',
407 'default',
367 @branch_char_1,
408 @branch_char_1,
368 'branch (1)[2]&,%.-3_4',
409 'branch (1)[2]&,%.-3_4',
369 @branch_char_0,
410 @branch_char_0,
370 'test_branch.latin-1',
411 'test_branch.latin-1',
371 'test-branch-00',
412 'test-branch-00',
372 ].each do |bra|
413 ].each do |bra|
373 nib0 = @adapter.nodes_in_branch(bra)
414 nib0 = @adapter.nodes_in_branch(bra)
374 assert nib0
415 assert nib0
375 nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
416 nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
376 assert_equal 1, nib1.size
417 assert_equal 1, nib1.size
377 case bra
418 case bra
378 when 'branch (1)[2]&,%.-3_4'
419 when 'branch (1)[2]&,%.-3_4'
379 if @adapter.class.client_version_above?([1, 6])
420 if @adapter.class.client_version_above?([1, 6])
380 assert_equal 3, nib0.size
421 assert_equal 3, nib0.size
381 assert_equal nib0[0], 'afc61e85bde7'
422 assert_equal nib0[0], 'afc61e85bde7'
382 nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
423 nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
383 assert_equal 2, nib2.size
424 assert_equal 2, nib2.size
384 assert_equal nib2[1], '933ca60293d7'
425 assert_equal nib2[1], '933ca60293d7'
385 end
426 end
386 when @branch_char_1
427 when @branch_char_1
387 if @adapter.class.client_version_above?([1, 6])
428 if @adapter.class.client_version_above?([1, 6])
388 assert_equal 2, nib0.size
429 assert_equal 2, nib0.size
389 assert_equal nib0[1], '08ff3227303e'
430 assert_equal nib0[1], '08ff3227303e'
390 nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
431 nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
391 assert_equal 1, nib2.size
432 assert_equal 1, nib2.size
392 assert_equal nib2[0], '7bbf4c738e71'
433 assert_equal nib2[0], '7bbf4c738e71'
393 end
434 end
394 end
435 end
395 end
436 end
396 end
437 end
397
438
398 def test_path_encoding_default_utf8
439 def test_path_encoding_default_utf8
399 adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
440 adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
400 REPOSITORY_PATH
441 REPOSITORY_PATH
401 )
442 )
402 assert_equal "UTF-8", adpt1.path_encoding
443 assert_equal "UTF-8", adpt1.path_encoding
403 adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
444 adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
404 REPOSITORY_PATH,
445 REPOSITORY_PATH,
405 nil,
446 nil,
406 nil,
447 nil,
407 nil,
448 nil,
408 ""
449 ""
409 )
450 )
410 assert_equal "UTF-8", adpt2.path_encoding
451 assert_equal "UTF-8", adpt2.path_encoding
411 end
452 end
412
453
413 private
454 private
414
455
415 def test_hgversion_for(hgversion, version)
456 def test_hgversion_for(hgversion, version)
416 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
457 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
417 assert_equal version, @adapter.class.hgversion
458 assert_equal version, @adapter.class.hgversion
418 end
459 end
419
460
420 def test_template_path_for(version, template)
461 def test_template_path_for(version, template)
421 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
462 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
422 @adapter.class.template_path_for(version)
463 @adapter.class.template_path_for(version)
423 assert File.exist?(@adapter.class.template_path_for(version))
464 assert File.exist?(@adapter.class.template_path_for(version))
424 end
465 end
425 else
466 else
426 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
467 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
427 def test_fake; assert true end
468 def test_fake; assert true end
428 end
469 end
429 end
470 end
430 rescue LoadError
471 rescue LoadError
431 class MercurialMochaFake < ActiveSupport::TestCase
472 class MercurialMochaFake < ActiveSupport::TestCase
432 def test_fake; assert(false, "Requires mocha to run those tests") end
473 def test_fake; assert(false, "Requires mocha to run those tests") end
433 end
474 end
434 end
475 end
General Comments 0
You need to be logged in to leave comments. Login now