To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / unit / .svn / text-base / repository_mercurial_test.rb.svn-base @ 441:cbce1fd3b1b7

History | View | Annotate | Download (10.2 KB)

1 441:cbce1fd3b1b7 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3 0:513646585e45 Chris
#
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 441:cbce1fd3b1b7 Chris
#
9 0:513646585e45 Chris
# 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 441:cbce1fd3b1b7 Chris
#
14 0:513646585e45 Chris
# 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 119:8661b858af72 Chris
require File.expand_path('../../test_helper', __FILE__)
19 0:513646585e45 Chris
20
class RepositoryMercurialTest < ActiveSupport::TestCase
21
  fixtures :projects
22 441:cbce1fd3b1b7 Chris
23 0:513646585e45 Chris
  # No '..' in the repository path
24
  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
25 245:051f544170fe Chris
26 441:cbce1fd3b1b7 Chris
  CHAR_1_HEX = "\xc3\x9c"
27 245:051f544170fe Chris
28 441:cbce1fd3b1b7 Chris
  if File.directory?(REPOSITORY_PATH)
29
30
    def setup
31
      klass = Repository::Mercurial
32
      assert_equal "Mercurial", klass.scm_name
33
      assert klass.scm_adapter_class
34
      assert_not_equal "", klass.scm_command
35
      assert_equal true, klass.scm_available
36
37
      @project = Project.find(3)
38
      @repository = Repository::Mercurial.create(
39
                      :project => @project,
40
                      :url     => REPOSITORY_PATH,
41
                      :path_encoding => 'ISO-8859-1'
42
                      )
43
      assert @repository
44
      @char_1        = CHAR_1_HEX.dup
45
      @tag_char_1    = "tag-#{CHAR_1_HEX}-00"
46
      @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
47
      @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
48
      if @char_1.respond_to?(:force_encoding)
49
        @char_1.force_encoding('UTF-8')
50
        @tag_char_1.force_encoding('UTF-8')
51
        @branch_char_0.force_encoding('UTF-8')
52
        @branch_char_1.force_encoding('UTF-8')
53
      end
54
    end
55
56 0:513646585e45 Chris
    def test_fetch_changesets_from_scratch
57
      @repository.fetch_changesets
58
      @repository.reload
59 441:cbce1fd3b1b7 Chris
      assert_equal 29, @repository.changesets.count
60
      assert_equal 37, @repository.changes.count
61 119:8661b858af72 Chris
      assert_equal "Initial import.\nThe repository contains 3 files.",
62
                   @repository.changesets.find_by_revision('0').comments
63 0:513646585e45 Chris
    end
64 245:051f544170fe Chris
65 0:513646585e45 Chris
    def test_fetch_changesets_incremental
66
      @repository.fetch_changesets
67
      # Remove changesets with revision > 2
68
      @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
69
      @repository.reload
70
      assert_equal 3, @repository.changesets.count
71 441:cbce1fd3b1b7 Chris
72 0:513646585e45 Chris
      @repository.fetch_changesets
73 441:cbce1fd3b1b7 Chris
      assert_equal 29, @repository.changesets.count
74 0:513646585e45 Chris
    end
75
76 119:8661b858af72 Chris
    def test_isodatesec
77
      # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
78
      if @repository.scm.class.client_version_above?([1, 0])
79
        @repository.fetch_changesets
80
        @repository.reload
81
        rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
82
        assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
83
      end
84 0:513646585e45 Chris
    end
85
86 119:8661b858af72 Chris
    def test_changeset_order_by_revision
87
      @repository.fetch_changesets
88
      @repository.reload
89
90
      c0 = @repository.latest_changeset
91
      c1 = @repository.changesets.find_by_revision('0')
92
      # sorted by revision (id), not by date
93
      assert c0.revision.to_i > c1.revision.to_i
94
      assert c0.committed_on  < c1.committed_on
95
    end
96
97
    def test_latest_changesets
98
      @repository.fetch_changesets
99
      @repository.reload
100
101
      # with_limit
102
      changesets = @repository.latest_changesets('', nil, 2)
