recls-ruby 2.8.2 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +57 -10
  3. data/examples/find_files_and_directories.md +77 -0
  4. data/examples/find_files_and_directories.rb +19 -0
  5. data/examples/find_files_and_directories.recursive.md +304 -0
  6. data/examples/find_files_and_directories.recursive.rb +19 -0
  7. data/examples/show_hidden_files.md +39 -0
  8. data/examples/show_hidden_files.rb +2 -2
  9. data/examples/show_readonly_files.md +35 -0
  10. data/examples/show_readonly_files.rb +2 -2
  11. data/lib/recls.rb +2 -0
  12. data/lib/recls/api.rb +70 -3
  13. data/lib/recls/combine_paths_1.rb +70 -0
  14. data/lib/recls/combine_paths_2plus.rb +76 -0
  15. data/lib/recls/entry.rb +40 -4
  16. data/lib/recls/file_search.rb +48 -14
  17. data/lib/recls/flags.rb +21 -4
  18. data/lib/recls/foreach.rb +45 -6
  19. data/lib/recls/obsolete.rb +119 -0
  20. data/lib/recls/recls.rb +27 -56
  21. data/lib/recls/stat.rb +96 -24
  22. data/lib/recls/util.rb +74 -23
  23. data/lib/recls/version.rb +10 -4
  24. data/lib/recls/ximpl/os.rb +29 -15
  25. data/lib/recls/ximpl/unix.rb +29 -16
  26. data/lib/recls/ximpl/util.rb +141 -39
  27. data/lib/recls/ximpl/windows.rb +56 -25
  28. data/test/fixtures/readonly/file-1 +0 -0
  29. data/test/fixtures/readonly/file-2 +0 -0
  30. data/test/scratch/test_display_parts.rb +9 -9
  31. data/test/scratch/test_entry.rb +11 -9
  32. data/test/scratch/test_files_and_directories.rb +17 -14
  33. data/test/scratch/test_foreach.rb +0 -3
  34. data/test/scratch/test_module_function.rb +10 -10
  35. data/test/scratch/test_pattern_arrays.rb +32 -0
  36. data/test/scratch/test_show_dev_and_ino.rb +1 -1
  37. data/test/scratch/test_show_hidden.rb +3 -3
  38. data/test/unit/tc_recls_util.rb +6 -0
  39. data/test/unit/tc_recls_ximpl_util.rb +156 -101
  40. data/test/unit/ts_all.rb +11 -9
  41. metadata +36 -11
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  #! /usr/bin/ruby
2
2
  #
3
- # test Recls entry methods
3
+ # test Recls entry methods showing parts
4
4
 
5
5
  $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
6
6
 
@@ -19,11 +19,11 @@ Recls::FileSearch.new(root_dir, patterns, Recls::FILES | Recls::RECURSIVE).each
19
19
  puts fe.short_path
20
20
  puts fe.directory_path
21
21
  puts drive
22
- puts "".ljust(drive ? drive.size : 0) + fe.directory
23
- puts "".ljust(fe.directory_path.size) + fe.file
24
- puts "".ljust(fe.directory_path.size) + "#{fe.file_short_name}"
25
- puts "".ljust(fe.directory_path.size) + fe.stem
26
- puts "".ljust(fe.directory_path.size + fe.stem.size) + fe.extension
22
+ puts "".ljust(drive ? drive.size : 0) + fe.directory.to_s
23
+ puts "".ljust(fe.directory_path.size) + fe.file.to_s
24
+ puts "".ljust(fe.directory_path.size) + fe.file_short_name.to_s
25
+ puts "".ljust(fe.directory_path.size) + fe.stem.to_s
26
+ puts "".ljust(fe.directory_path.size + fe.stem.size) + fe.extension.to_s
27
27
  n = drive.size
28
28
  fe.directory_parts.each do |part|
29
29
 
@@ -32,9 +32,9 @@ Recls::FileSearch.new(root_dir, patterns, Recls::FILES | Recls::RECURSIVE).each
32
32
  end
33
33
 
34
34
  puts fe.search_directory
35
- puts "".ljust(fe.search_directory.size) + fe.search_relative_path
36
- puts "".ljust(fe.search_directory.size) + fe.search_relative_directory_path
37
- puts "".ljust(fe.search_directory.size) + fe.search_relative_directory
35
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_path.to_s
36
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_directory_path.to_s
37
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_directory.to_s
38
38
 
39
39
  n = fe.search_directory.size
40
40
  fe.search_relative_directory_parts.each do |part|
@@ -15,6 +15,7 @@ def show_entry f
15
15
  puts "entry:"
