libpath-ruby 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +61 -0
  3. data/examples/path_from_arg0.md +99 -0
  4. data/examples/path_from_arg0.rb +55 -0
  5. data/lib/libpath.rb +12 -0
  6. data/lib/libpath/constants.rb +42 -0
  7. data/lib/libpath/constants/unix.rb +146 -0
  8. data/lib/libpath/constants/windows.rb +147 -0
  9. data/lib/libpath/diagnostics.rb +6 -0
  10. data/lib/libpath/diagnostics/parameter_checking.rb +46 -0
  11. data/lib/libpath/exceptions.rb +7 -0
  12. data/lib/libpath/exceptions/libpath_base_exception.rb +77 -0
  13. data/lib/libpath/exceptions/malformed_name_exception.rb +85 -0
  14. data/lib/libpath/form.rb +42 -0
  15. data/lib/libpath/form/unix.rb +215 -0
  16. data/lib/libpath/form/windows.rb +358 -0
  17. data/lib/libpath/internal_/array.rb +96 -0
  18. data/lib/libpath/internal_/platform.rb +53 -0
  19. data/lib/libpath/internal_/string.rb +33 -0
  20. data/lib/libpath/internal_/unix/form.rb +160 -0
  21. data/lib/libpath/internal_/windows/drive.rb +84 -0
  22. data/lib/libpath/internal_/windows/form.rb +281 -0
  23. data/lib/libpath/libpath.rb +6 -0
  24. data/lib/libpath/path.rb +43 -0
  25. data/lib/libpath/path/unix.rb +170 -0
  26. data/lib/libpath/path/windows.rb +176 -0
  27. data/lib/libpath/util.rb +42 -0
  28. data/lib/libpath/util/unix.rb +414 -0
  29. data/lib/libpath/util/windows.rb +636 -0
  30. data/lib/libpath/version.rb +73 -0
  31. data/test/performance/benchmark_drive_letter.rb +31 -0
  32. data/test/performance/benchmark_gsub_string_or_regex.rb +45 -0
  33. data/test/performance/benchmark_rindex2.rb +109 -0
  34. data/test/performance/benchmark_split.rb +32 -0
  35. data/test/unit/compare/ts_all.rb +22 -0
  36. data/test/unit/equate/ts_all.rb +22 -0
  37. data/test/unit/equate/unix/ts_all.rb +22 -0
  38. data/test/unit/equate/windows/ts_all.rb +22 -0
  39. data/test/unit/exceptions/tc_libpath_base_exception.rb +27 -0
  40. data/test/unit/exceptions/tc_malformed_name_exception.rb +31 -0
  41. data/test/unit/exceptions/ts_all.rb +22 -0
  42. data/test/unit/form/tc_absolute_functions.rb +369 -0
  43. data/test/unit/form/ts_all.rb +22 -0
  44. data/test/unit/form/unix/tc_absolute_functions.rb +269 -0
  45. data/test/unit/form/unix/ts_all.rb +22 -0
  46. data/test/unit/form/windows/tc_absolute_functions.rb +854 -0
  47. data/test/unit/form/windows/ts_all.rb +22 -0
  48. data/test/unit/internal_/tc_array.rb +62 -0
  49. data/test/unit/internal_/ts_all.rb +22 -0
  50. data/test/unit/internal_/unix/form/tc_slash_functions.rb +60 -0
  51. data/test/unit/internal_/unix/form/ts_all.rb +22 -0
  52. data/test/unit/internal_/unix/tc_split_path.rb +396 -0
  53. data/test/unit/internal_/unix/ts_all.rb +22 -0
  54. data/test/unit/internal_/windows/form/tc_get_windows_volume.rb +220 -0
  55. data/test/unit/internal_/windows/form/tc_slash_functions.rb +61 -0
  56. data/test/unit/internal_/windows/form/ts_all.rb +22 -0
  57. data/test/unit/internal_/windows/tc_split_path.rb +881 -0
  58. data/test/unit/internal_/windows/ts_all.rb +22 -0
  59. data/test/unit/parse/ts_all.rb +22 -0
  60. data/test/unit/path/tc_path.rb +778 -0
  61. data/test/unit/path/ts_all.rb +22 -0
  62. data/test/unit/path/unix/tc_path.rb +565 -0
  63. data/test/unit/path/unix/ts_all.rb +22 -0
  64. data/test/unit/path/windows/tc_path.rb +630 -0
  65. data/test/unit/path/windows/ts_all.rb +22 -0
  66. data/test/unit/tc_version.rb +47 -0
  67. data/test/unit/ts_all.rb +22 -0
  68. data/test/unit/util/tc_combine_paths.rb +179 -0
  69. data/test/unit/util/tc_derive_relative_path.rb +19 -0
  70. data/test/unit/util/tc_make_path_canonical.rb +228 -0
  71. data/test/unit/util/ts_all.rb +22 -0
  72. data/test/unit/util/unix/tc_combine_paths.rb +65 -0
  73. data/test/unit/util/unix/tc_derive_relative_path.rb +123 -0
  74. data/test/unit/util/unix/tc_make_path_absolute.rb +117 -0
  75. data/test/unit/util/unix/tc_make_path_canonical.rb +139 -0
  76. data/test/unit/util/unix/ts_all.rb +22 -0
  77. data/test/unit/util/windows/tc_combine_paths.rb +131 -0
  78. data/test/unit/util/windows/tc_derive_relative_path.rb +155 -0
  79. data/test/unit/util/windows/tc_make_path_absolute.rb +163 -0
  80. data/test/unit/util/windows/tc_make_path_canonical.rb +220 -0
  81. data/test/unit/util/windows/ts_all.rb +22 -0
  82. metadata +144 -0
