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