##// END OF EJS Templates
scm: git: add reverse log test in unit adapter test (#5357)....
Toshi MARUYAMA -
r4947:45239fcb0a86
parent child
Show More
@@ -1,216 +1,230
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.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
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 if File.directory?(REPOSITORY_PATH)
17 if File.directory?(REPOSITORY_PATH)
18 def setup
18 def setup
19 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
19 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
20 REPOSITORY_PATH,
20 REPOSITORY_PATH,
21 nil,
21 nil,
22 nil,
22 nil,
23 nil,
23 nil,
24 'ISO-8859-1'
24 'ISO-8859-1'
25 )
25 )
26 assert @adapter
26 assert @adapter
27 @char_1 = CHAR_1_HEX.dup
27 @char_1 = CHAR_1_HEX.dup
28 if @char_1.respond_to?(:force_encoding)
28 if @char_1.respond_to?(:force_encoding)
29 @char_1.force_encoding('UTF-8')
29 @char_1.force_encoding('UTF-8')
30 end
30 end
31 end
31 end
32
32
33 def test_scm_version
33 def test_scm_version
34 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
34 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
35 "1.6.1\n1.7\n1.8" => [1,6,1],
35 "1.6.1\n1.7\n1.8" => [1,6,1],
36 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
36 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
37 to_test.each do |s, v|
37 to_test.each do |s, v|
38 test_scm_version_for(s, v)
38 test_scm_version_for(s, v)
39 end
39 end
40 end
40 end
41
41
42 def test_branches
42 def test_branches
43 assert_equal [
43 assert_equal [
44 'latin-1-path-encoding',
44 'latin-1-path-encoding',
45 'master',
45 'master',
46 'test-latin-1',
46 'test-latin-1',
47 'test_branch',
47 'test_branch',
48 ], @adapter.branches
48 ], @adapter.branches
49 end
49 end
50
50
51 def test_tags
51 def test_tags
52 assert_equal [
52 assert_equal [
53 "tag00.lightweight",
53 "tag00.lightweight",
54 "tag01.annotated",
54 "tag01.annotated",
55 ], @adapter.tags
55 ], @adapter.tags
56 end
56 end
57
57
58 def test_getting_all_revisions
58 def test_getting_all_revisions
59 assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
59 assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
60 end
60 end
61
61
62 def test_getting_certain_revisions
62 def test_getting_certain_revisions
63 assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
63 assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
64 end
64 end
65
65
66 def test_revisions_reverse
67 revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
68 assert_equal 21, revs1.length
69 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
70 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
71
72 since2 = Time.gm(2010, 9, 30, 0, 0, 0)
73 revs2 = @adapter.revisions('',nil,nil,{:all => true, :since => since2, :reverse => true })
74 assert_equal 6, revs2.length
75 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
76 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
77 end
78
66 def test_getting_revisions_with_spaces_in_filename
79 def test_getting_revisions_with_spaces_in_filename
67 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
80 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
68 nil, nil, :all => true).length
81 nil, nil, :all => true).length
69 end
82 end
70
83
71 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
84 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
72 assert_equal " filename with a leading space.txt ",
85 assert_equal " filename with a leading space.txt ",
73 @adapter.revisions(" filename with a leading space.txt ",
86 @adapter.revisions(" filename with a leading space.txt ",
74 nil, nil, :all => true)[0].paths[0][:path]
87 nil, nil, :all => true)[0].paths[0][:path]
75 end
88 end
76
89
77 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
90 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
78 assert_equal " filename with a leading space.txt ",
91 assert_equal " filename with a leading space.txt ",
79 @adapter.entries('',
92 @adapter.entries('',
80 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
93 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
81 end
94 end
82
95
83 def test_annotate
96 def test_annotate
84 annotate = @adapter.annotate('sources/watchers_controller.rb')
97 annotate = @adapter.annotate('sources/watchers_controller.rb')
85 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
98 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
86 assert_equal 41, annotate.lines.size
99 assert_equal 41, annotate.lines.size
87 assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
100 assert_equal "# This program is free software; you can redistribute it and/or",
101 annotate.lines[4].strip
88 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
102 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
89 annotate.revisions[4].identifier
103 annotate.revisions[4].identifier
90 assert_equal "jsmith", annotate.revisions[4].author
104 assert_equal "jsmith", annotate.revisions[4].author
91 end
105 end
92
106
93 def test_annotate_moved_file
107 def test_annotate_moved_file
94 annotate = @adapter.annotate('renamed_test.txt')
108 annotate = @adapter.annotate('renamed_test.txt')
95 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
109 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
96 assert_equal 2, annotate.lines.size
110 assert_equal 2, annotate.lines.size
97 end
111 end
98
112
99 def test_last_rev
113 def test_last_rev
100 last_rev = @adapter.lastrev("README",
114 last_rev = @adapter.lastrev("README",
101 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
115 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
102 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
116 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
103 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
117 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
104 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
118 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
105 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
119 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
106 end
120 end
107
121
108 def test_last_rev_with_spaces_in_filename
122 def test_last_rev_with_spaces_in_filename
109 last_rev = @adapter.lastrev("filemane with spaces.txt",
123 last_rev = @adapter.lastrev("filemane with spaces.txt",
110 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
124 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
111 str_felix_utf8 = FELIX_UTF8
125 str_felix_utf8 = FELIX_UTF8
112 str_felix_hex = FELIX_HEX
126 str_felix_hex = FELIX_HEX
113 last_rev_author = last_rev.author
127 last_rev_author = last_rev.author
114 if last_rev_author.respond_to?(:force_encoding)
128 if last_rev_author.respond_to?(:force_encoding)
115 last_rev_author.force_encoding('UTF-8')
129 last_rev_author.force_encoding('UTF-8')
116 end
130 end
117 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
131 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
118 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
132 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
119 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
133 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
120 last_rev.author
134 last_rev.author
121 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
135 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
122 last_rev.author
136 last_rev.author
123 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
137 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
124 end
138 end
125
139
126 def test_latin_1_path
140 def test_latin_1_path
127 if Redmine::Platform.mswin?
141 if Redmine::Platform.mswin?
128 # TODO
142 # TODO
129 else
143 else
130 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
144 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
131 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
145 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
132 assert @adapter.diff(p2, r1)
146 assert @adapter.diff(p2, r1)
133 assert @adapter.cat(p2, r1)
147 assert @adapter.cat(p2, r1)
134 assert_equal 1, @adapter.annotate(p2, r1).lines.length
148 assert_equal 1, @adapter.annotate(p2, r1).lines.length
135 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
149 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
136 assert @adapter.diff(p2, r1, r2)
150 assert @adapter.diff(p2, r1, r2)
137 end
151 end
138 end
152 end
139 end
153 end
140 end
154 end
141
155
142 def test_entries_tag
156 def test_entries_tag
143 entries1 = @adapter.entries(nil, 'tag01.annotated')
157 entries1 = @adapter.entries(nil, 'tag01.annotated')
144 assert entries1
158 assert entries1
145 assert_equal 3, entries1.size
159 assert_equal 3, entries1.size
146 assert_equal 'sources', entries1[1].name
160 assert_equal 'sources', entries1[1].name
147 assert_equal 'sources', entries1[1].path
161 assert_equal 'sources', entries1[1].path
148 assert_equal 'dir', entries1[1].kind
162 assert_equal 'dir', entries1[1].kind
149 readme = entries1[2]
163 readme = entries1[2]
150 assert_equal 'README', readme.name
164 assert_equal 'README', readme.name
151 assert_equal 'README', readme.path
165 assert_equal 'README', readme.path
152 assert_equal 'file', readme.kind
166 assert_equal 'file', readme.kind
153 assert_equal 27, readme.size
167 assert_equal 27, readme.size
154 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
168 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
155 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
169 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
156 end
170 end
157
171
158 def test_entries_branch
172 def test_entries_branch
159 entries1 = @adapter.entries(nil, 'test_branch')
173 entries1 = @adapter.entries(nil, 'test_branch')
160 assert entries1
174 assert entries1
161 assert_equal 4, entries1.size
175 assert_equal 4, entries1.size
162 assert_equal 'sources', entries1[1].name
176 assert_equal 'sources', entries1[1].name
163 assert_equal 'sources', entries1[1].path
177 assert_equal 'sources', entries1[1].path
164 assert_equal 'dir', entries1[1].kind
178 assert_equal 'dir', entries1[1].kind
165 readme = entries1[2]
179 readme = entries1[2]
166 assert_equal 'README', readme.name
180 assert_equal 'README', readme.name
167 assert_equal 'README', readme.path
181 assert_equal 'README', readme.path
168 assert_equal 'file', readme.kind
182 assert_equal 'file', readme.kind
169 assert_equal 159, readme.size
183 assert_equal 159, readme.size
170 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
184 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
171 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
185 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
172 end
186 end
173
187
174 def test_entries_latin_1_files
188 def test_entries_latin_1_files
175 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
189 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
176 assert entries1
190 assert entries1
177 assert_equal 3, entries1.size
191 assert_equal 3, entries1.size
178 f1 = entries1[1]
192 f1 = entries1[1]
179 assert_equal "test-#{@char_1}-2.txt", f1.name
193 assert_equal "test-#{@char_1}-2.txt", f1.name
180 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
194 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
181 assert_equal 'file', f1.kind
195 assert_equal 'file', f1.kind
182 end
196 end
183
197
184 def test_entries_latin_1_dir
198 def test_entries_latin_1_dir
185 if Redmine::Platform.mswin?
199 if Redmine::Platform.mswin?
186 # TODO
200 # TODO
187 else
201 else
188 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
202 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
189 assert entries1
203 assert entries1
190 assert_equal 3, entries1.size
204 assert_equal 3, entries1.size
191 f1 = entries1[1]
205 f1 = entries1[1]
192 assert_equal "test-#{@char_1}-2.txt", f1.name
206 assert_equal "test-#{@char_1}-2.txt", f1.name
193 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
207 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
194 assert_equal 'file', f1.kind
208 assert_equal 'file', f1.kind
195 end
209 end
196 end
210 end
197
211
198 private
212 private
199
213
200 def test_scm_version_for(scm_command_version, version)
214 def test_scm_version_for(scm_command_version, version)
201 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
215 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
202 assert_equal version, @adapter.class.scm_command_version
216 assert_equal version, @adapter.class.scm_command_version
203 end
217 end
204
218
205 else
219 else
206 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
220 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
207 def test_fake; assert true end
221 def test_fake; assert true end
208 end
222 end
209 end
223 end
210
224
211 rescue LoadError
225 rescue LoadError
212 class GitMochaFake < ActiveSupport::TestCase
226 class GitMochaFake < ActiveSupport::TestCase
213 def test_fake; assert(false, "Requires mocha to run those tests") end
227 def test_fake; assert(false, "Requires mocha to run those tests") end
214 end
228 end
215 end
229 end
216
230
General Comments 0
You need to be logged in to leave comments. Login now