2018-03-04 10:09:32 -05:00
|
|
|
require_relative '../../spec_helper'
|
|
|
|
require_relative 'shared/read'
|
2017-05-07 08:04:49 -04:00
|
|
|
|
|
|
|
describe "ARGF.read" do
|
|
|
|
it_behaves_like :argf_read, :read
|
|
|
|
|
|
|
|
before :each do
|
|
|
|
@file1_name = fixture __FILE__, "file1.txt"
|
|
|
|
@file2_name = fixture __FILE__, "file2.txt"
|
|
|
|
@stdin_name = fixture __FILE__, "stdin.txt"
|
|
|
|
|
|
|
|
@file1 = File.read @file1_name
|
|
|
|
@file2 = File.read @file2_name
|
|
|
|
@stdin = File.read @stdin_name
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of a file" do
|
|
|
|
argf [@file1_name] do
|
|
|
|
@argf.read().should == @file1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "treats first nil argument as no length limit" do
|
|
|
|
argf [@file1_name] do
|
|
|
|
@argf.read(nil).should == @file1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of two files" do
|
|
|
|
argf [@file1_name, @file2_name] do
|
|
|
|
@argf.read.should == @file1 + @file2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of one file and some characters from the second" do
|
|
|
|
argf [@file1_name, @file2_name] do
|
|
|
|
len = @file1.size + (@file2.size / 2)
|
|
|
|
@argf.read(len).should == (@file1 + @file2)[0,len]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads across two files consecutively" do
|
|
|
|
argf [@file1_name, @file2_name] do
|
|
|
|
@argf.read(@file1.size - 2).should == @file1[0..-3]
|
|
|
|
@argf.read(2+5).should == @file1[-2..-1] + @file2[0,5]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of stdin" do
|
|
|
|
stdin = ruby_exe("print ARGF.read", args: "< #{@stdin_name}")
|
|
|
|
stdin.should == @stdin
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of one file and stdin" do
|
|
|
|
stdin = ruby_exe("print ARGF.read", args: "#{@file1_name} - < #{@stdin_name}")
|
|
|
|
stdin.should == @file1 + @stdin
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reads the contents of the same file twice" do
|
|
|
|
argf [@file1_name, @file1_name] do
|
|
|
|
@argf.read.should == @file1 + @file1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2019-04-28 17:20:11 -04:00
|
|
|
before :each do
|
|
|
|
@external = Encoding.default_external
|
|
|
|
@internal = Encoding.default_internal
|
2017-05-07 08:04:49 -04:00
|
|
|
|
2019-04-28 17:20:11 -04:00
|
|
|
Encoding.default_external = Encoding::UTF_8
|
|
|
|
Encoding.default_internal = nil
|
|
|
|
end
|
2017-05-07 08:04:49 -04:00
|
|
|
|
2019-04-28 17:20:11 -04:00
|
|
|
after :each do
|
|
|
|
Encoding.default_external = @external
|
|
|
|
Encoding.default_internal = @internal
|
|
|
|
end
|
2017-05-07 08:04:49 -04:00
|
|
|
|
2019-04-28 17:20:11 -04:00
|
|
|
it "reads the contents of the file with default encoding" do
|
|
|
|
Encoding.default_external = Encoding::US_ASCII
|
|
|
|
argf [@file1_name, @file2_name] do
|
|
|
|
@argf.read.encoding.should == Encoding::US_ASCII
|
2017-05-07 08:04:49 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|