libpath-ruby 0.2.2 → 0.2.2.1

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +33 -0
  3. data/README.md +25 -8
  4. data/examples/path_from_arg0.md +43 -43
  5. data/examples/path_from_arg0.rb +25 -23
  6. data/lib/libpath/constants/unix.rb +71 -71
  7. data/lib/libpath/constants/windows.rb +72 -72
  8. data/lib/libpath/constants.rb +18 -19
  9. data/lib/libpath/diagnostics/parameter_checking.rb +25 -25
  10. data/lib/libpath/diagnostics.rb +1 -1
  11. data/lib/libpath/exceptions/libpath_base_exception.rb +13 -13
  12. data/lib/libpath/exceptions/malformed_name_exception.rb +23 -22
  13. data/lib/libpath/exceptions.rb +1 -1
  14. data/lib/libpath/form/unix.rb +104 -103
  15. data/lib/libpath/form/windows.rb +200 -199
  16. data/lib/libpath/form.rb +18 -18
  17. data/lib/libpath/internal_/array.rb +53 -53
  18. data/lib/libpath/internal_/platform.rb +24 -24
  19. data/lib/libpath/internal_/string.rb +18 -18
  20. data/lib/libpath/internal_/unix/form.rb +116 -116
  21. data/lib/libpath/internal_/windows/drive.rb +59 -59
  22. data/lib/libpath/internal_/windows/form.rb +189 -189
  23. data/lib/libpath/libpath.rb +3 -0
  24. data/lib/libpath/path/unix.rb +114 -112
  25. data/lib/libpath/path/windows.rb +120 -118
  26. data/lib/libpath/path.rb +18 -20
  27. data/lib/libpath/util/unix.rb +258 -258
  28. data/lib/libpath/util/windows.rb +400 -400
  29. data/lib/libpath/util.rb +18 -19
  30. data/lib/libpath/version.rb +23 -24
  31. data/lib/libpath.rb +1 -1
  32. data/test/performance/benchmark_drive_letter.rb +50 -10
  33. data/test/performance/benchmark_gsub_string_or_regex.rb +27 -23
  34. data/test/performance/benchmark_rindex2.rb +56 -48
  35. data/test/performance/benchmark_split.rb +16 -10
  36. data/test/unit/compare/ts_all.rb +4 -4
  37. data/test/unit/equate/ts_all.rb +4 -4
  38. data/test/unit/equate/unix/ts_all.rb +4 -4
  39. data/test/unit/equate/windows/ts_all.rb +4 -4
  40. data/test/unit/exceptions/tc_libpath_base_exception.rb +10 -8
  41. data/test/unit/exceptions/tc_malformed_name_exception.rb +14 -12
  42. data/test/unit/exceptions/ts_all.rb +4 -4
  43. data/test/unit/form/tc_absolute_functions.rb +242 -240
  44. data/test/unit/form/ts_all.rb +4 -4
  45. data/test/unit/form/unix/tc_absolute_functions.rb +158 -155
  46. data/test/unit/form/unix/ts_all.rb +4 -4
  47. data/test/unit/form/windows/tc_absolute_functions.rb +628 -625
  48. data/test/unit/form/windows/ts_all.rb +4 -4
  49. data/test/unit/internal_/tc_array.rb +36 -32
  50. data/test/unit/internal_/ts_all.rb +4 -4
  51. data/test/unit/internal_/unix/form/tc_slash_functions.rb +38 -35
  52. data/test/unit/internal_/unix/form/ts_all.rb +4 -4
  53. data/test/unit/internal_/unix/tc_split_path.rb +387 -384
  54. data/test/unit/internal_/unix/ts_all.rb +4 -4
  55. data/test/unit/internal_/windows/form/tc_get_windows_volume.rb +157 -153
  56. data/test/unit/internal_/windows/form/tc_slash_functions.rb +39 -35
  57. data/test/unit/internal_/windows/form/ts_all.rb +4 -4
  58. data/test/unit/internal_/windows/tc_split_path.rb +874 -869
  59. data/test/unit/internal_/windows/ts_all.rb +4 -4
  60. data/test/unit/parse/ts_all.rb +4 -4
  61. data/test/unit/path/tc_path.rb +732 -732
  62. data/test/unit/path/ts_all.rb +4 -4
  63. data/test/unit/path/unix/tc_path.rb +544 -540
  64. data/test/unit/path/unix/ts_all.rb +4 -4
  65. data/test/unit/path/windows/tc_path.rb +608 -603
  66. data/test/unit/path/windows/ts_all.rb +4 -4
  67. data/test/unit/tc_version.rb +25 -22
  68. data/test/unit/ts_all.rb +4 -4
  69. data/test/unit/util/tc_combine_paths.rb +110 -105
  70. data/test/unit/util/tc_derive_relative_path.rb +8 -3
  71. data/test/unit/util/tc_make_path_canonical.rb +142 -138
  72. data/test/unit/util/ts_all.rb +4 -4
  73. data/test/unit/util/unix/tc_combine_paths.rb +38 -34
  74. data/test/unit/util/unix/tc_derive_relative_path.rb +80 -75
  75. data/test/unit/util/unix/tc_make_path_absolute.rb +74 -70
  76. data/test/unit/util/unix/tc_make_path_canonical.rb +95 -90
  77. data/test/unit/util/unix/ts_all.rb +4 -4
  78. data/test/unit/util/windows/tc_combine_paths.rb +82 -77
  79. data/test/unit/util/windows/tc_derive_relative_path.rb +98 -93
  80. data/test/unit/util/windows/tc_make_path_absolute.rb +105 -101
  81. data/test/unit/util/windows/tc_make_path_canonical.rb +158 -153
  82. data/test/unit/util/windows/ts_all.rb +4 -4
  83. metadata +9 -8
@@ -2,6 +2,7 @@
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 4), 'lib')
4
4
 
5
+
5
6
  require 'libpath/path/windows'
6
7
 
7
8
  require 'test/unit'
@@ -10,621 +11,625 @@ require 'xqsr3/extensions/test/unit'
10
11
 
11
12
  require 'libpath/internal_/platform'
12
13
 
14
+
13
15
  class Test_existence_of_namespace_LibPath_Path_Windows < Test::Unit::TestCase
14
16
 
15
- def test_LibPath_module_exists
17
+ def test_LibPath_module_exists
16
18
 
17
- assert defined?(::LibPath)
18
- end
19
+ assert defined?(::LibPath)
20
+ end
19
21
 
20
- def test_LibPath_Path_module_exists
22
+ def test_LibPath_Path_module_exists
21
23
 
22
- assert defined?(::LibPath::Path)
23
- end
24
+ assert defined?(::LibPath::Path)
25
+ end
24
26
 
25
- def test_LibPath_Path_Windows_module_exists
27
+ def test_LibPath_Path_Windows_module_exists
26
28
 
27
- assert defined?(::LibPath::Path::Windows)
28
- end
29
+ assert defined?(::LibPath::Path::Windows)
30
+ end
29
31
 
30
- def test_LibPath_Path_Windows_ParsedPath_class_exists
32
+ def test_LibPath_Path_Windows_ParsedPath_class_exists
31
33
 
32
- assert defined?(::LibPath::Path::Windows::ParsedPath)
33
- end
34
+ assert defined?(::LibPath::Path::Windows::ParsedPath)
35
+ end
34
36
  end
35
37
 
36
38
  class Test_LibPath_Path_Windows_ParsedPath < Test::Unit::TestCase
37
39
 
