##// END OF EJS Templates
Merge r9870 from trunk...
Toshi MARUYAMA -
r9691:34df573ec204
parent child
Show More
@@ -1,535 +1,535
1 # encoding: utf-8
1 # encoding: utf-8
2
2
3 require File.expand_path('../../../../../../test_helper', __FILE__)
3 require File.expand_path('../../../../../../test_helper', __FILE__)
4 begin
4 begin
5 require 'mocha'
5 require 'mocha'
6
6
7 class GitAdapterTest < ActiveSupport::TestCase
7 class GitAdapterTest < ActiveSupport::TestCase
8 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
8 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
9
9
10 FELIX_HEX = "Felix Sch\xC3\xA4fer"
10 FELIX_HEX = "Felix Sch\xC3\xA4fer"
11 CHAR_1_HEX = "\xc3\x9c"
11 CHAR_1_HEX = "\xc3\x9c"
12
12
13 ## Ruby uses ANSI api to fork a process on Windows.
14 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
15 ## and these are incompatible with ASCII.
16 ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
17 ## http://code.google.com/p/msysgit/issues/detail?id=80
18 ## So, Latin-1 path tests fail on Japanese Windows
19 WINDOWS_PASS = (Redmine::Platform.mswin? &&
20 Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
21 WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
22
23 ## Git, Mercurial and CVS path encodings are binary.
13 ## Git, Mercurial and CVS path encodings are binary.
24 ## Subversion supports URL encoding for path.
14 ## Subversion supports URL encoding for path.
25 ## Redmine Mercurial adapter and extension use URL encoding.
15 ## Redmine Mercurial adapter and extension use URL encoding.
26 ## Git accepts only binary path in command line parameter.
16 ## Git accepts only binary path in command line parameter.
27 ## So, there is no way to use binary command line parameter in JRuby.
17 ## So, there is no way to use binary command line parameter in JRuby.
28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
18 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
19 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
30
20
31 if File.directory?(REPOSITORY_PATH)
21 if File.directory?(REPOSITORY_PATH)
22 ## Ruby uses ANSI api to fork a process on Windows.
23 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
24 ## and these are incompatible with ASCII.
25 ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
26 ## http://code.google.com/p/msysgit/issues/detail?id=80
27 ## So, Latin-1 path tests fail on Japanese Windows
28 WINDOWS_PASS = (Redmine::Platform.mswin? &&
29 Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
30 WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
31
32 def setup
32 def setup
33 adapter_class = Redmine::Scm::Adapters::GitAdapter
33 adapter_class = Redmine::Scm::Adapters::GitAdapter
34 assert adapter_class
34 assert adapter_class
35 assert adapter_class.client_command
35 assert adapter_class.client_command
36 assert_equal true, adapter_class.client_available
36 assert_equal true, adapter_class.client_available
37 assert_equal true, adapter_class.client_version_above?([1])
37 assert_equal true, adapter_class.client_version_above?([1])
38 assert_equal true, adapter_class.client_version_above?([1, 0])
38 assert_equal true, adapter_class.client_version_above?([1, 0])
39
39
40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
41 REPOSITORY_PATH,
41 REPOSITORY_PATH,
42 nil,
42 nil,
43 nil,
43 nil,
44 nil,
44 nil,
45 'ISO-8859-1'
45 'ISO-8859-1'
46 )
46 )
47 assert @adapter
47 assert @adapter
48 @char_1 = CHAR_1_HEX.dup
48 @char_1 = CHAR_1_HEX.dup
49 if @char_1.respond_to?(:force_encoding)
49 if @char_1.respond_to?(:force_encoding)
50 @char_1.force_encoding('UTF-8')
50 @char_1.force_encoding('UTF-8')
51 end
51 end
52 end
52 end
53
53
54 def test_scm_version
54 def test_scm_version
55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
56 "1.6.1\n1.7\n1.8" => [1,6,1],
56 "1.6.1\n1.7\n1.8" => [1,6,1],
57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
58 to_test.each do |s, v|
58 to_test.each do |s, v|
59 test_scm_version_for(s, v)
59 test_scm_version_for(s, v)
60 end
60 end
61 end
61 end
62
62
63 def test_branches
63 def test_branches
64 brs = []
64 brs = []
65 @adapter.branches.each do |b|
65 @adapter.branches.each do |b|
66 brs << b
66 brs << b
67 end
67 end
68 assert_equal 6, brs.length
68 assert_equal 6, brs.length
69 br_issue_8857 = brs[0]
69 br_issue_8857 = brs[0]
70 assert_equal 'issue-8857', br_issue_8857.to_s
70 assert_equal 'issue-8857', br_issue_8857.to_s
71 assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
71 assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
72 assert_equal br_issue_8857.scmid, br_issue_8857.revision
72 assert_equal br_issue_8857.scmid, br_issue_8857.revision
73 assert_equal false, br_issue_8857.is_default
73 assert_equal false, br_issue_8857.is_default
74 br_latin_1_path = brs[1]
74 br_latin_1_path = brs[1]
75 assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
75 assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
76 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
76 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
77 assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
77 assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
78 assert_equal false, br_latin_1_path.is_default
78 assert_equal false, br_latin_1_path.is_default
79 br_master = brs[2]
79 br_master = brs[2]
80 assert_equal 'master', br_master.to_s
80 assert_equal 'master', br_master.to_s
81 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
81 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
82 assert_equal br_master.scmid, br_master.revision
82 assert_equal br_master.scmid, br_master.revision
83 assert_equal false, br_master.is_default
83 assert_equal false, br_master.is_default
84 br_master_20120212 = brs[3]
84 br_master_20120212 = brs[3]
85 assert_equal 'master-20120212', br_master_20120212.to_s
85 assert_equal 'master-20120212', br_master_20120212.to_s
86 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master_20120212.revision
86 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master_20120212.revision
87 assert_equal br_master_20120212.scmid, br_master_20120212.revision
87 assert_equal br_master_20120212.scmid, br_master_20120212.revision
88 assert_equal true, br_master_20120212.is_default
88 assert_equal true, br_master_20120212.is_default
89 br_latin_1 = brs[-2]
89 br_latin_1 = brs[-2]
90 assert_equal 'test-latin-1', br_latin_1.to_s
90 assert_equal 'test-latin-1', br_latin_1.to_s
91 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
91 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
92 assert_equal br_latin_1.scmid, br_latin_1.revision
92 assert_equal br_latin_1.scmid, br_latin_1.revision
93 assert_equal false, br_latin_1.is_default
93 assert_equal false, br_latin_1.is_default
94 br_test = brs[-1]
94 br_test = brs[-1]
95 assert_equal 'test_branch', br_test.to_s
95 assert_equal 'test_branch', br_test.to_s
96 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
96 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
97 assert_equal br_test.scmid, br_test.revision
97 assert_equal br_test.scmid, br_test.revision
98 assert_equal false, br_test.is_default
98 assert_equal false, br_test.is_default
99 end
99 end
100
100
101 def test_default_branch
101 def test_default_branch
102 assert_equal 'master-20120212', @adapter.default_branch
102 assert_equal 'master-20120212', @adapter.default_branch
103 end
103 end
104
104
105 def test_tags
105 def test_tags
106 assert_equal [
106 assert_equal [
107 "tag00.lightweight",
107 "tag00.lightweight",
108 "tag01.annotated",
108 "tag01.annotated",
109 ], @adapter.tags
109 ], @adapter.tags
110 end
110 end
111
111
112 def test_revisions_master_all
112 def test_revisions_master_all
113 revs1 = []
113 revs1 = []
114 @adapter.revisions('', nil, "master",{}) do |rev|
114 @adapter.revisions('', nil, "master",{}) do |rev|
115 revs1 << rev
115 revs1 << rev
116 end
116 end
117 assert_equal 15, revs1.length
117 assert_equal 15, revs1.length
118 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
118 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
119 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
119 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
120
120
121 revs2 = []
121 revs2 = []
122 @adapter.revisions('', nil, "master",
122 @adapter.revisions('', nil, "master",
123 {:reverse => true}) do |rev|
123 {:reverse => true}) do |rev|
124 revs2 << rev
124 revs2 << rev
125 end
125 end
126 assert_equal 15, revs2.length
126 assert_equal 15, revs2.length
127 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
127 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
128 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
128 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
129 end
129 end
130
130
131 def test_revisions_master_merged_rev
131 def test_revisions_master_merged_rev
132 revs1 = []
132 revs1 = []
133 @adapter.revisions('',
133 @adapter.revisions('',
134 "713f4944648826f558cf548222f813dabe7cbb04",
134 "713f4944648826f558cf548222f813dabe7cbb04",
135 "master",
135 "master",
136 {:reverse => true}) do |rev|
136 {:reverse => true}) do |rev|
137 revs1 << rev
137 revs1 << rev
138 end
138 end
139 assert_equal 8, revs1.length
139 assert_equal 8, revs1.length
140 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
140 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
141 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
141 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
142 # 4a07fe31b is not a child of 713f49446
142 # 4a07fe31b is not a child of 713f49446
143 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
143 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
144 # Merged revision
144 # Merged revision
145 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
145 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
146 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
146 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
147
147
148 revs2 = []
148 revs2 = []
149 @adapter.revisions('',
149 @adapter.revisions('',
150 "fba357b886984ee71185ad2065e65fc0417d9b92",
150 "fba357b886984ee71185ad2065e65fc0417d9b92",
151 "master",
151 "master",
152 {:reverse => true}) do |rev|
152 {:reverse => true}) do |rev|
153 revs2 << rev
153 revs2 << rev
154 end
154 end
155 assert_equal 7, revs2.length
155 assert_equal 7, revs2.length
156 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
156 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
157 # 4a07fe31b is not a child of fba357b8869
157 # 4a07fe31b is not a child of fba357b8869
158 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
158 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
159 # Merged revision
159 # Merged revision
160 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
160 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
161 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
161 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
162 end
162 end
163
163
164 def test_revisions_branch_latin_1_path_encoding_all
164 def test_revisions_branch_latin_1_path_encoding_all
165 revs1 = []
165 revs1 = []
166 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
166 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
167 revs1 << rev
167 revs1 << rev
168 end
168 end
169 assert_equal 8, revs1.length
169 assert_equal 8, revs1.length
170 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
170 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
171 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
171 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
172
172
173 revs2 = []
173 revs2 = []
174 @adapter.revisions('', nil, "latin-1-path-encoding",
174 @adapter.revisions('', nil, "latin-1-path-encoding",
175 {:reverse => true}) do |rev|
175 {:reverse => true}) do |rev|
176 revs2 << rev
176 revs2 << rev
177 end
177 end
178 assert_equal 8, revs2.length
178 assert_equal 8, revs2.length
179 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
179 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
180 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
180 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
181 end
181 end
182
182
183 def test_revisions_branch_latin_1_path_encoding_with_rev
183 def test_revisions_branch_latin_1_path_encoding_with_rev
184 revs1 = []
184 revs1 = []
185 @adapter.revisions('',
185 @adapter.revisions('',
186 '7234cb2750b63f47bff735edc50a1c0a433c2518',
186 '7234cb2750b63f47bff735edc50a1c0a433c2518',
187 "latin-1-path-encoding",
187 "latin-1-path-encoding",
188 {:reverse => true}) do |rev|
188 {:reverse => true}) do |rev|
189 revs1 << rev
189 revs1 << rev
190 end
190 end
191 assert_equal 7, revs1.length
191 assert_equal 7, revs1.length
192 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
192 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
193 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
193 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
194
194
195 revs2 = []
195 revs2 = []
196 @adapter.revisions('',
196 @adapter.revisions('',
197 '57ca437c0acbbcb749821fdf3726a1367056d364',
197 '57ca437c0acbbcb749821fdf3726a1367056d364',
198 "latin-1-path-encoding",
198 "latin-1-path-encoding",
199 {:reverse => true}) do |rev|
199 {:reverse => true}) do |rev|
200 revs2 << rev
200 revs2 << rev
201 end
201 end
202 assert_equal 3, revs2.length
202 assert_equal 3, revs2.length
203 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
203 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
204 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
204 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
205 end
205 end
206
206
207 def test_revisions_invalid_rev
207 def test_revisions_invalid_rev
208 assert_equal [], @adapter.revisions('', '1234abcd', "master")
208 assert_equal [], @adapter.revisions('', '1234abcd', "master")
209 assert_raise Redmine::Scm::Adapters::CommandFailed do
209 assert_raise Redmine::Scm::Adapters::CommandFailed do
210 revs1 = []
210 revs1 = []
211 @adapter.revisions('',
211 @adapter.revisions('',
212 '1234abcd',
212 '1234abcd',
213 "master",
213 "master",
214 {:reverse => true}) do |rev|
214 {:reverse => true}) do |rev|
215 revs1 << rev
215 revs1 << rev
216 end
216 end
217 end
217 end
218 end
218 end
219
219
220 def test_revisions_includes_master_two_revs
220 def test_revisions_includes_master_two_revs
221 revs1 = []
221 revs1 = []
222 @adapter.revisions('', nil, nil,
222 @adapter.revisions('', nil, nil,
223 {:reverse => true,
223 {:reverse => true,
224 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
224 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
225 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
225 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
226 revs1 << rev
226 revs1 << rev
227 end
227 end
228 assert_equal 2, revs1.length
228 assert_equal 2, revs1.length
229 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
229 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
230 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
230 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
231 end
231 end
232
232
233 def test_revisions_includes_master_two_revs_from_origin
233 def test_revisions_includes_master_two_revs_from_origin
234 revs1 = []
234 revs1 = []
235 @adapter.revisions('', nil, nil,
235 @adapter.revisions('', nil, nil,
236 {:reverse => true,
236 {:reverse => true,
237 :includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
237 :includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
238 :excludes => []}) do |rev|
238 :excludes => []}) do |rev|
239 revs1 << rev
239 revs1 << rev
240 end
240 end
241 assert_equal 2, revs1.length
241 assert_equal 2, revs1.length
242 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
242 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
243 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
243 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
244 end
244 end
245
245
246 def test_revisions_includes_merged_revs
246 def test_revisions_includes_merged_revs
247 revs1 = []
247 revs1 = []
248 @adapter.revisions('', nil, nil,
248 @adapter.revisions('', nil, nil,
249 {:reverse => true,
249 {:reverse => true,
250 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
250 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
251 :excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
251 :excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
252 revs1 << rev
252 revs1 << rev
253 end
253 end
254 assert_equal 7, revs1.length
254 assert_equal 7, revs1.length
255 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
255 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
256 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
256 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
257 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
257 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
258 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
258 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
259 end
259 end
260
260
261 def test_revisions_includes_two_heads
261 def test_revisions_includes_two_heads
262 revs1 = []
262 revs1 = []
263 @adapter.revisions('', nil, nil,
263 @adapter.revisions('', nil, nil,
264 {:reverse => true,
264 {:reverse => true,
265 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
265 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
266 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
266 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
267 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
267 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
268 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
268 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
269 revs1 << rev
269 revs1 << rev
270 end
270 end
271 assert_equal 4, revs1.length
271 assert_equal 4, revs1.length
272 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
272 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
273 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
273 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
274 assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
274 assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
275 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
275 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
276 end
276 end
277
277
278 def test_revisions_disjointed_histories_revisions
278 def test_revisions_disjointed_histories_revisions
279 revs1 = []
279 revs1 = []
280 @adapter.revisions('', nil, nil,
280 @adapter.revisions('', nil, nil,
281 {:reverse => true,
281 {:reverse => true,
282 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
282 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
283 '92397af84d22f27389c822848ecd5b463c181583'],
283 '92397af84d22f27389c822848ecd5b463c181583'],
284 :excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
284 :excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
285 '4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
285 '4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
286 revs1 << rev
286 revs1 << rev
287 end
287 end
288 assert_equal 4, revs1.length
288 assert_equal 4, revs1.length
289 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
289 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
290 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
290 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
291 assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
291 assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
292 assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
292 assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
293 end
293 end
294
294
295 def test_revisions_invalid_rev_excludes
295 def test_revisions_invalid_rev_excludes
296 assert_equal [],
296 assert_equal [],
297 @adapter.revisions('', nil, nil,
297 @adapter.revisions('', nil, nil,
298 {:reverse => true,
298 {:reverse => true,
299 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
299 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
300 :excludes => ['0123abcd4567']})
300 :excludes => ['0123abcd4567']})
301 assert_raise Redmine::Scm::Adapters::CommandFailed do
301 assert_raise Redmine::Scm::Adapters::CommandFailed do
302 revs1 = []
302 revs1 = []
303 @adapter.revisions('', nil, nil,
303 @adapter.revisions('', nil, nil,
304 {:reverse => true,
304 {:reverse => true,
305 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
305 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
306 :excludes => ['0123abcd4567']}) do |rev|
306 :excludes => ['0123abcd4567']}) do |rev|
307 revs1 << rev
307 revs1 << rev
308 end
308 end
309 end
309 end
310 end
310 end
311
311
312 def test_getting_revisions_with_spaces_in_filename
312 def test_getting_revisions_with_spaces_in_filename
313 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
313 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
314 nil, "master").length
314 nil, "master").length
315 end
315 end
316
316
317 def test_parents
317 def test_parents
318 revs1 = []
318 revs1 = []
319 @adapter.revisions('',
319 @adapter.revisions('',
320 nil,
320 nil,
321 "master",
321 "master",
322 {:reverse => true}) do |rev|
322 {:reverse => true}) do |rev|
323 revs1 << rev
323 revs1 << rev
324 end
324 end
325 assert_equal 15, revs1.length
325 assert_equal 15, revs1.length
326 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
326 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
327 revs1[0].identifier
327 revs1[0].identifier
328 assert_equal nil, revs1[0].parents
328 assert_equal nil, revs1[0].parents
329 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
329 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
330 revs1[1].identifier
330 revs1[1].identifier
331 assert_equal 1, revs1[1].parents.length
331 assert_equal 1, revs1[1].parents.length
332 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
332 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
333 revs1[1].parents[0]
333 revs1[1].parents[0]
334 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
334 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
335 revs1[10].identifier
335 revs1[10].identifier
336 assert_equal 2, revs1[10].parents.length
336 assert_equal 2, revs1[10].parents.length
337 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
337 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
338 revs1[10].parents[0]
338 revs1[10].parents[0]
339 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
339 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
340 revs1[10].parents[1]
340 revs1[10].parents[1]
341 end
341 end
342
342
343 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
343 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
344 assert_equal " filename with a leading space.txt ",
344 assert_equal " filename with a leading space.txt ",
345 @adapter.revisions(" filename with a leading space.txt ",
345 @adapter.revisions(" filename with a leading space.txt ",
346 nil, "master")[0].paths[0][:path]
346 nil, "master")[0].paths[0][:path]
347 end
347 end
348
348
349 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
349 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
350 assert_equal " filename with a leading space.txt ",
350 assert_equal " filename with a leading space.txt ",
351 @adapter.entries('',
351 @adapter.entries('',
352 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
352 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
353 end
353 end
354
354
355 def test_annotate
355 def test_annotate
356 annotate = @adapter.annotate('sources/watchers_controller.rb')
356 annotate = @adapter.annotate('sources/watchers_controller.rb')
357 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
357 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
358 assert_equal 41, annotate.lines.size
358 assert_equal 41, annotate.lines.size
359 assert_equal "# This program is free software; you can redistribute it and/or",
359 assert_equal "# This program is free software; you can redistribute it and/or",
360 annotate.lines[4].strip
360 annotate.lines[4].strip
361 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
361 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
362 annotate.revisions[4].identifier
362 annotate.revisions[4].identifier
363 assert_equal "jsmith", annotate.revisions[4].author
363 assert_equal "jsmith", annotate.revisions[4].author
364 end
364 end
365
365
366 def test_annotate_moved_file
366 def test_annotate_moved_file
367 annotate = @adapter.annotate('renamed_test.txt')
367 annotate = @adapter.annotate('renamed_test.txt')
368 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
368 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
369 assert_equal 2, annotate.lines.size
369 assert_equal 2, annotate.lines.size
370 end
370 end
371
371
372 def test_last_rev
372 def test_last_rev
373 last_rev = @adapter.lastrev("README",
373 last_rev = @adapter.lastrev("README",
374 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
374 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
375 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
375 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
376 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
376 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
377 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
377 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
378 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
378 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
379 end
379 end
380
380
381 def test_last_rev_with_spaces_in_filename
381 def test_last_rev_with_spaces_in_filename
382 last_rev = @adapter.lastrev("filemane with spaces.txt",
382 last_rev = @adapter.lastrev("filemane with spaces.txt",
383 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
383 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
384 str_felix_hex = FELIX_HEX.dup
384 str_felix_hex = FELIX_HEX.dup
385 last_rev_author = last_rev.author
385 last_rev_author = last_rev.author
386 if last_rev_author.respond_to?(:force_encoding)
386 if last_rev_author.respond_to?(:force_encoding)
387 last_rev_author.force_encoding('UTF-8')
387 last_rev_author.force_encoding('UTF-8')
388 end
388 end
389 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
389 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
390 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
390 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
391 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
391 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
392 last_rev.author
392 last_rev.author
393 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
393 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
394 end
394 end
395
395
396 def test_latin_1_path
396 def test_latin_1_path
397 if WINDOWS_PASS
397 if WINDOWS_PASS
398 puts WINDOWS_SKIP_STR
398 puts WINDOWS_SKIP_STR
399 elsif JRUBY_SKIP
399 elsif JRUBY_SKIP
400 puts JRUBY_SKIP_STR
400 puts JRUBY_SKIP_STR
401 else
401 else
402 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
402 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
403 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
403 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
404 assert @adapter.diff(p2, r1)
404 assert @adapter.diff(p2, r1)
405 assert @adapter.cat(p2, r1)
405 assert @adapter.cat(p2, r1)
406 assert_equal 1, @adapter.annotate(p2, r1).lines.length
406 assert_equal 1, @adapter.annotate(p2, r1).lines.length
407 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
407 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
408 assert @adapter.diff(p2, r1, r2)
408 assert @adapter.diff(p2, r1, r2)
409 end
409 end
410 end
410 end
411 end
411 end
412 end
412 end
413
413
414 def test_entries_tag
414 def test_entries_tag
415 entries1 = @adapter.entries(nil, 'tag01.annotated',
415 entries1 = @adapter.entries(nil, 'tag01.annotated',
416 options = {:report_last_commit => true})
416 options = {:report_last_commit => true})
417 assert entries1
417 assert entries1
418 assert_equal 3, entries1.size
418 assert_equal 3, entries1.size
419 assert_equal 'sources', entries1[1].name
419 assert_equal 'sources', entries1[1].name
420 assert_equal 'sources', entries1[1].path
420 assert_equal 'sources', entries1[1].path
421 assert_equal 'dir', entries1[1].kind
421 assert_equal 'dir', entries1[1].kind
422 readme = entries1[2]
422 readme = entries1[2]
423 assert_equal 'README', readme.name
423 assert_equal 'README', readme.name
424 assert_equal 'README', readme.path
424 assert_equal 'README', readme.path
425 assert_equal 'file', readme.kind
425 assert_equal 'file', readme.kind
426 assert_equal 27, readme.size
426 assert_equal 27, readme.size
427 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
427 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
428 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
428 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
429 end
429 end
430
430
431 def test_entries_branch
431 def test_entries_branch
432 entries1 = @adapter.entries(nil, 'test_branch',
432 entries1 = @adapter.entries(nil, 'test_branch',
433 options = {:report_last_commit => true})
433 options = {:report_last_commit => true})
434 assert entries1
434 assert entries1
435 assert_equal 4, entries1.size
435 assert_equal 4, entries1.size
436 assert_equal 'sources', entries1[1].name
436 assert_equal 'sources', entries1[1].name
437 assert_equal 'sources', entries1[1].path
437 assert_equal 'sources', entries1[1].path
438 assert_equal 'dir', entries1[1].kind
438 assert_equal 'dir', entries1[1].kind
439 readme = entries1[2]
439 readme = entries1[2]
440 assert_equal 'README', readme.name
440 assert_equal 'README', readme.name
441 assert_equal 'README', readme.path
441 assert_equal 'README', readme.path
442 assert_equal 'file', readme.kind
442 assert_equal 'file', readme.kind
443 assert_equal 159, readme.size
443 assert_equal 159, readme.size
444 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
444 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
445 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
445 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
446 end
446 end
447
447
448 def test_entries_latin_1_files
448 def test_entries_latin_1_files
449 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
449 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
450 assert entries1
450 assert entries1
451 assert_equal 3, entries1.size
451 assert_equal 3, entries1.size
452 f1 = entries1[1]
452 f1 = entries1[1]
453 assert_equal "test-#{@char_1}-2.txt", f1.name
453 assert_equal "test-#{@char_1}-2.txt", f1.name
454 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
454 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
455 assert_equal 'file', f1.kind
455 assert_equal 'file', f1.kind
456 end
456 end
457
457
458 def test_entries_latin_1_dir
458 def test_entries_latin_1_dir
459 if WINDOWS_PASS
459 if WINDOWS_PASS
460 puts WINDOWS_SKIP_STR
460 puts WINDOWS_SKIP_STR
461 elsif JRUBY_SKIP
461 elsif JRUBY_SKIP
462 puts JRUBY_SKIP_STR
462 puts JRUBY_SKIP_STR
463 else
463 else
464 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
464 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
465 '1ca7f5ed')
465 '1ca7f5ed')
466 assert entries1
466 assert entries1
467 assert_equal 3, entries1.size
467 assert_equal 3, entries1.size
468 f1 = entries1[1]
468 f1 = entries1[1]
469 assert_equal "test-#{@char_1}-2.txt", f1.name
469 assert_equal "test-#{@char_1}-2.txt", f1.name
470 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
470 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
471 assert_equal 'file', f1.kind
471 assert_equal 'file', f1.kind
472 end
472 end
473 end
473 end
474
474
475 def test_path_encoding_default_utf8
475 def test_path_encoding_default_utf8
476 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
476 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
477 REPOSITORY_PATH
477 REPOSITORY_PATH
478 )
478 )
479 assert_equal "UTF-8", adpt1.path_encoding
479 assert_equal "UTF-8", adpt1.path_encoding
480 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
480 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
481 REPOSITORY_PATH,
481 REPOSITORY_PATH,
482 nil,
482 nil,
483 nil,
483 nil,
484 nil,
484 nil,
485 ""
485 ""
486 )
486 )
487 assert_equal "UTF-8", adpt2.path_encoding
487 assert_equal "UTF-8", adpt2.path_encoding
488 end
488 end
489
489
490 def test_cat_path_invalid
490 def test_cat_path_invalid
491 assert_nil @adapter.cat('invalid')
491 assert_nil @adapter.cat('invalid')
492 end
492 end
493
493
494 def test_cat_revision_invalid
494 def test_cat_revision_invalid
495 assert @adapter.cat('README')
495 assert @adapter.cat('README')
496 assert_nil @adapter.cat('README', 'abcd1234efgh')
496 assert_nil @adapter.cat('README', 'abcd1234efgh')
497 end
497 end
498
498
499 def test_diff_path_invalid
499 def test_diff_path_invalid
500 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
500 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
501 end
501 end
502
502
503 def test_diff_revision_invalid
503 def test_diff_revision_invalid
504 assert_nil @adapter.diff(nil, 'abcd1234efgh')
504 assert_nil @adapter.diff(nil, 'abcd1234efgh')
505 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
505 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
506 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
506 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
507 end
507 end
508
508
509 def test_annotate_path_invalid
509 def test_annotate_path_invalid
510 assert_nil @adapter.annotate('invalid')
510 assert_nil @adapter.annotate('invalid')
511 end
511 end
512
512
513 def test_annotate_revision_invalid
513 def test_annotate_revision_invalid
514 assert @adapter.annotate('README')
514 assert @adapter.annotate('README')
515 assert_nil @adapter.annotate('README', 'abcd1234efgh')
515 assert_nil @adapter.annotate('README', 'abcd1234efgh')
516 end
516 end
517
517
518 private
518 private
519
519
520 def test_scm_version_for(scm_command_version, version)
520 def test_scm_version_for(scm_command_version, version)
521 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
521 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
522 assert_equal version, @adapter.class.scm_command_version
522 assert_equal version, @adapter.class.scm_command_version
523 end
523 end
524
524
525 else
525 else
526 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
526 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
527 def test_fake; assert true end
527 def test_fake; assert true end
528 end
528 end
529 end
529 end
530
530
531 rescue LoadError
531 rescue LoadError
532 class GitMochaFake < ActiveSupport::TestCase
532 class GitMochaFake < ActiveSupport::TestCase
533 def test_fake; assert(false, "Requires mocha to run those tests") end
533 def test_fake; assert(false, "Requires mocha to run those tests") end
534 end
534 end
535 end
535 end
General Comments 0
You need to be logged in to leave comments. Login now