16
16
  puts "\t#{'(entry)'.ljust(20)}\t#{f}"
17
17
  puts "\t#{'f.path'.ljust(20)}\t#{f.path}"
18
+ puts "\t#{'f.compare_path'.ljust(20)}\t#{f.compare_path}"
18
19
  puts "\t#{'f.drive'.ljust(20)}\t#{f.drive}"
19
20
  puts "\t#{'f.directory_path'.ljust(20)}\t#{f.directory_path}"
20
21
  puts "\t#{'f.directory'.ljust(20)}\t#{f.directory}"
@@ -23,11 +24,6 @@ puts "\t#{'f.directory_parts'.ljust(20)}\t[#{directory_parts.size}]"
23
24
  directory_parts.each do |part|
24
25
  puts "\t#{''.ljust(20)}\t\t#{part}"
25
26
  end
26
- search_relative_directory_parts = f.search_relative_directory_parts
27
- puts "\t#{'f.search_relative_directory_parts'.ljust(20)}\t[#{search_relative_directory_parts.size}]"
28
- search_relative_directory_parts.each do |part|
29
- puts "\t#{''.ljust(20)}\t\t#{part}"
30
- end
31
27
  puts "\t#{'f.file_full_name'.ljust(20)}\t#{f.file_full_name}"
32
28
  puts "\t#{'f.file_short_name'.ljust(20)}\t#{f.file_short_name}"
33
29
  puts "\t#{'f.file_name_only'.ljust(20)}\t#{f.file_name_only}"
@@ -37,6 +33,11 @@ puts "\t#{'f.search_directory'.ljust(20)}\t#{f.search_directory}"
37
33
  puts "\t#{'f.search_relative_path'.ljust(20)}\t#{f.search_relative_path}"
38
34
  puts "\t#{'f.search_relative_directory'.ljust(20)}\t#{f.search_relative_directory}"
39
35
  puts "\t#{'f.search_relative_directory_path'.ljust(20)}\t#{f.search_relative_directory_path}"
36
+ search_relative_directory_parts = f.search_relative_directory_parts
37
+ puts "\t#{'f.search_relative_directory_parts'.ljust(20)}\t[#{search_relative_directory_parts.size}]"
38
+ search_relative_directory_parts.each do |part|
39
+ puts "\t#{''.ljust(20)}\t\t#{part}"
40
+ end
40
41
 
41
42
  puts "\t#{'f.size'.ljust(20)}\t#{f.size}"
42
43
 
@@ -44,6 +45,7 @@ puts "\t#{'f.exist?'.ljust(20)}\t#{f.exist?}"
44
45
  puts "\t#{'f.hidden?'.ljust(20)}\t#{f.hidden?}"
45
46
  puts "\t#{'f.readonly?'.ljust(20)}\t#{f.readonly?}"
46
47
  puts "\t#{'f.directory?'.ljust(20)}\t#{f.directory?}"
48
+ puts "\t#{'f.dir?'.ljust(20)}\t#{f.dir?}"
47
49
  puts "\t#{'f.file?'.ljust(20)}\t#{f.file?}"
48
50
  puts "\t#{'f.socket?'.ljust(20)}\t#{f.socket?}"
49
51
 
@@ -52,12 +54,12 @@ puts "\t#{'f.last_access_time'.ljust(20)}\t#{f.last_access_time}"
52
54
  end
53
55
 
54
56
  puts
55
- puts "stat of '.':"
56
- show_entry Recls::stat '.'
57
+ puts "stat of '.' (from '.'):"
58
+ show_entry Recls::stat '.', '.'
57
59
 
58
60
  puts
59
- puts "stat of '~':"
60
- show_entry Recls::stat '~'
61
+ puts "stat of '~' (from '.'):"
62
+ show_entry Recls::stat '~', '.'
61
63
 
62
64
  puts
63
65
  puts "directories:"
@@ -1,23 +1,15 @@
1
- #!/usr/bin/ruby
2
-
3
- #############################################################################
4
- # File: ./test/scratch/test_files_and_directories.rb
5
- #
6
- # Purpose: COMPLETE_ME
7
- #
8
- # Created: 09 06 2016
9
- # Updated: 09 06 2016
1
+ #! /usr/bin/ruby
10
2
  #
11
- # Author: Matthew Wilson
12
- #
13
- # Copyright: <<TBD>>
14
- #
15
- #############################################################################
3
+ # test Search between files and directories
16
4
 
17
5
  $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
18
6
 
19
7
  require 'recls'
20
8
 
