subversion 1.6.6-x86-mswin32-60 → 1.6.11-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. data/licenses/apr-util/NOTICE +1 -1
  2. data/licenses/apr/NOTICE +1 -1
  3. data/licenses/zlib/README +37 -48
  4. data/readme.txt +20 -0
  5. data/{ruby → subversion}/ext/svn/ext/client.dll +0 -0
  6. data/subversion/ext/svn/ext/core.dll +0 -0
  7. data/{ruby → subversion}/ext/svn/ext/delta.dll +0 -0
  8. data/{ruby → subversion}/ext/svn/ext/fs.dll +0 -0
  9. data/{ruby → subversion}/ext/svn/ext/intl3_svn.dll +0 -0
  10. data/{ruby → subversion}/ext/svn/ext/libapr-1.dll +0 -0
  11. data/subversion/ext/svn/ext/libaprutil-1.dll +0 -0
  12. data/{ruby → subversion}/ext/svn/ext/libdb44.dll +0 -0
  13. data/subversion/ext/svn/ext/libsasl.dll +0 -0
  14. data/subversion/ext/svn/ext/libsvn_client-1.dll +0 -0
  15. data/{ruby → subversion}/ext/svn/ext/libsvn_delta-1.dll +0 -0
  16. data/{ruby → subversion}/ext/svn/ext/libsvn_diff-1.dll +0 -0
  17. data/subversion/ext/svn/ext/libsvn_fs-1.dll +0 -0
  18. data/subversion/ext/svn/ext/libsvn_ra-1.dll +0 -0
  19. data/{ruby → subversion}/ext/svn/ext/libsvn_repos-1.dll +0 -0
  20. data/{ruby → subversion}/ext/svn/ext/libsvn_subr-1.dll +0 -0
  21. data/{ruby → subversion}/ext/svn/ext/libsvn_swig_ruby-1.dll +0 -0
  22. data/subversion/ext/svn/ext/libsvn_wc-1.dll +0 -0
  23. data/{ruby → subversion}/ext/svn/ext/ra.dll +0 -0
  24. data/{ruby → subversion}/ext/svn/ext/repos.dll +0 -0
  25. data/{ruby → subversion}/ext/svn/ext/wc.dll +0 -0
  26. data/{ruby → subversion}/lib/svn/client.rb +0 -0
  27. data/{ruby → subversion}/lib/svn/core.rb +0 -0
  28. data/{ruby → subversion}/lib/svn/delta.rb +2 -2
  29. data/{ruby → subversion}/lib/svn/error.rb +0 -0
  30. data/{ruby → subversion}/lib/svn/fs.rb +0 -0
  31. data/{ruby → subversion}/lib/svn/info.rb +0 -0
  32. data/{ruby → subversion}/lib/svn/ra.rb +0 -0
  33. data/{ruby → subversion}/lib/svn/repos.rb +0 -0
  34. data/{ruby → subversion}/lib/svn/util.rb +0 -0
  35. data/{ruby → subversion}/lib/svn/wc.rb +0 -0
  36. data/subversion/test/greek_tree.rb +63 -0
  37. data/subversion/test/my-assertions.rb +48 -0
  38. data/subversion/test/run-test.rb +35 -0
  39. data/subversion/test/test-unit-ext.rb +4 -0
  40. data/subversion/test/test-unit-ext/always-show-result.rb +28 -0
  41. data/subversion/test/test-unit-ext/backtrace-filter.rb +17 -0
  42. data/subversion/test/test-unit-ext/long-display-for-emacs.rb +25 -0
  43. data/subversion/test/test-unit-ext/priority.rb +176 -0
  44. data/subversion/test/test_client.rb +2457 -0
  45. data/subversion/test/test_core.rb +849 -0
  46. data/subversion/test/test_delta.rb +497 -0
  47. data/subversion/test/test_error.rb +16 -0
  48. data/subversion/test/test_fs.rb +519 -0
  49. data/subversion/test/test_info.rb +331 -0
  50. data/subversion/test/test_ra.rb +436 -0
  51. data/subversion/test/test_repos.rb +872 -0
  52. data/subversion/test/test_util.rb +18 -0
  53. data/subversion/test/test_wc.rb +1063 -0
  54. data/subversion/test/util.rb +292 -0
  55. data/subversion/test/windows_util.rb +263 -0
  56. metadata +71 -39
  57. data/ruby/ext/svn/ext/core.dll +0 -0
  58. data/ruby/ext/svn/ext/libaprutil-1.dll +0 -0
  59. data/ruby/ext/svn/ext/libsvn_client-1.dll +0 -0
  60. data/ruby/ext/svn/ext/libsvn_fs-1.dll +0 -0
  61. data/ruby/ext/svn/ext/libsvn_ra-1.dll +0 -0
  62. data/ruby/ext/svn/ext/libsvn_wc-1.dll +0 -0
