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