9
+ puts
10
+ puts "adding own trailing slash:"
11
+ puts
12
+
21
13
  Recls::FileSearch.new(nil, nil, Recls::FILES | Recls::DIRECTORIES | Recls::RECURSIVE).each do |fe|
22
14
 
23
15
  path = fe.search_relative_path
@@ -31,3 +23,14 @@ Recls::FileSearch.new(nil, nil, Recls::FILES | Recls::DIRECTORIES | Recls::RECUR
31
23
  end
32
24
  end
33
25
 
26
+ puts
27
+ puts "specifying flag for trailing slash:"
28
+ puts
29
+
30
+ Recls::FileSearch.new(nil, nil, Recls::FILES | Recls::DIRECTORIES | Recls::RECURSIVE | Recls::MARK_DIRECTORIES).each do |fe|
31
+
32
+ path = fe.search_relative_path
33
+
34
+ puts path
35
+ end
36
+
@@ -4,10 +4,7 @@
4
4
 
5
5
  $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
6
6
 
7
-
8
- #require 'recls/util'
9
7
  require 'recls/foreach'
10
- #require 'recls'
11
8
 
12
9
  puts
13
10
  puts "with given block:"
@@ -1,6 +1,6 @@
1
- #!/usr/bin/ruby
1
+ #! /usr/bin/ruby
2
2
  #
3
- # test Recls entry methods
3
+ # test Recls entry methods showing parts, via module function
4
4
 
5
5
  $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
6
6
 
@@ -19,11 +19,11 @@ Recls.FileSearch(root_dir, patterns, flags: Recls::FILES).each do |fe|
19
19
  puts fe.short_path
20
20
  puts fe.directory_path
21
21
  puts drive
22
- puts "".ljust(drive ? drive.size : 0) + fe.directory
23
- puts "".ljust(fe.directory_path.size) + fe.file
24
- puts "".ljust(fe.directory_path.size) + "#{fe.file_short_name}"
25
- puts "".ljust(fe.directory_path.size) + fe.stem
26
- puts "".ljust(fe.directory_path.size + fe.stem.size) + fe.extension
22
+ puts "".ljust(drive ? drive.size : 0) + fe.directory.to_s
23
+ puts "".ljust(fe.directory_path.size) + fe.file.to_s
24
+ puts "".ljust(fe.directory_path.size) + fe.file_short_name.to_s
25
+ puts "".ljust(fe.directory_path.size) + fe.stem.to_s
26
+ puts "".ljust(fe.directory_path.size + fe.stem.size) + fe.extension.to_s
27
27
  n = drive.size
28
28
  fe.directory_parts.each do |part|
29
29
 
@@ -32,9 +32,9 @@ Recls.FileSearch(root_dir, patterns, flags: Recls::FILES).each do |fe|
32
32
  end
33
33
 
34
34
  puts fe.search_directory
35
- puts "".ljust(fe.search_directory.size) + fe.search_relative_path
36
- puts "".ljust(fe.search_directory.size) + fe.search_relative_directory_path
37
- puts "".ljust(fe.search_directory.size) + fe.search_relative_directory
35
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_path.to_s
36
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_directory_path.to_s
37
+ puts "".ljust(fe.search_directory.size) + fe.search_relative_directory.to_s
38
38
 
39
39
  n = fe.search_directory.size
40
40
  fe.search_relative_directory_parts.each do |part|
@@ -0,0 +1,32 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # test Recls entry methods showing parts
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
6
+
7
+ require 'recls'
8
+
9
+ root_dir = File.join(File.dirname(__FILE__), '../..')
10
+ patterns_a = %w{ *.rb *.md }
11
+ patterns_s = patterns_a.join('|')
12
+
13
+
14
+ puts
15
+ puts "Searching for pattern string '#{patterns_s}':"
16
+
17
+ Recls::FileSearch.new(root_dir, patterns_s, Recls::FILES | Recls::RECURSIVE).each do |fe|
18
+
19
+ puts fe.search_relative_path
20
+ end
21
+
22
+
23
+
24
+ puts
25
+ puts "Searching for pattern array '#{patterns_a}':"
26
+
27
+ Recls::FileSearch.new(root_dir, patterns_a, Recls::FILES | Recls::RECURSIVE).each do |fe|
28
+
29
+ puts fe.search_relative_path
30
+ end
31
+
32
+
@@ -1,4 +1,4 @@
1
- #!/usr/bin/ruby
1
+ #! /usr/bin/ruby
2
2
  #
3
3
  # Demonstrates use of dev and ino attributes
4
4
 
@@ -8,14 +8,14 @@ require 'recls'
8
8
 
9
9
  puts
10
10
  puts "Hidden directories:"
11
- Recls::FileSearch.new(nil, nil, Recls::RECURSIVE | Recls::DIRECTORIES | Recls::SHOW_HIDDEN).each do |fe|
11
+ Recls.file_rsearch(nil, nil, Recls::DIRECTORIES | Recls::SHOW_HIDDEN).each do |fe|
12
12
 
13
13
  puts "\t#{fe.search_relative_path}" if fe.hidden?
14
14
  end
15
15
 
16
16
  puts
17
17
  puts "Hidden files:"
18
- Recls::FileSearch.new(nil, nil, Recls::RECURSIVE | Recls::FILES | Recls::SHOW_HIDDEN).each do |fe|
18
+ Recls.file_search(nil, nil, Recls::RECURSIVE | Recls::FILES | Recls::SHOW_HIDDEN).each do |fe|
19
19
 
20
20
  puts "\t#{fe.search_relative_path}" if fe.hidden?
21
21
  end
@@ -23,7 +23,7 @@ end
23
23
 
24
24
  puts
25
25
  puts "Hidden directories & files:"
26
- Recls::FileSearch.new(nil, nil, Recls::RECURSIVE | Recls::DIRECTORIES | Recls::FILES | Recls::MARK_DIRECTORIES | Recls::SHOW_HIDDEN).each do |fe|
26
+ Recls.file_search(nil, nil, Recls::RECURSIVE | Recls::DIRECTORIES | Recls::FILES | Recls::MARK_DIRECTORIES | Recls::SHOW_HIDDEN).each do |fe|
27
27
 
28
28
  puts "\t#{fe.search_relative_path}" if fe.hidden?
29
29
  end
@@ -56,6 +56,7 @@ class Test_combine_paths < Test::Unit::TestCase
56
56
  assert_equal 'abc/def/ghi', Recls.combine_paths('abc/', 'def/ghi')
57
57
  assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/.', 'def/ghi')
58
58
  assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/./', 'def/ghi')
59
+ if RUBY_VERSION >= '2'
59
60
  assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/.', 'def/ghi', clean_path: false)
60
61
  assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/./', 'def/ghi', clean: false)
61
62
  assert_equal 'abc/def/ghi', Recls.combine_paths('abc/.', 'def/ghi', clean_path: true)
@@ -63,16 +64,19 @@ class Test_combine_paths < Test::Unit::TestCase
63
64
  assert_equal 'abc/def/ghi', Recls.combine_paths('abc/./.', 'def/ghi', clean_path: true)
64
65
  assert_equal 'abc/../def/ghi', Recls.combine_paths('abc/..', 'def/ghi')
65
66
  assert_equal 'def/ghi', Recls.combine_paths('abc/..', 'def/ghi', clean_path: true)
67
+ end
66
68
  end
67
69
 
68
70
  def test_multiple_relative
69
71
 
72
+ if RUBY_VERSION >= '2'
70
73
  assert_equal 'a/b/c/d/e/f/g', Recls.combine_paths('a', 'b', 'c', 'd/e/f/', 'g', clean: false)
71
74
  assert_equal 'a/b/c/d/e/f/g', Recls.combine_paths('a', 'b', 'c', 'd/e/f/', 'g', clean: true)
72
75
 
73
76
  assert_equal 'a/b/c/../d/e/f/g', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g', clean: false)
74
77
  assert_equal 'a/b/d/e/f/g', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g/', clean: true)
75
78
  assert_equal 'a/b/d/e/f/g/', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g/', canonicalise: true)
79
+ end
76
80
  end
77
81
 
78
82
  def test_various_absolute_placings
@@ -87,8 +91,10 @@ class Test_combine_paths < Test::Unit::TestCase
87
91
 
88
92
  assert_equal '/f/g', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g')
89
93
  assert_equal '/f/g/', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/')
94
+ if RUBY_VERSION >= '2'
90
95
  assert_equal '/f/g', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/', clean: true)
91
96
  assert_equal '/f/g/', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/', canonicalise: true)
97
+ end
92
98
  end
93
99
  end
94
100
 
@@ -708,195 +708,250 @@ class Test_Recls_Ximpl_derive_relative_path < Test::Unit::TestCase
708
708
 
709
709
  end
710
710
 
711
+ M = Recls::Ximpl
712
+
713
+ def test_libpath_cases_test_nils_and_empties
714
+
715
+ # to get nowhere from nowhere, go nowhere
716
+ assert_nil M.derive_relative_path(nil, nil)
717
+ assert_nil M.derive_relative_path('', nil)
718
+ assert_nil M.derive_relative_path('', '')
719
+ assert_nil M.derive_relative_path(nil, '')
720
+
721
+ # to get somewhere from nowhere, just go there
722
+ assert_equal 'abc', M.derive_relative_path(nil, 'abc')
723
+ assert_equal 'abc', M.derive_relative_path('', 'abc')
724
+
725
+ # to get nowhere from anywhere else, go nowhere
726
+ assert_nil M.derive_relative_path('dir', nil)
727
+ assert_nil M.derive_relative_path('dir', '')
728
+ end
729
+
730
+ def test_libpath_cases_test_same_location
731
+
732
+ assert_equal '.', M.derive_relative_path('abc', 'abc')
733
+ assert_equal './', M.derive_relative_path('abc/', 'abc/')
734
+ assert_equal './', M.derive_relative_path('abc', 'abc/')
735
+
736
+ assert_equal './', M.derive_relative_path('/', '/')
737
+
738
+ =begin
739
+
740
+ assert_equal '.', M.derive_relative_path('./abc', 'abc')
741
+ =end
742
+ assert_equal '.', M.derive_relative_path('./abc/', 'abc')
743
+ =begin
744
+
745
+ assert_equal './', M.derive_relative_path('./abc', 'abc/')
746
+ =end
747
+ assert_equal './', M.derive_relative_path('./abc/', 'abc/')
748
+ end
749
+
750
+ def test_libpath_cases_test_one_above
751
+
752
+ =begin
753
+
754
+ assert_equal '..', M.derive_relative_path('.', '..')
755
+ =end
756
+ end
757
+
711
758
  def test_absolute_proper_subset
712
759
 
713
- assert_equal('abc', Recls::Ximpl::derive_relative_path('/dir1/dir2', '/dir1/dir2/abc'))
714
- assert_equal('abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/', '/dir1/dir2/abc'))
715
- assert_equal('abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2', '/dir1/dir2/abc/'))
716
- assert_equal('abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2/', '/dir1/dir2/abc/'))
760
+ assert_equal('abc', Recls::Ximpl.derive_relative_path('/dir1/dir2', '/dir1/dir2/abc'))
761
+ assert_equal('abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/', '/dir1/dir2/abc'))
762
+ assert_equal('abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2', '/dir1/dir2/abc/'))
763
+ assert_equal('abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2/', '/dir1/dir2/abc/'))
717
764
 