38
- include ::LibPath::Path::Windows
39
-
40
- def test_nil
41
-
42
- assert_raise(::ArgumentError) { ParsedPath.new(nil) }
43
- end
44
-
45
- def test_empty
46
-
47
- assert_raise(::ArgumentError) { ParsedPath.new('') }
48
- end
49
-
50
- def test_root
51
-
52
- pp = ParsedPath.new('C:\\')
53
-
54
- assert_equal 'C:\\', pp.given_path
55
- assert_equal 'C:\\', pp.absolute_path
56
- assert_equal 'C:\\', pp.compare_path
57
- assert_equal 'C:', pp.volume
58
- assert_equal '\\', pp.directory
59
- assert_equal 'C:\\', pp.directory_path
60
- assert_equal 'C:\\', pp.dirname
61
- assert_equal [ '\\' ], pp.directory_parts
62
- assert_nil pp.file_full_name
63
- assert_nil pp.basename
64
- assert_nil pp.file_name_only
65
- assert_nil pp.stem
66
- assert_nil pp.file_extension
67
- assert_nil pp.extension
68
- assert_nil pp.search_directory
69
- assert_nil pp.search_relative_path
70
- assert_nil pp.search_relative_directory_path
71
- assert_nil pp.search_relative_directory_parts
72
-
73
- assert_equal pp.directory, pp.directory_parts.join
74
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
75
- end
76
-
77
- def test_root_lower_drive_letter
78
-
79
- pp = ParsedPath.new('c:\\')
80
-
81
- assert_equal 'c:\\', pp.given_path
82
- assert_equal 'c:\\', pp.absolute_path
83
- assert_equal 'C:\\', pp.compare_path
84
- assert_equal 'c:', pp.volume
85
- assert_equal '\\', pp.directory
86
- assert_equal 'c:\\', pp.directory_path
87
- assert_equal 'c:\\', pp.dirname
88
- assert_equal [ '\\' ], pp.directory_parts
89
- assert_nil pp.file_full_name
90
- assert_nil pp.basename
91
- assert_nil pp.file_name_only
92
- assert_nil pp.stem
93
- assert_nil pp.file_extension
94
- assert_nil pp.extension
95
- assert_nil pp.search_directory
96
- assert_nil pp.search_relative_path
97
- assert_nil pp.search_relative_directory_path
98
- assert_nil pp.search_relative_directory_parts
99
-
100
- assert_equal pp.directory, pp.directory_parts.join
101
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
102
- end
103
-
104
- def test_root_from_srd_1
105
-
106
- srd = 'C:/dir-1/dir-2'
107
-
108
- pp = ParsedPath.new('C:\\', srd)
109
-
110
- assert_equal 'C:\\', pp.given_path
111
- assert_equal 'C:\\', pp.absolute_path
112
- assert_equal 'C:\\', pp.compare_path
113
- assert_equal 'C:', pp.volume
114
- assert_equal '\\', pp.directory
115
- assert_equal 'C:\\', pp.directory_path
116
- assert_equal 'C:\\', pp.dirname
117
- assert_equal [ '\\' ], pp.directory_parts
118
- assert_nil pp.file_full_name
119
- assert_nil pp.basename
120
- assert_nil pp.file_name_only
121
- assert_nil pp.stem
122
- assert_nil pp.file_extension
123
- assert_nil pp.extension
124
- assert_equal 'C:\\dir-1\\dir-2\\', pp.search_directory
125
- assert_equal '..\\..\\', pp.search_relative_path
126
- assert_equal '..\\..\\', pp.search_relative_directory_path
127
- assert_equal [ '..\\', '..\\' ], pp.search_relative_directory_parts
128
-
129
- assert_equal pp.directory, pp.directory_parts.join
130
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
131
- end
132
-
133
- def test_root_UNC_form2
134
-
135
- pp = ParsedPath.new('\\\\server\\share\\')
136
-
137
- assert_equal '\\\\server\\share\\', pp.given_path
138
- assert_equal '\\\\server\\share\\', pp.absolute_path
139
- assert_equal '\\\\server\\share\\', pp.compare_path
140
- assert_equal '\\\\server\\share', pp.volume
141
- assert_equal '\\', pp.directory
142
- assert_equal '\\\\server\\share\\', pp.directory_path
143
- assert_equal '\\\\server\\share\\', pp.dirname
144
- assert_equal [ '\\' ], pp.directory_parts
145
- assert_nil pp.file_full_name
146
- assert_nil pp.basename
147
- assert_nil pp.file_name_only
148
- assert_nil pp.stem
149
- assert_nil pp.file_extension
150
- assert_nil pp.extension
151
- assert_nil pp.search_directory
152
- assert_nil pp.search_relative_path
153
- assert_nil pp.search_relative_directory_path
154
- assert_nil pp.search_relative_directory_parts
155
-
156
- assert_equal pp.directory, pp.directory_parts.join
157
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
158
- end
159
-
160
- def test_root_UNC_form3
161
-
162
- pp = ParsedPath.new('\\\\?\\C:\\')
163
-
164
- assert_equal '\\\\?\\C:\\', pp.given_path
165
- assert_equal '\\\\?\\C:\\', pp.absolute_path
166
- assert_equal '\\\\?\\C:\\', pp.compare_path
167
- assert_equal '\\\\?\\C:', pp.volume
168
- assert_equal '\\', pp.directory
169
- assert_equal '\\\\?\\C:\\', pp.directory_path
170
- assert_equal '\\\\?\\C:\\', pp.dirname
171
- assert_equal [ '\\' ], pp.directory_parts
172
- assert_nil pp.file_full_name
173
- assert_nil pp.basename
174
- assert_nil pp.file_name_only
175
- assert_nil pp.stem
176
- assert_nil pp.file_extension
177
- assert_nil pp.extension
178
- assert_nil pp.search_directory
179
- assert_nil pp.search_relative_path
180
- assert_nil pp.search_relative_directory_path
181
- assert_nil pp.search_relative_directory_parts
182
-
183
- assert_equal pp.directory, pp.directory_parts.join
184
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
185
- end
186
-
187
- def test_root_UNC_form4
188
-
189
- pp = ParsedPath.new('\\\\?\\server\\share\\')
190
-
191
- assert_equal '\\\\?\\server\\share\\', pp.given_path
192
- assert_equal '\\\\?\\server\\share\\', pp.absolute_path
193
- assert_equal '\\\\?\\server\\share\\', pp.compare_path
194
- assert_equal '\\\\?\\server\\share', pp.volume
195
- assert_equal '\\', pp.directory
196
- assert_equal '\\\\?\\server\\share\\', pp.directory_path
197
- assert_equal '\\\\?\\server\\share\\', pp.dirname
198
- assert_equal [ '\\' ], pp.directory_parts
199
- assert_nil pp.file_full_name
200
- assert_nil pp.basename
201
- assert_nil pp.file_name_only
202
- assert_nil pp.stem
203
- assert_nil pp.file_extension
204
- assert_nil pp.extension
205
- assert_nil pp.search_directory
206
- assert_nil pp.search_relative_path
207
- assert_nil pp.search_relative_directory_path
208
- assert_nil pp.search_relative_directory_parts
209
-
210
- assert_equal pp.directory, pp.directory_parts.join
211
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
212
- end
213
-
214
- def test_root_UNC_form5
215
-
216
- pp = ParsedPath.new('\\\\?\\UNC\\server\\share\\')
217
-
218
- assert_equal '\\\\?\\UNC\\server\\share\\', pp.given_path
219
- assert_equal '\\\\?\\UNC\\server\\share\\', pp.absolute_path
220
- assert_equal '\\\\?\\UNC\\server\\share\\', pp.compare_path
221
- assert_equal '\\\\?\\UNC\\server\\share', pp.volume
222
- assert_equal '\\', pp.directory
223
- assert_equal '\\\\?\\UNC\\server\\share\\', pp.directory_path
224
- assert_equal '\\\\?\\UNC\\server\\share\\', pp.dirname
225
- assert_equal [ '\\' ], pp.directory_parts
226
- assert_nil pp.file_full_name
227
- assert_nil pp.basename
228
- assert_nil pp.file_name_only
229
- assert_nil pp.stem
230
- assert_nil pp.file_extension
231
- assert_nil pp.extension
232
- assert_nil pp.search_directory
233
- assert_nil pp.search_relative_path
234
- assert_nil pp.search_relative_directory_path
235
- assert_nil pp.search_relative_directory_parts
236
-
237
- assert_equal pp.directory, pp.directory_parts.join
238
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
239
- end
240
-
241
- def test_root_UNC_form6
242
-
243
- pp = ParsedPath.new('\\\\.\\{some-device-id}\\')
244
-
245
- assert_equal '\\\\.\\{some-device-id}\\', pp.given_path
246
- assert_equal '\\\\.\\{some-device-id}\\', pp.absolute_path
247
- assert_equal '\\\\.\\{some-device-id}\\', pp.compare_path
248
- assert_equal '\\\\.\\{some-device-id}', pp.volume
249
- assert_equal '\\', pp.directory
250
- assert_equal '\\\\.\\{some-device-id}\\', pp.directory_path
251
- assert_equal '\\\\.\\{some-device-id}\\', pp.dirname
252
- assert_equal [ '\\' ], pp.directory_parts
253
- assert_nil pp.file_full_name
254
- assert_nil pp.basename
255
- assert_nil pp.file_name_only
256
- assert_nil pp.stem
257
- assert_nil pp.file_extension
258
- assert_nil pp.extension
259
- assert_nil pp.search_directory
260
- assert_nil pp.search_relative_path
261
- assert_nil pp.search_relative_directory_path
262
- assert_nil pp.search_relative_directory_parts
263
-
264
- assert_equal pp.directory, pp.directory_parts.join
265
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
266
- end
267
-
268
- def test_rooted_one_dir
269
-
270
- pp = ParsedPath.new('G:\\\\abc\\\\')
271
-
272
- assert_equal 'G:\\\\abc\\\\', pp.given_path
273
- assert_equal 'G:\\abc\\', pp.absolute_path
274
- assert_equal 'G:\\ABC\\', pp.compare_path
275
- assert_equal '\\abc\\', pp.directory
276
- assert_equal 'G:', pp.volume
277
- assert_equal 'G:\\abc\\', pp.directory_path
278
- assert_equal 'G:\\abc\\', pp.dirname
279
- assert_equal [ '\\', 'abc\\' ], pp.directory_parts
280
- assert_nil pp.file_full_name
281
- assert_nil pp.basename
282
- assert_nil pp.file_name_only
283
- assert_nil pp.stem
284
- assert_nil pp.file_extension
285
- assert_nil pp.extension
286
- assert_nil pp.search_directory
287
- assert_nil pp.search_relative_path
288
- assert_nil pp.search_relative_directory_path
289
- assert_nil pp.search_relative_directory_parts
290
-
291
- assert_equal pp.directory, pp.directory_parts.join
292
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
293
- end
294
-
295
- def test_rooted_one_dir_with_trailing_dot
296
-
297
- pp = ParsedPath.new('G:\\abc\\.')
298
-
299
- assert_equal 'G:\\abc\\.', pp.given_path
300
- assert_equal 'G:\\abc\\', pp.absolute_path
301
- assert_equal 'G:\\ABC\\', pp.compare_path
302
- assert_equal 'G:', pp.volume
303
- assert_equal '\\abc\\', pp.directory
304
- assert_equal 'G:\\abc\\', pp.directory_path
305
- assert_equal 'G:\\abc\\', pp.dirname
306
- assert_equal [ '\\', 'abc\\' ], pp.directory_parts
307
- assert_nil pp.file_full_name
308
- assert_nil pp.basename
309
- assert_nil pp.file_name_only
310
- assert_nil pp.stem
311
- assert_nil pp.file_extension
312
- assert_nil pp.extension
313
- assert_nil pp.search_directory
314
- assert_nil pp.search_relative_path
315
- assert_nil pp.search_relative_directory_path
316
- assert_nil pp.search_relative_directory_parts
317
-
318
- assert_equal pp.directory, pp.directory_parts.join
319
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
320
- end
321
-
322
- def test_rooted_one_file
323
-
324
- pp = ParsedPath.new('G:\\file.ext')
325
-
326
- assert_equal 'G:\\file.ext', pp.given_path
327
- assert_equal 'G:\\file.ext', pp.absolute_path
328
- assert_equal 'G:\\FILE.EXT', pp.compare_path
329
- assert_equal 'G:', pp.volume
330
- assert_equal '\\', pp.directory
331
- assert_equal 'G:\\', pp.directory_path
332
- assert_equal 'G:\\', pp.dirname
333
- assert_equal [ '\\' ], pp.directory_parts
334
- assert_equal 'file.ext', pp.file_full_name
335
- assert_equal 'file.ext', pp.basename
336
- assert_equal 'file', pp.file_name_only
337
- assert_equal 'file', pp.stem
338
- assert_equal '.ext', pp.file_extension
339
- assert_equal '.ext', pp.extension
340
- assert_nil pp.search_directory
341
- assert_nil pp.search_relative_path
342
- assert_nil pp.search_relative_directory_path
343
- assert_nil pp.search_relative_directory_parts
344
-
345
- assert_equal pp.directory, pp.directory_parts.join
346
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
347
- end
348
-
349
- def test_rooted_one_file_without_extension
350
-
351
- pp = ParsedPath.new('G:\\file')
352
-
353
- assert_equal 'G:\\file', pp.given_path
354
- assert_equal 'G:\\file', pp.absolute_path
355
- assert_equal 'G:\\FILE', pp.compare_path
356
- assert_equal 'G:', pp.volume
357
- assert_equal '\\', pp.directory
358
- assert_equal 'G:\\', pp.directory_path
359
- assert_equal 'G:\\', pp.dirname
360
- assert_equal [ '\\' ], pp.directory_parts
361
- assert_equal 'file', pp.file_full_name
362
- assert_equal 'file', pp.basename
363
- assert_equal 'file', pp.file_name_only
364
- assert_equal 'file', pp.stem
365
- assert_nil pp.file_extension
366
- assert_nil pp.extension
367
- assert_nil pp.search_directory
368
- assert_nil pp.search_relative_path
369
- assert_nil pp.search_relative_directory_path
370
- assert_nil pp.search_relative_directory_parts
371
-
372
- assert_equal pp.directory, pp.directory_parts.join
373
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
374
- end
375
-
376
- def test_rooted_one_file_without_stem
377
-
378
- pp = ParsedPath.new('H:\\.ext')
379
-
380
- assert_equal 'H:\\.ext', pp.given_path
381
- assert_equal 'H:\\.ext', pp.absolute_path
382
- assert_equal 'H:\\.EXT', pp.compare_path
383
- assert_equal 'H:', pp.volume
384
- assert_equal '\\', pp.directory
385
- assert_equal 'H:\\', pp.directory_path
386
- assert_equal 'H:\\', pp.dirname
387
- assert_equal [ '\\' ], pp.directory_parts
388
- assert_equal '.ext', pp.file_full_name
389
- assert_equal '.ext', pp.basename
390
- assert_nil pp.file_name_only
391
- assert_nil pp.stem
392
- assert_equal '.ext', pp.file_extension
393
- assert_equal '.ext', pp.extension
394
- assert_nil pp.search_directory
395
- assert_nil pp.search_relative_path
396
- assert_nil pp.search_relative_directory_path
397
- assert_nil pp.search_relative_directory_parts
398
-
399
- assert_equal pp.directory, pp.directory_parts.join
400
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
401
- end
402
-
403
- def test_rooted_one_long_path
404
-
405
- pp = ParsedPath.new('C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext')
406
-
407
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
408
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
409
- assert_equal 'C:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
410
- assert_equal 'C:', pp.volume
411
- assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
412
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
413
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
414
- assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
415
- assert_equal 'file.ext', pp.file_full_name
416
- assert_equal 'file.ext', pp.basename
417
- assert_equal 'file', pp.file_name_only
418
- assert_equal 'file', pp.stem
419
- assert_equal '.ext', pp.file_extension
420
- assert_equal '.ext', pp.extension
421
- assert_nil pp.search_directory
422
- assert_nil pp.search_relative_path
423
- assert_nil pp.search_relative_directory_path
424
- assert_nil pp.search_relative_directory_parts
425
-
426
- assert_equal pp.directory, pp.directory_parts.join
427
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
428
- end
429
-
430
- def test_rooted_one_long_path_from_srd1
431
-
432
- srd = 'C:\\dir-1\\dir-2\\dir-C\\dir-D'
433
- pp = ParsedPath.new('C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', srd)
434
-
435
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
436
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
437
- assert_equal 'C:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
438
- assert_equal 'C:', pp.volume
439
- assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
440
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
441
- assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
442
- assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
443
- assert_equal 'file.ext', pp.file_full_name
444
- assert_equal 'file.ext', pp.basename
445
- assert_equal 'file', pp.file_name_only
446
- assert_equal 'file', pp.stem
447
- assert_equal '.ext', pp.file_extension
448
- assert_equal '.ext', pp.extension
449
- assert_equal 'C:\\dir-1\\dir-2\\dir-C\\dir-D\\', pp.search_directory
450
- assert_equal '..\\..\\dir-3\\dir-4\\dir-5\\file.ext', pp.search_relative_path
451
- assert_equal '..\\..\\dir-3\\dir-4\\dir-5\\', pp.search_relative_directory_path
452
- assert_equal [ '..\\', '..\\', 'dir-3\\', 'dir-4\\', 'dir-5\\' ], pp.search_relative_directory_parts
453
-
454
- assert_equal pp.directory, pp.directory_parts.join
455
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
456
- end
457
-
458
- def test_rooted_one_long_path_missing_volume
459
-
460
- pp = ParsedPath.new('/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pwd: 'D:\\')
461
-
462
- assert_equal '/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
463
- assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
464
- assert_equal 'D:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
465
- assert_equal 'D:', pp.volume
466
- assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
467
- assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
468
- assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
469
- assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
470
- assert_equal 'file.ext', pp.file_full_name
471
- assert_equal 'file.ext', pp.basename
472
- assert_equal 'file', pp.file_name_only
473
- assert_equal 'file', pp.stem
474
- assert_equal '.ext', pp.file_extension
475
- assert_equal '.ext', pp.extension
476
- assert_nil pp.search_directory
477
- assert_nil pp.search_relative_path
478
- assert_nil pp.search_relative_directory_path
479
- assert_nil pp.search_relative_directory_parts
480
-
481
- assert_equal pp.directory, pp.directory_parts.join
482
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
483
- end
484
-
485
- def test_rooted_one_long_path_with_short_directory_names
486
-
487
- pp = ParsedPath.new('C:/1/2/3/4/./5/6/../file.ext')
488
-
489
- assert_equal 'C:/1/2/3/4/./5/6/../file.ext', pp.given_path
490
- assert_equal 'C:/1/2/3/4/5/file.ext', pp.absolute_path
491
- assert_equal 'C:/1/2/3/4/5/FILE.EXT', pp.compare_path
492
- assert_equal 'C:', pp.volume
493
- assert_equal '/1/2/3/4/5/', pp.directory
494
- assert_equal 'C:/1/2/3/4/5/', pp.directory_path
495
- assert_equal 'C:/1/2/3/4/5/', pp.dirname
496
- assert_equal [ '/', '1/', '2/', '3/', '4/', '5/' ], pp.directory_parts
497
- assert_equal 'file.ext', pp.file_full_name
498
- assert_equal 'file.ext', pp.basename
499
- assert_equal 'file', pp.file_name_only
500
- assert_equal 'file', pp.stem
501
- assert_equal '.ext', pp.file_extension
502
- assert_equal '.ext', pp.extension
503
- assert_nil pp.search_directory
504
- assert_nil pp.search_relative_path
505
- assert_nil pp.search_relative_directory_path
506
- assert_nil pp.search_relative_directory_parts
507
-
508
- assert_equal pp.directory, pp.directory_parts.join
509
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
510
- end
511
-
512
- def test_unrooted_one_file
513
-
514
- pwd = '/some-directory'
515
-
516
- pp = ParsedPath.new('file.ext', pwd: pwd)
517
-
518
- assert_equal 'file.ext', pp.given_path
519
- assert_equal '/some-directory\\file.ext', pp.absolute_path
520
- assert_equal '/SOME-DIRECTORY\\FILE.EXT', pp.compare_path
521
- assert_nil pp.volume
522
- assert_equal '/some-directory\\', pp.directory
523
- assert_equal '/some-directory\\', pp.directory_path
524
- assert_equal '/some-directory\\', pp.dirname
525
- assert_equal [ '/', 'some-directory\\' ], pp.directory_parts
526
- assert_equal 'file.ext', pp.file_full_name
527
- assert_equal 'file.ext', pp.basename
528
- assert_equal 'file', pp.file_name_only
529
- assert_equal 'file', pp.stem
530
- assert_equal '.ext', pp.file_extension
531
- assert_equal '.ext', pp.extension
532
- assert_nil pp.search_directory
533
- assert_nil pp.search_relative_path
534
- assert_nil pp.search_relative_directory_path
535
- assert_nil pp.search_relative_directory_parts
536
-
537
- assert_equal pp.directory, pp.directory_parts.join
538
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
539
- end
540
-
541
- def test_unrooted_dir_file
542
-
543
- pwd = '/some-directory'
544
-
545
- pp = ParsedPath.new('sub-dir/file.ext', pwd: pwd)
546
-
547
- assert_equal 'sub-dir/file.ext', pp.given_path
548
- assert_equal '/some-directory\\sub-dir/file.ext', pp.absolute_path
549
- assert_equal '/SOME-DIRECTORY\\SUB-DIR/FILE.EXT', pp.compare_path
550
- assert_nil pp.volume
551
- assert_equal '/some-directory\\sub-dir/', pp.directory
552
- assert_equal '/some-directory\\sub-dir/', pp.directory_path
553
- assert_equal '/some-directory\\sub-dir/', pp.dirname
554
- assert_equal [ '/', 'some-directory\\', 'sub-dir/' ], pp.directory_parts
555
- assert_equal 'file.ext', pp.file_full_name
556
- assert_equal 'file.ext', pp.basename
557
- assert_equal 'file', pp.file_name_only
558
- assert_equal 'file', pp.stem
559
- assert_equal '.ext', pp.file_extension
560
- assert_equal '.ext', pp.extension
561
- assert_nil pp.search_directory
562
- assert_nil pp.search_relative_path
563
- assert_nil pp.search_relative_directory_path
564
- assert_nil pp.search_relative_directory_parts
565
-
566
- assert_equal pp.directory, pp.directory_parts.join
567
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
568
- end
569
-
570
- def test_unrooted_dir_file_2
571
-
572
- locator = Object.new
573
-
574
- locator.define_singleton_method(:pwd) { '/some-directory' }
575
-
576
- pp = ParsedPath.new('sub-dir/file.ext', locator: locator)
577
-
578
- assert_equal 'sub-dir/file.ext', pp.given_path
579
- assert_equal '/some-directory\\sub-dir/file.ext', pp.absolute_path
580
- assert_equal '/SOME-DIRECTORY\\SUB-DIR/FILE.EXT', pp.compare_path
581
- assert_nil pp.volume
582
- assert_equal '/some-directory\\sub-dir/', pp.directory
583
- assert_equal '/some-directory\\sub-dir/', pp.directory_path
584
- assert_equal '/some-directory\\sub-dir/', pp.dirname
585
- assert_equal [ '/', 'some-directory\\', 'sub-dir/' ], pp.directory_parts
586
- assert_equal 'file.ext', pp.file_full_name
587
- assert_equal 'file.ext', pp.basename
588
- assert_equal 'file', pp.file_name_only
589
- assert_equal 'file', pp.stem
590
- assert_equal '.ext', pp.file_extension
591
- assert_equal '.ext', pp.extension
592
- assert_nil pp.search_directory
593
- assert_nil pp.search_relative_path
594
- assert_nil pp.search_relative_directory_path
595
- assert_nil pp.search_relative_directory_parts
596
-
597
- assert_equal pp.directory, pp.directory_parts.join
598
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
599
- end
600
-
601
- def test_rooted_UNC_form_5
602
-
603
- gp = '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\file.ext'
604
-
605
- pp = ParsedPath.new(gp)
606
-
607
- assert_equal gp, pp.given_path
608
- assert_equal gp, pp.absolute_path
609
- assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\DIR-1\\DIR-1.2\\FILE.EXT', pp.compare_path
610
- assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff', pp.volume
611
- assert_equal '\\dir-1\\dir-1.2\\', pp.directory
612
- assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\', pp.directory_path
613
- assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\', pp.dirname
614
- assert_equal [ '\\', 'dir-1\\', 'dir-1.2\\' ], pp.directory_parts
615
- assert_equal 'file.ext', pp.file_full_name
616
- assert_equal 'file.ext', pp.basename
617
- assert_equal 'file', pp.file_name_only
618
- assert_equal 'file', pp.stem
619
- assert_equal '.ext', pp.file_extension
620
- assert_equal '.ext', pp.extension
621
- assert_nil pp.search_directory
622
- assert_nil pp.search_relative_path
623
- assert_nil pp.search_relative_directory_path
624
- assert_nil pp.search_relative_directory_parts
625
-
626
- assert_equal pp.directory, pp.directory_parts.join
627
- assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
628
- end
40
+ include ::LibPath::Path::Windows
41
+
42
+ def test_nil
43
+
44
+ assert_raise(::ArgumentError) { ParsedPath.new(nil) }
45
+ end
46
+
47
+ def test_empty
48
+
49
+ assert_raise(::ArgumentError) { ParsedPath.new('') }
50
+ end
51
+
52
+ def test_root
53
+
54
+ pp = ParsedPath.new('C:\\')
55
+
56
+ assert_equal 'C:\\', pp.given_path
57
+ assert_equal 'C:\\', pp.absolute_path
58
+ assert_equal 'C:\\', pp.compare_path
59
+ assert_equal 'C:', pp.volume
60
+ assert_equal '\\', pp.directory
61
+ assert_equal 'C:\\', pp.directory_path
62
+ assert_equal 'C:\\', pp.dirname
63
+ assert_equal [ '\\' ], pp.directory_parts
64
+ assert_nil pp.file_full_name
65
+ assert_nil pp.basename
66
+ assert_nil pp.file_name_only
67
+ assert_nil pp.stem
68
+ assert_nil pp.file_extension
69
+ assert_nil pp.extension
70
+ assert_nil pp.search_directory
71
+ assert_nil pp.search_relative_path
72
+ assert_nil pp.search_relative_directory_path
73
+ assert_nil pp.search_relative_directory_parts
74
+
75
+ assert_equal pp.directory, pp.directory_parts.join
76
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
77
+ end
78
+
79
+ def test_root_lower_drive_letter
80
+
81
+ pp = ParsedPath.new('c:\\')
82
+
83
+ assert_equal 'c:\\', pp.given_path
84
+ assert_equal 'c:\\', pp.absolute_path
85
+ assert_equal 'C:\\', pp.compare_path
86
+ assert_equal 'c:', pp.volume
87
+ assert_equal '\\', pp.directory
88
+ assert_equal 'c:\\', pp.directory_path
89
+ assert_equal 'c:\\', pp.dirname
90
+ assert_equal [ '\\' ], pp.directory_parts
91
+ assert_nil pp.file_full_name
92
+ assert_nil pp.basename
93
+ assert_nil pp.file_name_only
94
+ assert_nil pp.stem
95
+ assert_nil pp.file_extension
96
+ assert_nil pp.extension
97
+ assert_nil pp.search_directory
98
+ assert_nil pp.search_relative_path
99
+ assert_nil pp.search_relative_directory_path
100
+ assert_nil pp.search_relative_directory_parts
101
+
102
+ assert_equal pp.directory, pp.directory_parts.join
103
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
104
+ end
105
+
106
+ def test_root_from_srd_1
107
+
108
+ srd = 'C:/dir-1/dir-2'
109
+
110
+ pp = ParsedPath.new('C:\\', srd)
111
+
112
+ assert_equal 'C:\\', pp.given_path
113
+ assert_equal 'C:\\', pp.absolute_path
114
+ assert_equal 'C:\\', pp.compare_path
115
+ assert_equal 'C:', pp.volume
116
+ assert_equal '\\', pp.directory
117
+ assert_equal 'C:\\', pp.directory_path
118
+ assert_equal 'C:\\', pp.dirname
119
+ assert_equal [ '\\' ], pp.directory_parts
120
+ assert_nil pp.file_full_name
121
+ assert_nil pp.basename
122
+ assert_nil pp.file_name_only
123
+ assert_nil pp.stem
124
+ assert_nil pp.file_extension
125
+ assert_nil pp.extension
126
+ assert_equal 'C:\\dir-1\\dir-2\\', pp.search_directory
127
+ assert_equal '..\\..\\', pp.search_relative_path
128
+ assert_equal '..\\..\\', pp.search_relative_directory_path
129
+ assert_equal [ '..\\', '..\\' ], pp.search_relative_directory_parts
130
+
131
+ assert_equal pp.directory, pp.directory_parts.join
132
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
133
+ end
134
+
135
+ def test_root_UNC_form2
136
+
137
+ pp = ParsedPath.new('\\\\server\\share\\')
138
+
139
+ assert_equal '\\\\server\\share\\', pp.given_path
140
+ assert_equal '\\\\server\\share\\', pp.absolute_path
141
+ assert_equal '\\\\server\\share\\', pp.compare_path
142
+ assert_equal '\\\\server\\share', pp.volume
143
+ assert_equal '\\', pp.directory
144
+ assert_equal '\\\\server\\share\\', pp.directory_path
145
+ assert_equal '\\\\server\\share\\', pp.dirname
146
+ assert_equal [ '\\' ], pp.directory_parts
147
+ assert_nil pp.file_full_name
148
+ assert_nil pp.basename
149
+ assert_nil pp.file_name_only
150
+ assert_nil pp.stem
151
+ assert_nil pp.file_extension
152
+ assert_nil pp.extension
153
+ assert_nil pp.search_directory
154
+ assert_nil pp.search_relative_path
155
+ assert_nil pp.search_relative_directory_path
156
+ assert_nil pp.search_relative_directory_parts
157
+
158
+ assert_equal pp.directory, pp.directory_parts.join
159
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
160
+ end
161
+
162
+ def test_root_UNC_form3
163
+
164
+ pp = ParsedPath.new('\\\\?\\C:\\')
165
+
166
+ assert_equal '\\\\?\\C:\\', pp.given_path
167
+ assert_equal '\\\\?\\C:\\', pp.absolute_path
168
+ assert_equal '\\\\?\\C:\\', pp.compare_path
169
+ assert_equal '\\\\?\\C:', pp.volume
170
+ assert_equal '\\', pp.directory
171
+ assert_equal '\\\\?\\C:\\', pp.directory_path
172
+ assert_equal '\\\\?\\C:\\', pp.dirname
173
+ assert_equal [ '\\' ], pp.directory_parts
174
+ assert_nil pp.file_full_name
175
+ assert_nil pp.basename
176
+ assert_nil pp.file_name_only
177
+ assert_nil pp.stem
178
+ assert_nil pp.file_extension
179
+ assert_nil pp.extension
180
+ assert_nil pp.search_directory
181
+ assert_nil pp.search_relative_path
182
+ assert_nil pp.search_relative_directory_path
183
+ assert_nil pp.search_relative_directory_parts
184
+
185
+ assert_equal pp.directory, pp.directory_parts.join
186
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
187
+ end
188
+
189
+ def test_root_UNC_form4
190
+
191
+ pp = ParsedPath.new('\\\\?\\server\\share\\')
192
+
193
+ assert_equal '\\\\?\\server\\share\\', pp.given_path
194
+ assert_equal '\\\\?\\server\\share\\', pp.absolute_path
195
+ assert_equal '\\\\?\\server\\share\\', pp.compare_path
196
+ assert_equal '\\\\?\\server\\share', pp.volume
197
+ assert_equal '\\', pp.directory
198
+ assert_equal '\\\\?\\server\\share\\', pp.directory_path
199
+ assert_equal '\\\\?\\server\\share\\', pp.dirname
200
+ assert_equal [ '\\' ], pp.directory_parts
201
+ assert_nil pp.file_full_name
202
+ assert_nil pp.basename
203
+ assert_nil pp.file_name_only
204
+ assert_nil pp.stem
205
+ assert_nil pp.file_extension
206
+ assert_nil pp.extension
207
+ assert_nil pp.search_directory
208
+ assert_nil pp.search_relative_path
209
+ assert_nil pp.search_relative_directory_path
210
+ assert_nil pp.search_relative_directory_parts
211
+
212
+ assert_equal pp.directory, pp.directory_parts.join
213
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
214
+ end
215
+
216
+ def test_root_UNC_form5
217
+
218
+ pp = ParsedPath.new('\\\\?\\UNC\\server\\share\\')
219
+
220
+ assert_equal '\\\\?\\UNC\\server\\share\\', pp.given_path
221
+ assert_equal '\\\\?\\UNC\\server\\share\\', pp.absolute_path
222
+ assert_equal '\\\\?\\UNC\\server\\share\\', pp.compare_path
223
+ assert_equal '\\\\?\\UNC\\server\\share', pp.volume
224
+ assert_equal '\\', pp.directory
225
+ assert_equal '\\\\?\\UNC\\server\\share\\', pp.directory_path
226
+ assert_equal '\\\\?\\UNC\\server\\share\\', pp.dirname
227
+ assert_equal [ '\\' ], pp.directory_parts
228
+ assert_nil pp.file_full_name
229
+ assert_nil pp.basename
230
+ assert_nil pp.file_name_only
231
+ assert_nil pp.stem
232
+ assert_nil pp.file_extension
233
+ assert_nil pp.extension
234
+ assert_nil pp.search_directory
235
+ assert_nil pp.search_relative_path
236
+ assert_nil pp.search_relative_directory_path
237
+ assert_nil pp.search_relative_directory_parts
238
+
239
+ assert_equal pp.directory, pp.directory_parts.join
240
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
241
+ end
242
+
243
+ def test_root_UNC_form6
244
+
245
+ pp = ParsedPath.new('\\\\.\\{some-device-id}\\')
246
+
247
+ assert_equal '\\\\.\\{some-device-id}\\', pp.given_path
248
+ assert_equal '\\\\.\\{some-device-id}\\', pp.absolute_path
249
+ assert_equal '\\\\.\\{some-device-id}\\', pp.compare_path
250
+ assert_equal '\\\\.\\{some-device-id}', pp.volume
251
+ assert_equal '\\', pp.directory
252
+ assert_equal '\\\\.\\{some-device-id}\\', pp.directory_path
253
+ assert_equal '\\\\.\\{some-device-id}\\', pp.dirname
254
+ assert_equal [ '\\' ], pp.directory_parts
255
+ assert_nil pp.file_full_name
256
+ assert_nil pp.basename
257
+ assert_nil pp.file_name_only
258
+ assert_nil pp.stem
259
+ assert_nil pp.file_extension
260
+ assert_nil pp.extension
261
+ assert_nil pp.search_directory
262
+ assert_nil pp.search_relative_path
263
+ assert_nil pp.search_relative_directory_path
264
+ assert_nil pp.search_relative_directory_parts
265
+
266
+ assert_equal pp.directory, pp.directory_parts.join
267
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
268
+ end
269
+
270
+ def test_rooted_one_dir
271
+
272
+ pp = ParsedPath.new('G:\\\\abc\\\\')
273
+
274
+ assert_equal 'G:\\\\abc\\\\', pp.given_path
275
+ assert_equal 'G:\\abc\\', pp.absolute_path
276
+ assert_equal 'G:\\ABC\\', pp.compare_path
277
+ assert_equal '\\abc\\', pp.directory
278
+ assert_equal 'G:', pp.volume
279
+ assert_equal 'G:\\abc\\', pp.directory_path
280
+ assert_equal 'G:\\abc\\', pp.dirname
281
+ assert_equal [ '\\', 'abc\\' ], pp.directory_parts
282
+ assert_nil pp.file_full_name
283
+ assert_nil pp.basename
284
+ assert_nil pp.file_name_only
285
+ assert_nil pp.stem
286
+ assert_nil pp.file_extension
287
+ assert_nil pp.extension
288
+ assert_nil pp.search_directory
289
+ assert_nil pp.search_relative_path
290
+ assert_nil pp.search_relative_directory_path
291
+ assert_nil pp.search_relative_directory_parts
292
+
293
+ assert_equal pp.directory, pp.directory_parts.join
294
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
295
+ end
296
+
297
+ def test_rooted_one_dir_with_trailing_dot
298
+
299
+ pp = ParsedPath.new('G:\\abc\\.')
300
+
301
+ assert_equal 'G:\\abc\\.', pp.given_path
302
+ assert_equal 'G:\\abc\\', pp.absolute_path
303
+ assert_equal 'G:\\ABC\\', pp.compare_path
304
+ assert_equal 'G:', pp.volume
305
+ assert_equal '\\abc\\', pp.directory
306
+ assert_equal 'G:\\abc\\', pp.directory_path
307
+ assert_equal 'G:\\abc\\', pp.dirname
308
+ assert_equal [ '\\', 'abc\\' ], pp.directory_parts
309
+ assert_nil pp.file_full_name
310
+ assert_nil pp.basename
311
+ assert_nil pp.file_name_only
312
+ assert_nil pp.stem
313
+ assert_nil pp.file_extension
314
+ assert_nil pp.extension
315
+ assert_nil pp.search_directory
316
+ assert_nil pp.search_relative_path
317
+ assert_nil pp.search_relative_directory_path
318
+ assert_nil pp.search_relative_directory_parts
319
+
320
+ assert_equal pp.directory, pp.directory_parts.join
321
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
322
+ end
323
+
324
+ def test_rooted_one_file
325
+
326
+ pp = ParsedPath.new('G:\\file.ext')
327
+
328
+ assert_equal 'G:\\file.ext', pp.given_path
329
+ assert_equal 'G:\\file.ext', pp.absolute_path
330
+ assert_equal 'G:\\FILE.EXT', pp.compare_path
331
+ assert_equal 'G:', pp.volume
332
+ assert_equal '\\', pp.directory
333
+ assert_equal 'G:\\', pp.directory_path
334
+ assert_equal 'G:\\', pp.dirname
335
+ assert_equal [ '\\' ], pp.directory_parts
336
+ assert_equal 'file.ext', pp.file_full_name
337
+ assert_equal 'file.ext', pp.basename
338
+ assert_equal 'file', pp.file_name_only
339
+ assert_equal 'file', pp.stem
340
+ assert_equal '.ext', pp.file_extension
341
+ assert_equal '.ext', pp.extension
342
+ assert_nil pp.search_directory
343
+ assert_nil pp.search_relative_path
344
+ assert_nil pp.search_relative_directory_path
345
+ assert_nil pp.search_relative_directory_parts
346
+
347
+ assert_equal pp.directory, pp.directory_parts.join
348
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
349
+ end
350
+
351
+ def test_rooted_one_file_without_extension
352
+
353
+ pp = ParsedPath.new('G:\\file')
354
+
355
+ assert_equal 'G:\\file', pp.given_path
356
+ assert_equal 'G:\\file', pp.absolute_path
357
+ assert_equal 'G:\\FILE', pp.compare_path
358
+ assert_equal 'G:', pp.volume
359
+ assert_equal '\\', pp.directory
360
+ assert_equal 'G:\\', pp.directory_path
361
+ assert_equal 'G:\\', pp.dirname
362
+ assert_equal [ '\\' ], pp.directory_parts
363
+ assert_equal 'file', pp.file_full_name
364
+ assert_equal 'file', pp.basename
365
+ assert_equal 'file', pp.file_name_only
366
+ assert_equal 'file', pp.stem
367
+ assert_nil pp.file_extension
368
+ assert_nil pp.extension
369
+ assert_nil pp.search_directory
370
+ assert_nil pp.search_relative_path
371
+ assert_nil pp.search_relative_directory_path
372
+ assert_nil pp.search_relative_directory_parts
373
+
374
+ assert_equal pp.directory, pp.directory_parts.join
375
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
376
+ end
377
+
378
+ def test_rooted_one_file_without_stem
379
+
380
+ pp = ParsedPath.new('H:\\.ext')
381
+
382
+ assert_equal 'H:\\.ext', pp.given_path
383
+ assert_equal 'H:\\.ext', pp.absolute_path
384
+ assert_equal 'H:\\.EXT', pp.compare_path
385
+ assert_equal 'H:', pp.volume
386
+ assert_equal '\\', pp.directory
387
+ assert_equal 'H:\\', pp.directory_path
388
+ assert_equal 'H:\\', pp.dirname
389
+ assert_equal [ '\\' ], pp.directory_parts
390
+ assert_equal '.ext', pp.file_full_name
391
+ assert_equal '.ext', pp.basename
392
+ assert_nil pp.file_name_only
393
+ assert_nil pp.stem
394
+ assert_equal '.ext', pp.file_extension
395
+ assert_equal '.ext', pp.extension
396
+ assert_nil pp.search_directory
397
+ assert_nil pp.search_relative_path
398
+ assert_nil pp.search_relative_directory_path
399
+ assert_nil pp.search_relative_directory_parts
400
+
401
+ assert_equal pp.directory, pp.directory_parts.join
402
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
403
+ end
404
+
405
+ def test_rooted_one_long_path
406
+
407
+ pp = ParsedPath.new('C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext')
408
+
409
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
410
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
411
+ assert_equal 'C:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
412
+ assert_equal 'C:', pp.volume
413
+ assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
414
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
415
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
416
+ assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
417
+ assert_equal 'file.ext', pp.file_full_name
418
+ assert_equal 'file.ext', pp.basename
419
+ assert_equal 'file', pp.file_name_only
420
+ assert_equal 'file', pp.stem
421
+ assert_equal '.ext', pp.file_extension
422
+ assert_equal '.ext', pp.extension
423
+ assert_nil pp.search_directory
424
+ assert_nil pp.search_relative_path
425
+ assert_nil pp.search_relative_directory_path
426
+ assert_nil pp.search_relative_directory_parts
427
+
428
+ assert_equal pp.directory, pp.directory_parts.join
429
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
430
+ end
431
+
432
+ def test_rooted_one_long_path_from_srd1
433
+
434
+ srd = 'C:\\dir-1\\dir-2\\dir-C\\dir-D'
435
+ pp = ParsedPath.new('C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', srd)
436
+
437
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
438
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
439
+ assert_equal 'C:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
440
+ assert_equal 'C:', pp.volume
441
+ assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
442
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
443
+ assert_equal 'C:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
444
+ assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
445
+ assert_equal 'file.ext', pp.file_full_name
446
+ assert_equal 'file.ext', pp.basename
447
+ assert_equal 'file', pp.file_name_only
448
+ assert_equal 'file', pp.stem
449
+ assert_equal '.ext', pp.file_extension
450
+ assert_equal '.ext', pp.extension
451
+ assert_equal 'C:\\dir-1\\dir-2\\dir-C\\dir-D\\', pp.search_directory
452
+ assert_equal '..\\..\\dir-3\\dir-4\\dir-5\\file.ext', pp.search_relative_path
453
+ assert_equal '..\\..\\dir-3\\dir-4\\dir-5\\', pp.search_relative_directory_path
454
+ assert_equal [ '..\\', '..\\', 'dir-3\\', 'dir-4\\', 'dir-5\\' ], pp.search_relative_directory_parts
455
+
456
+ assert_equal pp.directory, pp.directory_parts.join
457
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
458
+ end
459
+
460
+ def test_rooted_one_long_path_missing_volume
461
+
462
+ pp = ParsedPath.new('/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pwd: 'D:\\')
463
+
464
+ assert_equal '/dir-1/dir-2/dir-3/dir-4/./dir-5/dir-6/../file.ext', pp.given_path
465
+ assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/file.ext', pp.absolute_path
466
+ assert_equal 'D:/DIR-1/DIR-2/DIR-3/DIR-4/DIR-5/FILE.EXT', pp.compare_path
467
+ assert_equal 'D:', pp.volume
468
+ assert_equal '/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory
469
+ assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.directory_path
470
+ assert_equal 'D:/dir-1/dir-2/dir-3/dir-4/dir-5/', pp.dirname
471
+ assert_equal [ '/', 'dir-1/', 'dir-2/', 'dir-3/', 'dir-4/', 'dir-5/' ], pp.directory_parts
472
+ assert_equal 'file.ext', pp.file_full_name
473
+ assert_equal 'file.ext', pp.basename
474
+ assert_equal 'file', pp.file_name_only
475
+ assert_equal 'file', pp.stem
476
+ assert_equal '.ext', pp.file_extension
477
+ assert_equal '.ext', pp.extension
478
+ assert_nil pp.search_directory
479
+ assert_nil pp.search_relative_path
480
+ assert_nil pp.search_relative_directory_path
481
+ assert_nil pp.search_relative_directory_parts
482
+
483
+ assert_equal pp.directory, pp.directory_parts.join
484
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
485
+ end
486
+
487
+ def test_rooted_one_long_path_with_short_directory_names
488
+
489
+ pp = ParsedPath.new('C:/1/2/3/4/./5/6/../file.ext')
490
+
491
+ assert_equal 'C:/1/2/3/4/./5/6/../file.ext', pp.given_path
492
+ assert_equal 'C:/1/2/3/4/5/file.ext', pp.absolute_path
493
+ assert_equal 'C:/1/2/3/4/5/FILE.EXT', pp.compare_path
494
+ assert_equal 'C:', pp.volume
495
+ assert_equal '/1/2/3/4/5/', pp.directory
496
+ assert_equal 'C:/1/2/3/4/5/', pp.directory_path
497
+ assert_equal 'C:/1/2/3/4/5/', pp.dirname
498
+ assert_equal [ '/', '1/', '2/', '3/', '4/', '5/' ], pp.directory_parts
499
+ assert_equal 'file.ext', pp.file_full_name
500
+ assert_equal 'file.ext', pp.basename
501
+ assert_equal 'file', pp.file_name_only
502
+ assert_equal 'file', pp.stem
503
+ assert_equal '.ext', pp.file_extension
504
+ assert_equal '.ext', pp.extension
505
+ assert_nil pp.search_directory
506
+ assert_nil pp.search_relative_path
507
+ assert_nil pp.search_relative_directory_path
508
+ assert_nil pp.search_relative_directory_parts
509
+
510
+ assert_equal pp.directory, pp.directory_parts.join
511
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
512
+ end
513
+
514
+ def test_unrooted_one_file
515
+
516
+ pwd = '/some-directory'
517
+
518
+ pp = ParsedPath.new('file.ext', pwd: pwd)
519
+
520
+ assert_equal 'file.ext', pp.given_path
521
+ assert_equal '/some-directory\\file.ext', pp.absolute_path
522
+ assert_equal '/SOME-DIRECTORY\\FILE.EXT', pp.compare_path
523
+ assert_nil pp.volume
524
+ assert_equal '/some-directory\\', pp.directory
525
+ assert_equal '/some-directory\\', pp.directory_path
526
+ assert_equal '/some-directory\\', pp.dirname
527
+ assert_equal [ '/', 'some-directory\\' ], pp.directory_parts
528
+ assert_equal 'file.ext', pp.file_full_name
529
+ assert_equal 'file.ext', pp.basename
530
+ assert_equal 'file', pp.file_name_only
531
+ assert_equal 'file', pp.stem
532
+ assert_equal '.ext', pp.file_extension
533
+ assert_equal '.ext', pp.extension
534
+ assert_nil pp.search_directory
535
+ assert_nil pp.search_relative_path
536
+ assert_nil pp.search_relative_directory_path
537
+ assert_nil pp.search_relative_directory_parts
538
+
539
+ assert_equal pp.directory, pp.directory_parts.join
540
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
541
+ end
542
+
543
+ def test_unrooted_dir_file
544
+
545
+ pwd = '/some-directory'
546
+
547
+ pp = ParsedPath.new('sub-dir/file.ext', pwd: pwd)
548
+
549
+ assert_equal 'sub-dir/file.ext', pp.given_path
550
+ assert_equal '/some-directory\\sub-dir/file.ext', pp.absolute_path
551
+ assert_equal '/SOME-DIRECTORY\\SUB-DIR/FILE.EXT', pp.compare_path
552
+ assert_nil pp.volume
553
+ assert_equal '/some-directory\\sub-dir/', pp.directory
554
+ assert_equal '/some-directory\\sub-dir/', pp.directory_path
555
+ assert_equal '/some-directory\\sub-dir/', pp.dirname
556
+ assert_equal [ '/', 'some-directory\\', 'sub-dir/' ], pp.directory_parts
557
+ assert_equal 'file.ext', pp.file_full_name
558
+ assert_equal 'file.ext', pp.basename
559
+ assert_equal 'file', pp.file_name_only
560
+ assert_equal 'file', pp.stem
561
+ assert_equal '.ext', pp.file_extension
562
+ assert_equal '.ext', pp.extension
563
+ assert_nil pp.search_directory
564
+ assert_nil pp.search_relative_path
565
+ assert_nil pp.search_relative_directory_path
566
+ assert_nil pp.search_relative_directory_parts
567
+
568
+ assert_equal pp.directory, pp.directory_parts.join
569
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
570
+ end
571
+
572
+ def test_unrooted_dir_file_2
573
+
574
+ locator = Object.new
575
+
576
+ locator.define_singleton_method(:pwd) { '/some-directory' }
577
+
578
+ pp = ParsedPath.new('sub-dir/file.ext', locator: locator)
579
+
580
+ assert_equal 'sub-dir/file.ext', pp.given_path
581
+ assert_equal '/some-directory\\sub-dir/file.ext', pp.absolute_path
582
+ assert_equal '/SOME-DIRECTORY\\SUB-DIR/FILE.EXT', pp.compare_path
583
+ assert_nil pp.volume
584
+ assert_equal '/some-directory\\sub-dir/', pp.directory
585
+ assert_equal '/some-directory\\sub-dir/', pp.directory_path
586
+ assert_equal '/some-directory\\sub-dir/', pp.dirname
587
+ assert_equal [ '/', 'some-directory\\', 'sub-dir/' ], pp.directory_parts
588
+ assert_equal 'file.ext', pp.file_full_name
589
+ assert_equal 'file.ext', pp.basename
590
+ assert_equal 'file', pp.file_name_only
591
+ assert_equal 'file', pp.stem
592
+ assert_equal '.ext', pp.file_extension
593
+ assert_equal '.ext', pp.extension
594
+ assert_nil pp.search_directory
595
+ assert_nil pp.search_relative_path
596
+ assert_nil pp.search_relative_directory_path
597
+ assert_nil pp.search_relative_directory_parts
598
+
599
+ assert_equal pp.directory, pp.directory_parts.join
600
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
601
+ end
602
+
603
+ def test_rooted_UNC_form_5
604
+
605
+ gp = '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\file.ext'
606
+
607
+ pp = ParsedPath.new(gp)
608
+
609
+ assert_equal gp, pp.given_path
610
+ assert_equal gp, pp.absolute_path
611
+ assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\DIR-1\\DIR-1.2\\FILE.EXT', pp.compare_path
612
+ assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff', pp.volume
613
+ assert_equal '\\dir-1\\dir-1.2\\', pp.directory
614
+ assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\', pp.directory_path
615
+ assert_equal '\\\\?\\UNC\\127.0.0.1:3000\\shared-stuff\\dir-1\\dir-1.2\\', pp.dirname
616
+ assert_equal [ '\\', 'dir-1\\', 'dir-1.2\\' ], pp.directory_parts
617
+ assert_equal 'file.ext', pp.file_full_name
618
+ assert_equal 'file.ext', pp.basename
619
+ assert_equal 'file', pp.file_name_only
620
+ assert_equal 'file', pp.stem
621
+ assert_equal '.ext', pp.file_extension
622
+ assert_equal '.ext', pp.extension
623
+ assert_nil pp.search_directory
624
+ assert_nil pp.search_relative_path
625
+ assert_nil pp.search_relative_directory_path
626
+ assert_nil pp.search_relative_directory_parts
627
+
628
+ assert_equal pp.directory, pp.directory_parts.join
629
+ assert_equal pp.absolute_path, "#{pp.volume}#{pp.directory_parts.join}#{pp.basename}"
630
+ end
629
631
  end
630
632
 
633
+
634
+ # ############################## end of file ############################# #
635
+