103 441:cbce1fd3b1b7 Chris
      assert_equal %w|28 27|, changesets.collect(&:revision)
104 119:8661b858af72 Chris
105
      # with_filepath
106 441:cbce1fd3b1b7 Chris
      changesets = @repository.latest_changesets(
107
                      '/sql_escape/percent%dir/percent%file1.txt', nil)
108 119:8661b858af72 Chris
      assert_equal %w|11 10 9|, changesets.collect(&:revision)
109
110 441:cbce1fd3b1b7 Chris
      changesets = @repository.latest_changesets(
111
                      '/sql_escape/underscore_dir/understrike_file.txt', nil)
112 119:8661b858af72 Chris
      assert_equal %w|12 9|, changesets.collect(&:revision)
113 441:cbce1fd3b1b7 Chris
114
      changesets = @repository.latest_changesets('README', nil)
115
      assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
116
117
      changesets = @repository.latest_changesets('README','8')
118
      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
119
120
      changesets = @repository.latest_changesets('README','8', 2)
121
      assert_equal %w|8 6|, changesets.collect(&:revision)
122
123
      # with_dirpath
124
      changesets = @repository.latest_changesets('images', nil)
125
      assert_equal %w|1 0|, changesets.collect(&:revision)
126
127
      path = 'sql_escape/percent%dir'
128
      changesets = @repository.latest_changesets(path, nil)
129
      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
130
131
      changesets = @repository.latest_changesets(path, '11')
132
      assert_equal %w|11 10 9|, changesets.collect(&:revision)
133
134
      changesets = @repository.latest_changesets(path, '11', 2)
135
      assert_equal %w|11 10|, changesets.collect(&:revision)
136
137
      path = 'sql_escape/underscore_dir'
138
      changesets = @repository.latest_changesets(path, nil)
139
      assert_equal %w|13 12 9|, changesets.collect(&:revision)
140
141
      changesets = @repository.latest_changesets(path, '12')
142
      assert_equal %w|12 9|, changesets.collect(&:revision)
143
144
      changesets = @repository.latest_changesets(path, '12', 1)
145
      assert_equal %w|12|, changesets.collect(&:revision)
146
147
      # tag
148
      changesets = @repository.latest_changesets('', 'tag_test.00')
149
      assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
150
151
      changesets = @repository.latest_changesets('', 'tag_test.00', 2)
152
      assert_equal %w|5 4|, changesets.collect(&:revision)
153
154
      changesets = @repository.latest_changesets('sources', 'tag_test.00')
155
      assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
156
157
      changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
158
      assert_equal %w|4 3|, changesets.collect(&:revision)
159
160
      # named branch
161
      changesets = @repository.latest_changesets('', @branch_char_1)
162
      assert_equal %w|27 26|, changesets.collect(&:revision)
163
164
      changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
165
      assert_equal %w|27|, changesets.collect(&:revision)
166 119:8661b858af72 Chris
    end
167
168
    def test_copied_files
169
      @repository.fetch_changesets
170
      @repository.reload
171
172
      cs1 = @repository.changesets.find_by_revision('13')
173
      assert_not_nil cs1
174
      c1  = cs1.changes.sort_by(&:path)
175
      assert_equal 2, c1.size
176
177
      assert_equal 'A', c1[0].action
178
      assert_equal '/sql_escape/percent%dir/percentfile1.txt',  c1[0].path
179
      assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
180 441:cbce1fd3b1b7 Chris
      assert_equal '3a330eb32958', c1[0].from_revision
181 119:8661b858af72 Chris
182
      assert_equal 'A', c1[1].action
183
      assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
184
      assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
185
186
      cs2 = @repository.changesets.find_by_revision('15')
187
      c2  = cs2.changes
188
      assert_equal 1, c2.size
189
190
      assert_equal 'A', c2[0].action
191
      assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
192
      assert_equal '/README', c2[0].from_path
193 441:cbce1fd3b1b7 Chris
      assert_equal '933ca60293d7', c2[0].from_revision
194
195
      cs3 = @repository.changesets.find_by_revision('19')