718
- assert_equal('abc', Recls::Ximpl::derive_relative_path('dir1/dir2', 'dir1/dir2/abc'))
719
- assert_equal('abc', Recls::Ximpl::derive_relative_path('dir1/dir2/', 'dir1/dir2/abc'))
720
- assert_equal('abc/', Recls::Ximpl::derive_relative_path('dir1/dir2', 'dir1/dir2/abc/'))
721
- assert_equal('abc/', Recls::Ximpl::derive_relative_path('dir1/dir2/', 'dir1/dir2/abc/'))
765
+ assert_equal('abc', Recls::Ximpl.derive_relative_path('dir1/dir2', 'dir1/dir2/abc'))
766
+ assert_equal('abc', Recls::Ximpl.derive_relative_path('dir1/dir2/', 'dir1/dir2/abc'))
767
+ assert_equal('abc/', Recls::Ximpl.derive_relative_path('dir1/dir2', 'dir1/dir2/abc/'))
768
+ assert_equal('abc/', Recls::Ximpl.derive_relative_path('dir1/dir2/', 'dir1/dir2/abc/'))
722
769
 
723
- # assert_equal('/dir/dir2/abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc', 'dir1/dir2'))
724
- # assert_equal('/dir/dir2/abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc', 'dir1/dir2/'))
770
+ =begin
725
771
 