@@ -0,0 +1,22 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # executes all other tests
4
+
5
+ this_dir = File.expand_path(File.dirname(__FILE__))
6
+
7
+ # all tc_*rb in current directory
8
+ Dir[File.join(this_dir, 'tc_*rb')].each do |file|
9
+
10
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
11
+
12
+ require file
13
+ end
14
+
15
+ # all ts_*rb in immediate sub-directories
16
+ Dir[File.join(this_dir, '*', 'ts_*rb')].each do |file|
17
+
18
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
19
+
20
+ require file
21
+ end
22
+
@@ -0,0 +1,854 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 4), 'lib')
4
+
5
+ require 'libpath/form/windows'
6
+
7
+ require 'test/unit'
8
+
9
+ require 'xqsr3/extensions/test/unit'
10
+
11
+ class Test_existence_of_namespace_LibPath_Form_Windows < Test::Unit::TestCase
12
+
13
+ def test_LibPath_module_exists
14
+
15
+ assert defined?(::LibPath)
16
+ end
17
+
18
+ def test_LibPath_Form_module_exists
19
+
20
+ assert defined?(::LibPath::Form)
21
+ end
22
+
23
+ def test_LibPath_Form_Windows_module_exists
24
+
25
+ assert defined?(::LibPath::Form::Windows)
26
+ end
27
+ end
28
+
29
+ class Test_classify_path_Windows < Test::Unit::TestCase
30
+
31
+ include ::LibPath::Form::Windows
32
+
33
+ def test_with_nil
34
+
35
+ if $DEBUG
36
+
37
+ assert_raise(::ArgumentError) { classify_path(nil) }
38
+ else
39
+
40
+ assert_nil classify_path(nil)
41
+ end
42
+ end
43
+
44
+ def test_empty
45
+
46
+ assert_nil classify_path('')
47
+ end
48
+
49
+ def test_drived
50
+
51
+ assert_equal :drived, classify_path('C:abc')
52
+ assert_equal :drived, classify_path('C:abc/')
53
+ assert_equal :drived, classify_path('C:abc\\')
54
+
55
+ assert_equal :drived, classify_path('\\\\?\\C:abc')
56
+ assert_equal :drived, classify_path('\\\\?\\C:abc/')
57
+ assert_equal :drived, classify_path('\\\\?\\C:abc\\')
58
+
59
+ assert_equal :drived, classify_path('\\\\server\\share')
60
+
61
+ assert_equal :drived, classify_path('\\\\?\\server\\share')
62
+ end
63
+
64
+ def test_absolute
65
+
66
+ assert_equal :absolute, classify_path('C:/')
67
+ assert_equal :absolute, classify_path('C:\\')
68
+
69
+ assert_equal :absolute, classify_path('C:/abc')
70
+ assert_equal :absolute, classify_path('C:\\abc')
71
+
72
+
73
+ assert_equal :absolute, classify_path('\\\\server\\share/')
74
+ assert_equal :absolute, classify_path('\\\\server\\share\\')
75
+
76
+ assert_equal :absolute, classify_path('\\\\server\\share/abc')
77
+ assert_equal :absolute, classify_path('\\\\server\\share\\abc')
78
+
79
+
80
+ assert_equal :absolute, classify_path('\\\\?\\C:/')
81
+ assert_equal :absolute, classify_path('\\\\?\\C:\\')
82
+
83
+ assert_equal :absolute, classify_path('\\\\?\\C:/abc')
84
+ assert_equal :absolute, classify_path('\\\\?\\C:\\abc')
85
+
86
+
87
+ assert_equal :absolute, classify_path('\\\\?\\server\\share/')
88
+ assert_equal :absolute, classify_path('\\\\?\\server\\share\\')
89
+
90
+ assert_equal :absolute, classify_path('\\\\?\\server\\share/abc')
91
+ assert_equal :absolute, classify_path('\\\\?\\server\\share\\abc')
92
+
93
+
94
+ assert_equal :absolute, classify_path('\\\\?\\UNC\\server\\share/')
95
+ assert_equal :absolute, classify_path('\\\\?\\UNC\\server\\share\\')
96
+
97
+ assert_equal :absolute, classify_path('\\\\?\\UNC\\server\\share/abc')
98
+ assert_equal :absolute, classify_path('\\\\?\\UNC\\server\\share\\abc')
99
+ end
100
+
101
+ def test_rooted
102
+
103
+ assert_equal :rooted, classify_path('/')
104
+ assert_equal :rooted, classify_path('\\')
105
+
106
+ assert_equal :rooted, classify_path('/abc')
107
+ assert_equal :rooted, classify_path('\\abc')
108
+ end
109
+
110
+ def test_homed
111
+
112
+ assert_equal :homed, classify_path('~')
113
+
114
+ assert_equal :homed, classify_path('~/')
115
+ assert_equal :homed, classify_path('~\\')
116
+
117
+ assert_equal :homed, classify_path('~/abc')
118
+ assert_equal :homed, classify_path('~\\abc')
119
+ end
120
+
121
+ def test_relative
122
+
123
+ assert_equal :relative, classify_path('abc')
124
+
125
+ assert_equal :relative, classify_path('~~')
126
+ end
127
+ end
128
+
129
+ class Test_name_is_malformed_Windows < Test::Unit::TestCase
130
+
131
+ include ::LibPath::Form::Windows
132
+
133
+ def test_with_nil
134
+
135
+ assert name_is_malformed?(nil)
136
+ end
137
+
138
+ def test_empty
139
+
140
+ assert_false name_is_malformed?('')
141
+ end
142
+
143
+ def test_absolute_paths_from_root
144
+
145
+ assert_false name_is_malformed?('/')
146
+ assert_false name_is_malformed?('//')
147
+ assert_false name_is_malformed?('/abc')
148
+ end
149
+
150
+ def test_absolute_paths_from_home
151
+
152
+ assert_false name_is_malformed?('~')
153
+ assert_false name_is_malformed?('~/')
154
+ assert_false name_is_malformed?('~/abc')
155
+ end
156
+
157
+ def test_relative_paths
158
+
159
+ assert_false name_is_malformed?('abc')
160
+ assert_false name_is_malformed?('abc/')
161
+ assert_false name_is_malformed?('a/')
162
+
163
+ assert_false name_is_malformed?('~abc')
164
+ end
165
+
166
+ def test_innate_invalid_characters
167
+
168
+ assert name_is_malformed?("\0")
169
+ assert name_is_malformed?("a\0")
170
+ assert name_is_malformed?("\0a")
171
+
172
+ assert name_is_malformed?("\0", reject_shell_characters: true)
173
+ assert name_is_malformed?("a\0", reject_shell_characters: true)
174
+ assert name_is_malformed?("\0a", reject_shell_characters: true)
175
+ end
176
+
177
+ def test_shell_invalid_characters
178
+
179
+ assert_false name_is_malformed?('*')
180
+ assert_false name_is_malformed?('?')
181
+ assert_false name_is_malformed?('|')
182
+
183
+ assert name_is_malformed?('*', reject_shell_characters: true)
184
+ assert name_is_malformed?('?', reject_shell_characters: true)
185
+ assert name_is_malformed?('|', reject_shell_characters: true)
186
+ end
187
+
188
+ def test_path_name_separators
189
+
190
+ assert_false name_is_malformed?('/')
191
+ assert_false name_is_malformed?('\\')
192
+
193
+ assert name_is_malformed?('/', reject_path_name_separators: true)
194
+ assert name_is_malformed?('\\', reject_path_name_separators: true)
195
+ end
196
+
197
+ def test_path_separators
198
+
199
+ assert_false name_is_malformed?(';')
200
+
201
+ assert name_is_malformed?(';', reject_path_separators: true)
202
+ end
203
+
204
+ def test_partial_UNC
205
+
206
+ assert_false name_is_malformed?('\\')
207
+ assert name_is_malformed?('\\\\')
208
+ assert name_is_malformed?('\\\\server')
209
+ assert name_is_malformed?('\\\\server\\')
210
+ assert_false name_is_malformed?('\\\\server\\share')
211
+ end
212
+ end
213
+
214
+ class Test_path_is_absolute_Windows < Test::Unit::TestCase
215
+
216
+ include ::LibPath::Form::Windows
217
+
218
+ if $DEBUG
219
+
220
+ def test_with_nil
221
+
222
+ assert_raise(::ArgumentError) { path_is_absolute?(nil) }
223
+ end
224
+ end
225
+
226
+ def test_empty
227
+
228
+ assert_false path_is_absolute?('')
229
+ end
230
+
231
+ def test_absolute_paths_from_UNC
232
+
233
+ assert_false path_is_absolute?('\\\\')
234
+
235
+ assert_false path_is_absolute?('\\\\server')
236
+ assert_false path_is_absolute?('\\\\server\\')
237
+
238
+ # form 2
239
+
240
+ assert_false path_is_absolute?('\\\\server\\share')
241
+ assert path_is_absolute?('\\\\server\\share\\')
242
+ assert path_is_absolute?('\\\\server\\share/')
243
+
244
+ assert_false path_is_absolute?('\\\\server\\the-share_name')
245
+ assert path_is_absolute?('\\\\server\\the-share_name/')
246
+ assert path_is_absolute?('\\\\server\\the-share_name\\')
247
+ assert path_is_absolute?('\\\\server\\the-share_name\\\\')
248
+ assert path_is_absolute?('\\\\server\\the-share_name\\dir')
249
+ assert path_is_absolute?('\\\\server\\the-share_name\\dir\\')
250
+
251
+ assert_false path_is_absolute?('\\\\101.2.303.4\\the-share_name')
252
+ assert path_is_absolute?('\\\\101.2.303.4\\the-share_name/')
253
+ assert path_is_absolute?('\\\\101.2.303.4\\the-share_name\\')
254
+ assert path_is_absolute?('\\\\101.2.303.4\\the-share_name\\\\')
255
+ assert path_is_absolute?('\\\\101.2.303.4\\the-share_name\\dir')
256
+ assert path_is_absolute?('\\\\101.2.303.4\\the-share_name\\dir\\')
257
+
258
+ assert_false path_is_absolute?('\\\\::1/128\\the-share_name')
259
+ assert path_is_absolute?('\\\\::1/128\\the-share_name/')
260
+ assert path_is_absolute?('\\\\::1/128\\the-share_name\\')
261
+ assert path_is_absolute?('\\\\::1/128\\the-share_name\\\\')
262
+ assert path_is_absolute?('\\\\::1/128\\the-share_name\\dir')
263
+ assert path_is_absolute?('\\\\::1/128\\the-share_name\\dir\\')
264
+
265
+ # form 4
266
+
267
+ assert_false path_is_absolute?('\\\\?\\server\\the-share_name')
268
+ assert path_is_absolute?('\\\\?\\server\\the-share_name/')
269
+ assert path_is_absolute?('\\\\?\\server\\the-share_name\\')
270
+ assert path_is_absolute?('\\\\?\\server\\the-share_name\\\\')
271
+ assert path_is_absolute?('\\\\?\\server\\the-share_name\\dir')
272
+ assert path_is_absolute?('\\\\?\\server\\the-share_name\\dir\\')
273
+
274
+ assert_false path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name')
275
+ assert path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name/')
276
+ assert path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name\\')
277
+ assert path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name\\\\')
278
+ assert path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name\\dir')
279
+ assert path_is_absolute?('\\\\?\\101.2.303.4\\the-share_name\\dir\\')
280
+
281
+ assert_false path_is_absolute?('\\\\?\\::1/128\\the-share_name')
282
+ assert path_is_absolute?('\\\\?\\::1/128\\the-share_name/')
283
+ assert path_is_absolute?('\\\\?\\::1/128\\the-share_name\\')
284
+ assert path_is_absolute?('\\\\?\\::1/128\\the-share_name\\\\')
285
+ assert path_is_absolute?('\\\\?\\::1/128\\the-share_name\\dir')
286
+ assert path_is_absolute?('\\\\?\\::1/128\\the-share_name\\dir\\')
287
+
288
+ # form 5
289
+
290
+ assert_false path_is_absolute?('\\\\?\\UNC\\server\\the-share_name')
291
+ assert path_is_absolute?('\\\\?\\UNC\\server\\the-share_name/')
292
+ assert path_is_absolute?('\\\\?\\UNC\\server\\the-share_name\\')
293
+ assert path_is_absolute?('\\\\?\\UNC\\server\\the-share_name\\\\')
294
+ assert path_is_absolute?('\\\\?\\UNC\\server\\the-share_name\\dir')
295
+ assert path_is_absolute?('\\\\?\\UNC\\server\\the-share_name\\dir\\')
296
+
297
+ assert_false path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name')
298
+ assert path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name/')
299
+ assert path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\')
300
+ assert path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\\\')
301
+ assert path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir')
302
+ assert path_is_absolute?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir\\')
303
+
304
+ assert_false path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name')
305
+ assert path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name/')
306
+ assert path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name\\')
307
+ assert path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name\\\\')
308
+ assert path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name\\dir')
309
+ assert path_is_absolute?('\\\\?\\UNC\\::1/128\\the-share_name\\dir\\')
310
+ end
311
+
312
+ def test_absolute_paths_from_drive
313
+
314
+ # form 1
315
+
316
+ assert path_is_absolute?('C:\\')
317
+ assert path_is_absolute?('C:\\abc')
318
+ assert path_is_absolute?('C:\\abc\\')
319
+
320
+ assert_false path_is_absolute?('C:')
321
+ assert_false path_is_absolute?('C:abc')
322
+ assert_false path_is_absolute?('C:abc\\')
323
+
324
+ # form 3
325
+
326
+ assert path_is_absolute?('\\\\?\\C:\\')
327
+ assert path_is_absolute?('\\\\?\\C:\\abc')
328
+ assert path_is_absolute?('\\\\?\\C:\\abc\\')
329
+
330
+ assert_false path_is_absolute?('\\\\?\\C:')
331
+ assert_false path_is_absolute?('\\\\?\\C:abc')
332
+ assert_false path_is_absolute?('\\\\?\\C:abc\\')
333
+ end
334
+
335
+ def test_absolute_paths_from_device
336
+
337
+ # form 6
338
+
339
+ assert_false path_is_absolute?('\\\\.\\')
340
+ assert_false path_is_absolute?('\\\\.\\{device-id}')
341
+ assert_false path_is_absolute?('\\\\.\\{device-id}/')
342
+ assert path_is_absolute?('\\\\.\\{device-id}\\')
343
+ assert path_is_absolute?('\\\\.\\{device-id}\\\\')
344
+ assert path_is_absolute?('\\\\.\\{device-id}\\dir')
345
+ assert path_is_absolute?('\\\\.\\{device-id}\\dir\\')
346
+ end
347
+
348
+ def test_absolute_paths_from_root
349
+
350
+ assert_false path_is_absolute?('\\')
351
+ assert_false path_is_absolute?('\\\\')
352
+ assert_false path_is_absolute?('\\abc')
353
+
354
+ assert_false path_is_absolute?('/')
355
+ assert_false path_is_absolute?('//')
356
+ assert_false path_is_absolute?('/abc')
357
+ end
358
+
359
+ def test_absolute_paths_from_home
360
+
361
+ assert path_is_absolute?('~')
362
+ assert path_is_absolute?('~/')
363
+ assert path_is_absolute?('~/abc')
364
+ end
365
+
366
+ def test_relative_paths
367
+
368
+ assert_false path_is_absolute?('abc')
369
+ assert_false path_is_absolute?('abc/')
370
+ assert_false path_is_absolute?('a/')
371
+
372
+ assert_false path_is_absolute?('~abc')
373
+ end
374
+ end
375
+
376
+ class Test_path_is_homed_Windows < Test::Unit::TestCase
377
+
378
+ include ::LibPath::Form::Windows
379
+
380
+ if $DEBUG
381
+
382
+ def test_with_nil
383
+
384
+ assert_raise(::ArgumentError) { path_is_homed?(nil) }
385
+ end
386
+ end
387
+
388
+ def test_empty
389
+
390
+ assert_false path_is_homed?('')
391
+ end
392
+
393
+ def test_absolute_paths_from_UNC
394
+
395
+ assert_false path_is_homed?('\\\\')
396
+ assert_false path_is_homed?('\\\\server')
397
+ assert_false path_is_homed?('\\\\server\\')
398
+ assert_false path_is_homed?('\\\\server\\share')
399
+
400
+ assert_false path_is_homed?('\\\\server\\the-share_name\\')
401
+ assert_false path_is_homed?('\\\\server\\the-share_name\\\\')
402
+ assert_false path_is_homed?('\\\\server\\the-share_name\\dir')
403
+ assert_false path_is_homed?('\\\\server\\the-share_name\\dir\\')
404
+
405
+ assert_false path_is_homed?('\\\\101.2.303.4\\the-share_name\\')
406
+ assert_false path_is_homed?('\\\\101.2.303.4\\the-share_name\\\\')
407
+ assert_false path_is_homed?('\\\\101.2.303.4\\the-share_name\\dir')
408
+ assert_false path_is_homed?('\\\\101.2.303.4\\the-share_name\\dir\\')
409
+
410
+ assert_false path_is_homed?('\\\\::1/128\\the-share_name\\')
411
+ assert_false path_is_homed?('\\\\::1/128\\the-share_name\\\\')
412
+ assert_false path_is_homed?('\\\\::1/128\\the-share_name\\dir')
413
+ assert_false path_is_homed?('\\\\::1/128\\the-share_name\\dir\\')
414
+ end
415
+
416
+ def test_absolute_paths_from_drive
417
+
418
+ assert_false path_is_homed?('C:\\')
419
+ assert_false path_is_homed?('C:\\abc')
420
+ assert_false path_is_homed?('C:\\abc\\')
421
+ end
422
+
423
+ def test_absolute_paths_from_root
424
+
425
+ assert_false path_is_homed?('\\')
426
+ assert_false path_is_homed?('\\\\')
427
+ assert_false path_is_homed?('\\abc')
428
+
429
+ assert_false path_is_homed?('/')
430
+ assert_false path_is_homed?('//')
431
+ assert_false path_is_homed?('/abc')
432
+ end
433
+
434
+ def test_absolute_paths_from_home
435
+
436
+ assert path_is_homed?('~')
437
+ assert path_is_homed?('~/')
438
+ assert path_is_homed?('~/abc')
439
+ end
440
+
441
+ def test_relative_paths
442
+
443
+ assert_false path_is_homed?('abc')
444
+ assert_false path_is_homed?('abc/')
445
+ assert_false path_is_homed?('a/')
446
+
447
+ assert_false path_is_homed?('~abc')
448
+ end
449
+ end
450
+
451
+ class Test_path_is_rooted_Windows < Test::Unit::TestCase
452
+
453
+ include ::LibPath::Form::Windows
454
+
455
+ if $DEBUG
456
+
457
+ def test_with_nil
458
+
459
+ assert_raise(::ArgumentError) { path_is_rooted?(nil) }
460
+ end
461
+ end
462
+
463
+ def test_empty
464
+
465
+ assert_false path_is_rooted?('')
466
+ end
467
+
468
+ def test_absolute_paths_from_UNC
469
+
470
+ assert_false path_is_rooted?('\\\\')
471
+
472
+ assert_false path_is_rooted?('\\\\server')
473
+ assert_false path_is_rooted?('\\\\server\\')
474
+
475
+ # form 2
476
+
477
+ assert_false path_is_rooted?('\\\\server\\share')
478
+ assert path_is_rooted?('\\\\server\\share\\')
479
+ assert path_is_rooted?('\\\\server\\share/')
480
+
481
+ assert_false path_is_rooted?('\\\\server\\the-share_name')
482
+ assert path_is_rooted?('\\\\server\\the-share_name/')
483
+ assert path_is_rooted?('\\\\server\\the-share_name\\')
484
+ assert path_is_rooted?('\\\\server\\the-share_name\\\\')
485
+ assert path_is_rooted?('\\\\server\\the-share_name\\dir')
486
+ assert path_is_rooted?('\\\\server\\the-share_name\\dir\\')
487
+
488
+ assert_false path_is_rooted?('\\\\101.2.303.4\\the-share_name')
489
+ assert path_is_rooted?('\\\\101.2.303.4\\the-share_name/')
490
+ assert path_is_rooted?('\\\\101.2.303.4\\the-share_name\\')
491
+ assert path_is_rooted?('\\\\101.2.303.4\\the-share_name\\\\')
492
+ assert path_is_rooted?('\\\\101.2.303.4\\the-share_name\\dir')
493
+ assert path_is_rooted?('\\\\101.2.303.4\\the-share_name\\dir\\')
494
+
495
+ assert_false path_is_rooted?('\\\\::1/128\\the-share_name')
496
+ assert path_is_rooted?('\\\\::1/128\\the-share_name/')
497
+ assert path_is_rooted?('\\\\::1/128\\the-share_name\\')
498
+ assert path_is_rooted?('\\\\::1/128\\the-share_name\\\\')
499
+ assert path_is_rooted?('\\\\::1/128\\the-share_name\\dir')
500
+ assert path_is_rooted?('\\\\::1/128\\the-share_name\\dir\\')
501
+
502
+ # form 4
503
+
504
+ assert_false path_is_rooted?('\\\\?\\server\\the-share_name')
505
+ assert path_is_rooted?('\\\\?\\server\\the-share_name/')
506
+ assert path_is_rooted?('\\\\?\\server\\the-share_name\\')
507
+ assert path_is_rooted?('\\\\?\\server\\the-share_name\\\\')
508
+ assert path_is_rooted?('\\\\?\\server\\the-share_name\\dir')
509
+ assert path_is_rooted?('\\\\?\\server\\the-share_name\\dir\\')
510
+
511
+ assert_false path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name')
512
+ assert path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name/')
513
+ assert path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name\\')
514
+ assert path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name\\\\')
515
+ assert path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name\\dir')
516
+ assert path_is_rooted?('\\\\?\\101.2.303.4\\the-share_name\\dir\\')
517
+
518
+ assert_false path_is_rooted?('\\\\?\\::1/128\\the-share_name')
519
+ assert path_is_rooted?('\\\\?\\::1/128\\the-share_name/')
520
+ assert path_is_rooted?('\\\\?\\::1/128\\the-share_name\\')
521
+ assert path_is_rooted?('\\\\?\\::1/128\\the-share_name\\\\')
522
+ assert path_is_rooted?('\\\\?\\::1/128\\the-share_name\\dir')
523
+ assert path_is_rooted?('\\\\?\\::1/128\\the-share_name\\dir\\')
524
+
525
+ # form 5
526
+
527
+ assert_false path_is_rooted?('\\\\?\\UNC\\server\\the-share_name')
528
+ assert path_is_rooted?('\\\\?\\UNC\\server\\the-share_name/')
529
+ assert path_is_rooted?('\\\\?\\UNC\\server\\the-share_name\\')
530
+ assert path_is_rooted?('\\\\?\\UNC\\server\\the-share_name\\\\')
531
+ assert path_is_rooted?('\\\\?\\UNC\\server\\the-share_name\\dir')
532
+ assert path_is_rooted?('\\\\?\\UNC\\server\\the-share_name\\dir\\')
533
+
534
+ assert_false path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name')
535
+ assert path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name/')
536
+ assert path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\')
537
+ assert path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\\\')
538
+ assert path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir')
539
+ assert path_is_rooted?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir\\')
540
+
541
+ assert_false path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name')
542
+ assert path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name/')
543
+ assert path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name\\')
544
+ assert path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name\\\\')
545
+ assert path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name\\dir')
546
+ assert path_is_rooted?('\\\\?\\UNC\\::1/128\\the-share_name\\dir\\')
547
+ end
548
+
549
+ def test_absolute_paths_from_drive
550
+
551
+ # form 1
552
+
553
+ assert path_is_rooted?('C:\\')
554
+ assert path_is_rooted?('C:\\abc')
555
+ assert path_is_rooted?('C:\\abc\\')
556
+
557
+ assert_false path_is_rooted?('C:')
558
+ assert_false path_is_rooted?('C:abc')
559
+ assert_false path_is_rooted?('C:abc\\')
560
+
561
+ # form 3
562
+
563
+ assert path_is_rooted?('\\\\?\\C:\\')
564
+ assert path_is_rooted?('\\\\?\\C:\\abc')
565
+ assert path_is_rooted?('\\\\?\\C:\\abc\\')
566
+
567
+ assert_false path_is_rooted?('\\\\?\\C:')
568
+ assert_false path_is_rooted?('\\\\?\\C:abc')
569
+ assert_false path_is_rooted?('\\\\?\\C:abc\\')
570
+ end
571
+
572
+ def test_absolute_paths_from_device
573
+
574
+ # form 6
575
+
576
+ assert_false path_is_rooted?('\\\\.\\')
577
+ assert_false path_is_rooted?('\\\\.\\{device-id}')
578
+ assert_false path_is_rooted?('\\\\.\\{device-id}/')
579
+ assert path_is_rooted?('\\\\.\\{device-id}\\')
580
+ assert path_is_rooted?('\\\\.\\{device-id}\\\\')
581
+ assert path_is_rooted?('\\\\.\\{device-id}\\dir')
582
+ assert path_is_rooted?('\\\\.\\{device-id}\\dir\\')
583
+ end
584
+
585
+ def test_absolute_paths_from_root
586
+
587
+ assert path_is_rooted?('\\')
588
+ assert_false path_is_rooted?('\\\\')
589
+ assert path_is_rooted?('\\abc')
590
+
591
+ assert path_is_rooted?('/')
592
+ assert path_is_rooted?('//')
593
+ assert path_is_rooted?('/abc')
594
+ end
595
+
596
+ def test_absolute_paths_from_home
597
+
598
+ assert_false path_is_rooted?('~')
599
+ assert_false path_is_rooted?('~/')
600
+ assert_false path_is_rooted?('~/abc')
601
+ end
602
+
603
+ def test_relative_paths
604
+
605
+ assert_false path_is_rooted?('abc')
606
+ assert_false path_is_rooted?('abc/')
607
+ assert_false path_is_rooted?('a/')
608
+
609
+ assert_false path_is_rooted?('~abc')
610
+ end
611
+ end
612
+
613
+ class Test_path_is_UNC_Windows < Test::Unit::TestCase
614
+
615
+ include ::LibPath::Form::Windows
616
+
617
+ if $DEBUG
618
+
619
+ def test_with_nil
620
+
621
+ assert_raise(::ArgumentError) { path_is_UNC?(nil) }
622
+ end
623
+ end
624
+
625
+ def test_empty
626
+
627
+ assert_false path_is_UNC?('')
628
+ end
629
+
630
+ def test_absolute_paths_from_drive
631
+
632
+ assert_false path_is_UNC?('C:\\')
633
+ assert_false path_is_UNC?('C:\\\\')
634
+ assert_false path_is_UNC?('C:\\abc\\')
635
+ end
636
+
637
+ def test_absolute_paths_from_UNC
638
+
639
+ assert_false path_is_UNC?('\\\\')
640
+
641
+ # form 3
642
+
643
+ assert_false path_is_UNC?('\\\\?\\C')
644
+ assert path_is_UNC?('\\\\?\\C:')
645
+ assert path_is_UNC?('\\\\?\\C:\\')
646
+ assert path_is_UNC?('\\\\?\\C:\\\\')
647
+ assert path_is_UNC?('\\\\?\\C:\\abc\\')
648
+ assert path_is_UNC?('\\\\?\\C:\\abc/')
649
+
650
+ # form 2
651
+
652
+ assert_false path_is_UNC?('\\\\server')
653
+ assert_false path_is_UNC?('\\\\server\\')
654
+
655
+ assert path_is_UNC?('\\\\server\\share')
656
+
657
+ assert path_is_UNC?('\\\\server\\the-share_name')
658
+ assert path_is_UNC?('\\\\server\\the-share_name/')
659
+ assert path_is_UNC?('\\\\server\\the-share_name\\')
660
+ assert path_is_UNC?('\\\\server\\the-share_name\\\\')
661
+ assert path_is_UNC?('\\\\server\\the-share_name\\dir')
662
+ assert path_is_UNC?('\\\\server\\the-share_name\\dir\\')
663
+
664
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name')
665
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name/')
666
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name\\')
667
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name\\\\')
668
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name\\dir')
669
+ assert path_is_UNC?('\\\\101.2.303.4\\the-share_name\\dir\\')
670
+
671
+ assert path_is_UNC?('\\\\::1/128\\the-share_name')
672
+ assert path_is_UNC?('\\\\::1/128\\the-share_name/')
673
+ assert path_is_UNC?('\\\\::1/128\\the-share_name\\')
674
+ assert path_is_UNC?('\\\\::1/128\\the-share_name\\\\')
675
+ assert path_is_UNC?('\\\\::1/128\\the-share_name\\dir')
676
+ assert path_is_UNC?('\\\\::1/128\\the-share_name\\dir\\')
677
+
678
+ # form 4
679
+
680
+ assert_false path_is_UNC?('\\\\?\\server')
681
+ assert_false path_is_UNC?('\\\\?\\server\\')
682
+
683
+ assert path_is_UNC?('\\\\?\\server\\share')
684
+
685
+ assert path_is_UNC?('\\\\?\\server\\the-share_name')
686
+ assert path_is_UNC?('\\\\?\\server\\the-share_name/')
687
+ assert path_is_UNC?('\\\\?\\server\\the-share_name\\')
688
+ assert path_is_UNC?('\\\\?\\server\\the-share_name\\\\')
689
+ assert path_is_UNC?('\\\\?\\server\\the-share_name\\dir')
690
+ assert path_is_UNC?('\\\\?\\server\\the-share_name\\dir\\')
691
+
692
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name')
693
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name/')
694
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name\\')
695
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name\\\\')
696
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name\\dir')
697
+ assert path_is_UNC?('\\\\?\\101.2.303.4\\the-share_name\\dir\\')
698
+
699
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name')
700
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name/')
701
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name\\')
702
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name\\\\')
703
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name\\dir')
704
+ assert path_is_UNC?('\\\\?\\::1/128\\the-share_name\\dir\\')
705
+
706
+ # form 5
707
+
708
+ assert_false path_is_UNC?('\\\\?\\UNC\\server')
709
+ assert_false path_is_UNC?('\\\\?\\UNC\\server\\')
710
+
711
+ assert path_is_UNC?('\\\\?\\UNC\\server\\share')
712
+
713
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name')
714
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name/')
715
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name\\')
716
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name\\\\')
717
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name\\dir')
718
+ assert path_is_UNC?('\\\\?\\UNC\\server\\the-share_name\\dir\\')
719
+
720
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name')
721
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name/')
722
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\')
723
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\\\')
724
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir')
725
+ assert path_is_UNC?('\\\\?\\UNC\\101.2.303.4\\the-share_name\\dir\\')
726
+
727
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name')
728
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name/')
729
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name\\')
730
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name\\\\')
731
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name\\dir')
732
+ assert path_is_UNC?('\\\\?\\UNC\\::1/128\\the-share_name\\dir\\')
733
+
734
+ # form 6
735
+
736
+ assert_false path_is_UNC?('\\\\.\\')
737
+
738
+ assert path_is_UNC?('\\\\.\\{device-id}\\')
739
+ assert path_is_UNC?('\\\\.\\{device-id}\\\\')
740
+ assert path_is_UNC?('\\\\.\\{device-id}\\dir')
741
+ assert path_is_UNC?('\\\\.\\{device-id}\\dir\\')
742
+ end
743
+
744
+ def test_absolute_paths_from_root
745
+
746
+ assert_false path_is_UNC?('\\')
747
+ assert_false path_is_UNC?('\\\\')
748
+ assert_false path_is_UNC?('\\abc')
749
+
750
+ assert_false path_is_UNC?('/')
751
+ assert_false path_is_UNC?('//')
752
+ assert_false path_is_UNC?('/abc')
753
+ end
754
+
755
+ def test_absolute_paths_from_home
756
+
757
+ assert_false path_is_UNC?('~')
758
+ assert_false path_is_UNC?('~/')
759
+ assert_false path_is_UNC?('~/abc')
760
+ end
761
+
762
+ def test_relative_paths
763
+
764
+ assert_false path_is_UNC?('abc')
765
+ assert_false path_is_UNC?('abc/')
766
+ assert_false path_is_UNC?('a/')
767
+
768
+ assert_false path_is_UNC?('~abc')
769
+ end
770
+ end
771
+
772
+ class Test_path_is_letter_drived_Windows < Test::Unit::TestCase
773
+
774
+ include ::LibPath::Form::Windows
775
+
776
+ if $DEBUG
777
+
778
+ def test_with_nil
779
+
780
+ assert_raise(::ArgumentError) { path_is_letter_drived?(nil) }
781
+ end
782
+ end
783
+
784
+ def test_empty
785
+
786
+ assert_nil path_is_letter_drived?('')
787
+ end
788
+
789
+ def test_absolute_paths_from_drive
790
+
791
+ assert_equal 2, path_is_letter_drived?('C:')
792
+ assert_equal 3, path_is_letter_drived?('C:\\')
793
+ assert_equal 3, path_is_letter_drived?('C:/')
794
+ assert_equal 3, path_is_letter_drived?('C:\\\\')
795
+ assert_equal 3, path_is_letter_drived?('C:\\abc\\')
796
+
797
+ assert_equal 6, path_is_letter_drived?('\\\\?\\C:')
798
+ assert_equal 7, path_is_letter_drived?('\\\\?\\C:\\')
799
+ assert_equal 7, path_is_letter_drived?('\\\\?\\C:/')
800
+ assert_equal 7, path_is_letter_drived?('\\\\?\\C:\\\\')
801
+ assert_equal 7, path_is_letter_drived?('\\\\?\\C:\\abc\\')
802
+ end
803
+
804
+ def test_absolute_paths_from_other_UNC
805
+
806
+ assert_nil path_is_letter_drived?('\\\\')
807
+ assert_nil path_is_letter_drived?('\\\\server')
808
+ assert_nil path_is_letter_drived?('\\\\server\\')
809
+ assert_nil path_is_letter_drived?('\\\\server\\share')
810
+
811
+ assert_nil path_is_letter_drived?('\\\\server\\the-share_name\\')
812
+ assert_nil path_is_letter_drived?('\\\\server\\the-share_name\\\\')
813
+ assert_nil path_is_letter_drived?('\\\\server\\the-share_name\\dir')
814
+ assert_nil path_is_letter_drived?('\\\\server\\the-share_name\\dir\\')
815
+
816
+ assert_nil path_is_letter_drived?('\\\\101.2.303.4\\the-share_name\\')
817
+ assert_nil path_is_letter_drived?('\\\\101.2.303.4\\the-share_name\\\\')
818
+ assert_nil path_is_letter_drived?('\\\\101.2.303.4\\the-share_name\\dir')
819
+ assert_nil path_is_letter_drived?('\\\\101.2.303.4\\the-share_name\\dir\\')
820
+
821
+ assert_nil path_is_letter_drived?('\\\\::1/128\\the-share_name\\')
822
+ assert_nil path_is_letter_drived?('\\\\::1/128\\the-share_name\\\\')
823
+ assert_nil path_is_letter_drived?('\\\\::1/128\\the-share_name\\dir')
824
+ assert_nil path_is_letter_drived?('\\\\::1/128\\the-share_name\\dir\\')
825
+ end
826
+
827
+ def test_absolute_paths_from_root
828
+
829
+ assert_nil path_is_letter_drived?('\\')
830
+ assert_nil path_is_letter_drived?('\\\\')
831
+ assert_nil path_is_letter_drived?('\\abc')
832
+
833
+ assert_nil path_is_letter_drived?('/')
834
+ assert_nil path_is_letter_drived?('//')
835
+ assert_nil path_is_letter_drived?('/abc')
836
+ end
837
+
838
+ def test_absolute_paths_from_home
839
+
840
+ assert_nil path_is_letter_drived?('~')
841
+ assert_nil path_is_letter_drived?('~/')
842
+ assert_nil path_is_letter_drived?('~/abc')
843
+ end
844
+
845
+ def test_relative_paths
846
+
847
+ assert_nil path_is_letter_drived?('abc')
848
+ assert_nil path_is_letter_drived?('abc/')
849
+ assert_nil path_is_letter_drived?('a/')
850
+
851
+ assert_nil path_is_letter_drived?('~abc')
852
+ end
853
+ end
854
+