##// END OF EJS Templates
scm: git: add unit adapter test of annotate invalid path (#8767)....
Toshi MARUYAMA -
r6073:e510f2e29e60
parent child
Show More
@@ -1,400 +1,404
1 # encoding: utf-8
1 # encoding: utf-8
2
2
3 # This file includes UTF-8 "Felix Schäfer".
3 # This file includes UTF-8 "Felix Schäfer".
4 # We need to consider Ruby 1.9 compatibility.
4 # We need to consider Ruby 1.9 compatibility.
5
5
6 require File.expand_path('../../../../../../test_helper', __FILE__)
6 require File.expand_path('../../../../../../test_helper', __FILE__)
7 begin
7 begin
8 require 'mocha'
8 require 'mocha'
9
9
10 class GitAdapterTest < ActiveSupport::TestCase
10 class GitAdapterTest < ActiveSupport::TestCase
11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
12
12
13 FELIX_UTF8 = "Felix Schäfer"
13 FELIX_UTF8 = "Felix Schäfer"
14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
15 CHAR_1_HEX = "\xc3\x9c"
15 CHAR_1_HEX = "\xc3\x9c"
16
16
17 ## Ruby uses ANSI api to fork a process on Windows.
17 ## Ruby uses ANSI api to fork a process on Windows.
18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
19 ## and these are incompatible with ASCII.
19 ## and these are incompatible with ASCII.
20 # WINDOWS_PASS = Redmine::Platform.mswin?
20 # WINDOWS_PASS = Redmine::Platform.mswin?
21 WINDOWS_PASS = false
21 WINDOWS_PASS = false
22
22
23 ## Git, Mercurial and CVS path encodings are binary.
23 ## Git, Mercurial and CVS path encodings are binary.
24 ## Subversion supports URL encoding for path.
24 ## Subversion supports URL encoding for path.
25 ## Redmine Mercurial adapter and extension use URL encoding.
25 ## Redmine Mercurial adapter and extension use URL encoding.
26 ## Git accepts only binary path in command line parameter.
26 ## Git accepts only binary path in command line parameter.
27 ## So, there is no way to use binary command line parameter in JRuby.
27 ## So, there is no way to use binary command line parameter in JRuby.
28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
30
30
31 if File.directory?(REPOSITORY_PATH)
31 if File.directory?(REPOSITORY_PATH)
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 assert_equal [
64 assert_equal [
65 'latin-1-path-encoding',
65 'latin-1-path-encoding',
66 'master',
66 'master',
67 'test-latin-1',
67 'test-latin-1',
68 'test_branch',
68 'test_branch',
69 ], @adapter.branches
69 ], @adapter.branches
70 end
70 end
71
71
72 def test_tags
72 def test_tags
73 assert_equal [
73 assert_equal [
74 "tag00.lightweight",
74 "tag00.lightweight",
75 "tag01.annotated",
75 "tag01.annotated",
76 ], @adapter.tags
76 ], @adapter.tags
77 end
77 end
78
78
79 def test_getting_all_revisions
79 def test_getting_all_revisions
80 assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
80 assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
81 end
81 end
82
82
83 def test_getting_certain_revisions
83 def test_getting_certain_revisions
84 assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
84 assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
85 end
85 end
86
86
87 def test_revisions_reverse
87 def test_revisions_reverse
88 revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
88 revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
89 assert_equal 21, revs1.length
89 assert_equal 21, revs1.length
90 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
90 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
91 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
91 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
92 end
92 end
93
93
94 def test_revisions_reverse_with_time
94 def test_revisions_reverse_with_time
95 since2 = Time.gm(2010, 9, 30, 0, 0, 0)
95 since2 = Time.gm(2010, 9, 30, 0, 0, 0)
96 revs2 = @adapter.revisions('', nil, nil,
96 revs2 = @adapter.revisions('', nil, nil,
97 {:all => true, :since => since2, :reverse => true})
97 {:all => true, :since => since2, :reverse => true})
98 assert_equal 6, revs2.length
98 assert_equal 6, revs2.length
99 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
99 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
100 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
100 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
101 end
101 end
102
102
103 def test_revisions_master_all
103 def test_revisions_master_all
104 revs1 = []
104 revs1 = []
105 @adapter.revisions('', nil, "master",{}) do |rev|
105 @adapter.revisions('', nil, "master",{}) do |rev|
106 revs1 << rev
106 revs1 << rev
107 end
107 end
108 assert_equal 15, revs1.length
108 assert_equal 15, revs1.length
109 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
109 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
110 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
110 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
111
111
112 revs2 = []
112 revs2 = []
113 @adapter.revisions('', nil, "master",
113 @adapter.revisions('', nil, "master",
114 {:reverse => true}) do |rev|
114 {:reverse => true}) do |rev|
115 revs2 << rev
115 revs2 << rev
116 end
116 end
117 assert_equal 15, revs2.length
117 assert_equal 15, revs2.length
118 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
118 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
119 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
119 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
120 end
120 end
121
121
122 def test_revisions_master_merged_rev
122 def test_revisions_master_merged_rev
123 revs1 = []
123 revs1 = []
124 @adapter.revisions('',
124 @adapter.revisions('',
125 "713f4944648826f558cf548222f813dabe7cbb04",
125 "713f4944648826f558cf548222f813dabe7cbb04",
126 "master",
126 "master",
127 {:reverse => true}) do |rev|
127 {:reverse => true}) do |rev|
128 revs1 << rev
128 revs1 << rev
129 end
129 end
130 assert_equal 8, revs1.length
130 assert_equal 8, revs1.length
131 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
131 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
132 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
132 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
133 # 4a07fe31b is not a child of 713f49446
133 # 4a07fe31b is not a child of 713f49446
134 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
134 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
135 # Merged revision
135 # Merged revision
136 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
136 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
137 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
137 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
138
138
139 revs2 = []
139 revs2 = []
140 @adapter.revisions('',
140 @adapter.revisions('',
141 "fba357b886984ee71185ad2065e65fc0417d9b92",
141 "fba357b886984ee71185ad2065e65fc0417d9b92",
142 "master",
142 "master",
143 {:reverse => true}) do |rev|
143 {:reverse => true}) do |rev|
144 revs2 << rev
144 revs2 << rev
145 end
145 end
146 assert_equal 7, revs2.length
146 assert_equal 7, revs2.length
147 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
147 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
148 # 4a07fe31b is not a child of fba357b8869
148 # 4a07fe31b is not a child of fba357b8869
149 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
149 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
150 # Merged revision
150 # Merged revision
151 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
151 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
152 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
152 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
153 end
153 end
154
154
155 def test_revisions_branch_latin_1_path_encoding_all
155 def test_revisions_branch_latin_1_path_encoding_all
156 revs1 = []
156 revs1 = []
157 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
157 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
158 revs1 << rev
158 revs1 << rev
159 end
159 end
160 assert_equal 8, revs1.length
160 assert_equal 8, revs1.length
161 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
161 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
162 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
162 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
163
163
164 revs2 = []
164 revs2 = []
165 @adapter.revisions('', nil, "latin-1-path-encoding",
165 @adapter.revisions('', nil, "latin-1-path-encoding",
166 {:reverse => true}) do |rev|
166 {:reverse => true}) do |rev|
167 revs2 << rev
167 revs2 << rev
168 end
168 end
169 assert_equal 8, revs2.length
169 assert_equal 8, revs2.length
170 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
170 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
171 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
171 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
172 end
172 end
173
173
174 def test_revisions_branch_latin_1_path_encoding_with_rev
174 def test_revisions_branch_latin_1_path_encoding_with_rev
175 revs1 = []
175 revs1 = []
176 @adapter.revisions('',
176 @adapter.revisions('',
177 '7234cb2750b63f47bff735edc50a1c0a433c2518',
177 '7234cb2750b63f47bff735edc50a1c0a433c2518',
178 "latin-1-path-encoding",
178 "latin-1-path-encoding",
179 {:reverse => true}) do |rev|
179 {:reverse => true}) do |rev|
180 revs1 << rev
180 revs1 << rev
181 end
181 end
182 assert_equal 7, revs1.length
182 assert_equal 7, revs1.length
183 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
183 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
184 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
184 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
185
185
186 revs2 = []
186 revs2 = []
187 @adapter.revisions('',
187 @adapter.revisions('',
188 '57ca437c0acbbcb749821fdf3726a1367056d364',
188 '57ca437c0acbbcb749821fdf3726a1367056d364',
189 "latin-1-path-encoding",
189 "latin-1-path-encoding",
190 {:reverse => true}) do |rev|
190 {:reverse => true}) do |rev|
191 revs2 << rev
191 revs2 << rev
192 end
192 end
193 assert_equal 3, revs2.length
193 assert_equal 3, revs2.length
194 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
194 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
195 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
195 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
196 end
196 end
197
197
198 def test_revisions_invalid_rev
198 def test_revisions_invalid_rev
199 revs1 = []
199 revs1 = []
200 @adapter.revisions('',
200 @adapter.revisions('',
201 '1234abcd',
201 '1234abcd',
202 "master",
202 "master",
203 {:reverse => true}) do |rev|
203 {:reverse => true}) do |rev|
204 revs1 << rev
204 revs1 << rev
205 end
205 end
206 assert_equal [], revs1
206 assert_equal [], revs1
207 end
207 end
208
208
209 def test_getting_revisions_with_spaces_in_filename
209 def test_getting_revisions_with_spaces_in_filename
210 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
210 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
211 nil, nil, :all => true).length
211 nil, nil, :all => true).length
212 end
212 end
213
213
214 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
214 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
215 assert_equal " filename with a leading space.txt ",
215 assert_equal " filename with a leading space.txt ",
216 @adapter.revisions(" filename with a leading space.txt ",
216 @adapter.revisions(" filename with a leading space.txt ",
217 nil, nil, :all => true)[0].paths[0][:path]
217 nil, nil, :all => true)[0].paths[0][:path]
218 end
218 end
219
219
220 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
220 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
221 assert_equal " filename with a leading space.txt ",
221 assert_equal " filename with a leading space.txt ",
222 @adapter.entries('',
222 @adapter.entries('',
223 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
223 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
224 end
224 end
225
225
226 def test_annotate
226 def test_annotate
227 annotate = @adapter.annotate('sources/watchers_controller.rb')
227 annotate = @adapter.annotate('sources/watchers_controller.rb')
228 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
228 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
229 assert_equal 41, annotate.lines.size
229 assert_equal 41, annotate.lines.size
230 assert_equal "# This program is free software; you can redistribute it and/or",
230 assert_equal "# This program is free software; you can redistribute it and/or",
231 annotate.lines[4].strip
231 annotate.lines[4].strip
232 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
232 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
233 annotate.revisions[4].identifier
233 annotate.revisions[4].identifier
234 assert_equal "jsmith", annotate.revisions[4].author
234 assert_equal "jsmith", annotate.revisions[4].author
235 end
235 end
236
236
237 def test_annotate_moved_file
237 def test_annotate_moved_file
238 annotate = @adapter.annotate('renamed_test.txt')
238 annotate = @adapter.annotate('renamed_test.txt')
239 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
239 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
240 assert_equal 2, annotate.lines.size
240 assert_equal 2, annotate.lines.size
241 end
241 end
242
242
243 def test_last_rev
243 def test_last_rev
244 last_rev = @adapter.lastrev("README",
244 last_rev = @adapter.lastrev("README",
245 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
245 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
246 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
246 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
247 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
247 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
248 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
248 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
249 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
249 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
250 end
250 end
251
251
252 def test_last_rev_with_spaces_in_filename
252 def test_last_rev_with_spaces_in_filename
253 last_rev = @adapter.lastrev("filemane with spaces.txt",
253 last_rev = @adapter.lastrev("filemane with spaces.txt",
254 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
254 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
255 str_felix_utf8 = FELIX_UTF8.dup
255 str_felix_utf8 = FELIX_UTF8.dup
256 str_felix_hex = FELIX_HEX.dup
256 str_felix_hex = FELIX_HEX.dup
257 last_rev_author = last_rev.author
257 last_rev_author = last_rev.author
258 if last_rev_author.respond_to?(:force_encoding)
258 if last_rev_author.respond_to?(:force_encoding)
259 last_rev_author.force_encoding('UTF-8')
259 last_rev_author.force_encoding('UTF-8')
260 end
260 end
261 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
261 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
262 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
262 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
263 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
263 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
264 last_rev.author
264 last_rev.author
265 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
265 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
266 last_rev.author
266 last_rev.author
267 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
267 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
268 end
268 end
269
269
270 def test_latin_1_path
270 def test_latin_1_path
271 if WINDOWS_PASS
271 if WINDOWS_PASS
272 #
272 #
273 elsif JRUBY_SKIP
273 elsif JRUBY_SKIP
274 puts JRUBY_SKIP_STR
274 puts JRUBY_SKIP_STR
275 else
275 else
276 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
276 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
277 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
277 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
278 assert @adapter.diff(p2, r1)
278 assert @adapter.diff(p2, r1)
279 assert @adapter.cat(p2, r1)
279 assert @adapter.cat(p2, r1)
280 assert_equal 1, @adapter.annotate(p2, r1).lines.length
280 assert_equal 1, @adapter.annotate(p2, r1).lines.length
281 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
281 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
282 assert @adapter.diff(p2, r1, r2)
282 assert @adapter.diff(p2, r1, r2)
283 end
283 end
284 end
284 end
285 end
285 end
286 end
286 end
287
287
288 def test_entries_tag
288 def test_entries_tag
289 entries1 = @adapter.entries(nil, 'tag01.annotated',
289 entries1 = @adapter.entries(nil, 'tag01.annotated',
290 options = {:report_last_commit => true})
290 options = {:report_last_commit => true})
291 assert entries1
291 assert entries1
292 assert_equal 3, entries1.size
292 assert_equal 3, entries1.size
293 assert_equal 'sources', entries1[1].name
293 assert_equal 'sources', entries1[1].name
294 assert_equal 'sources', entries1[1].path
294 assert_equal 'sources', entries1[1].path
295 assert_equal 'dir', entries1[1].kind
295 assert_equal 'dir', entries1[1].kind
296 readme = entries1[2]
296 readme = entries1[2]
297 assert_equal 'README', readme.name
297 assert_equal 'README', readme.name
298 assert_equal 'README', readme.path
298 assert_equal 'README', readme.path
299 assert_equal 'file', readme.kind
299 assert_equal 'file', readme.kind
300 assert_equal 27, readme.size
300 assert_equal 27, readme.size
301 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
301 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
302 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
302 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
303 end
303 end
304
304
305 def test_entries_branch
305 def test_entries_branch
306 entries1 = @adapter.entries(nil, 'test_branch',
306 entries1 = @adapter.entries(nil, 'test_branch',
307 options = {:report_last_commit => true})
307 options = {:report_last_commit => true})
308 assert entries1
308 assert entries1
309 assert_equal 4, entries1.size
309 assert_equal 4, entries1.size
310 assert_equal 'sources', entries1[1].name
310 assert_equal 'sources', entries1[1].name
311 assert_equal 'sources', entries1[1].path
311 assert_equal 'sources', entries1[1].path
312 assert_equal 'dir', entries1[1].kind
312 assert_equal 'dir', entries1[1].kind
313 readme = entries1[2]
313 readme = entries1[2]
314 assert_equal 'README', readme.name
314 assert_equal 'README', readme.name
315 assert_equal 'README', readme.path
315 assert_equal 'README', readme.path
316 assert_equal 'file', readme.kind
316 assert_equal 'file', readme.kind
317 assert_equal 159, readme.size
317 assert_equal 159, readme.size
318 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
318 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
319 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
319 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
320 end
320 end
321
321
322 def test_entries_latin_1_files
322 def test_entries_latin_1_files
323 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
323 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
324 assert entries1
324 assert entries1
325 assert_equal 3, entries1.size
325 assert_equal 3, entries1.size
326 f1 = entries1[1]
326 f1 = entries1[1]
327 assert_equal "test-#{@char_1}-2.txt", f1.name
327 assert_equal "test-#{@char_1}-2.txt", f1.name
328 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
328 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
329 assert_equal 'file', f1.kind
329 assert_equal 'file', f1.kind
330 end
330 end
331
331
332 def test_entries_latin_1_dir
332 def test_entries_latin_1_dir
333 if WINDOWS_PASS
333 if WINDOWS_PASS
334 #
334 #
335 elsif JRUBY_SKIP
335 elsif JRUBY_SKIP
336 puts JRUBY_SKIP_STR
336 puts JRUBY_SKIP_STR
337 else
337 else
338 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
338 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
339 '1ca7f5ed')
339 '1ca7f5ed')
340 assert entries1
340 assert entries1
341 assert_equal 3, entries1.size
341 assert_equal 3, entries1.size
342 f1 = entries1[1]
342 f1 = entries1[1]
343 assert_equal "test-#{@char_1}-2.txt", f1.name
343 assert_equal "test-#{@char_1}-2.txt", f1.name
344 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
344 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
345 assert_equal 'file', f1.kind
345 assert_equal 'file', f1.kind
346 end
346 end
347 end
347 end
348
348
349 def test_path_encoding_default_utf8
349 def test_path_encoding_default_utf8
350 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
350 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
351 REPOSITORY_PATH
351 REPOSITORY_PATH
352 )
352 )
353 assert_equal "UTF-8", adpt1.path_encoding
353 assert_equal "UTF-8", adpt1.path_encoding
354 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
354 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
355 REPOSITORY_PATH,
355 REPOSITORY_PATH,
356 nil,
356 nil,
357 nil,
357 nil,
358 nil,
358 nil,
359 ""
359 ""
360 )
360 )
361 assert_equal "UTF-8", adpt2.path_encoding
361 assert_equal "UTF-8", adpt2.path_encoding
362 end
362 end
363
363
364 def test_cat_path_invalid
364 def test_cat_path_invalid
365 assert_nil @adapter.cat('invalid')
365 assert_nil @adapter.cat('invalid')
366 end
366 end
367
367
368 def test_cat_revision_invalid
368 def test_cat_revision_invalid
369 assert @adapter.cat('README')
369 assert @adapter.cat('README')
370 assert_nil @adapter.cat('README', 'abcd1234efgh')
370 assert_nil @adapter.cat('README', 'abcd1234efgh')
371 end
371 end
372
372
373 def test_diff_path_invalid
373 def test_diff_path_invalid
374 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
374 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
375 end
375 end
376
376
377 def test_diff_revision_invalid
377 def test_diff_revision_invalid
378 assert_nil @adapter.diff(nil, 'abcd1234efgh')
378 assert_nil @adapter.diff(nil, 'abcd1234efgh')
379 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
379 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
380 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
380 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
381 end
381 end
382
382
383 def test_annotate_path_invalid
384 assert_nil @adapter.annotate('invalid')
385 end
386
383 private
387 private
384
388
385 def test_scm_version_for(scm_command_version, version)
389 def test_scm_version_for(scm_command_version, version)
386 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
390 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
387 assert_equal version, @adapter.class.scm_command_version
391 assert_equal version, @adapter.class.scm_command_version
388 end
392 end
389
393
390 else
394 else
391 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
395 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
392 def test_fake; assert true end
396 def test_fake; assert true end
393 end
397 end
394 end
398 end
395
399
396 rescue LoadError
400 rescue LoadError
397 class GitMochaFake < ActiveSupport::TestCase
401 class GitMochaFake < ActiveSupport::TestCase
398 def test_fake; assert(false, "Requires mocha to run those tests") end
402 def test_fake; assert(false, "Requires mocha to run those tests") end
399 end
403 end
400 end
404 end
General Comments 0
You need to be logged in to leave comments. Login now