772
+ assert_equal('/dir/dir2/abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc', 'dir1/dir2'))
773
+ assert_equal('/dir/dir2/abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc', 'dir1/dir2/'))
774
+ =end
726
775
  end
727
776
 
728
777
  def test_absolute_proper_subset_2
729
778
 
730
- assert_equal('c++', Recls::Ximpl::derive_relative_path('/dir1/dir2', '/dir1/dir2/c++'))
731
- assert_equal('c++', Recls::Ximpl::derive_relative_path('/dir1/dir2/', '/dir1/dir2/c++'))
779
+ assert_equal('c++', Recls::Ximpl.derive_relative_path('/dir1/dir2', '/dir1/dir2/c++'))
780
+ assert_equal('c++', Recls::Ximpl.derive_relative_path('/dir1/dir2/', '/dir1/dir2/c++'))
732
781
 
733
- assert_equal('c++', Recls::Ximpl::derive_relative_path('dir1/dir2', 'dir1/dir2/c++'))
734
- assert_equal('c++', Recls::Ximpl::derive_relative_path('dir1/dir2/', 'dir1/dir2/c++'))
782
+ assert_equal('c++', Recls::Ximpl.derive_relative_path('dir1/dir2', 'dir1/dir2/c++'))
783
+ assert_equal('c++', Recls::Ximpl.derive_relative_path('dir1/dir2/', 'dir1/dir2/c++'))
735
784
 
