recls-ruby 2.8.2 → 2.11.0

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 (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