##// END OF EJS Templates
scm: mercurial: unit lib test for entries (#3421)....
Toshi MARUYAMA -
r4744:628130ef5c71
parent child
Show More
@@ -1,203 +1,209
1 require File.expand_path('../../../../../../test_helper', __FILE__)
1 require File.expand_path('../../../../../../test_helper', __FILE__)
2 begin
2 begin
3 require 'mocha'
3 require 'mocha'
4
4
5 class MercurialAdapterTest < ActiveSupport::TestCase
5 class MercurialAdapterTest < ActiveSupport::TestCase
6
6
7 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
7 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
10
10
11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
12
12
13 if File.directory?(REPOSITORY_PATH)
13 if File.directory?(REPOSITORY_PATH)
14 def setup
14 def setup
15 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
15 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
16 @diff_c_support = true
16 @diff_c_support = true
17 end
17 end
18
18
19 def test_hgversion
19 def test_hgversion
20 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
20 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
21 "Mercurial Distributed SCM (1.0)\n" => [1,0],
21 "Mercurial Distributed SCM (1.0)\n" => [1,0],
22 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
22 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
23 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
23 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
24 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
24 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
25 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
25 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
26 "(1.6)\n(1.7)\n(1.8)" => [1,6],
26 "(1.6)\n(1.7)\n(1.8)" => [1,6],
27 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
27 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
28
28
29 to_test.each do |s, v|
29 to_test.each do |s, v|
30 test_hgversion_for(s, v)
30 test_hgversion_for(s, v)
31 end
31 end
32 end
32 end
33
33
34 def test_template_path
34 def test_template_path
35 to_test = { [0,9,5] => "0.9.5",
35 to_test = { [0,9,5] => "0.9.5",
36 [1,0] => "1.0",
36 [1,0] => "1.0",
37 [] => "1.0",
37 [] => "1.0",
38 [1,0,1] => "1.0",
38 [1,0,1] => "1.0",
39 [1,7] => "1.0",
39 [1,7] => "1.0",
40 [1,7,1] => "1.0" }
40 [1,7,1] => "1.0" }
41 to_test.each do |v, template|
41 to_test.each do |v, template|
42 test_template_path_for(v, template)
42 test_template_path_for(v, template)
43 end
43 end
44 end
44 end
45
45
46 def test_info
46 def test_info
47 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
47 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
48 REPOSITORY_PATH + "//"].each do |repo|
48 REPOSITORY_PATH + "//"].each do |repo|
49 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
49 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
50 repo_path = adp.info.root_url.gsub(/\\/, "/")
50 repo_path = adp.info.root_url.gsub(/\\/, "/")
51 assert_equal REPOSITORY_PATH, repo_path
51 assert_equal REPOSITORY_PATH, repo_path
52 assert_equal '16', adp.info.lastrev.revision
52 assert_equal '16', adp.info.lastrev.revision
53 assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
53 assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
54 end
54 end
55 end
55 end
56
56
57 def test_revisions
57 def test_revisions
58 revisions = @adapter.revisions(nil, 2, 4)
58 revisions = @adapter.revisions(nil, 2, 4)
59 assert_equal 3, revisions.size
59 assert_equal 3, revisions.size
60 assert_equal '2', revisions[0].revision
60 assert_equal '2', revisions[0].revision
61 assert_equal '400bb8672109', revisions[0].scmid
61 assert_equal '400bb8672109', revisions[0].scmid
62 assert_equal '4', revisions[2].revision
62 assert_equal '4', revisions[2].revision
63 assert_equal 'def6d2f1254a', revisions[2].scmid
63 assert_equal 'def6d2f1254a', revisions[2].scmid
64
64
65 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
65 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
66 assert_equal 2, revisions.size
66 assert_equal 2, revisions.size
67 assert_equal '2', revisions[0].revision
67 assert_equal '2', revisions[0].revision
68 assert_equal '400bb8672109', revisions[0].scmid
68 assert_equal '400bb8672109', revisions[0].scmid
69 end
69 end
70
70
71 def test_diff
71 def test_diff
72 if @adapter.class.client_version_above?([1, 2])
72 if @adapter.class.client_version_above?([1, 2])
73 assert_nil @adapter.diff(nil, '100000')
73 assert_nil @adapter.diff(nil, '100000')
74 end
74 end
75 assert_nil @adapter.diff(nil, '100000', '200000')
75 assert_nil @adapter.diff(nil, '100000', '200000')
76 [2, '400bb8672109', '400', 400].each do |r1|
76 [2, '400bb8672109', '400', 400].each do |r1|
77 diff1 = @adapter.diff(nil, r1)
77 diff1 = @adapter.diff(nil, r1)
78 if @diff_c_support
78 if @diff_c_support
79 assert_equal 28, diff1.size
79 assert_equal 28, diff1.size
80 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
80 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
81 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
81 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
82 else
82 else
83 assert_equal 0, diff1.size
83 assert_equal 0, diff1.size
84 end
84 end
85 [4, 'def6d2f1254a'].each do |r2|
85 [4, 'def6d2f1254a'].each do |r2|
86 diff2 = @adapter.diff(nil,r1,r2)
86 diff2 = @adapter.diff(nil,r1,r2)
87 assert_equal 49, diff2.size
87 assert_equal 49, diff2.size
88 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
88 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
89 assert_equal "+class WelcomeController < ApplicationController", buf
89 assert_equal "+class WelcomeController < ApplicationController", buf
90 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
90 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
91 assert_equal 20, diff3.size
91 assert_equal 20, diff3.size
92 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
92 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
93 assert_equal "+ @watched.remove_watcher(user)", buf
93 assert_equal "+ @watched.remove_watcher(user)", buf
94 end
94 end
95 end
95 end
96 end
96 end
97
97
98 def test_diff_made_by_revision
98 def test_diff_made_by_revision
99 if @diff_c_support
99 if @diff_c_support
100 [16, '16', '4cddb4e45f52'].each do |r1|
100 [16, '16', '4cddb4e45f52'].each do |r1|
101 diff1 = @adapter.diff(nil, r1)
101 diff1 = @adapter.diff(nil, r1)
102 assert_equal 5, diff1.size
102 assert_equal 5, diff1.size
103 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
103 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
104 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
104 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
105 end
105 end
106 end
106 end
107 end
107 end
108
108
109 def test_cat
109 def test_cat
110 [2, '400bb8672109', '400', 400].each do |r|
110 [2, '400bb8672109', '400', 400].each do |r|
111 buf = @adapter.cat('sources/welcome_controller.rb', r)
111 buf = @adapter.cat('sources/welcome_controller.rb', r)
112 assert buf
112 assert buf
113 lines = buf.split("\r\n")
113 lines = buf.split("\r\n")
114 assert_equal 25, lines.length
114 assert_equal 25, lines.length
115 assert_equal 'class WelcomeController < ApplicationController', lines[17]
115 assert_equal 'class WelcomeController < ApplicationController', lines[17]
116 end
116 end
117 assert_nil @adapter.cat('sources/welcome_controller.rb')
117 assert_nil @adapter.cat('sources/welcome_controller.rb')
118 end
118 end
119
119
120 def test_annotate
120 def test_annotate
121 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
121 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
122 [2, '400bb8672109', '400', 400].each do |r|
122 [2, '400bb8672109', '400', 400].each do |r|
123 ann = @adapter.annotate('sources/welcome_controller.rb', r)
123 ann = @adapter.annotate('sources/welcome_controller.rb', r)
124 assert ann
124 assert ann
125 assert_equal '1', ann.revisions[17].revision
125 assert_equal '1', ann.revisions[17].revision
126 assert_equal '9d5b5b004199', ann.revisions[17].identifier
126 assert_equal '9d5b5b004199', ann.revisions[17].identifier
127 assert_equal 'jsmith', ann.revisions[0].author
127 assert_equal 'jsmith', ann.revisions[0].author
128 assert_equal 25, ann.lines.length
128 assert_equal 25, ann.lines.length
129 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
129 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
130 end
130 end
131 end
131 end
132
132
133 # TODO filesize etc.
133 # TODO filesize etc.
134 def test_entries
134 def test_entries
135 assert_nil @adapter.entries(nil, '100000')
135 assert_nil @adapter.entries(nil, '100000')
136
136
137 assert_equal 1, @adapter.entries("sources", 3).size
137 assert_equal 1, @adapter.entries("sources", 3).size
138 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
138 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
139
139
140 [2, '400bb8672109', '400', 400].each do |r|
140 [2, '400bb8672109', '400', 400].each do |r|
141 entries1 = @adapter.entries(nil, r)
141 entries1 = @adapter.entries(nil, r)
142 assert entries1
142 assert entries1
143 assert_equal 3, entries1.size
143 assert_equal 3, entries1.size
144 assert_equal 'sources', entries1[1].name
144 assert_equal 'sources', entries1[1].name
145 assert_equal 'sources', entries1[1].path
145 assert_equal 'sources', entries1[1].path
146 assert_equal 'dir', entries1[1].kind
146 assert_equal 'dir', entries1[1].kind
147 assert_equal 'README', entries1[2].name
147 readme = entries1[2]
148 assert_equal 'README', entries1[2].path
148 assert_equal 'README', readme.name
149 assert_equal 'file', entries1[2].kind
149 assert_equal 'README', readme.path
150 assert_equal 'file', readme.kind
151 assert_equal 27, readme.size
152 assert_equal '1', readme.lastrev.revision
153 assert_equal '9d5b5b004199', readme.lastrev.identifier
154 # 2007-12-14 10:24:01 +0100
155 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
150
156
151 entries2 = @adapter.entries('sources', r)
157 entries2 = @adapter.entries('sources', r)
152 assert entries2
158 assert entries2
153 assert_equal 2, entries2.size
159 assert_equal 2, entries2.size
154 assert_equal 'watchers_controller.rb', entries2[0].name
160 assert_equal 'watchers_controller.rb', entries2[0].name
155 assert_equal 'sources/watchers_controller.rb', entries2[0].path
161 assert_equal 'sources/watchers_controller.rb', entries2[0].path
156 assert_equal 'file', entries2[0].kind
162 assert_equal 'file', entries2[0].kind
157 assert_equal 'welcome_controller.rb', entries2[1].name
163 assert_equal 'welcome_controller.rb', entries2[1].name
158 assert_equal 'sources/welcome_controller.rb', entries2[1].path
164 assert_equal 'sources/welcome_controller.rb', entries2[1].path
159 assert_equal 'file', entries2[1].kind
165 assert_equal 'file', entries2[1].kind
160 end
166 end
161 end
167 end
162
168
163 def test_locate_on_outdated_repository
169 def test_locate_on_outdated_repository
164 assert_equal 1, @adapter.entries("images", 0).size
170 assert_equal 1, @adapter.entries("images", 0).size
165 assert_equal 2, @adapter.entries("images").size
171 assert_equal 2, @adapter.entries("images").size
166 assert_equal 2, @adapter.entries("images", 2).size
172 assert_equal 2, @adapter.entries("images", 2).size
167 end
173 end
168
174
169 def test_access_by_nodeid
175 def test_access_by_nodeid
170 path = 'sources/welcome_controller.rb'
176 path = 'sources/welcome_controller.rb'
171 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
177 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
172 end
178 end
173
179
174 def test_access_by_fuzzy_nodeid
180 def test_access_by_fuzzy_nodeid
175 path = 'sources/welcome_controller.rb'
181 path = 'sources/welcome_controller.rb'
176 # falls back to nodeid
182 # falls back to nodeid
177 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
183 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
178 end
184 end
179
185
180 private
186 private
181
187
182 def test_hgversion_for(hgversion, version)
188 def test_hgversion_for(hgversion, version)
183 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
189 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
184 assert_equal version, @adapter.class.hgversion
190 assert_equal version, @adapter.class.hgversion
185 end
191 end
186
192
187 def test_template_path_for(version, template)
193 def test_template_path_for(version, template)
188 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
194 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
189 @adapter.class.template_path_for(version)
195 @adapter.class.template_path_for(version)
190 assert File.exist?(@adapter.class.template_path_for(version))
196 assert File.exist?(@adapter.class.template_path_for(version))
191 end
197 end
192 else
198 else
193 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
199 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
194 def test_fake; assert true end
200 def test_fake; assert true end
195 end
201 end
196 end
202 end
197
203
198 rescue LoadError
204 rescue LoadError
199 class MercurialMochaFake < ActiveSupport::TestCase
205 class MercurialMochaFake < ActiveSupport::TestCase
200 def test_fake; assert(false, "Requires mocha to run those tests") end
206 def test_fake; assert(false, "Requires mocha to run those tests") end
201 end
207 end
202 end
208 end
203
209
General Comments 0
You need to be logged in to leave comments. Login now