736
785
  end
737
786
 
738
787
  def test_absolute_same_1
739
788
 
740
- assert_equal('.', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc', '/dir1/dir2/abc'))
741
- assert_equal('./', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc', '/dir1/dir2/abc/'))
742
- assert_equal('.', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc/', '/dir1/dir2/abc'))
743
- assert_equal('./', Recls::Ximpl::derive_relative_path('/dir1/dir2/abc/', '/dir1/dir2/abc/'))
789
+ assert_equal('.', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc', '/dir1/dir2/abc'))
790
+ assert_equal('./', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc', '/dir1/dir2/abc/'))
791
+ assert_equal('.', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc/', '/dir1/dir2/abc'))
792
+ assert_equal('./', Recls::Ximpl.derive_relative_path('/dir1/dir2/abc/', '/dir1/dir2/abc/'))
744
793
 
745
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/abc', 'dir1/dir2/abc'))
746
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/abc', 'dir1/dir2/abc/'))
747
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/abc/', 'dir1/dir2/abc'))
748
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/abc/', 'dir1/dir2/abc/'))
794
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/abc', 'dir1/dir2/abc'))
795
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/abc', 'dir1/dir2/abc/'))
796
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/abc/', 'dir1/dir2/abc'))
797
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/abc/', 'dir1/dir2/abc/'))
749
798
 
750
799
  end
751
800
 
752
801
  def test_absolute_same_2
753
802
 
754
- assert_equal('.', Recls::Ximpl::derive_relative_path('/dir1', '/dir1'))
755
- assert_equal('.', Recls::Ximpl::derive_relative_path('/dir1/', '/dir1'))
803
+ assert_equal('.', Recls::Ximpl.derive_relative_path('/dir1', '/dir1'))
804
+ assert_equal('.', Recls::Ximpl.derive_relative_path('/dir1/', '/dir1'))
756
805
 
757
806
  end
758
807
 
759
808
  def test_absolute_same_3
760
809
 
761
- assert_equal('./', Recls::Ximpl::derive_relative_path('/', '/'))
810
+ assert_equal('./', Recls::Ximpl.derive_relative_path('/', '/'))
762
811
 
763
812
  end
764
813
 
765
814
  def test_different_sub_trees_1
766
815
 
767
- assert_equal('../abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/abc'))
768
- assert_equal('../abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/abc/'))
769
- assert_equal('../abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/abc'))
770
- assert_equal('../abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/abc/'))
816
+ assert_equal('../abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/abc'))
817
+ assert_equal('../abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/abc/'))
818
+ assert_equal('../abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/abc'))
819
+ assert_equal('../abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/abc/'))
771
820
 
772
821
  end
773
822
 
774
823
  def test_different_sub_trees_2
775
824
 
776
- assert_equal('../abc', Recls::Ximpl::derive_relative_path('/ref', '/abc'))
777
- assert_equal('../abc/', Recls::Ximpl::derive_relative_path('/ref', '/abc/'))
778
- assert_equal('../abc', Recls::Ximpl::derive_relative_path('/ref/', '/abc'))
779
- assert_equal('../abc/', Recls::Ximpl::derive_relative_path('/ref/', '/abc/'))
825
+ assert_equal('../abc', Recls::Ximpl.derive_relative_path('/ref', '/abc'))
826
+ assert_equal('../abc/', Recls::Ximpl.derive_relative_path('/ref', '/abc/'))
827
+ assert_equal('../abc', Recls::Ximpl.derive_relative_path('/ref/', '/abc'))
828
+ assert_equal('../abc/', Recls::Ximpl.derive_relative_path('/ref/', '/abc/'))
780
829
 
781
830
  end
782
831
 
783
832
  def test_different_sub_trees_3
784
833
 