196
      c3  = cs3.changes
197
      assert_equal 1, c3.size
198
      assert_equal 'A', c3[0].action
199
      assert_equal "/latin-1-dir/test-#{@char_1}-1.txt",  c3[0].path
200
      assert_equal "/latin-1-dir/test-#{@char_1}.txt",    c3[0].from_path
201
      assert_equal '5d9891a1b425', c3[0].from_revision
202 119:8661b858af72 Chris
    end
203
204
    def test_find_changeset_by_name
205
      @repository.fetch_changesets
206
      @repository.reload
207
      %w|2 400bb8672109 400|.each do |r|
208
        assert_equal '2', @repository.find_changeset_by_name(r).revision
209
      end
210
    end
211
212
    def test_find_changeset_by_invalid_name
213
      @repository.fetch_changesets
214
      @repository.reload
215
      assert_nil @repository.find_changeset_by_name('100000')
216
    end
217
218
    def test_identifier
219
      @repository.fetch_changesets
220
      @repository.reload
221
      c = @repository.changesets.find_by_revision('2')
222
      assert_equal c.scmid, c.identifier
223
    end
224
225
    def test_format_identifier
226
      @repository.fetch_changesets
227
      @repository.reload
228
      c = @repository.changesets.find_by_revision('2')
229
      assert_equal '2:400bb8672109', c.format_identifier
230
    end
231
232
    def test_find_changeset_by_empty_name
233
      @repository.fetch_changesets
234
      @repository.reload
235
      ['', ' ', nil].each do |r|
236
        assert_nil @repository.find_changeset_by_name(r)
237
      end
238
    end
239
240
    def test_activities
241
      c = Changeset.new(:repository   => @repository,
242
                        :committed_on => Time.now,
243
                        :revision     => '123',
244
                        :scmid        => 'abc400bb8672',
245
                        :comments     => 'test')
246
      assert c.event_title.include?('123:abc400bb8672:')
247
      assert_equal 'abc400bb8672', c.event_url[:rev]
248
    end
249 245:051f544170fe Chris
250 441:cbce1fd3b1b7 Chris
    def test_previous
251 245:051f544170fe Chris
      @repository.fetch_changesets
252
      @repository.reload
253 441:cbce1fd3b1b7 Chris
      %w|28 3ae45e2d177d 3ae45|.each do |r1|
254
        changeset = @repository.find_changeset_by_name(r1)
255
        %w|27 7bbf4c738e71 7bbf|.each do |r2|
256
          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
257
        end
258
      end
259 245:051f544170fe Chris
    end
260
261 441:cbce1fd3b1b7 Chris
    def test_previous_nil
262 245:051f544170fe Chris
      @repository.fetch_changesets
263
      @repository.reload
264 441:cbce1fd3b1b7 Chris
      %w|0 0885933ad4f6 0885|.each do |r1|
265
        changeset = @repository.find_changeset_by_name(r1)
266
        assert_nil changeset.previous
267
      end
268 245:051f544170fe Chris
    end
269
270 441:cbce1fd3b1b7 Chris
    def test_next
271 245:051f544170fe Chris
      @repository.fetch_changesets
272
      @repository.reload
273 441:cbce1fd3b1b7 Chris
      %w|27 7bbf4c738e71 7bbf|.each do |r2|
274
        changeset = @repository.find_changeset_by_name(r2)
275
        %w|28 3ae45e2d177d 3ae45|.each do |r1|
276
        assert_equal @repository.find_changeset_by_name(r1), changeset.next
277
        end
278
      end
279
    end
280 245:051f544170fe Chris
281 441:cbce1fd3b1b7 Chris
    def test_next_nil
282
      @repository.fetch_changesets
283
      @repository.reload
284
      %w|28 3ae45e2d177d 3ae45|.each do |r1|
285
        changeset = @repository.find_changeset_by_name(r1)
286
        assert_nil changeset.next
287
      end
288 245:051f544170fe Chris
    end
289 0:513646585e45 Chris
  else
290
    puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
291
    def test_fake; assert true end
292
  end
293
end