Mercurial > hg > soundsoftware-site
comparison .svn/pristine/77/77b5f4fec79f0d6eb61a76e965e02cb7504641fe.svn-base @ 1298:4f746d8966dd redmine_2.3_integration
Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:28:30 +0100 |
parents | 622f24f53b42 |
children |
comparison
equal
deleted
inserted
replaced
1297:0a574315af3e | 1298:4f746d8966dd |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with this program; if not, write to the Free Software | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 require File.expand_path('../../test_helper', __FILE__) | |
19 | |
20 class RepositoryBazaarTest < ActiveSupport::TestCase | |
21 fixtures :projects | |
22 | |
23 include Redmine::I18n | |
24 | |
25 REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s | |
26 REPOSITORY_PATH_TRUNK = File.join(REPOSITORY_PATH, "trunk") | |
27 NUM_REV = 4 | |
28 | |
29 REPOSITORY_PATH_NON_ASCII = Rails.root.join(REPOSITORY_PATH + '/' + 'non_ascii').to_s | |
30 | |
31 # Bazaar core does not support xml output such as Subversion and Mercurial. | |
32 # "bzr" command output and command line parameter depend on locale. | |
33 # So, non ASCII path tests cannot run independent locale. | |
34 # | |
35 # If you want to run Bazaar non ASCII path tests on Linux *Ruby 1.9*, | |
36 # you need to set locale character set "ISO-8859-1". | |
37 # E.g. "LANG=en_US.ISO-8859-1". | |
38 # On Linux other platforms (e.g. Ruby 1.8, JRuby), | |
39 # you need to set "RUN_LATIN1_OUTPUT_TEST = true" manually. | |
40 # | |
41 # On Windows, because it is too hard to change system locale, | |
42 # you cannot run Bazaar non ASCII path tests. | |
43 # | |
44 RUN_LATIN1_OUTPUT_TEST = (RUBY_PLATFORM != 'java' && | |
45 REPOSITORY_PATH.respond_to?(:force_encoding) && | |
46 Encoding.locale_charmap == "ISO-8859-1") | |
47 | |
48 CHAR_1_UTF8_HEX = "\xc3\x9c" | |
49 CHAR_1_LATIN1_HEX = "\xdc" | |
50 | |
51 def setup | |
52 @project = Project.find(3) | |
53 @repository = Repository::Bazaar.create( | |
54 :project => @project, :url => REPOSITORY_PATH_TRUNK, | |
55 :log_encoding => 'UTF-8') | |
56 assert @repository | |
57 @char_1_utf8 = CHAR_1_UTF8_HEX.dup | |
58 @char_1_ascii8bit = CHAR_1_LATIN1_HEX.dup | |
59 if @char_1_utf8.respond_to?(:force_encoding) | |
60 @char_1_utf8.force_encoding('UTF-8') | |
61 @char_1_ascii8bit.force_encoding('ASCII-8BIT') | |
62 end | |
63 end | |
64 | |
65 def test_blank_path_to_repository_error_message | |
66 set_language_if_valid 'en' | |
67 repo = Repository::Bazaar.new( | |
68 :project => @project, | |
69 :identifier => 'test', | |
70 :log_encoding => 'UTF-8' | |
71 ) | |
72 assert !repo.save | |
73 assert_include "Path to repository can't be blank", | |
74 repo.errors.full_messages | |
75 end | |
76 | |
77 def test_blank_path_to_repository_error_message_fr | |
78 set_language_if_valid 'fr' | |
79 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)" | |
80 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding) | |
81 repo = Repository::Bazaar.new( | |
82 :project => @project, | |
83 :url => "", | |
84 :identifier => 'test', | |
85 :log_encoding => 'UTF-8' | |
86 ) | |
87 assert !repo.save | |
88 assert_include str, repo.errors.full_messages | |
89 end | |
90 | |
91 if File.directory?(REPOSITORY_PATH_TRUNK) | |
92 def test_fetch_changesets_from_scratch | |
93 assert_equal 0, @repository.changesets.count | |
94 @repository.fetch_changesets | |
95 @project.reload | |
96 | |
97 assert_equal NUM_REV, @repository.changesets.count | |
98 assert_equal 9, @repository.filechanges.count | |
99 assert_equal 'Initial import', @repository.changesets.find_by_revision('1').comments | |
100 end | |
101 | |
102 def test_fetch_changesets_incremental | |
103 assert_equal 0, @repository.changesets.count | |
104 @repository.fetch_changesets | |
105 @project.reload | |
106 assert_equal NUM_REV, @repository.changesets.count | |
107 # Remove changesets with revision > 5 | |
108 @repository.changesets.all.each {|c| c.destroy if c.revision.to_i > 2} | |
109 @project.reload | |
110 assert_equal 2, @repository.changesets.count | |
111 | |
112 @repository.fetch_changesets | |
113 @project.reload | |
114 assert_equal NUM_REV, @repository.changesets.count | |
115 end | |
116 | |
117 def test_entries | |
118 entries = @repository.entries | |
119 assert_kind_of Redmine::Scm::Adapters::Entries, entries | |
120 assert_equal 2, entries.size | |
121 | |
122 assert_equal 'dir', entries[0].kind | |
123 assert_equal 'directory', entries[0].name | |
124 assert_equal 'directory', entries[0].path | |
125 | |
126 assert_equal 'file', entries[1].kind | |
127 assert_equal 'doc-mkdir.txt', entries[1].name | |
128 assert_equal 'doc-mkdir.txt', entries[1].path | |
129 end | |
130 | |
131 def test_entries_in_subdirectory | |
132 entries = @repository.entries('directory') | |
133 assert_equal 3, entries.size | |
134 | |
135 assert_equal 'file', entries.last.kind | |
136 assert_equal 'edit.png', entries.last.name | |
137 assert_equal 'directory/edit.png', entries.last.path | |
138 end | |
139 | |
140 def test_previous | |
141 assert_equal 0, @repository.changesets.count | |
142 @repository.fetch_changesets | |
143 @project.reload | |
144 assert_equal NUM_REV, @repository.changesets.count | |
145 changeset = @repository.find_changeset_by_name('3') | |
146 assert_equal @repository.find_changeset_by_name('2'), changeset.previous | |
147 end | |
148 | |
149 def test_previous_nil | |
150 assert_equal 0, @repository.changesets.count | |
151 @repository.fetch_changesets | |
152 @project.reload | |
153 assert_equal NUM_REV, @repository.changesets.count | |
154 changeset = @repository.find_changeset_by_name('1') | |
155 assert_nil changeset.previous | |
156 end | |
157 | |
158 def test_next | |
159 assert_equal 0, @repository.changesets.count | |
160 @repository.fetch_changesets | |
161 @project.reload | |
162 assert_equal NUM_REV, @repository.changesets.count | |
163 changeset = @repository.find_changeset_by_name('2') | |
164 assert_equal @repository.find_changeset_by_name('3'), changeset.next | |
165 end | |
166 | |
167 def test_next_nil | |
168 assert_equal 0, @repository.changesets.count | |
169 @repository.fetch_changesets | |
170 @project.reload | |
171 assert_equal NUM_REV, @repository.changesets.count | |
172 changeset = @repository.find_changeset_by_name('4') | |
173 assert_nil changeset.next | |
174 end | |
175 | |
176 if File.directory?(REPOSITORY_PATH_NON_ASCII) && RUN_LATIN1_OUTPUT_TEST | |
177 def test_cat_latin1_path | |
178 latin1_repo = create_latin1_repo | |
179 buf = latin1_repo.cat( | |
180 "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-2.txt", 2) | |
181 assert buf | |
182 lines = buf.split("\n") | |
183 assert_equal 2, lines.length | |
184 assert_equal 'It is written in Python.', lines[1] | |
185 | |
186 buf = latin1_repo.cat( | |
187 "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", 2) | |
188 assert buf | |
189 lines = buf.split("\n") | |
190 assert_equal 1, lines.length | |
191 assert_equal "test-#{@char_1_ascii8bit}.txt", lines[0] | |
192 end | |
193 | |
194 def test_annotate_latin1_path | |
195 latin1_repo = create_latin1_repo | |
196 ann1 = latin1_repo.annotate( | |
197 "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-2.txt", 2) | |
198 assert_equal 2, ann1.lines.size | |
199 assert_equal '2', ann1.revisions[0].identifier | |
200 assert_equal 'test00@', ann1.revisions[0].author | |
201 assert_equal 'It is written in Python.', ann1.lines[1] | |
202 ann2 = latin1_repo.annotate( | |
203 "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", 2) | |
204 assert_equal 1, ann2.lines.size | |
205 assert_equal '2', ann2.revisions[0].identifier | |
206 assert_equal 'test00@', ann2.revisions[0].author | |
207 assert_equal "test-#{@char_1_ascii8bit}.txt", ann2.lines[0] | |
208 end | |
209 | |
210 def test_diff_latin1_path | |
211 latin1_repo = create_latin1_repo | |
212 diff1 = latin1_repo.diff( | |
213 "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", 2, 1) | |
214 assert_equal 7, diff1.size | |
215 buf = diff1[5].gsub(/\r\n|\r|\n/, "") | |
216 assert_equal "+test-#{@char_1_ascii8bit}.txt", buf | |
217 end | |
218 | |
219 def test_entries_latin1_path | |
220 latin1_repo = create_latin1_repo | |
221 entries = latin1_repo.entries("test-#{@char_1_utf8}-dir", 2) | |
222 assert_kind_of Redmine::Scm::Adapters::Entries, entries | |
223 assert_equal 3, entries.size | |
224 assert_equal 'file', entries[1].kind | |
225 assert_equal "test-#{@char_1_utf8}-1.txt", entries[0].name | |
226 assert_equal "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", entries[0].path | |
227 end | |
228 | |
229 def test_entry_latin1_path | |
230 latin1_repo = create_latin1_repo | |
231 ["test-#{@char_1_utf8}-dir", | |
232 "/test-#{@char_1_utf8}-dir", | |
233 "/test-#{@char_1_utf8}-dir/" | |
234 ].each do |path| | |
235 entry = latin1_repo.entry(path, 2) | |
236 assert_equal "test-#{@char_1_utf8}-dir", entry.path | |
237 assert_equal "dir", entry.kind | |
238 end | |
239 ["test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", | |
240 "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt" | |
241 ].each do |path| | |
242 entry = latin1_repo.entry(path, 2) | |
243 assert_equal "test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", | |
244 entry.path | |
245 assert_equal "file", entry.kind | |
246 end | |
247 end | |
248 | |
249 def test_changeset_latin1_path | |
250 latin1_repo = create_latin1_repo | |
251 assert_equal 0, latin1_repo.changesets.count | |
252 latin1_repo.fetch_changesets | |
253 @project.reload | |
254 assert_equal 3, latin1_repo.changesets.count | |
255 | |
256 cs2 = latin1_repo.changesets.find_by_revision('2') | |
257 assert_not_nil cs2 | |
258 assert_equal "test-#{@char_1_utf8}", cs2.comments | |
259 c2 = cs2.filechanges.sort_by(&:path) | |
260 assert_equal 4, c2.size | |
261 assert_equal 'A', c2[0].action | |
262 assert_equal "/test-#{@char_1_utf8}-dir/", c2[0].path | |
263 assert_equal 'A', c2[1].action | |
264 assert_equal "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-1.txt", c2[1].path | |
265 assert_equal 'A', c2[2].action | |
266 assert_equal "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-2.txt", c2[2].path | |
267 assert_equal 'A', c2[3].action | |
268 assert_equal "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}.txt", c2[3].path | |
269 | |
270 cs3 = latin1_repo.changesets.find_by_revision('3') | |
271 assert_not_nil cs3 | |
272 assert_equal "modify, move and delete #{@char_1_utf8} files", cs3.comments | |
273 c3 = cs3.filechanges.sort_by(&:path) | |
274 assert_equal 3, c3.size | |
275 assert_equal 'M', c3[0].action | |
276 assert_equal "/test-#{@char_1_utf8}-1.txt", c3[0].path | |
277 assert_equal 'D', c3[1].action | |
278 assert_equal "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}-2.txt", c3[1].path | |
279 assert_equal 'M', c3[2].action | |
280 assert_equal "/test-#{@char_1_utf8}-dir/test-#{@char_1_utf8}.txt", c3[2].path | |
281 end | |
282 else | |
283 msg = "Bazaar non ASCII output test cannot run this environment." + "\n" | |
284 if msg.respond_to?(:force_encoding) | |
285 msg += "Encoding.locale_charmap: " + Encoding.locale_charmap + "\n" | |
286 end | |
287 puts msg | |
288 end | |
289 | |
290 private | |
291 | |
292 def create_latin1_repo | |
293 repo = Repository::Bazaar.create( | |
294 :project => @project, | |
295 :identifier => 'latin1', | |
296 :url => REPOSITORY_PATH_NON_ASCII, | |
297 :log_encoding => 'ISO-8859-1' | |
298 ) | |
299 assert repo | |
300 repo | |
301 end | |
302 else | |
303 puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!" | |
304 def test_fake; assert true end | |
305 end | |
306 end |