@@ -0,0 +1,849 @@
1
+ require "my-assertions"
2
+ require "util"
3
+
4
+ require "stringio"
5
+
6
+ require "svn/core"
7
+ require "svn/repos"
8
+
9
+ class SvnCoreTest < Test::Unit::TestCase
10
+ include SvnTestUtil
11
+
12
+ def setup
13
+ setup_default_variables
14
+ @config_file = File.join(@config_path, Svn::Core::CONFIG_CATEGORY_CONFIG)
15
+ @servers_file = File.join(@config_path, Svn::Core::CONFIG_CATEGORY_SERVERS)
16
+ setup_repository(@repos_path)
17
+ setup_config
18
+ setup_tmp
19
+ end
20
+
21
+ def teardown
22
+ teardown_repository(@repos_path)
23
+ teardown_config
24
+ teardown_tmp
25
+ end
26
+
27
+ def test_binary_mime_type?
28
+ assert(Svn::Core.binary_mime_type?("image/png"))
29
+ assert(!Svn::Core.binary_mime_type?("text/plain"))
30
+ end
31
+
32
+ def test_time
33
+ now = Time.now.gmtime
34
+ str = now.strftime("%Y-%m-%dT%H:%M:%S.") + "#{now.usec}Z"
35
+
36
+ assert_equal(now, Time.from_svn_format(str))
37
+
38
+ apr_time = now.to_i * 1000000 + now.usec
39
+ assert_equal(apr_time, now.to_apr_time)
40
+ end
41
+
42
+ def test_not_new_auth_provider_object
43
+ assert_raise(NoMethodError) do
44
+ Svn::Core::AuthProviderObject.new
45
+ end
46
+ end
47
+
48
+ def test_version_to_x
49
+ major = 1
50
+ minor = 2
51
+ patch = 3
52
+ tag = "-dev"
53
+ ver = Svn::Core::Version.new(major, minor, patch, tag)
54
+
55
+ assert_equal("#{major}.#{minor}.#{patch}#{tag}", ver.to_s)
56
+ assert_equal([major, minor, patch, tag], ver.to_a)
57
+ end
58
+
59
+ def test_version_valid?
60
+ assert_true(Svn::Core::Version.new(1, 2, 3, "-devel").valid?)
61
+ assert_true(Svn::Core::Version.new(nil, nil, nil, "").valid?)
62
+ assert_true(Svn::Core::Version.new.valid?)
63
+ end
64
+
65
+ def test_version_equal
66
+ major = 1
67
+ minor = 2
68
+ patch = 3
69
+ tag = ""
70
+ ver1 = Svn::Core::Version.new(major, minor, patch, tag)
71
+ ver2 = Svn::Core::Version.new(major, minor, patch, tag)
72
+ ver3 = Svn::Core::Version.new
73
+ assert_equal(ver1, ver2)
74
+ assert_not_equal(ver1, ver3)
75
+ end
76
+
77
+ def test_version_compatible?
78
+ major = 1
79
+ minor = 2
80
+ patch = 3
81
+
82
+ my_tag = "-devel"
83
+ lib_tag = "-devel"
84
+ ver1 = Svn::Core::Version.new(major, minor, patch, my_tag)
85
+ ver2 = Svn::Core::Version.new(major, minor, patch, lib_tag)
86
+ ver3 = Svn::Core::Version.new(major, minor, patch, lib_tag + "x")
87
+ assert_true(ver1.compatible?(ver2))
88
+ assert_false(ver1.compatible?(ver3))
89
+
90
+ my_tag = "-devel"
91
+ lib_tag = ""
92
+ ver1 = Svn::Core::Version.new(major, minor, patch, my_tag)
93
+ ver2 = Svn::Core::Version.new(major, minor, patch, lib_tag)
94
+ ver3 = Svn::Core::Version.new(major, minor, patch - 1, lib_tag)
95
+ assert_false(ver1.compatible?(ver2))
96
+ assert_true(ver1.compatible?(ver3))
97
+
98
+ tag = ""
99
+ ver1 = Svn::Core::Version.new(major, minor, patch, tag)
100
+ ver2 = Svn::Core::Version.new(major, minor, patch, tag)
101
+ ver3 = Svn::Core::Version.new(major, minor, patch - 1, tag)
102
+ ver4 = Svn::Core::Version.new(major, minor + 1, patch, tag)
103
+ ver5 = Svn::Core::Version.new(major, minor - 1, patch, tag)
104
+ assert_true(ver1.compatible?(ver2))
105
+ assert_true(ver1.compatible?(ver3))
106
+ assert_true(ver1.compatible?(ver4))
107
+ assert_false(ver1.compatible?(ver5))
108
+ end
109
+
110
+ def test_version
111
+ vers = [Svn::Core::VER_MAJOR, Svn::Core::VER_MINOR, Svn::Core::VER_PATCH]
112
+ ver_num = vers.collect {|ver| ver.to_s}.join(".")
113
+ assert_equal(ver_num, Svn::Core::VER_NUM)
114
+ assert_equal("#{ver_num}#{Svn::Core::VER_NUMTAG}", Svn::Core::VER_NUMBER)
115
+ assert_equal("#{ver_num}#{Svn::Core::VER_TAG}", Svn::Core::VERSION)
116
+ end
117
+
118
+ def test_auth_parameter
119
+ key = "key"
120
+ value = "value"
121
+ auth = Svn::Core::AuthBaton.new
122
+ assert_nil(auth[key])
123
+ auth[key] = value
124
+ assert_equal(value, auth[key])
125
+
126
+ assert_raise(TypeError) do
127
+ auth[key] = 1
128
+ end
129
+ end
130
+
131
+ def test_pool_GC
132
+ gc_disable do
133
+ made_number_of_pool = 100
134
+ pools = []
135
+
136
+ gc
137
+ before_number_of_pools = Svn::Core::Pool.number_of_pools
138
+ made_number_of_pool.times do
139
+ pools << used_pool
140
+ end
141
+ gc
142
+ current_number_of_pools = Svn::Core::Pool.number_of_pools
143
+ created_number_of_pools = current_number_of_pools - before_number_of_pools
144
+ assert_operator(made_number_of_pool, :<=, current_number_of_pools)
145
+
146
+ gc
147
+ pools.clear
148
+ before_number_of_pools = Svn::Core::Pool.number_of_pools
149
+ gc
150
+ current_number_of_pools = Svn::Core::Pool.number_of_pools
151
+ recycled_number_of_pools =
152
+ before_number_of_pools - current_number_of_pools
153
+ assert_operator(made_number_of_pool * 0.8, :<=, recycled_number_of_pools)
154
+ end
155
+ end
156
+
157
+ def test_config
158
+ assert_equal([
159
+ Svn::Core::CONFIG_CATEGORY_CONFIG,
160
+ Svn::Core::CONFIG_CATEGORY_SERVERS,
161
+ ].sort,
162
+ Svn::Core::Config.config(@config_path).keys.sort)
163
+
164
+ config = Svn::Core::Config.read(@config_file)
165
+ section = Svn::Core::CONFIG_SECTION_HELPERS
166
+ option = Svn::Core::CONFIG_OPTION_DIFF_CMD
167
+ value = "diff"
168
+
169
+ assert_nil(config.get(section, option))
170
+ config.set(section, option, value)
171
+ assert_equal(value, config.get(section, option))
172
+ end
173
+
174
+ def test_config_bool
175
+ config = Svn::Core::Config.read(@config_file)
176
+ section = Svn::Core::CONFIG_SECTION_MISCELLANY
177
+ option = Svn::Core::CONFIG_OPTION_ENABLE_AUTO_PROPS
178
+
179
+ assert(config.get_bool(section, option, true))
180
+ config.set_bool(section, option, false)
181
+ assert(!config.get_bool(section, option, true))
182
+ end
183
+
184
+ def test_config_each
185
+ config = Svn::Core::Config.read(@config_file)
186
+ section = Svn::Core::CONFIG_SECTION_HELPERS
187
+ options = {
188
+ Svn::Core::CONFIG_OPTION_DIFF_CMD => "diff",
189
+ Svn::Core::CONFIG_OPTION_DIFF3_CMD => "diff3",
190
+ }
191
+
192
+ infos = {}
193
+ config.each_option(section) do |name, value|
194
+ infos[name] = value
195
+ true
196
+ end
197
+ assert_equal({}, infos)
198
+
199
+ section_names = []
200
+ config.each_section do |name|
201
+ section_names << name
202
+ true
203
+ end
204
+ assert_equal([], section_names)
205
+
206
+ options.each do |option, value|
207
+ config.set(section, option, value)
208
+ end
209
+
210
+ config.each_option(section) do |name, value|
211
+ infos[name] = value
212
+ true
213
+ end
214
+ assert_equal(options, infos)
215
+
216
+ config.each_section do |name|
217
+ section_names << name
218
+ true
219
+ end
220
+ assert_equal([section], section_names)
221
+
222
+ infos = options.collect {|key, value| [section, key, value]}
223
+ config_infos = []
224
+ config.each do |section, name, value|
225
+ config_infos << [section, name, value]
226
+ end
227
+ assert_equal(infos.sort, config_infos.sort)
228
+ assert_equal(infos.sort, config.collect {|args| args}.sort)
229
+ end
230
+
231
+ def test_config_find_group
232
+ config = Svn::Core::Config.read(@config_file)
233
+ section = Svn::Core::CONFIG_SECTION_HELPERS
234
+ option = Svn::Core::CONFIG_OPTION_DIFF_CMD
235
+ value = "diff"
236
+
237
+ assert_nil(config.find_group(value, section))
238
+ config.set(section, option, value)
239
+ assert_equal(option, config.find_group(value, section))
240
+ end
241
+
242
+ def test_config_get_server_setting
243
+ group = "group1"
244
+ host_prop_name = "http-proxy-host"
245
+ host_prop_value = "*.example.com"
246
+ default_host_value = "example.net"
247
+ port_prop_name = "http-proxy-port"
248
+ port_prop_value = 8080
249
+ default_port_value = 1818
250
+
251
+ File.open(@servers_file, "w") do |f|
252
+ f.puts("[#{group}]")
253
+ end
254
+
255
+ config = Svn::Core::Config.read(@servers_file)
256
+ assert_equal(default_host_value,
257
+ config.get_server_setting(group,
258
+ host_prop_name,
259
+ default_host_value))
260
+ assert_equal(default_port_value,
261
+ config.get_server_setting_int(group,
262
+ port_prop_name,
263
+ default_port_value))
264
+
265
+ File.open(@servers_file, "w") do |f|
266
+ f.puts("[#{group}]")
267
+ f.puts("#{host_prop_name} = #{host_prop_value}")
268
+ f.puts("#{port_prop_name} = #{port_prop_value}")
269
+ end
270
+
271
+ config = Svn::Core::Config.read(@servers_file)
272
+ assert_equal(host_prop_value,
273
+ config.get_server_setting(group,
274
+ host_prop_name,
275
+ default_host_value))
276
+ assert_equal(port_prop_value,
277
+ config.get_server_setting_int(group,
278
+ port_prop_name,
279
+ default_port_value))
280
+ end
281
+
282
+ def test_config_auth_data
283
+ cred_kind = Svn::Core::AUTH_CRED_SIMPLE
284
+ realm_string = "sample"
285
+ assert_nil(Svn::Core::Config.read_auth_data(cred_kind,
286
+ realm_string,
287
+ @config_path))
288
+ Svn::Core::Config.write_auth_data({},
289
+ cred_kind,
290
+ realm_string,
291
+ @config_path)
292
+ assert_equal({Svn::Core::CONFIG_REALMSTRING_KEY => realm_string},
293
+ Svn::Core::Config.read_auth_data(cred_kind,
294
+ realm_string,
295
+ @config_path))
296
+ end
297
+
298
+ def test_config_to_s
299
+ config = Svn::Core::Config.read(@config_file)
300
+ section = Svn::Core::CONFIG_SECTION_HELPERS
301
+ options = {
302
+ Svn::Core::CONFIG_OPTION_DIFF_CMD => "diff",
303
+ Svn::Core::CONFIG_OPTION_DIFF3_CMD => "diff3",
304
+ }
305
+
306
+ options.each do |option, value|
307
+ config[section, option] = value
308
+ end
309
+
310
+ temp_config = Tempfile.new("svn-test-config")
311
+ temp_config.open
312
+ temp_config.print(config.to_s)
313
+ temp_config.close
314
+
315
+ parsed_config = Svn::Core::Config.read(temp_config.path)
316
+ assert_equal({section => options}, parsed_config.to_hash)
317
+ end
318
+
319
+ def test_config_to_hash
320
+ config = Svn::Core::Config.read(@config_file)
321
+ section = Svn::Core::CONFIG_SECTION_HELPERS
322
+ options = {
323
+ Svn::Core::CONFIG_OPTION_DIFF_CMD => "diff",
324
+ Svn::Core::CONFIG_OPTION_DIFF3_CMD => "diff3",
325
+ }
326
+
327
+ assert_equal({}, config.to_hash)
328
+
329
+ options.each do |option, value|
330
+ config[section, option] = value
331
+ end
332
+
333
+ assert_equal({section => options}, config.to_hash)
334
+ end
335
+
336
+ def test_diff_version
337
+ assert_equal(Svn::Core.subr_version, Svn::Core::Diff.version)
338
+ end
339
+
340
+ def test_diff_unified
341
+ original = Tempfile.new("original")
342
+ modified = Tempfile.new("modified")
343
+ original_src = <<-EOS
344
+ a
345
+ b
346
+ c
347
+ EOS
348
+ modified_src = <<-EOS
349
+ a
350
+
351
+ c
352
+ EOS
353
+ original_header = "(orig)"
354
+ modified_header = "(mod)"
355
+
356
+ original.open
357
+ original.print(original_src)
358
+ original.close
359
+ modified.open
360
+ modified.print(modified_src)
361
+ modified.close
362
+
363
+ expected = <<-EOD
364
+ --- #{original_header}
365
+ +++ #{modified_header}
366
+ @@ -1,3 +1,3 @@
367
+ - a
368
+ -b
369
+ - c
370
+ +a
371
+ +
372
+ + c
373
+ EOD
374
+ diff = Svn::Core::Diff.file_diff(original.path, modified.path)
375
+ assert_equal(normalize_line_break(expected),
376
+ diff.unified(original_header, modified_header))
377
+
378
+ options = Svn::Core::DiffFileOptions.parse("--ignore-space-change")
379
+ expected = <<-EOD
380
+ --- #{original_header}
381
+ +++ #{modified_header}
382
+ @@ -1,3 +1,3 @@
383
+ - a
384
+ -b
385
+ +a
386
+ +
387
+ c
388
+ EOD
389
+ diff = Svn::Core::Diff.file_diff(original.path, modified.path, options)
390
+ assert_equal(normalize_line_break(expected),
391
+ diff.unified(original_header, modified_header))
392
+
393
+ options = Svn::Core::DiffFileOptions.parse("--ignore-all-space")
394
+ expected = <<-EOD
395
+ --- #{original_header}
396
+ +++ #{modified_header}
397
+ @@ -1,3 +1,3 @@
398
+ a
399
+ -b
400
+ +
401
+ c
402
+ EOD
403
+ diff = Svn::Core::Diff.file_diff(original.path, modified.path, options)
404
+ assert_equal(normalize_line_break(expected),
405
+ diff.unified(original_header, modified_header))
406
+ end
407
+
408
+ def test_diff_merge
409
+ original = Tempfile.new("original")
410
+ modified = Tempfile.new("modified")
411
+ latest = Tempfile.new("latest")
412
+ original_src = <<-EOS
413
+ a
414
+ b
415
+ c
416
+ d
417
+ e
418
+ EOS
419
+ modified_src = <<-EOS
420
+ a
421
+ b
422
+
423
+ d
424
+ e
425
+ EOS
426
+ latest_src = <<-EOS
427
+
428
+ b
429
+ c
430
+ d
431
+ e
432
+ EOS
433
+
434
+ original.open
435
+ original.print(original_src)
436
+ original.close
437
+ modified.open
438
+ modified.print(modified_src)
439
+ modified.close
440
+ latest.open
441
+ latest.print(latest_src)
442
+ latest.close
443
+
444
+ expected = <<-EOD
445
+
446
+ b
447
+
448
+ d
449
+ e
450
+ EOD
451
+ diff = Svn::Core::Diff.file_diff3(original.path,
452
+ modified.path,
453
+ latest.path)
454
+ assert_equal(normalize_line_break(expected), diff.merge)
455
+
456
+ options = Svn::Core::DiffFileOptions.parse("--ignore-space-change")
457
+ expected = <<-EOD
458
+
459
+ b
460
+
461
+ d
462
+ e
463
+ EOD
464
+ diff = Svn::Core::Diff.file_diff3(original.path,
465
+ modified.path,
466
+ latest.path,
467
+ options)
468
+ assert_equal(normalize_line_break(expected), diff.merge)
469
+
470
+ options = Svn::Core::DiffFileOptions.parse("--ignore-all-space")
471
+ expected = <<-EOD
472
+
473
+ b
474
+
475
+ d
476
+ e
477
+ EOD
478
+ diff = Svn::Core::Diff.file_diff3(original.path,
479
+ modified.path,
480
+ latest.path,
481
+ options)
482
+ assert_equal(normalize_line_break(expected), diff.merge)
483
+ end
484
+
485
+ def test_diff_file_options
486
+ args = ["--ignore-all-space"]
487
+ options = Svn::Core::DiffFileOptions.parse(*args)
488
+ assert_equal(Svn::Core::DIFF_FILE_IGNORE_SPACE_ALL,
489
+ options.ignore_space)
490
+ assert_false(options.ignore_eol_style)
491
+
492
+ args = ["--ignore-space-change"]
493
+ options = Svn::Core::DiffFileOptions.parse(*args)
494
+ assert_equal(Svn::Core::DIFF_FILE_IGNORE_SPACE_CHANGE,
495
+ options.ignore_space)
496
+ assert_false(options.ignore_eol_style)
497
+
498
+ args = ["--ignore-space-change", "--ignore-eol-style"]
499
+ options = Svn::Core::DiffFileOptions.parse(*args)
500
+ assert_equal(Svn::Core::DIFF_FILE_IGNORE_SPACE_CHANGE,
501
+ options.ignore_space)
502
+ assert_true(options.ignore_eol_style)
503
+
504
+ options = Svn::Core::DiffFileOptions.parse(args)
505
+ assert_equal(Svn::Core::DIFF_FILE_IGNORE_SPACE_CHANGE,
506
+ options.ignore_space)
507
+ assert_true(options.ignore_eol_style)
508
+ end
509
+
510
+ def test_create_commit_info
511
+ info = Svn::Core::CommitInfo.new
512
+ now = Time.now.gmtime
513
+ date_str = now.strftime("%Y-%m-%dT%H:%M:%S")
514
+ date_str << ".#{now.usec}Z"
515
+ info.date = date_str
516
+ assert_equal(now, info.date)
517
+ end
518
+
519
+ def test_svn_prop
520
+ assert(Svn::Core::Property.svn_prop?("svn:mime-type"))
521
+ assert(!Svn::Core::Property.svn_prop?("my-mime-type"))
522
+
523
+ assert(Svn::Core::Property.has_svn_prop?({"svn:mime-type" => "text/plain"}))
524
+ assert(!Svn::Core::Property.has_svn_prop?({"my-mime-type" => "text/plain"}))
525
+
526
+ assert(Svn::Core::Property.have_svn_prop?({"svn:mime-type" => "text/plain"}))
527
+ assert(!Svn::Core::Property.have_svn_prop?({"my-mime-type" => "text/plain"}))
528
+ end
529
+
530
+ def test_valid_prop_name
531
+ assert(Svn::Core::Property.valid_name?("svn:mime-type"))
532
+ assert(Svn::Core::Property.valid_name?("my-mime-type"))
533
+ assert(!Svn::Core::Property.valid_name?("プロパティ"))
534
+ end
535
+
536
+ def test_depth_conversion
537
+ %w(unknown empty files immediates infinity).each do |depth|
538
+ depth_value = Svn::Core.const_get("DEPTH_#{depth.upcase}")
539
+ assert_equal(depth_value, Svn::Core::Depth.from_string(depth))
540
+ assert_equal(depth, Svn::Core::Depth.to_string(depth_value))
541
+ end
542
+ end
543
+
544
+ def test_depth_input
545
+ depth_infinity = Svn::Core::DEPTH_INFINITY
546
+ assert_equal("infinity", Svn::Core::Depth.to_string(depth_infinity))
547
+ assert_equal("infinity", Svn::Core::Depth.to_string("infinity"))
548
+ assert_equal("infinity", Svn::Core::Depth.to_string(:infinity))
549
+ assert_equal("unknown", Svn::Core::Depth.to_string("XXX"))
550
+ assert_raises(ArgumentError) do
551
+ Svn::Core::Depth.to_string([])
552
+ end
553
+ end
554
+
555
+ def test_stream_copy
556
+ source = "content"
557
+ original = StringIO.new(source)
558
+ copied = StringIO.new("")
559
+ original_stream = Svn::Core::Stream.new(original)
560
+ copied_stream = Svn::Core::Stream.new(copied)
561
+
562
+
563
+ original_stream.copy(copied_stream)
564
+
565
+ copied.rewind
566
+ assert_equal("", original.read)
567
+ assert_equal(source, copied.read)
568
+
569
+
570
+ original.rewind
571
+ copied.string = ""
572
+ assert_raises(Svn::Error::Cancelled) do
573
+ original_stream.copy(copied_stream) do
574
+ raise Svn::Error::Cancelled
575
+ end
576
+ end
577
+
578
+ copied.rewind
579
+ assert_equal(source, original.read)
580
+ assert_equal("", copied.read)
581
+ end
582
+
583
+ def test_mime_type_parse
584
+ type_map = {
585
+ "html" => "text/html",
586
+ "htm" => "text/html",
587
+ "png" => "image/png",
588
+ }
589
+ mime_types_source = <<-EOM
590
+ text/html html htm
591
+ application/octet-stream
592
+
593
+ image/png png
594
+ EOM
595
+
596
+ mime_types = Tempfile.new("svn-ruby-mime-type")
597
+ mime_types.puts(mime_types_source)
598
+ mime_types.close
599
+
600
+ assert_equal(type_map, Svn::Core::MimeType.parse_file(mime_types.path))
601
+ assert_equal(type_map, Svn::Core::MimeType.parse(mime_types_source))
602
+ end
603
+
604
+ def test_mime_type_detect
605
+ empty_file = Tempfile.new("svn-ruby-mime-type")
606
+ assert_equal(nil, Svn::Core::MimeType.detect(empty_file.path))
607
+
608
+ binary_file = Tempfile.new("svn-ruby-mime-type")
609
+ binary_file.print("\0\1\2")
610
+ binary_file.close
611
+ assert_equal("application/octet-stream",
612
+ Svn::Core::MimeType.detect(binary_file.path))
613
+
614
+ text_file = Tempfile.new("svn-ruby-mime-type")
615
+ text_file.print("abcde")
616
+ text_file.close
617
+ assert_equal(nil, Svn::Core::MimeType.detect(text_file.path))
618
+ end
619
+
620
+ def test_mime_type_detect_with_type_map
621
+ type_map = {
622
+ "html" => "text/html",
623
+ "htm" => "text/html",
624
+ "png" => "image/png",
625
+ }
626
+
627
+ nonexistent_html_file = File.join(@tmp_path, "nonexistent.html")
628
+ assert_raises(Svn::Error::BadFilename) do
629
+ Svn::Core::MimeType.detect(nonexistent_html_file)
630
+ end
631
+ assert_equal("text/html",
632
+ Svn::Core::MimeType.detect(nonexistent_html_file, type_map))
633
+
634
+ empty_html_file = File.join(@tmp_path, "empty.html")
635
+ FileUtils.touch(empty_html_file)
636
+ assert_equal(nil, Svn::Core::MimeType.detect(empty_html_file))
637
+ assert_equal("text/html",
638
+ Svn::Core::MimeType.detect(empty_html_file, type_map))
639
+
640
+ empty_htm_file = File.join(@tmp_path, "empty.htm")
641
+ FileUtils.touch(empty_htm_file)
642
+ assert_equal(nil, Svn::Core::MimeType.detect(empty_htm_file))
643
+ assert_equal("text/html",
644
+ Svn::Core::MimeType.detect(empty_htm_file, type_map))
645
+
646
+
647
+ dummy_png_file = File.join(@tmp_path, "dummy.png")
648
+ File.open(dummy_png_file, "wb") do |png|
649
+ png.print("\211PNG\r\n\032\n")
650
+ end
651
+ assert_equal(nil, Svn::Core::MimeType.detect(dummy_png_file))
652
+ assert_equal("image/png",
653
+ Svn::Core::MimeType.detect(dummy_png_file, type_map))
654
+
655
+ empty_png_file = File.join(@tmp_path, "empty.png")
656
+ FileUtils.touch(empty_png_file)
657
+ assert_equal(nil, Svn::Core::MimeType.detect(empty_png_file))
658
+ assert_equal("image/png",
659
+ Svn::Core::MimeType.detect(empty_png_file, type_map))
660
+
661
+ invalid_png_file = File.join(@tmp_path, "invalid.png")
662
+ File.open(invalid_png_file, "w") do |png|
663
+ png.puts("text")
664
+ end
665
+ assert_equal(nil, Svn::Core::MimeType.detect(invalid_png_file))
666
+ assert_equal("image/png",
667
+ Svn::Core::MimeType.detect(invalid_png_file, type_map))
668
+ end
669
+
670
+ def test_prop_categorize
671
+ name = "svn:mime-type"
672
+ value = "text/plain"
673
+ entry_name = "svn:entry:XXX"
674
+ entry_value = "XXX"
675
+
676
+ props = [Svn::Core::Prop.new(name, value),
677
+ Svn::Core::Prop.new(entry_name, entry_value)]
678
+ assert_equal([
679
+ [Svn::Core::Prop.new(entry_name, entry_value)],
680
+ [],
681
+ [Svn::Core::Prop.new(name, value)],
682
+ ],
683
+ Svn::Core::Property.categorize(props))
684
+
685
+ props = {name => value, entry_name => entry_value}
686
+ assert_equal([
687
+ {entry_name => entry_value },
688
+ {},
689
+ {name => value},
690
+ ],
691
+ Svn::Core::Property.categorize2(props))
692
+ end
693
+
694
+ def test_mergeinfo_parse
695
+ assert_equal({}, Svn::Core::MergeInfo.parse(""))
696
+
697
+ input = "/trunk: 5,7-9,10,11,13,14"
698
+ result = Svn::Core::MergeInfo.parse(input)
699
+ assert_equal(["/trunk"], result.keys)
700
+ assert_equal([[4, 5, true], [6, 11, true], [12, 14, true]],
701
+ result["/trunk"].collect {|range| range.to_a})
702
+
703
+ input = "/trunk: 5*,7-9,10,11,13,14"
704
+ result = Svn::Core::MergeInfo.parse(input)
705
+ assert_equal(["/trunk"], result.keys)
706
+ assert_equal([[4, 5, false], [6, 11, true], [12, 14, true]],
707
+ result["/trunk"].collect {|range| range.to_a})
708
+ end
709
+
710
+ def test_mergeinfo_diff
711
+ input1 = "/trunk: 5,7-9,10,11,13,14"
712
+ input2 = "/trunk: 5,6,7-9,10,11"
713
+
714
+ info1 = Svn::Core::MergeInfo.parse(input1)
715
+ info2 = Svn::Core::MergeInfo.parse(input2)
716
+ result = info1.diff(info2)
717
+ deleted, added = result
718
+ assert_equal(["/trunk"], deleted.keys)
719
+ assert_equal(["/trunk"], added.keys)
720
+ assert_equal([[12, 14, true]],
721
+ deleted["/trunk"].collect {|range| range.to_a})
722
+ assert_equal([[5, 6, true]],
723
+ added["/trunk"].collect {|range| range.to_a})
724
+ end
725
+
726
+ def test_mergeinfo_merge
727
+ info = Svn::Core::MergeInfo.parse("/trunk: 5,7-9")
728
+ assert_equal(["/trunk"], info.keys)
729
+ assert_equal([[4, 5, true], [6, 9, true]],
730
+ info["/trunk"].collect {|range| range.to_a})
731
+
732
+ changes = Svn::Core::MergeInfo.parse("/trunk: 6-13")
733
+ merged = info.merge(changes)
734
+ assert_equal(["/trunk"], merged.keys)
735
+ assert_equal([[4, 13, true]],
736
+ merged["/trunk"].collect {|range| range.to_a})
737
+ end
738
+
739
+ def test_mergeinfo_remove
740
+ info = Svn::Core::MergeInfo.parse("/trunk: 5-13")
741
+ assert_equal(["/trunk"], info.keys)
742
+ assert_equal([[4, 13, true]],
743
+ info["/trunk"].collect {|range| range.to_a})
744
+
745
+ eraser = Svn::Core::MergeInfo.parse("/trunk: 7,9-11")
746
+ removed = info.remove(eraser)
747
+ assert_equal(["/trunk"], removed.keys)
748
+ assert_equal([[4, 6, true], [7, 8, true], [11, 13, true]],
749
+ removed["/trunk"].collect {|range| range.to_a})
750
+ end
751
+
752
+ def test_mergeinfo_to_s
753
+ info = Svn::Core::MergeInfo.parse("/trunk: 5,7,9-13")
754
+ assert_equal("/trunk:5,7,9-13", info.to_s)
755
+ assert_not_equal(info.to_s, info.inspect)
756
+
757
+ info = Svn::Core::MergeInfo.parse("/trunk: 5*,7,9-13")
758
+ assert_equal("/trunk:5*,7,9-13", info.to_s)
759
+ assert_not_equal(info.to_s, info.inspect)
760
+ end
761
+
762
+ def test_mergeinfo_sort
763
+ info = Svn::Core::MergeInfo.parse("/trunk: 5,7,9-13")
764
+
765
+ info["/trunk"] = info["/trunk"].reverse
766
+ assert_equal(["/trunk"], info.keys)
767
+ assert_equal([[13, 8, true], [7, 6, true], [5, 4, true]],
768
+ info["/trunk"].collect {|range| range.to_a})
769
+
770
+ sorted_info = info.sort
771
+ assert_equal(["/trunk"], sorted_info.keys)
772
+ assert_equal([[5, 4, true], [7, 6, true], [13, 8, true]],
773
+ sorted_info["/trunk"].collect {|range| range.to_a})
774
+ end
775
+
776
+ def test_range_list_diff
777
+ range_list1 = Svn::Core::RangeList.new([5, 5, true], [9, 13, true])
778
+ range_list2 = Svn::Core::RangeList.new([7, 11, true])
779
+
780
+ deleted, added = range_list1.diff(range_list2)
781
+ assert_equal([[7, 9, true]], added.collect {|range| range.to_a})
782
+ assert_equal([[5, 5, true], [11, 13, true]],
783
+ deleted.collect {|range| range.to_a})
784
+ end
785
+
786
+ def test_range_list_merge
787
+ range_list1 = Svn::Core::RangeList.new([5, 5, true],
788
+ [7, 7, true], [9, 13, true])
789
+ range_list2 = Svn::Core::RangeList.new([5, 9, true])
790
+
791
+ merged = range_list1.merge(range_list2)
792
+ assert_equal([[5, 13, true]], merged.collect {|range| range.to_a})
793
+ end
794
+
795
+ def test_range_list_remove
796
+ range_list1 = Svn::Core::RangeList.new([5, 5, true],
797
+ [7, 7, true], [9, 13, true])
798
+ range_list2 = Svn::Core::RangeList.new([5, 9, true])
799
+
800
+ removed = range_list1.remove(range_list2)
801
+ assert_equal([[9, 13, true]], removed.collect {|range| range.to_a})
802
+ end
803
+
804
+ def test_range_list_intersect
805
+ range_list1 = Svn::Core::RangeList.new([5, 9, true])
806
+ range_list2 = Svn::Core::RangeList.new([5, 5, true],
807
+ [7, 7, true], [9, 13, true])
808
+
809
+ intersected = range_list1.intersect(range_list2)
810
+ assert_equal([[5, 5, true], [7, 7, true]],
811
+ intersected.collect {|range| range.to_a})
812
+ end
813
+
814
+ def test_range_list_reverse
815
+ range_list = Svn::Core::RangeList.new([5, 5, true],
816
+ [7, 7, true], [9, 13, true])
817
+
818
+ reversed = range_list.reverse
819
+ assert_equal([[13, 9, true], [7, 7, true], [5, 5, true]],
820
+ reversed.collect {|range| range.to_a})
821
+ end
822
+
823
+ def test_range_list_to_s
824
+ range_list = Svn::Core::RangeList.new([5, 5, true],
825
+ [7, 7, true], [9, 13, true])
826
+ expectation = "5-6,7-8,10-13"
827
+ assert_equal(expectation, range_list.to_s)
828
+ assert_not_equal(expectation, range_list.inspect)
829
+ end
830
+
831
+ def test_mergerange_equality
832
+ mergerange1 = Svn::Core::MergeRange.new(1,2,true)
833
+ mergerange2 = Svn::Core::MergeRange.new(1,2,true)
834
+ mergerange3 = Svn::Core::MergeRange.new(1,2,false)
835
+ mergerange4 = Svn::Core::MergeRange.new(1,4,true)
836
+
837
+ assert_equal(mergerange1, mergerange2)
838
+ assert_not_equal(mergerange1, mergerange3)
839
+ assert_not_equal(mergerange1, mergerange4)
840
+ end
841
+
842
+ private
843
+ def used_pool
844
+ pool = Svn::Core::Pool.new
845
+ now = Time.now.gmtime
846
+ Svn::Core.time_to_human_cstring(now.to_apr_time, pool)
847
+ pool
848
+ end
849
+ end