785
- assert_equal('../../dir3/abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir3/abc'))
786
- assert_equal('../../dir3/abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir3/abc/'))
787
- assert_equal('../../dir3/abc', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir3/abc'))
788
- assert_equal('../../dir3/abc/', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir3/abc/'))
834
+ assert_equal('../../dir3/abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir3/abc'))
835
+ assert_equal('../../dir3/abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir3/abc/'))
836
+ assert_equal('../../dir3/abc', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir3/abc'))
837
+ assert_equal('../../dir3/abc/', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir3/abc/'))
789
838
 
790
839
  end
791
840
 
792
841
  def test_different_sub_trees_4
793
842
 
794
- assert_equal('..', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir2'))
795
- assert_equal('..', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2'))
796
- assert_equal('..', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/'))
797
- assert_equal('..', Recls::Ximpl::derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/'))
843
+ assert_equal('..', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir2'))
844
+ assert_equal('..', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2'))
845
+ assert_equal('..', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref', '/dir1/dir2/'))
846
+ assert_equal('..', Recls::Ximpl.derive_relative_path('/dir1/dir2/ref/', '/dir1/dir2/'))
798
847
 
799
848
  end
800
849
 
801
850
  def test_different_sub_trees_5
802
851
 
803
- assert_equal('../..', Recls::Ximpl::derive_relative_path('/dir1/dir2/dir3/dir4', '/dir1/dir2'))
804
- assert_equal('../..', Recls::Ximpl::derive_relative_path('/dir1/dir2/dir3/dir4/', '/dir1/dir2'))
805
- assert_equal('../..', Recls::Ximpl::derive_relative_path('/dir1/dir2/dir3/dir4', '/dir1/dir2/'))
806
- assert_equal('../..', Recls::Ximpl::derive_relative_path('/dir1/dir2/dir3/dir4/', '/dir1/dir2/'))
852
+ assert_equal('../..', Recls::Ximpl.derive_relative_path('/dir1/dir2/dir3/dir4', '/dir1/dir2'))
853
+ assert_equal('../..', Recls::Ximpl.derive_relative_path('/dir1/dir2/dir3/dir4/', '/dir1/dir2'))
854
+ assert_equal('../..', Recls::Ximpl.derive_relative_path('/dir1/dir2/dir3/dir4', '/dir1/dir2/'))
855
+ assert_equal('../..', Recls::Ximpl.derive_relative_path('/dir1/dir2/dir3/dir4/', '/dir1/dir2/'))
807
856
 
808
857
  end
809
858
 
810
859
  def test_embedded_dots_1
811
860
 
812
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/dir2', 'dir1/dir2'))
813
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/dir2', 'dir1/dir2/'))
814
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/dir2/', 'dir1/dir2'))
815
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/dir2/', 'dir1/dir2/'))
861
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/dir2', 'dir1/dir2'))
862
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/dir2', 'dir1/dir2/'))
863
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/dir2/', 'dir1/dir2'))
864
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/dir2/', 'dir1/dir2/'))
816
865
 
817
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/dir2', './dir1/dir2'))
818
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/dir2', './dir1/dir2/'))
819
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/dir2/', './dir1/dir2'))
820
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/dir2/', './dir1/dir2/'))
866
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/dir2', './dir1/dir2'))
867
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/dir2', './dir1/dir2/'))
868
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/dir2/', './dir1/dir2'))
869
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/dir2/', './dir1/dir2/'))
821
870
 
822
871
  end
823
872
 
824
873
  def test_embedded_dots_2
825
874
 
826
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2', 'dir1/dir2'))
827
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2', 'dir1/dir2/'))
828
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/', 'dir1/dir2'))
829
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/', 'dir1/dir2/'))
830
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2', './dir1/dir2'))
831
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2', './dir1/dir2/'))
832
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/', './dir1/dir2'))
833
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/', './dir1/dir2/'))
875
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2', 'dir1/dir2'))
876
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2', 'dir1/dir2/'))
877
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/', 'dir1/dir2'))
878
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/', 'dir1/dir2/'))
879
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2', './dir1/dir2'))
880
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2', './dir1/dir2/'))
881
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/', './dir1/dir2'))
882
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/', './dir1/dir2/'))
834
883
 
835
884
  end
836
885
 
837
886
  def test_embedded_dots_3
838
887
 
839
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/.', 'dir1/dir2'))
840
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/.', 'dir1/dir2/'))
841
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/./', 'dir1/dir2'))
842
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/./', 'dir1/dir2/'))
843
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/.', './dir1/dir2'))
844
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/.', './dir1/dir2/'))
845
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/dir2/./', './dir1/dir2'))
846
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/dir2/./', './dir1/dir2/'))
888
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/.', 'dir1/dir2'))
889
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/.', 'dir1/dir2/'))
890
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/./', 'dir1/dir2'))
891
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/./', 'dir1/dir2/'))
892
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/.', './dir1/dir2'))
893
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/.', './dir1/dir2/'))
894
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/dir2/./', './dir1/dir2'))
895
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/dir2/./', './dir1/dir2/'))
847
896
 
848
897
  end
849
898
 
850
899
  def test_embedded_dots_4
851
900
 
852
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/.', 'dir1/dir2'))
853
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/.', 'dir1/dir2/'))
854
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/./', 'dir1/dir2'))
855
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/./', 'dir1/dir2/'))
856
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/.', './dir1/dir2'))
857
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/.', './dir1/dir2/'))
858
- assert_equal('.', Recls::Ximpl::derive_relative_path('dir1/./dir2/./', './dir1/dir2'))
859
- assert_equal('./', Recls::Ximpl::derive_relative_path('dir1/./dir2/./', './dir1/dir2/'))
901
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/.', 'dir1/dir2'))
902
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/.', 'dir1/dir2/'))
903
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/./', 'dir1/dir2'))
904
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/./', 'dir1/dir2/'))
905
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/.', './dir1/dir2'))
906
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/.', './dir1/dir2/'))
907
+ assert_equal('.', Recls::Ximpl.derive_relative_path('dir1/./dir2/./', './dir1/dir2'))
908
+ assert_equal('./', Recls::Ximpl.derive_relative_path('dir1/./dir2/./', './dir1/dir2/'))
860
909
 
861
910
  end
862
911
 
863
912
  def test_embedded_dots_5
864
913
 
865
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/./dir2/.', 'dir1/dir2'))
866
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/./dir2/.', 'dir1/dir2/'))
867
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/./dir2/./', 'dir1/dir2'))
868
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/./dir2/./', 'dir1/dir2/'))
869
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/./dir2/.', './dir1/dir2'))
870
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/./dir2/.', './dir1/dir2/'))
871
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/./dir2/./', './dir1/dir2'))
872
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/./dir2/./', './dir1/dir2/'))
914
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/./dir2/.', 'dir1/dir2'))
915
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/./dir2/.', 'dir1/dir2/'))
916
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/./dir2/./', 'dir1/dir2'))
917
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/./dir2/./', 'dir1/dir2/'))
918
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/./dir2/.', './dir1/dir2'))
919
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/./dir2/.', './dir1/dir2/'))
920
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/./dir2/./', './dir1/dir2'))
921
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/./dir2/./', './dir1/dir2/'))
873
922
 
874
923
  end
875
924
 
876
925
  def test_embedded_dots_6
877
926
 
878
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', 'dir1/dir2'))
879
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', 'dir1/dir2/'))
880
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', 'dir1/dir2'))
881
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', 'dir1/dir2/'))
882
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', './dir1/dir2'))
883
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', './dir1/dir2/'))
884
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', './dir1/dir2'))
885
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', './dir1/dir2/'))
927
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', 'dir1/dir2'))
928
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', 'dir1/dir2/'))
929
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', 'dir1/dir2'))
930
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', 'dir1/dir2/'))
931
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', './dir1/dir2'))
932
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', './dir1/dir2/'))
933
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', './dir1/dir2'))
934
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', './dir1/dir2/'))
886
935
 
887
936
  end
888
937
 
889
938
  def test_embedded_dots_7
890
939
 
891
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', 'dir1/././dir2'))
892
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', 'dir1/././dir2/'))
893
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', 'dir1/././dir2'))
894
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', 'dir1/././dir2/'))
895
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', './dir1/././dir2'))
896
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/.', './dir1/././dir2/'))
897
- assert_equal('.', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', './dir1/././dir2'))
898
- assert_equal('./', Recls::Ximpl::derive_relative_path('./dir1/././././dir2/./', './dir1/././dir2/'))
940
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', 'dir1/././dir2'))
941
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', 'dir1/././dir2/'))
942
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', 'dir1/././dir2'))
943
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', 'dir1/././dir2/'))
944
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', './dir1/././dir2'))
945
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/.', './dir1/././dir2/'))
946
+ assert_equal('.', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', './dir1/././dir2'))
947
+ assert_equal('./', Recls::Ximpl.derive_relative_path('./dir1/././././dir2/./', './dir1/././dir2/'))
948
+
949
+ end
950
+
951
+ def test_dots_on_dot_1
899
952
 
953
+ assert_equal('../abc/ghi/file.ext', Recls::Ximpl.derive_relative_path('.', '../abc/ghi/file.ext'))
954
+ assert_equal('../abc/ghi/file.ext', Recls::Ximpl.derive_relative_path('./', '../abc/ghi/file.ext'))
900
955
  end
901
956
  end
902
957