1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Move spec/rubyspec to spec/ruby for consistency

* Other ruby implementations use the spec/ruby directory.
  [Misc #13792] [ruby-core:82287]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
eregon 2017-09-20 20:18:52 +00:00
parent 75bfc6440d
commit 1d15d5f080
4370 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,58 @@
describe :argf_each_byte, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@file2_name = fixture __FILE__, "file2.txt"
@bytes = []
File.read(@file1_name).each_byte { |b| @bytes << b }
File.read(@file2_name).each_byte { |b| @bytes << b }
end
it "yields each byte of all streams to the passed block" do
argf [@file1_name, @file2_name] do
bytes = []
@argf.send(@method) { |b| bytes << b }
bytes.should == @bytes
end
end
it "returns self when passed a block" do
argf [@file1_name, @file2_name] do
@argf.send(@method) {}.should equal(@argf)
end
end
it "returns an Enumerator when passed no block" do
argf [@file1_name, @file2_name] do
enum = @argf.send(@method)
enum.should be_an_instance_of(Enumerator)
bytes = []
enum.each { |b| bytes << b }
bytes.should == @bytes
end
end
describe "when no block is given" do
it "returns an Enumerator" do
argf [@file1_name, @file2_name] do
enum = @argf.send(@method)
enum.should be_an_instance_of(Enumerator)
bytes = []
enum.each { |b| bytes << b }
bytes.should == @bytes
end
end
describe "returned Enumerator" do
describe "size" do
it "should return nil" do
argf [@file1_name, @file2_name] do
@argf.send(@method).size.should == nil
end
end
end
end
end
end

View file

@ -0,0 +1,58 @@
describe :argf_each_char, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@file2_name = fixture __FILE__, "file2.txt"
@chars = []
File.read(@file1_name).each_char { |c| @chars << c }
File.read(@file2_name).each_char { |c| @chars << c }
end
it "yields each char of all streams to the passed block" do
argf [@file1_name, @file2_name] do
chars = []
@argf.send(@method) { |c| chars << c }
chars.should == @chars
end
end
it "returns self when passed a block" do
argf [@file1_name, @file2_name] do
@argf.send(@method) {}.should equal(@argf)
end
end
it "returns an Enumerator when passed no block" do
argf [@file1_name, @file2_name] do
enum = @argf.send(@method)
enum.should be_an_instance_of(Enumerator)
chars = []
enum.each { |c| chars << c }
chars.should == @chars
end
end
describe "when no block is given" do
it "returns an Enumerator" do
argf [@file1_name, @file2_name] do
enum = @argf.send(@method)
enum.should be_an_instance_of(Enumerator)
chars = []
enum.each { |c| chars << c }
chars.should == @chars
end
end
describe "returned Enumerator" do
describe "size" do
it "should return nil" do
argf [@file1_name, @file2_name] do
@argf.send(@method).size.should == nil
end
end
end
end
end
end

View file

@ -0,0 +1,58 @@
describe :argf_each_codepoint, shared: true do
before :each do
file1_name = fixture __FILE__, "file1.txt"
file2_name = fixture __FILE__, "file2.txt"
@filenames = [file1_name, file2_name]
@codepoints = File.read(file1_name).codepoints
@codepoints.concat File.read(file2_name).codepoints
end
it "is a public method" do
argf @filenames do
@argf.public_methods(false).should include(@method)
end
end
it "does not require arguments" do
argf @filenames do
@argf.method(@method).arity.should == 0
end
end
it "returns self when passed a block" do
argf @filenames do
@argf.send(@method) {}.should equal(@argf)
end
end
it "returns an Enumerator when passed no block" do
argf @filenames do
@argf.send(@method).should be_an_instance_of(Enumerator)
end
end
it "yields each codepoint of all streams" do
argf @filenames do
@argf.send(@method).to_a.should == @codepoints
end
end
describe "when no block is given" do
it "returns an Enumerator" do
argf @filenames do
@argf.send(@method).should be_an_instance_of(Enumerator)
end
end
describe "returned Enumerator" do
describe "size" do
it "should return nil" do
argf @filenames do
@argf.send(@method).size.should == nil
end
end
end
end
end
end

View file

@ -0,0 +1,62 @@
describe :argf_each_line, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@file2_name = fixture __FILE__, "file2.txt"
@lines = File.readlines @file1_name
@lines += File.readlines @file2_name
end
it "is a public method" do
argf [@file1_name, @file2_name] do
@argf.public_methods(false).should include(@method)
end
end
it "requires multiple arguments" do
argf [@file1_name, @file2_name] do
@argf.method(@method).arity.should < 0
end
end
it "reads each line of files" do
argf [@file1_name, @file2_name] do
lines = []
@argf.send(@method) { |b| lines << b }
lines.should == @lines
end
end
it "returns self when passed a block" do
argf [@file1_name, @file2_name] do
@argf.send(@method) {}.should equal(@argf)
end
end
describe "with a separator" do
it "yields each separated section of all streams" do
argf [@file1_name, @file2_name] do
@argf.send(@method, '.').to_a.should ==
(File.readlines(@file1_name, '.') + File.readlines(@file2_name, '.'))
end
end
end
describe "when no block is given" do
it "returns an Enumerator" do
argf [@file1_name, @file2_name] do
@argf.send(@method).should be_an_instance_of(Enumerator)
end
end
describe "returned Enumerator" do
describe "size" do
it "should return nil" do
argf [@file1_name, @file2_name] do
@argf.send(@method).size.should == nil
end
end
end
end
end
end

View file

@ -0,0 +1,24 @@
describe :argf_eof, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
end
# NOTE: this test assumes that fixtures files have two lines each
it "returns true when reaching the end of a file" do
argf [@file1, @file2] do
result = []
while @argf.gets
result << @argf.send(@method)
end
result.should == [false, true, false, true]
end
end
it "raises IOError when called on a closed stream" do
argf [@file1] do
@argf.read
lambda { @argf.send(@method) }.should raise_error(IOError)
end
end
end

View file

@ -0,0 +1,28 @@
describe :argf_filename, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
end
# NOTE: this test assumes that fixtures files have two lines each
it "returns the current file name on each file" do
argf [@file1, @file2] do
result = []
# returns first current file even when not yet open
result << @argf.send(@method)
result << @argf.send(@method) while @argf.gets
# returns last current file even when closed
result << @argf.send(@method)
result.map! { |f| File.expand_path(f) }
result.should == [@file1, @file1, @file1, @file2, @file2, @file2]
end
end
# NOTE: this test assumes that fixtures files have two lines each
it "sets the $FILENAME global variable with the current file name on each file" do
script = fixture __FILE__, "filename.rb"
out = ruby_exe(script, args: [@file1, @file2])
out.should == "#{@file1}\n#{@file1}\n#{@file2}\n#{@file2}\n#{@file2}\n"
end
end

View file

@ -0,0 +1,24 @@
describe :argf_fileno, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
end
# NOTE: this test assumes that fixtures files have two lines each
it "returns the current file number on each file" do
argf [@file1, @file2] do
result = []
# returns first current file even when not yet open
result << @argf.send(@method) while @argf.gets
# returns last current file even when closed
result.map { |d| d.class }.should == [Fixnum, Fixnum, Fixnum, Fixnum]
end
end
it "raises an ArgumentError when called on a closed stream" do
argf [@file1] do
@argf.read
lambda { @argf.send(@method) }.should raise_error(ArgumentError)
end
end
end

View file

@ -0,0 +1,17 @@
describe :argf_getc, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
@chars = File.read @file1
@chars += File.read @file2
end
it "reads each char of files" do
argf [@file1, @file2] do
chars = ""
@chars.size.times { chars << @argf.send(@method) }
chars.should == @chars
end
end
end

View file

@ -0,0 +1,99 @@
describe :argf_gets, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@file2_name = fixture __FILE__, "file2.txt"
@stdin_name = fixture __FILE__, "stdin.txt"
@file1 = File.readlines @file1_name
@file2 = File.readlines @file2_name
@stdin = File.read @stdin_name
end
it "reads one line of a file" do
argf [@file1_name] do
@argf.send(@method).should == @file1.first
end
end
it "reads all lines of a file" do
argf [@file1_name] do
lines = []
@file1.size.times { lines << @argf.send(@method) }
lines.should == @file1
end
end
it "reads all lines of stdin" do
total = @stdin.count $/
stdin = ruby_exe(
"#{total}.times { print ARGF.send(#{@method.inspect}) }",
args: "< #{@stdin_name}")
stdin.should == @stdin
end
it "reads all lines of two files" do
argf [@file1_name, @file2_name] do
total = @file1.size + @file2.size
lines = []
total.times { lines << @argf.send(@method) }
lines.should == @file1 + @file2
end
end
it "sets $_ global variable with each line read" do
argf [@file1_name, @file2_name] do
total = @file1.size + @file2.size
total.times do
line = @argf.send(@method)
$_.should == line
end
end
end
end
describe :argf_gets_inplace_edit, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@file2_name = fixture __FILE__, "file2.txt"
@tmp1_name = tmp "file1.txt"
@tmp2_name = tmp "file2.txt"
@tmp1_name_bak = @tmp1_name + ".bak"
@tmp2_name_bak = @tmp2_name + ".bak"
cp @file1_name, @tmp1_name
cp @file2_name, @tmp2_name
method = "ARGF.send(#{@method.inspect})"
@code = "begin while line = #{method} do puts 'x' end rescue EOFError; end"
end
after :each do
rm_r @tmp1_name, @tmp2_name, @tmp1_name_bak, @tmp2_name_bak
end
# -i with no backup extension is not supported on Windows
platform_is_not :windows do
it "modifies the files when in place edit mode is on" do
ruby_exe(@code,
options: "-i",
args: "#{@tmp1_name} #{@tmp2_name}")
File.read(@tmp1_name).should == "x\nx\n"
File.read(@tmp2_name).should == "x\nx\n"
end
end
it "modifies and backups two files when in place edit mode is on" do
ruby_exe(@code,
options: "-i.bak",
args: "#{@tmp1_name} #{@tmp2_name}")
File.read(@tmp1_name).should == "x\nx\n"
File.read(@tmp2_name).should == "x\nx\n"
File.read(@tmp1_name_bak).should == "file1.1\nfile1.2\n"
File.read(@tmp2_name_bak).should == "line2.1\nline2.2\n"
end
end

View file

@ -0,0 +1,31 @@
describe :argf_pos, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
end
it "gives the correct position for each read operation" do
argf [@file1, @file2] do
size1 = File.size(@file1)
size2 = File.size(@file2)
@argf.read(2)
@argf.send(@method).should == 2
@argf.read(size1-2)
@argf.send(@method).should == size1
@argf.read(6)
@argf.send(@method).should == 6
@argf.rewind
@argf.send(@method).should == 0
@argf.read(size2)
@argf.send(@method).should == size2
end
end
it "raises an ArgumentError when called on a closed stream" do
argf [@file1] do
@argf.read
lambda { @argf.send(@method) }.should raise_error(ArgumentError)
end
end
end

View file

@ -0,0 +1,58 @@
describe :argf_read, shared: true do
before :each do
@file1_name = fixture __FILE__, "file1.txt"
@stdin_name = fixture __FILE__, "stdin.txt"
@file1 = File.read @file1_name
@stdin = File.read @stdin_name
end
it "treats second nil argument as no output buffer" do
argf [@file1_name] do
@argf.send(@method, @file1.size, nil).should == @file1
end
end
it "treats second argument as an output buffer" do
argf [@file1_name] do
buffer = ""
@argf.send(@method, @file1.size, buffer)
buffer.should == @file1
end
end
it "clears output buffer before appending to it" do
argf [@file1_name] do
buffer = "to be cleared"
@argf.send(@method, @file1.size, buffer)
buffer.should == @file1
end
end
it "reads a number of bytes from the first file" do
argf [@file1_name] do
@argf.send(@method, 5).should == @file1[0, 5]
end
end
it "reads from a single file consecutively" do
argf [@file1_name] do
@argf.send(@method, 1).should == @file1[0, 1]
@argf.send(@method, 2).should == @file1[1, 2]
@argf.send(@method, 3).should == @file1[3, 3]
end
end
it "reads a number of bytes from stdin" do
stdin = ruby_exe("print ARGF.#{@method}(10)", :args => "< #{@stdin_name}")
stdin.should == @stdin[0, 10]
end
platform_is_not :windows do
it "reads the contents of a special device file" do
argf ['/dev/zero'] do
@argf.send(@method, 100).should == "\000" * 100
end
end
end
end

View file

@ -0,0 +1,22 @@
describe :argf_readlines, shared: true do
before :each do
@file1 = fixture __FILE__, "file1.txt"
@file2 = fixture __FILE__, "file2.txt"
@lines = File.readlines(@file1)
@lines += File.readlines(@file2)
end
it "reads all lines of all files" do
argf [@file1, @file2] do
@argf.send(@method).should == @lines
end
end
it "returns an empty Array when end of stream reached" do
argf [@file1, @file2] do
@argf.read
@argf.send(@method).should == []
end
end
end