ptools 1.3.5 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/{CHANGES → CHANGES.md} +59 -31
- data/Gemfile +1 -10
- data/MANIFEST.md +27 -0
- data/{README → README.md} +30 -26
- data/Rakefile +30 -78
- data/certs/djberg96_pub.pem +22 -17
- data/lib/ptools.rb +48 -35
- data/ptools.gemspec +13 -7
- data/spec/binary_spec.rb +59 -0
- data/spec/constants_spec.rb +23 -0
- data/spec/head_spec.rb +41 -0
- data/spec/image_spec.rb +51 -0
- data/{test → spec}/img/test.gif +0 -0
- data/{test → spec}/img/test.ico +0 -0
- data/{test → spec}/img/test.jpg +0 -0
- data/{test → spec}/img/test.png +0 -0
- data/spec/nlconvert_spec.rb +104 -0
- data/spec/sparse_spec.rb +43 -0
- data/spec/tail_spec.rb +107 -0
- data/spec/touch_spec.rb +47 -0
- data/spec/txt/empty.txt +0 -0
- data/{test → spec}/txt/english.txt +0 -0
- data/spec/txt/english.utf16 +0 -0
- data/{test → spec}/txt/korean.txt +0 -0
- data/spec/wc_spec.rb +65 -0
- data/spec/whereis_spec.rb +87 -0
- data/spec/which_spec.rb +112 -0
- metadata +66 -75
- metadata.gz.sig +0 -0
- data/MANIFEST +0 -21
- data/test/test_binary.rb +0 -70
- data/test/test_constants.rb +0 -38
- data/test/test_head.rb +0 -48
- data/test/test_image.rb +0 -62
- data/test/test_is_sparse.rb +0 -53
- data/test/test_nlconvert.rb +0 -110
- data/test/test_null.rb +0 -40
- data/test/test_tail.rb +0 -124
- data/test/test_touch.rb +0 -53
- data/test/test_wc.rb +0 -73
- data/test/test_whereis.rb +0 -98
- data/test/test_which.rb +0 -126
data/spec/sparse_spec.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# test_is_sparse.rb
|
3
|
+
#
|
4
|
+
# Test case for the File.sparse? method. You should run this test
|
5
|
+
# via the 'rake test:is_sparse' task.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'ptools'
|
9
|
+
|
10
|
+
RSpec.describe File, :sparse do
|
11
|
+
let(:windows) { File::ALT_SEPARATOR }
|
12
|
+
let(:osx) { RbConfig::CONFIG['host_os'] =~ /darwin|osx/i }
|
13
|
+
let(:non_sparse_file) { File.expand_path(File.basename(__FILE__)) }
|
14
|
+
let(:sparse_file) { 'test_sparse_file' }
|
15
|
+
|
16
|
+
before do
|
17
|
+
Dir.chdir("spec") if File.exist?("spec")
|
18
|
+
system("dd of=#{sparse_file} bs=1k seek=5120 count=0 2>/dev/null") unless windows
|
19
|
+
end
|
20
|
+
|
21
|
+
example "is_sparse basic functionality" do
|
22
|
+
skip "skipped on MS Windows or OSX" if windows || osx
|
23
|
+
expect(File).to respond_to(:sparse?)
|
24
|
+
expect{ File.sparse?(sparse_file) }.not_to raise_error
|
25
|
+
expect(File.sparse?(sparse_file)).to be(true).or be(false)
|
26
|
+
end
|
27
|
+
|
28
|
+
example "is_sparse returns the expected results" do
|
29
|
+
skip "skipped on MS Windows or OSX" if windows || osx
|
30
|
+
expect(File.sparse?(sparse_file)).to be true
|
31
|
+
expect(File.sparse?(non_sparse_file)).to be false
|
32
|
+
end
|
33
|
+
|
34
|
+
example "is_sparse only accepts one argument" do
|
35
|
+
skip if windows
|
36
|
+
expect{ File.sparse?(sparse_file, sparse_file) }.to raise_error(ArgumentError)
|
37
|
+
end
|
38
|
+
|
39
|
+
after do
|
40
|
+
Dir.chdir("spec") if File.exist?("spec")
|
41
|
+
File.delete(sparse_file) if File.exist?(sparse_file)
|
42
|
+
end
|
43
|
+
end
|
data/spec/tail_spec.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# tail_spec.rb
|
3
|
+
#
|
4
|
+
# Tests for the File.tail method. This test should be run via
|
5
|
+
# the 'rake spec:tail' task.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'ptools'
|
9
|
+
|
10
|
+
RSpec.describe File, :tail do
|
11
|
+
let(:dirname) { File.dirname(__FILE__) }
|
12
|
+
let(:test_file1) { File.join(dirname, 'test_file1.txt') }
|
13
|
+
let(:test_file64) { File.join(dirname, 'test_file64.txt') }
|
14
|
+
let(:test_file128) { File.join(dirname, 'test_file128.txt') }
|
15
|
+
let(:test_file_trail) { File.join(dirname, 'test_file_trail.txt') }
|
16
|
+
let(:test_file_trail_nl) { File.join(dirname, 'test_file_trail_nl.txt') }
|
17
|
+
|
18
|
+
before do
|
19
|
+
File.open(test_file1, 'w'){ |fh| 25.times{ |n| fh.puts "line#{n+1}" } }
|
20
|
+
|
21
|
+
# Trailing newline test
|
22
|
+
File.open(test_file_trail, 'w'){ |fh|
|
23
|
+
2.times{ |n| fh.puts "trail#{n+1}" }
|
24
|
+
fh.write "trail3"
|
25
|
+
}
|
26
|
+
|
27
|
+
File.open(test_file_trail_nl, 'w'){ |fh|
|
28
|
+
3.times{ |n| fh.puts "trail#{n+1}" }
|
29
|
+
}
|
30
|
+
|
31
|
+
# Larger files
|
32
|
+
test_tail_fmt_str = "line data data data data data data data %5s"
|
33
|
+
|
34
|
+
File.open(test_file64, 'w'){ |fh|
|
35
|
+
2000.times{ |n|
|
36
|
+
fh.puts test_tail_fmt_str % (n+1).to_s
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
File.open(test_file128, 'w'){ |fh|
|
41
|
+
4500.times{ |n|
|
42
|
+
fh.puts test_tail_fmt_str % (n+1).to_s
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
@expected_tail1 = %w{
|
47
|
+
line16 line17 line18 line19 line20
|
48
|
+
line21 line22 line23 line24 line25
|
49
|
+
}
|
50
|
+
|
51
|
+
@expected_tail2 = ["line21","line22","line23","line24","line25"]
|
52
|
+
|
53
|
+
@expected_tail_more = []
|
54
|
+
25.times{ |n| @expected_tail_more.push "line#{n+1}" }
|
55
|
+
|
56
|
+
@expected_tail_trail = %w{ trail2 trail3 }
|
57
|
+
|
58
|
+
@test_tail_fmt_str = "line data data data data data data data %5s"
|
59
|
+
end
|
60
|
+
|
61
|
+
example "tail basic functionality" do
|
62
|
+
expect(File).to respond_to(:tail)
|
63
|
+
expect{ File.tail(test_file1) }.not_to raise_error
|
64
|
+
expect{ File.tail(test_file1, 5) }.not_to raise_error
|
65
|
+
expect{ File.tail(test_file1){}.not_to raise_error }
|
66
|
+
end
|
67
|
+
|
68
|
+
example "tail returns the expected values" do
|
69
|
+
expect(File.tail(test_file1)).to be_kind_of(Array)
|
70
|
+
expect(File.tail(test_file1)).to eq(@expected_tail1)
|
71
|
+
expect(File.tail(test_file1, 5)).to eq(@expected_tail2)
|
72
|
+
end
|
73
|
+
|
74
|
+
example "specifying a number greater than the actual number of lines works as expected" do
|
75
|
+
expect(File.tail(test_file1, 30)).to eq(@expected_tail_more)
|
76
|
+
end
|
77
|
+
|
78
|
+
example "tail requires two arguments" do
|
79
|
+
expect{ File.tail }.to raise_error(ArgumentError)
|
80
|
+
expect{ File.tail(test_file1, 5, 5) }.to raise_error(ArgumentError)
|
81
|
+
end
|
82
|
+
|
83
|
+
example "tail works as expected when there is no trailing newline" do
|
84
|
+
expect(File.tail(test_file_trail, 2)).to eq(@expected_tail_trail)
|
85
|
+
expect(File.tail(test_file_trail_nl, 2)).to eq(@expected_tail_trail)
|
86
|
+
end
|
87
|
+
|
88
|
+
example "tail works as expected on a file larger than 64k" do
|
89
|
+
expected_tail_64k = []
|
90
|
+
2000.times{ |n| expected_tail_64k.push(@test_tail_fmt_str % (n+1).to_s) }
|
91
|
+
expect(File.tail(test_file64, 2000)).to eq(expected_tail_64k)
|
92
|
+
end
|
93
|
+
|
94
|
+
example "tail works as expected on a file larger than 128k" do
|
95
|
+
expected_tail_128k = []
|
96
|
+
4500.times{ |n| expected_tail_128k.push(@test_tail_fmt_str % (n+1).to_s) }
|
97
|
+
expect(File.tail(test_file128, 4500)).to eq(expected_tail_128k)
|
98
|
+
end
|
99
|
+
|
100
|
+
after do
|
101
|
+
File.delete(test_file1) if File.exist?(test_file1)
|
102
|
+
File.delete(test_file64) if File.exist?(test_file64)
|
103
|
+
File.delete(test_file128) if File.exist?(test_file128)
|
104
|
+
File.delete(test_file_trail_nl) if File.exist?(test_file_trail_nl)
|
105
|
+
File.delete(test_file_trail) if File.exist?(test_file_trail)
|
106
|
+
end
|
107
|
+
end
|
data/spec/touch_spec.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# test_touch.rb
|
3
|
+
#
|
4
|
+
# Test case for the File.touch method. This test should be run
|
5
|
+
# via the 'rake test_touch task'.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'ptools'
|
9
|
+
|
10
|
+
RSpec.describe File, :touch do
|
11
|
+
let(:dirname) { File.dirname(__FILE__) }
|
12
|
+
let(:filename) { 'test_file_touch.txt' }
|
13
|
+
let(:xfile) { File.join(dirname, filename) }
|
14
|
+
|
15
|
+
before do
|
16
|
+
File.open(xfile, 'w'){ |fh| 10.times{ |n| fh.puts "line #{n}" } }
|
17
|
+
@test_file = File.join(dirname, 'delete.this')
|
18
|
+
end
|
19
|
+
|
20
|
+
example "touch basic functionality" do
|
21
|
+
expect(File).to respond_to(:touch)
|
22
|
+
expect{ File.touch(@test_file) }.not_to raise_error
|
23
|
+
end
|
24
|
+
|
25
|
+
example "touch a new file returns expected results" do
|
26
|
+
expect(File.touch(@test_file)).to eq(File)
|
27
|
+
expect(File.exist?(@test_file)).to be true
|
28
|
+
expect(File.size(@test_file)).to eq(0)
|
29
|
+
end
|
30
|
+
|
31
|
+
example "touch an existing file returns expected results" do
|
32
|
+
stat = File.stat(xfile)
|
33
|
+
sleep 1
|
34
|
+
expect{ File.touch(xfile) }.not_to raise_error
|
35
|
+
expect(File.size(xfile) == stat.size).to be true
|
36
|
+
expect(File.mtime(xfile) == stat.mtime).to be false
|
37
|
+
end
|
38
|
+
|
39
|
+
example "touch requires an argument" do
|
40
|
+
expect{ File.touch }.to raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
|
43
|
+
after do
|
44
|
+
File.delete(@test_file) if File.exist?(@test_file)
|
45
|
+
File.delete(xfile) if File.exist?(xfile)
|
46
|
+
end
|
47
|
+
end
|
data/spec/txt/empty.txt
ADDED
File without changes
|
File without changes
|
Binary file
|
File without changes
|
data/spec/wc_spec.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# wc_spec.rb
|
3
|
+
#
|
4
|
+
# Specs for the File.wc method. These specs should be run via
|
5
|
+
# the 'rake wc' task.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'ptools'
|
9
|
+
|
10
|
+
RSpec.describe File, :wc do
|
11
|
+
let(:test_file) { 'test_file_wc.txt' }
|
12
|
+
|
13
|
+
before do
|
14
|
+
File.open(test_file, 'w'){ |fh| 25.times{ |n| fh.puts "line#{n+1}" } }
|
15
|
+
end
|
16
|
+
|
17
|
+
example "wc method basic functionality" do
|
18
|
+
expect(File).to respond_to(:wc)
|
19
|
+
expect{ File.wc(test_file) }.not_to raise_error
|
20
|
+
end
|
21
|
+
|
22
|
+
example "wc accepts specific optional arguments" do
|
23
|
+
expect{ File.wc(test_file, 'bytes') }.not_to raise_error
|
24
|
+
expect{ File.wc(test_file, 'chars') }.not_to raise_error
|
25
|
+
expect{ File.wc(test_file, 'words') }.not_to raise_error
|
26
|
+
expect{ File.wc(test_file, 'lines') }.not_to raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
example "argument to wc ignores the case of the option argument" do
|
30
|
+
expect{ File.wc(test_file, 'LINES') }.not_to raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
example "wc with no option returns expected results" do
|
34
|
+
expect(File.wc(test_file)).to be_kind_of(Array)
|
35
|
+
expect(File.wc(test_file)).to eq([166, 166, 25, 25])
|
36
|
+
end
|
37
|
+
|
38
|
+
example "wc with bytes option returns the expected result" do
|
39
|
+
expect(File.wc(test_file, 'bytes')).to eq(166)
|
40
|
+
end
|
41
|
+
|
42
|
+
example "wc with chars option returns the expected result" do
|
43
|
+
expect(File.wc(test_file, 'chars')).to eq(166)
|
44
|
+
end
|
45
|
+
|
46
|
+
example "wc with words option returns the expected result" do
|
47
|
+
expect(File.wc(test_file, 'words')).to eq(25)
|
48
|
+
end
|
49
|
+
|
50
|
+
example "wc with lines option returns the expected result" do
|
51
|
+
expect(File.wc(test_file, 'lines')).to eq(25)
|
52
|
+
end
|
53
|
+
|
54
|
+
example "wc requires at least on argument" do
|
55
|
+
expect{ File.wc }.to raise_error(ArgumentError)
|
56
|
+
end
|
57
|
+
|
58
|
+
example "an invalid option raises an error" do
|
59
|
+
expect{ File.wc(test_file, 'bogus') }.to raise_error(ArgumentError)
|
60
|
+
end
|
61
|
+
|
62
|
+
after do
|
63
|
+
File.delete(test_file) if File.exists?(test_file)
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
######################################################################
|
2
|
+
# test_whereis.rb
|
3
|
+
#
|
4
|
+
# Tests for the File.whereis method.
|
5
|
+
######################################################################
|
6
|
+
require 'rubygems'
|
7
|
+
require 'rspec'
|
8
|
+
require 'ptools'
|
9
|
+
require 'rbconfig'
|
10
|
+
|
11
|
+
RSpec.describe File, :whereis do
|
12
|
+
let(:windows) { File::ALT_SEPARATOR }
|
13
|
+
let(:ruby) { RUBY_ENGINE }
|
14
|
+
let(:bin_dir) { RbConfig::CONFIG['bindir'] }
|
15
|
+
|
16
|
+
before do
|
17
|
+
@expected_locs = [File.join(bin_dir, ruby)]
|
18
|
+
|
19
|
+
if windows
|
20
|
+
@expected_locs[0] << '.exe'
|
21
|
+
@expected_locs[0].tr!("/", "\\")
|
22
|
+
end
|
23
|
+
|
24
|
+
unless windows
|
25
|
+
@expected_locs << "/usr/local/bin/#{ruby}"
|
26
|
+
@expected_locs << "/opt/sfw/bin/#{ruby}"
|
27
|
+
@expected_locs << "/opt/bin/#{ruby}"
|
28
|
+
@expected_locs << "/usr/bin/#{ruby}"
|
29
|
+
end
|
30
|
+
|
31
|
+
@actual_locs = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
example "whereis basic functionality" do
|
35
|
+
expect(File).to respond_to(:whereis)
|
36
|
+
expect{ File.whereis('ruby') }.not_to raise_error
|
37
|
+
expect(File.whereis('ruby')).to be_kind_of(Array).or be_nil
|
38
|
+
end
|
39
|
+
|
40
|
+
example "whereis accepts an optional second argument" do
|
41
|
+
expect{ File.whereis('ruby', '/usr/bin:/usr/local/bin') }.not_to raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
example "whereis returns expected values" do
|
45
|
+
expect{ @actual_locs = File.whereis(ruby) }.not_to raise_error
|
46
|
+
expect(@actual_locs).to be_kind_of(Array)
|
47
|
+
expect((@expected_locs & @actual_locs).size > 0).to be true
|
48
|
+
end
|
49
|
+
|
50
|
+
example "whereis returns nil if program not found" do
|
51
|
+
expect(File.whereis('xxxyyy')).to be_nil
|
52
|
+
end
|
53
|
+
|
54
|
+
example "whereis returns nil if program cannot be found in provided path" do
|
55
|
+
expect(File.whereis(ruby, '/foo/bar')).to be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
example "whereis returns single element array or nil if absolute path is provided" do
|
59
|
+
absolute = File.join(bin_dir, ruby)
|
60
|
+
absolute << '.exe' if windows
|
61
|
+
|
62
|
+
expect(File.whereis(absolute)).to eq([absolute])
|
63
|
+
expect(File.whereis("/foo/bar/baz/#{ruby}")).to be_nil
|
64
|
+
end
|
65
|
+
|
66
|
+
example "whereis works with an explicit extension on ms windows" do
|
67
|
+
skip "skipped unless MS Windows" unless windows
|
68
|
+
expect(File.whereis(ruby + '.exe')).not_to be_nil
|
69
|
+
end
|
70
|
+
|
71
|
+
example "whereis requires at least one argument" do
|
72
|
+
expect{ File.whereis }.to raise_error(ArgumentError)
|
73
|
+
end
|
74
|
+
|
75
|
+
example "whereis returns unique paths only" do
|
76
|
+
expect(File.whereis(ruby) == File.whereis(ruby).uniq).to be true
|
77
|
+
end
|
78
|
+
|
79
|
+
example "whereis accepts a maximum of two arguments" do
|
80
|
+
expect{ File.whereis(ruby, 'foo', 'bar') }.to raise_error(ArgumentError)
|
81
|
+
end
|
82
|
+
|
83
|
+
example "the second argument to whereis cannot be nil or empty" do
|
84
|
+
expect{ File.whereis(ruby, nil) }.to raise_error(ArgumentError)
|
85
|
+
expect{ File.whereis(ruby, '') }.to raise_error(ArgumentError)
|
86
|
+
end
|
87
|
+
end
|
data/spec/which_spec.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# which_spec.rb
|
3
|
+
#
|
4
|
+
# Test case for the File.which method. You should run this test
|
5
|
+
# via 'rake spec' or 'rake spec --tag which'.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'rbconfig'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'ptools'
|
11
|
+
require 'tempfile'
|
12
|
+
|
13
|
+
describe File, :which do
|
14
|
+
before(:context) do
|
15
|
+
@windows = File::ALT_SEPARATOR
|
16
|
+
@dir = File.join(Dir.pwd, 'tempdir')
|
17
|
+
@non_exe = File.join(Dir.pwd, 'tempfile')
|
18
|
+
@ruby = RUBY_PLATFORM.match('java') ? 'jruby' : 'ruby'
|
19
|
+
@ruby = 'rbx' if defined?(Rubinius)
|
20
|
+
|
21
|
+
Dir.mkdir(@dir) unless File.exist?(@dir)
|
22
|
+
FileUtils.touch(@non_exe)
|
23
|
+
File.chmod(775, @dir)
|
24
|
+
File.chmod(644, @non_exe)
|
25
|
+
|
26
|
+
@exe = File.join(
|
27
|
+
RbConfig::CONFIG['bindir'],
|
28
|
+
RbConfig::CONFIG['ruby_install_name']
|
29
|
+
)
|
30
|
+
|
31
|
+
if @windows
|
32
|
+
@exe.tr!('/','\\')
|
33
|
+
@exe << ".exe"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
example "which method basic functionality" do
|
38
|
+
expect(File).to respond_to(:which)
|
39
|
+
expect{ File.which(@ruby) }.not_to raise_error
|
40
|
+
expect(File.which(@ruby)).to be_kind_of(String)
|
41
|
+
end
|
42
|
+
|
43
|
+
example "which accepts an optional path to search" do
|
44
|
+
expect{ File.which(@ruby, "/usr/bin:/usr/local/bin") }.not_to raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
example "which returns nil if not found" do
|
48
|
+
expect(File.which(@ruby, '/bogus/path')).to be_nil
|
49
|
+
expect(File.which('blahblahblah')).to be_nil
|
50
|
+
end
|
51
|
+
|
52
|
+
example "which handles executables without extensions on windows" do
|
53
|
+
skip "skipped unless MS Windows" unless @windows
|
54
|
+
expect(File.which('ruby')).not_to be_nil
|
55
|
+
expect(File.which('notepad')).not_to be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
example "which handles executables that already contain extensions on windows" do
|
59
|
+
skip "skipped unless MS Windows" unless @windows
|
60
|
+
expect(File.which('ruby.exe')).not_to be_nil
|
61
|
+
expect(File.which('notepad.exe')).not_to be_nil
|
62
|
+
end
|
63
|
+
|
64
|
+
example "which returns argument if an existent absolute path is provided" do
|
65
|
+
expect(File.which(@ruby)).to eq(@exe), "May fail on a symlink"
|
66
|
+
end
|
67
|
+
|
68
|
+
example "which returns nil if a non-existent absolute path is provided" do
|
69
|
+
expect(File.which('/foo/bar/baz/ruby')).to be_nil
|
70
|
+
end
|
71
|
+
|
72
|
+
example "which does not pickup files that are not executable" do
|
73
|
+
expect(File.which(@non_exe)).to be_nil
|
74
|
+
end
|
75
|
+
|
76
|
+
example "which does not pickup executable directories" do
|
77
|
+
expect(File.which(@dir)).to be_nil
|
78
|
+
end
|
79
|
+
|
80
|
+
example "which accepts a minimum of one argument" do
|
81
|
+
expect{ File.which }.to raise_error(ArgumentError)
|
82
|
+
end
|
83
|
+
|
84
|
+
example "which accepts a maximum of two arguments" do
|
85
|
+
expect{ File.which(@ruby, "foo", "bar") }.to raise_error(ArgumentError)
|
86
|
+
end
|
87
|
+
|
88
|
+
example "the second argument cannot be nil or empty" do
|
89
|
+
expect{ File.which(@ruby, nil) }.to raise_error(ArgumentError)
|
90
|
+
expect{ File.which(@ruby, '') }.to raise_error(ArgumentError)
|
91
|
+
end
|
92
|
+
|
93
|
+
example "resolves with with ~" do
|
94
|
+
skip "skipped on MS Windows" if @windows
|
95
|
+
begin
|
96
|
+
old_home = ENV['HOME']
|
97
|
+
|
98
|
+
ENV['HOME'] = Dir::Tmpname.tmpdir
|
99
|
+
program = Tempfile.new(['program', '.sh'])
|
100
|
+
File.chmod(755, program.path)
|
101
|
+
|
102
|
+
expect(File.which(File.basename(program.path), '~/')).not_to be_nil
|
103
|
+
ensure
|
104
|
+
ENV['HOME'] = old_home
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
after(:context) do
|
109
|
+
FileUtils.rm(@non_exe)
|
110
|
+
FileUtils.rm_rf(@dir)
|
111
|
+
end
|
112
|
+
end
|