summaryrefslogtreecommitdiff
path: root/spec/rubyspec/core/io
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubyspec/core/io')
-rw-r--r--spec/rubyspec/core/io/advise_spec.rb97
-rw-r--r--spec/rubyspec/core/io/binmode_spec.rb60
-rw-r--r--spec/rubyspec/core/io/binread_spec.rb49
-rw-r--r--spec/rubyspec/core/io/binwrite_spec.rb8
-rw-r--r--spec/rubyspec/core/io/bytes_spec.rb43
-rw-r--r--spec/rubyspec/core/io/chars_spec.rb12
-rw-r--r--spec/rubyspec/core/io/close_on_exec_spec.rb100
-rw-r--r--spec/rubyspec/core/io/close_read_spec.rb80
-rw-r--r--spec/rubyspec/core/io/close_spec.rb82
-rw-r--r--spec/rubyspec/core/io/close_write_spec.rb84
-rw-r--r--spec/rubyspec/core/io/closed_spec.rb20
-rw-r--r--spec/rubyspec/core/io/codepoints_spec.rb25
-rw-r--r--spec/rubyspec/core/io/constants_spec.rb19
-rw-r--r--spec/rubyspec/core/io/copy_stream_spec.rb282
-rw-r--r--spec/rubyspec/core/io/dup_spec.rb69
-rw-r--r--spec/rubyspec/core/io/each_byte_spec.rb57
-rw-r--r--spec/rubyspec/core/io/each_char_spec.rb12
-rw-r--r--spec/rubyspec/core/io/each_codepoint_spec.rb45
-rw-r--r--spec/rubyspec/core/io/each_line_spec.rb11
-rw-r--r--spec/rubyspec/core/io/each_spec.rb11
-rw-r--r--spec/rubyspec/core/io/eof_spec.rb107
-rw-r--r--spec/rubyspec/core/io/external_encoding_spec.rb218
-rw-r--r--spec/rubyspec/core/io/fcntl_spec.rb8
-rw-r--r--spec/rubyspec/core/io/fdatasync_spec.rb5
-rw-r--r--spec/rubyspec/core/io/fileno_spec.rb12
-rw-r--r--spec/rubyspec/core/io/fixtures/bom_UTF-16BE.txtbin20 -> 0 bytes
-rw-r--r--spec/rubyspec/core/io/fixtures/bom_UTF-16LE.txtbin20 -> 0 bytes
-rw-r--r--spec/rubyspec/core/io/fixtures/bom_UTF-32BE.txtbin40 -> 0 bytes
-rw-r--r--spec/rubyspec/core/io/fixtures/bom_UTF-32LE.txtbin40 -> 0 bytes
-rw-r--r--spec/rubyspec/core/io/fixtures/bom_UTF-8.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/classes.rb177
-rw-r--r--spec/rubyspec/core/io/fixtures/copy_stream.txt6
-rw-r--r--spec/rubyspec/core/io/fixtures/empty.txt0
-rw-r--r--spec/rubyspec/core/io/fixtures/incomplete.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/lines.txt9
-rw-r--r--spec/rubyspec/core/io/fixtures/no_bom_UTF-8.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/numbered_lines.txt5
-rw-r--r--spec/rubyspec/core/io/fixtures/one_byte.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/read_binary.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/read_euc_jp.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/read_text.txt1
-rw-r--r--spec/rubyspec/core/io/fixtures/reopen_stdout.rb3
-rw-r--r--spec/rubyspec/core/io/flush_spec.rb8
-rw-r--r--spec/rubyspec/core/io/for_fd_spec.rb10
-rw-r--r--spec/rubyspec/core/io/foreach_spec.rb81
-rw-r--r--spec/rubyspec/core/io/fsync_spec.rb24
-rw-r--r--spec/rubyspec/core/io/getbyte_spec.rb42
-rw-r--r--spec/rubyspec/core/io/getc_spec.rb42
-rw-r--r--spec/rubyspec/core/io/gets_spec.rb313
-rw-r--r--spec/rubyspec/core/io/initialize_spec.rb53
-rw-r--r--spec/rubyspec/core/io/inspect_spec.rb23
-rw-r--r--spec/rubyspec/core/io/internal_encoding_spec.rb140
-rw-r--r--spec/rubyspec/core/io/io_spec.rb11
-rw-r--r--spec/rubyspec/core/io/ioctl_spec.rb32
-rw-r--r--spec/rubyspec/core/io/isatty_spec.rb6
-rw-r--r--spec/rubyspec/core/io/lineno_spec.rb95
-rw-r--r--spec/rubyspec/core/io/lines_spec.rb42
-rw-r--r--spec/rubyspec/core/io/new_spec.rb10
-rw-r--r--spec/rubyspec/core/io/open_spec.rb86
-rw-r--r--spec/rubyspec/core/io/output_spec.rb27
-rw-r--r--spec/rubyspec/core/io/pid_spec.rb35
-rw-r--r--spec/rubyspec/core/io/pipe_spec.rb214
-rw-r--r--spec/rubyspec/core/io/popen_spec.rb285
-rw-r--r--spec/rubyspec/core/io/pos_spec.rb12
-rw-r--r--spec/rubyspec/core/io/print_spec.rb54
-rw-r--r--spec/rubyspec/core/io/printf_spec.rb32
-rw-r--r--spec/rubyspec/core/io/putc_spec.rb11
-rw-r--r--spec/rubyspec/core/io/puts_spec.rb144
-rw-r--r--spec/rubyspec/core/io/read_nonblock_spec.rb85
-rw-r--r--spec/rubyspec/core/io/read_spec.rb616
-rw-r--r--spec/rubyspec/core/io/readbyte_spec.rb26
-rw-r--r--spec/rubyspec/core/io/readchar_spec.rb44
-rw-r--r--spec/rubyspec/core/io/readline_spec.rb45
-rw-r--r--spec/rubyspec/core/io/readlines_spec.rb210
-rw-r--r--spec/rubyspec/core/io/readpartial_spec.rb96
-rw-r--r--spec/rubyspec/core/io/reopen_spec.rb302
-rw-r--r--spec/rubyspec/core/io/rewind_spec.rb38
-rw-r--r--spec/rubyspec/core/io/seek_spec.rb79
-rw-r--r--spec/rubyspec/core/io/select_spec.rb115
-rw-r--r--spec/rubyspec/core/io/set_encoding_spec.rb193
-rw-r--r--spec/rubyspec/core/io/shared/binwrite.rb78
-rw-r--r--spec/rubyspec/core/io/shared/chars.rb73
-rw-r--r--spec/rubyspec/core/io/shared/codepoints.rb54
-rw-r--r--spec/rubyspec/core/io/shared/each.rb135
-rw-r--r--spec/rubyspec/core/io/shared/gets_ascii.rb19
-rw-r--r--spec/rubyspec/core/io/shared/new.rb378
-rw-r--r--spec/rubyspec/core/io/shared/pos.rb72
-rw-r--r--spec/rubyspec/core/io/shared/readlines.rb204
-rw-r--r--spec/rubyspec/core/io/shared/tty.rb25
-rw-r--r--spec/rubyspec/core/io/shared/write.rb72
-rw-r--r--spec/rubyspec/core/io/stat_spec.rb24
-rw-r--r--spec/rubyspec/core/io/sync_spec.rb64
-rw-r--r--spec/rubyspec/core/io/sysopen_spec.rb50
-rw-r--r--spec/rubyspec/core/io/sysread_spec.rb82
-rw-r--r--spec/rubyspec/core/io/sysseek_spec.rb44
-rw-r--r--spec/rubyspec/core/io/syswrite_spec.rb54
-rw-r--r--spec/rubyspec/core/io/tell_spec.rb7
-rw-r--r--spec/rubyspec/core/io/to_i_spec.rb12
-rw-r--r--spec/rubyspec/core/io/to_io_spec.rb21
-rw-r--r--spec/rubyspec/core/io/try_convert_spec.rb49
-rw-r--r--spec/rubyspec/core/io/tty_spec.rb6
-rw-r--r--spec/rubyspec/core/io/ungetbyte_spec.rb48
-rw-r--r--spec/rubyspec/core/io/ungetc_spec.rb119
-rw-r--r--spec/rubyspec/core/io/write_nonblock_spec.rb76
-rw-r--r--spec/rubyspec/core/io/write_spec.rb157
105 files changed, 0 insertions, 7327 deletions
diff --git a/spec/rubyspec/core/io/advise_spec.rb b/spec/rubyspec/core/io/advise_spec.rb
deleted file mode 100644
index 460b50a59d..0000000000
--- a/spec/rubyspec/core/io/advise_spec.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#advise" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "raises a TypeError if advise is not a Symbol" do
- lambda {
- @io.advise("normal")
- }.should raise_error(TypeError)
- end
-
- it "raises a TypeError if offsert cannot be coerced to an Integer" do
- lambda {
- @io.advise(:normal, "wat")
- }.should raise_error(TypeError)
- end
-
- it "raises a TypeError if len cannot be coerced to an Integer" do
- lambda {
- @io.advise(:normal, 0, "wat")
- }.should raise_error(TypeError)
- end
-
- it "raises a RangeError if offset is too big" do
- lambda {
- @io.advise(:normal, 10 ** 32)
- }.should raise_error(RangeError)
- end
-
- it "raises a RangeError if len is too big" do
- lambda {
- @io.advise(:normal, 0, 10 ** 32)
- }.should raise_error(RangeError)
- end
-
- it "raises a NotImplementedError if advise is not recognized" do
- lambda{
- @io.advise(:foo)
- }.should raise_error(NotImplementedError)
- end
-
- it "supports the normal advice type" do
- @io.advise(:normal).should be_nil
- end
-
- it "supports the sequential advice type" do
- @io.advise(:sequential).should be_nil
- end
-
- it "supports the random advice type" do
- @io.advise(:random).should be_nil
- end
-
- it "supports the dontneed advice type" do
- @io.advise(:dontneed).should be_nil
- end
-
- it "supports the noreuse advice type" do
- @io.advise(:noreuse).should be_nil
- end
-
- platform_is_not :linux do
- it "supports the willneed advice type" do
- @io.advise(:willneed).should be_nil
- end
- end
-
- platform_is :linux do
- it "supports the willneed advice type" do
- require 'etc'
- uname = if Etc.respond_to?(:uname)
- Etc.uname[:release]
- else
- `uname -r`.chomp
- end
- if (uname.split('.').map(&:to_i) <=> [3,6]) < 0
- # [ruby-core:65355] tmpfs is not supported
- 1.should == 1
- else
- @io.advise(:willneed).should be_nil
- end
- end
- end
-
- it "raises an IOError if the stream is closed" do
- @io.close
- lambda { @io.advise(:normal) }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/binmode_spec.rb b/spec/rubyspec/core/io/binmode_spec.rb
deleted file mode 100644
index f437c8a4a4..0000000000
--- a/spec/rubyspec/core/io/binmode_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#binmode" do
- before :each do
- @name = tmp("io_binmode.txt")
- end
-
- after :each do
- @io.close if @io and !@io.closed?
- rm_r @name
- end
-
- it "returns self" do
- @io = new_io(@name)
- @io.binmode.should equal(@io)
- end
-
- it "raises an IOError on closed stream" do
- lambda { IOSpecs.closed_io.binmode }.should raise_error(IOError)
- end
-
- it "sets external encoding to binary" do
- @io = new_io(@name, "w:utf-8")
- @io.binmode
- @io.external_encoding.should == Encoding::BINARY
- end
-
- it "sets internal encoding to nil" do
- @io = new_io(@name, "w:utf-8:ISO-8859-1")
- @io.binmode
- @io.internal_encoding.should == nil
- end
-end
-
-describe "IO#binmode?" do
- before :each do
- @filename = tmp("IO_binmode_file")
- @file = File.open(@filename, "w")
- @duped = nil
- end
-
- after :each do
- @duped.close if @duped
- @file.close
- rm_r @filename
- end
-
- it "is true after a call to IO#binmode" do
- @file.binmode?.should be_false
- @file.binmode
- @file.binmode?.should be_true
- end
-
- it "propagates to dup'ed IO objects" do
- @file.binmode
- @duped = @file.dup
- @duped.binmode?.should == @file.binmode?
- end
-end
diff --git a/spec/rubyspec/core/io/binread_spec.rb b/spec/rubyspec/core/io/binread_spec.rb
deleted file mode 100644
index b592639f9d..0000000000
--- a/spec/rubyspec/core/io/binread_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO.binread" do
- before :each do
- @internal = Encoding.default_internal
-
- @fname = tmp('io_read.txt')
- @contents = "1234567890"
- touch(@fname) { |f| f.write @contents }
- end
-
- after :each do
- rm_r @fname
- Encoding.default_internal = @internal
- end
-
- it "reads the contents of a file" do
- IO.binread(@fname).should == @contents
- end
-
- it "reads the contents of a file up to a certain size when specified" do
- IO.binread(@fname, 5).should == @contents.slice(0..4)
- end
-
- it "reads the contents of a file from an offset of a specific size when specified" do
- IO.binread(@fname, 5, 3).should == @contents.slice(3, 5)
- end
-
- it "returns a String in ASCII-8BIT encoding" do
- IO.binread(@fname).encoding.should == Encoding::ASCII_8BIT
- end
-
- it "returns a String in ASCII-8BIT encoding regardless of Encoding.default_internal" do
- Encoding.default_internal = Encoding::EUC_JP
- IO.binread(@fname).encoding.should == Encoding::ASCII_8BIT
- end
-
- it "raises an ArgumentError when not passed a valid length" do
- lambda { IO.binread @fname, -1 }.should raise_error(ArgumentError)
- end
-
- ruby_version_is "2.3" do # MRI leaks the fd on older versions
- it "raises an Errno::EINVAL when not passed a valid offset" do
- lambda { IO.binread @fname, 0, -1 }.should raise_error(Errno::EINVAL)
- end
- end
-end
diff --git a/spec/rubyspec/core/io/binwrite_spec.rb b/spec/rubyspec/core/io/binwrite_spec.rb
deleted file mode 100644
index ec964d07a8..0000000000
--- a/spec/rubyspec/core/io/binwrite_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../shared/binwrite', __FILE__)
-
-describe "IO.binwrite" do
- it_behaves_like :io_binwrite, :binwrite
-
- it "needs to be reviewed for spec completeness"
-end
diff --git a/spec/rubyspec/core/io/bytes_spec.rb b/spec/rubyspec/core/io/bytes_spec.rb
deleted file mode 100644
index 3eb51883c4..0000000000
--- a/spec/rubyspec/core/io/bytes_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#bytes" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns an enumerator of the next bytes from the stream" do
- enum = @io.bytes
- enum.should be_an_instance_of(Enumerator)
- @io.readline.should == "Voici la ligne une.\n"
- enum.first(5).should == [81, 117, 105, 32, 195]
- end
-
- it "yields each byte" do
- count = 0
- ScratchPad.record []
- @io.each_byte do |byte|
- ScratchPad << byte
- break if 4 < count += 1
- end
-
- ScratchPad.recorded.should == [86, 111, 105, 99, 105]
- end
-
- it "raises an IOError on closed stream" do
- enum = IOSpecs.closed_io.bytes
- lambda { enum.first }.should raise_error(IOError)
- end
-
- it "raises an IOError on an enumerator for a stream that has been closed" do
- enum = @io.bytes
- enum.first.should == 86
- @io.close
- lambda { enum.first }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/chars_spec.rb b/spec/rubyspec/core/io/chars_spec.rb
deleted file mode 100644
index e38160274f..0000000000
--- a/spec/rubyspec/core/io/chars_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/chars', __FILE__)
-
-describe "IO#chars" do
- it_behaves_like :io_chars, :chars
-end
-
-describe "IO#chars" do
- it_behaves_like :io_chars_empty, :chars
-end
diff --git a/spec/rubyspec/core/io/close_on_exec_spec.rb b/spec/rubyspec/core/io/close_on_exec_spec.rb
deleted file mode 100644
index 057a9a1c20..0000000000
--- a/spec/rubyspec/core/io/close_on_exec_spec.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO#close_on_exec=" do
- before :each do
- @name = tmp('io_close_on_exec.txt')
- @io = new_io @name
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- guard -> { platform_is :windows and ruby_version_is ""..."2.3" } do
- it "returns false from #respond_to?" do
- @io.respond_to?(:close_on_exec=).should be_false
- end
-
- it "raises a NotImplementedError when called" do
- lambda { @io.close_on_exec = true }.should raise_error(NotImplementedError)
- end
- end
-
- guard -> { platform_is_not :windows or ruby_version_is "2.3" } do
- it "sets the close-on-exec flag if true" do
- @io.close_on_exec = true
- @io.close_on_exec?.should == true
- end
-
- it "sets the close-on-exec flag if non-false" do
- @io.close_on_exec = :true
- @io.close_on_exec?.should == true
- end
-
- it "unsets the close-on-exec flag if false" do
- @io.close_on_exec = true
- @io.close_on_exec = false
- @io.close_on_exec?.should == false
- end
-
- it "unsets the close-on-exec flag if nil" do
- @io.close_on_exec = true
- @io.close_on_exec = nil
- @io.close_on_exec?.should == false
- end
-
- it "ensures the IO's file descriptor is closed in exec'ed processes" do
- require 'fcntl'
- @io.close_on_exec = true
- (@io.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC).should == Fcntl::FD_CLOEXEC
- end
-
- it "raises IOError if called on a closed IO" do
- @io.close
- lambda { @io.close_on_exec = true }.should raise_error(IOError)
- end
-
- it "returns nil" do
- @io.send(:close_on_exec=, true).should be_nil
- end
- end
-end
-
-describe "IO#close_on_exec?" do
- before :each do
- @name = tmp('io_is_close_on_exec.txt')
- @io = new_io @name
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- guard -> { platform_is :windows and ruby_version_is ""..."2.3" } do
- it "returns false from #respond_to?" do
- @io.respond_to?(:close_on_exec?).should be_false
- end
-
- it "raises a NotImplementedError when called" do
- lambda { @io.close_on_exec? }.should raise_error(NotImplementedError)
- end
- end
-
- guard -> { platform_is_not :windows or ruby_version_is "2.3" } do
- it "returns true by default" do
- @io.close_on_exec?.should == true
- end
-
- it "returns true if set" do
- @io.close_on_exec = true
- @io.close_on_exec?.should == true
- end
-
- it "raises IOError if called on a closed IO" do
- @io.close
- lambda { @io.close_on_exec? }.should raise_error(IOError)
- end
- end
-end
diff --git a/spec/rubyspec/core/io/close_read_spec.rb b/spec/rubyspec/core/io/close_read_spec.rb
deleted file mode 100644
index b5aba57795..0000000000
--- a/spec/rubyspec/core/io/close_read_spec.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#close_read" do
-
- before :each do
- @io = IO.popen 'cat', "r+"
- @path = tmp('io.close.txt')
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @path
- end
-
- it "closes the read end of a duplex I/O stream" do
- @io.close_read
-
- lambda { @io.read }.should raise_error(IOError)
- end
-
- ruby_version_is ''...'2.3' do
- it "raises an IOError on subsequent invocations" do
- @io.close_read
-
- lambda { @io.close_read }.should raise_error(IOError)
- end
- end
-
- ruby_version_is '2.3' do
- it "does nothing on subsequent invocations" do
- @io.close_read
-
- @io.close_read.should be_nil
- end
- end
-
- it "allows subsequent invocation of close" do
- @io.close_read
-
- lambda { @io.close }.should_not raise_error
- end
-
- it "raises an IOError if the stream is writable and not duplexed" do
- io = File.open @path, 'w'
-
- begin
- lambda { io.close_read }.should raise_error(IOError)
- ensure
- io.close unless io.closed?
- end
- end
-
- it "closes the stream if it is neither writable nor duplexed" do
- io_close_path = @path
- touch io_close_path
-
- io = File.open io_close_path
-
- io.close_read
-
- io.closed?.should == true
- end
-
- ruby_version_is ''...'2.3' do
- it "raises IOError on closed stream" do
- @io.close
-
- lambda { @io.close_read }.should raise_error(IOError)
- end
- end
-
- ruby_version_is '2.3' do
- it "does nothing on closed stream" do
- @io.close
-
- @io.close_read.should be_nil
- end
- end
-end
diff --git a/spec/rubyspec/core/io/close_spec.rb b/spec/rubyspec/core/io/close_spec.rb
deleted file mode 100644
index 0e51ec23d2..0000000000
--- a/spec/rubyspec/core/io/close_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#close" do
- before :each do
- @name = tmp('io_close.txt')
- @io = new_io @name
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- it "closes the stream" do
- @io.close
- @io.closed?.should == true
- end
-
- it "returns nil" do
- @io.close.should == nil
- end
-
- it "raises an IOError reading from a closed IO" do
- @io.close
- lambda { @io.read }.should raise_error(IOError)
- end
-
- it "raises an IOError writing to a closed IO" do
- @io.close
- lambda { @io.write "data" }.should raise_error(IOError)
- end
-
- ruby_version_is ''...'2.3' do
- it "raises an IOError if closed" do
- @io.close
- lambda { @io.close }.should raise_error(IOError)
- end
- end
-
- ruby_version_is "2.3" do
- it "does nothing if already closed" do
- @io.close
-
- @io.close.should be_nil
- end
- end
-end
-
-describe "IO#close on an IO.popen stream" do
-
- it "clears #pid" do
- io = IO.popen ruby_cmd('r = loop{puts "y"; 0} rescue 1; exit r'), 'r'
-
- io.pid.should_not == 0
-
- io.close
-
- lambda { io.pid }.should raise_error(IOError)
- end
-
- it "sets $?" do
- io = IO.popen ruby_cmd('exit 0'), 'r'
- io.close
-
- $?.exitstatus.should == 0
-
- io = IO.popen ruby_cmd('exit 1'), 'r'
- io.close
-
- $?.exitstatus.should == 1
- end
-
- it "waits for the child to exit" do
- io = IO.popen ruby_cmd('r = loop{puts "y"; 0} rescue 1; exit r'), 'r'
- io.close
-
- $?.exitstatus.should_not == 0
- end
-
-end
-
diff --git a/spec/rubyspec/core/io/close_write_spec.rb b/spec/rubyspec/core/io/close_write_spec.rb
deleted file mode 100644
index c901aac499..0000000000
--- a/spec/rubyspec/core/io/close_write_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#close_write" do
- before :each do
- @io = IO.popen 'cat', 'r+'
- @path = tmp('io.close.txt')
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @path
- end
-
- it "closes the write end of a duplex I/O stream" do
- @io.close_write
-
- lambda { @io.write "attempt to write" }.should raise_error(IOError)
- end
-
- ruby_version_is ''...'2.3' do
- it "raises an IOError on subsequent invocations" do
- @io.close_write
-
- lambda { @io.close_write }.should raise_error(IOError)
- end
- end
-
- ruby_version_is '2.3' do
- it "does nothing on subsequent invocations" do
- @io.close_write
-
- @io.close_write.should be_nil
- end
- end
-
- it "allows subsequent invocation of close" do
- @io.close_write
-
- lambda { @io.close }.should_not raise_error
- end
-
- it "raises an IOError if the stream is readable and not duplexed" do
- io = File.open @path, 'w+'
-
- begin
- lambda { io.close_write }.should raise_error(IOError)
- ensure
- io.close unless io.closed?
- end
- end
-
- it "closes the stream if it is neither readable nor duplexed" do
- io = File.open @path, 'w'
-
- io.close_write
-
- io.closed?.should == true
- end
-
- it "flushes and closes the write stream" do
- @io.puts '12345'
-
- @io.close_write
-
- @io.read.should == "12345\n"
- end
-
- ruby_version_is ''...'2.3' do
- it "raises IOError on closed stream" do
- @io.close
-
- lambda { @io.close_write }.should raise_error(IOError)
- end
- end
-
- ruby_version_is '2.3' do
- it "does nothing on closed stream" do
- @io.close
-
- @io.close_write.should be_nil
- end
- end
-end
diff --git a/spec/rubyspec/core/io/closed_spec.rb b/spec/rubyspec/core/io/closed_spec.rb
deleted file mode 100644
index 80562885a7..0000000000
--- a/spec/rubyspec/core/io/closed_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#closed?" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close
- end
-
- it "returns true on closed stream" do
- IOSpecs.closed_io.closed?.should be_true
- end
-
- it "returns false on open stream" do
- @io.closed?.should be_false
- end
-end
diff --git a/spec/rubyspec/core/io/codepoints_spec.rb b/spec/rubyspec/core/io/codepoints_spec.rb
deleted file mode 100644
index 6e6b9613b5..0000000000
--- a/spec/rubyspec/core/io/codepoints_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/codepoints', __FILE__)
-
-# See redmine #1667
-describe "IO#codepoints" do
- it_behaves_like(:io_codepoints, :codepoints)
-end
-
-describe "IO#codepoints" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "calls the given block" do
- r = []
- @io.codepoints { |c| r << c }
- r[24].should == 232
- r.last.should == 10
- end
-end
diff --git a/spec/rubyspec/core/io/constants_spec.rb b/spec/rubyspec/core/io/constants_spec.rb
deleted file mode 100644
index 0a2ea70560..0000000000
--- a/spec/rubyspec/core/io/constants_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO::SEEK_SET" do
- it "is defined" do
- IO.const_defined?(:SEEK_SET).should == true
- end
-end
-
-describe "IO::SEEK_CUR" do
- it "is defined" do
- IO.const_defined?(:SEEK_CUR).should == true
- end
-end
-
-describe "IO::SEEK_END" do
- it "is defined" do
- IO.const_defined?(:SEEK_END).should == true
- end
-end
diff --git a/spec/rubyspec/core/io/copy_stream_spec.rb b/spec/rubyspec/core/io/copy_stream_spec.rb
deleted file mode 100644
index 344746fac3..0000000000
--- a/spec/rubyspec/core/io/copy_stream_spec.rb
+++ /dev/null
@@ -1,282 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe :io_copy_stream_to_file, shared: true do
- it "copies the entire IO contents to the file" do
- IO.copy_stream(@object.from, @to_name)
- File.read(@to_name).should == @content
- IO.copy_stream(@from_bigfile, @to_name)
- File.read(@to_name).should == @content_bigfile
- end
-
- it "returns the number of bytes copied" do
- IO.copy_stream(@object.from, @to_name).should == @size
- IO.copy_stream(@from_bigfile, @to_name).should == @size_bigfile
- end
-
- it "copies only length bytes when specified" do
- IO.copy_stream(@object.from, @to_name, 8).should == 8
- File.read(@to_name).should == "Line one"
- end
-
- it "calls #to_path to convert on object to a file name" do
- obj = mock("io_copy_stream_to")
- obj.should_receive(:to_path).and_return(@to_name)
-
- IO.copy_stream(@object.from, obj)
- File.read(@to_name).should == @content
- end
-
- it "raises a TypeError if #to_path does not return a String" do
- obj = mock("io_copy_stream_to")
- obj.should_receive(:to_path).and_return(1)
-
- lambda { IO.copy_stream(@object.from, obj) }.should raise_error(TypeError)
- end
-end
-
-describe :io_copy_stream_to_file_with_offset, shared: true do
- platform_is_not :windows do
- it "copies only length bytes from the offset" do
- IO.copy_stream(@object.from, @to_name, 8, 4).should == 8
- File.read(@to_name).should == " one\n\nLi"
- end
- end
-end
-
-describe :io_copy_stream_to_io, shared: true do
- it "copies the entire IO contents to the IO" do
- IO.copy_stream(@object.from, @to_io)
- File.read(@to_name).should == @content
- IO.copy_stream(@from_bigfile, @to_io)
- File.read(@to_name).should == (@content + @content_bigfile)
- end
-
- it "returns the number of bytes copied" do
- IO.copy_stream(@object.from, @to_io).should == @size
- IO.copy_stream(@from_bigfile, @to_io).should == @size_bigfile
- end
-
- it "starts writing at the destination IO's current position" do
- @to_io.write("prelude ")
- IO.copy_stream(@object.from, @to_io)
- File.read(@to_name).should == ("prelude " + @content)
- end
-
- it "leaves the destination IO position at the last write" do
- IO.copy_stream(@object.from, @to_io)
- @to_io.pos.should == @size
- end
-
- it "raises an IOError if the destination IO is not open for writing" do
- @to_io.close
- @to_io = new_io @to_name, "r"
- lambda { IO.copy_stream @object.from, @to_io }.should raise_error(IOError)
- end
-
- it "does not close the destination IO" do
- IO.copy_stream(@object.from, @to_io)
- @to_io.closed?.should be_false
- end
-
- it "copies only length bytes when specified" do
- IO.copy_stream(@object.from, @to_io, 8).should == 8
- File.read(@to_name).should == "Line one"
- end
-end
-
-describe :io_copy_stream_to_io_with_offset, shared: true do
- platform_is_not :windows do
- it "copies only length bytes from the offset" do
- IO.copy_stream(@object.from, @to_io, 8, 4).should == 8
- File.read(@to_name).should == " one\n\nLi"
- end
- end
-end
-
-describe "IO.copy_stream" do
- before :each do
- @from_name = fixture __FILE__, "copy_stream.txt"
- @to_name = tmp("io_copy_stream_io_name")
-
- @content = IO.read(@from_name)
- @size = @content.size
-
- @from_bigfile = tmp("io_copy_stream_bigfile")
- @content_bigfile = "A" * 17_000
- touch(@from_bigfile){|f| f.print @content_bigfile }
- @size_bigfile = @content_bigfile.size
- end
-
- after :each do
- rm_r @to_name, @from_bigfile
- end
-
- describe "from an IO" do
- before :each do
- @from_io = new_io @from_name, "rb"
- IOSpecs::CopyStream.from = @from_io
- end
-
- after :each do
- @from_io.close
- end
-
- it "raises an IOError if the source IO is not open for reading" do
- @from_io.close
- @from_io = new_io @from_bigfile, "a"
- lambda { IO.copy_stream @from_io, @to_name }.should raise_error(IOError)
- end
-
- it "does not close the source IO" do
- IO.copy_stream(@from_io, @to_name)
- @from_io.closed?.should be_false
- end
-
- platform_is_not :windows do
- it "does not change the IO offset when an offset is specified" do
- @from_io.pos = 10
- IO.copy_stream(@from_io, @to_name, 8, 4)
- @from_io.pos.should == 10
- end
- end
-
- it "does change the IO offset when an offset is not specified" do
- @from_io.pos = 10
- IO.copy_stream(@from_io, @to_name)
- @from_io.pos.should == 42
- end
-
- describe "to a file name" do
- it_behaves_like :io_copy_stream_to_file, nil, IOSpecs::CopyStream
- it_behaves_like :io_copy_stream_to_file_with_offset, nil, IOSpecs::CopyStream
- end
-
- describe "to an IO" do
- before :each do
- @to_io = new_io @to_name, "wb"
- end
-
- after :each do
- @to_io.close
- end
-
- it_behaves_like :io_copy_stream_to_io, nil, IOSpecs::CopyStream
- it_behaves_like :io_copy_stream_to_io_with_offset, nil, IOSpecs::CopyStream
- end
- end
-
- describe "from a file name" do
- before :each do
- IOSpecs::CopyStream.from = @from_name
- end
-
- it "calls #to_path to convert on object to a file name" do
- obj = mock("io_copy_stream_from")
- obj.should_receive(:to_path).and_return(@from_name)
-
- IO.copy_stream(obj, @to_name)
- File.read(@to_name).should == @content
- end
-
- it "raises a TypeError if #to_path does not return a String" do
- obj = mock("io_copy_stream_from")
- obj.should_receive(:to_path).and_return(1)
-
- lambda { IO.copy_stream(obj, @to_name) }.should raise_error(TypeError)
- end
-
- describe "to a file name" do
- it_behaves_like :io_copy_stream_to_file, nil, IOSpecs::CopyStream
- it_behaves_like :io_copy_stream_to_file_with_offset, nil, IOSpecs::CopyStream
- end
-
- describe "to an IO" do
- before :each do
- @to_io = new_io @to_name, "wb"
- end
-
- after :each do
- @to_io.close
- end
-
- it_behaves_like :io_copy_stream_to_io, nil, IOSpecs::CopyStream
- it_behaves_like :io_copy_stream_to_io_with_offset, nil, IOSpecs::CopyStream
- end
- end
-
- describe "from a pipe IO" do
- before :each do
- @from_io = IOSpecs.pipe_fixture(@content)
- IOSpecs::CopyStream.from = @from_io
- end
-
- after :each do
- @from_io.close
- end
-
- it "does not close the source IO" do
- IO.copy_stream(@from_io, @to_name)
- @from_io.closed?.should be_false
- end
-
- platform_is_not :windows do
- it "raises an error when an offset is specified" do
- lambda { IO.copy_stream(@from_io, @to_name, 8, 4) }.should raise_error(Errno::ESPIPE)
- end
- end
-
- describe "to a file name" do
- it_behaves_like :io_copy_stream_to_file, nil, IOSpecs::CopyStream
- end
-
- describe "to an IO" do
- before :each do
- @to_io = new_io @to_name, "wb"
- end
-
- after :each do
- @to_io.close
- end
-
- it_behaves_like :io_copy_stream_to_io, nil, IOSpecs::CopyStream
- end
- end
-
- describe "with non-IO Objects" do
- before do
- @io = new_io @from_name, "rb"
- end
-
- after do
- @io.close unless @io.closed?
- end
-
- it "calls #readpartial on the source Object if defined" do
- from = IOSpecs::CopyStreamReadPartial.new @io
-
- IO.copy_stream(from, @to_name)
- File.read(@to_name).should == @content
- end
-
- it "calls #read on the source Object" do
- from = IOSpecs::CopyStreamRead.new @io
-
- IO.copy_stream(from, @to_name)
- File.read(@to_name).should == @content
- end
-
- it "calls #write on the destination Object" do
- to = mock("io_copy_stream_to_object")
- to.should_receive(:write).with(@content).and_return(@content.size)
-
- IO.copy_stream(@from_name, to)
- end
-
- it "does not call #pos on the source if no offset is given" do
- @io.should_not_receive(:pos)
- IO.copy_stream(@io, @to_name)
- end
-
- end
-end
diff --git a/spec/rubyspec/core/io/dup_spec.rb b/spec/rubyspec/core/io/dup_spec.rb
deleted file mode 100644
index a90b04aa5d..0000000000
--- a/spec/rubyspec/core/io/dup_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#dup" do
- before :each do
- @file = tmp("rubinius_spec_io_dup_#{$$}_#{Time.now.to_f}")
- @f = File.open @file, 'w+'
- @i = @f.dup
-
- @f.sync = true
- @i.sync = true
- end
-
- after :each do
- @i.close if @i && !@i.closed?
- @f.close if @f && !@f.closed?
- rm_r @file
- end
-
- it "returns a new IO instance" do
- @i.class.should == @f.class
- end
-
- it "sets a new descriptor on the returned object" do
- @i.fileno.should_not == @f.fileno
- end
-
-quarantine! do # This does not appear to be consistent across platforms
- it "shares the original stream between the two IOs" do
- start = @f.pos
- @i.pos.should == start
-
- s = "Hello, wo.. wait, where am I?\n"
- s2 = "<evil voice> Muhahahaa!"
-
- @f.write s
- @i.pos.should == @f.pos
-
- @i.rewind
- @i.gets.should == s
-
- @i.rewind
- @i.write s2
-
- @f.rewind
- @f.gets.should == "#{s2}\n"
- end
-end
-
- it "allows closing the new IO without affecting the original" do
- @i.close
- lambda { @f.gets }.should_not raise_error(Exception)
-
- @i.closed?.should == true
- @f.closed?.should == false
- end
-
- it "allows closing the original IO without affecting the new one" do
- @f.close
- lambda { @i.gets }.should_not raise_error(Exception)
-
- @i.closed?.should == false
- @f.closed?.should == true
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.dup }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/each_byte_spec.rb b/spec/rubyspec/core/io/each_byte_spec.rb
deleted file mode 100644
index 0dc535a159..0000000000
--- a/spec/rubyspec/core/io/each_byte_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#each_byte" do
- before :each do
- ScratchPad.record []
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.each_byte {} }.should raise_error(IOError)
- end
-
- it "yields each byte" do
- count = 0
- @io.each_byte do |byte|
- ScratchPad << byte
- break if 4 < count += 1
- end
-
- ScratchPad.recorded.should == [86, 111, 105, 99, 105]
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- enum = @io.each_byte
- enum.should be_an_instance_of(Enumerator)
- enum.first(5).should == [86, 111, 105, 99, 105]
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- @io.each_byte.size.should == nil
- end
- end
- end
- end
-end
-
-describe "IO#each_byte" do
- before :each do
- @io = IOSpecs.io_fixture "empty.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns self on an empty stream" do
- @io.each_byte { |b| }.should equal(@io)
- end
-end
diff --git a/spec/rubyspec/core/io/each_char_spec.rb b/spec/rubyspec/core/io/each_char_spec.rb
deleted file mode 100644
index 69c6739920..0000000000
--- a/spec/rubyspec/core/io/each_char_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/chars', __FILE__)
-
-describe "IO#each_char" do
- it_behaves_like :io_chars, :each_char
-end
-
-describe "IO#each_char" do
- it_behaves_like :io_chars_empty, :each_char
-end
diff --git a/spec/rubyspec/core/io/each_codepoint_spec.rb b/spec/rubyspec/core/io/each_codepoint_spec.rb
deleted file mode 100644
index eb16e004fa..0000000000
--- a/spec/rubyspec/core/io/each_codepoint_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/codepoints', __FILE__)
-
-# See redmine #1667
-describe "IO#each_codepoint" do
- it_behaves_like(:io_codepoints, :codepoints)
-end
-
-describe "IO#each_codepoint" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "calls the given block" do
- r = []
- @io.each_codepoint { |c| r << c }
- r[24].should == 232
- r.last.should == 10
- end
-
- it "returns self" do
- @io.each_codepoint { |l| l }.should equal(@io)
- end
-end
-
-describe "IO#each_codepoint" do
- before :each do
- @io = IOSpecs.io_fixture("incomplete.txt")
- end
-
- after :each do
- @io.close if @io
- end
-
- ruby_version_is "2.3" do # earlier versions stay blocked
- it "raises an exception at incomplete character before EOF when conversion takes place" do
- lambda { @io.each_codepoint {} }.should raise_error(ArgumentError)
- end
- end
-end
diff --git a/spec/rubyspec/core/io/each_line_spec.rb b/spec/rubyspec/core/io/each_line_spec.rb
deleted file mode 100644
index d4d8af7902..0000000000
--- a/spec/rubyspec/core/io/each_line_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/each', __FILE__)
-
-describe "IO#each_line" do
- it_behaves_like :io_each, :each_line
-end
-
-describe "IO#each_line" do
- it_behaves_like :io_each_default_separator, :each_line
-end
diff --git a/spec/rubyspec/core/io/each_spec.rb b/spec/rubyspec/core/io/each_spec.rb
deleted file mode 100644
index 4d6aa50fb2..0000000000
--- a/spec/rubyspec/core/io/each_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/each', __FILE__)
-
-describe "IO#each" do
- it_behaves_like :io_each, :each
-end
-
-describe "IO#each" do
- it_behaves_like :io_each_default_separator, :each
-end
diff --git a/spec/rubyspec/core/io/eof_spec.rb b/spec/rubyspec/core/io/eof_spec.rb
deleted file mode 100644
index a2c5e563f0..0000000000
--- a/spec/rubyspec/core/io/eof_spec.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#eof?" do
- before :each do
- @name = tmp("empty.txt")
- touch @name
- end
-
- after :each do
- rm_r @name
- end
-
- it "returns true on an empty stream that has just been opened" do
- File.open(@name) { |empty| empty.eof?.should == true }
- end
-
- it "raises IOError on stream not opened for reading" do
- lambda do
- File.open(@name, "w") { |f| f.eof? }
- end.should raise_error(IOError)
- end
-end
-
-describe "IO#eof?" do
- before :each do
- @name = fixture __FILE__, "lines.txt"
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io && !@io.closed?
- end
-
- it "returns false when not at end of file" do
- @io.read 1
- @io.eof?.should == false
- end
-
- it "returns true after reading with read with no parameters" do
- @io.read()
- @io.eof?.should == true
- end
-
- it "returns true after reading with read" do
- @io.read(File.size(@name))
- @io.eof?.should == true
- end
-
- it "returns true after reading with sysread" do
- @io.sysread(File.size(@name))
- @io.eof?.should == true
- end
-
- it "returns true after reading with readlines" do
- @io.readlines
- @io.eof?.should == true
- end
-
- it "returns false on just opened non-empty stream" do
- @io.eof?.should == false
- end
-
- it "does not consume the data from the stream" do
- @io.eof?.should == false
- @io.getc.should == 'V'
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.eof? }.should raise_error(IOError)
- end
-
- it "raises IOError on stream closed for reading by close_read" do
- @io.close_read
- lambda { @io.eof? }.should raise_error(IOError)
- end
-
- it "returns true on one-byte stream after single-byte read" do
- File.open(File.dirname(__FILE__) + '/fixtures/one_byte.txt') { |one_byte|
- one_byte.read(1)
- one_byte.eof?.should == true
- }
- end
-end
-
-describe "IO#eof?" do
- after :each do
- @r.close if @r && !@r.closed?
- @w.close if @w && !@w.closed?
- end
-
- it "returns true on receiving side of Pipe when writing side is closed" do
- @r, @w = IO.pipe
- @w.close
- @r.eof?.should == true
- end
-
- it "returns false on receiving side of Pipe when writing side wrote some data" do
- @r, @w = IO.pipe
- @w.puts "hello"
- @r.eof?.should == false
- @w.close
- @r.eof?.should == false
- @r.read
- @r.eof?.should == true
- end
-end
diff --git a/spec/rubyspec/core/io/external_encoding_spec.rb b/spec/rubyspec/core/io/external_encoding_spec.rb
deleted file mode 100644
index ec85eba2ee..0000000000
--- a/spec/rubyspec/core/io/external_encoding_spec.rb
+++ /dev/null
@@ -1,218 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-with_feature :encoding do
- describe :io_external_encoding_write, shared: true do
- describe "when Encoding.default_internal is nil" do
- before :each do
- Encoding.default_internal = nil
- end
-
- it "returns nil" do
- @io = new_io @name, @object
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should be_nil
- end
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "#{@object}:ibm866"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "#{@object}:ibm866"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
-
- describe "when Encoding.default_external != Encoding.default_internal" do
- before :each do
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
- end
-
- it "returns the value of Encoding.default_external when the instance was created" do
- @io = new_io @name, @object
- Encoding.default_external = Encoding::UTF_8
- @io.external_encoding.should equal(Encoding::IBM437)
- end
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "#{@object}:ibm866"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "#{@object}:ibm866"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
-
- describe "when Encoding.default_external == Encoding.default_internal" do
- before :each do
- Encoding.default_external = Encoding::IBM866
- Encoding.default_internal = Encoding::IBM866
- end
-
- it "returns the value of Encoding.default_external when the instance was created" do
- @io = new_io @name, @object
- Encoding.default_external = Encoding::UTF_8
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "#{@object}:ibm866"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "#{@object}:ibm866"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
- end
-
- describe "IO#external_encoding" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
-
- @name = tmp("io_external_encoding")
- touch(@name)
- end
-
- after :each do
- Encoding.default_external = @external
- Encoding.default_internal = @internal
-
- @io.close if @io
- rm_r @name
- end
-
- describe "with 'r' mode" do
- describe "when Encoding.default_internal is nil" do
- before :each do
- Encoding.default_internal = nil
- Encoding.default_external = Encoding::IBM866
- end
-
- it "returns Encoding.default_external if the external encoding is not set" do
- @io = new_io @name, "r"
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns Encoding.default_external when that encoding is changed after the instance is created" do
- @io = new_io @name, "r"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::IBM437)
- end
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "r:utf-8"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::UTF_8)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "r:utf-8"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
-
- describe "when Encoding.default_external == Encoding.default_internal" do
- before :each do
- Encoding.default_external = Encoding::IBM866
- Encoding.default_internal = Encoding::IBM866
- end
-
- it "returns the value of Encoding.default_external when the instance was created" do
- @io = new_io @name, "r"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "r:utf-8"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::UTF_8)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "r:utf-8"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
-
- describe "when Encoding.default_external != Encoding.default_internal" do
- before :each do
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
- end
-
-
- it "returns the external encoding specified when the instance was created" do
- @io = new_io @name, "r:utf-8"
- Encoding.default_external = Encoding::IBM437
- @io.external_encoding.should equal(Encoding::UTF_8)
- end
-
- it "returns the encoding set by #set_encoding" do
- @io = new_io @name, "r:utf-8"
- @io.set_encoding Encoding::EUC_JP, nil
- @io.external_encoding.should equal(Encoding::EUC_JP)
- end
- end
- end
-
- describe "with 'rb' mode" do
- it "returns Encoding::ASCII_8BIT" do
- @io = new_io @name, "rb"
- @io.external_encoding.should equal(Encoding::ASCII_8BIT)
- end
-
- it "returns the external encoding specified by the mode argument" do
- @io = new_io @name, "rb:ibm437"
- @io.external_encoding.should equal(Encoding::IBM437)
- end
- end
-
- describe "with 'r+' mode" do
- it_behaves_like :io_external_encoding_write, nil, "r+"
- end
-
- describe "with 'w' mode" do
- it_behaves_like :io_external_encoding_write, nil, "w"
- end
-
- describe "with 'wb' mode" do
- it "returns Encoding::ASCII_8BIT" do
- @io = new_io @name, "wb"
- @io.external_encoding.should equal(Encoding::ASCII_8BIT)
- end
-
- it "returns the external encoding specified by the mode argument" do
- @io = new_io @name, "wb:ibm437"
- @io.external_encoding.should equal(Encoding::IBM437)
- end
- end
-
- describe "with 'w+' mode" do
- it_behaves_like :io_external_encoding_write, nil, "w+"
- end
-
- describe "with 'a' mode" do
- it_behaves_like :io_external_encoding_write, nil, "a"
- end
-
- describe "with 'a+' mode" do
- it_behaves_like :io_external_encoding_write, nil, "a+"
- end
- end
-end
diff --git a/spec/rubyspec/core/io/fcntl_spec.rb b/spec/rubyspec/core/io/fcntl_spec.rb
deleted file mode 100644
index 0e20f50f60..0000000000
--- a/spec/rubyspec/core/io/fcntl_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#fcntl" do
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.fcntl(5, 5) }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/fdatasync_spec.rb b/spec/rubyspec/core/io/fdatasync_spec.rb
deleted file mode 100644
index 9bcbbda336..0000000000
--- a/spec/rubyspec/core/io/fdatasync_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO#fdatasync" do
- it "needs to be reviewed for spec completeness"
-end
diff --git a/spec/rubyspec/core/io/fileno_spec.rb b/spec/rubyspec/core/io/fileno_spec.rb
deleted file mode 100644
index 259ac38073..0000000000
--- a/spec/rubyspec/core/io/fileno_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#fileno" do
- it "returns the numeric file descriptor of the given IO object" do
- $stdout.fileno.should == 1
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.fileno }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/fixtures/bom_UTF-16BE.txt b/spec/rubyspec/core/io/fixtures/bom_UTF-16BE.txt
deleted file mode 100644
index c7c42e9de4..0000000000
--- a/spec/rubyspec/core/io/fixtures/bom_UTF-16BE.txt
+++ /dev/null
Binary files differ
diff --git a/spec/rubyspec/core/io/fixtures/bom_UTF-16LE.txt b/spec/rubyspec/core/io/fixtures/bom_UTF-16LE.txt
deleted file mode 100644
index 53642b6984..0000000000
--- a/spec/rubyspec/core/io/fixtures/bom_UTF-16LE.txt
+++ /dev/null
Binary files differ
diff --git a/spec/rubyspec/core/io/fixtures/bom_UTF-32BE.txt b/spec/rubyspec/core/io/fixtures/bom_UTF-32BE.txt
deleted file mode 100644
index c5efe6c278..0000000000
--- a/spec/rubyspec/core/io/fixtures/bom_UTF-32BE.txt
+++ /dev/null
Binary files differ
diff --git a/spec/rubyspec/core/io/fixtures/bom_UTF-32LE.txt b/spec/rubyspec/core/io/fixtures/bom_UTF-32LE.txt
deleted file mode 100644
index 1168384393..0000000000
--- a/spec/rubyspec/core/io/fixtures/bom_UTF-32LE.txt
+++ /dev/null
Binary files differ
diff --git a/spec/rubyspec/core/io/fixtures/bom_UTF-8.txt b/spec/rubyspec/core/io/fixtures/bom_UTF-8.txt
deleted file mode 100644
index ca971bef61..0000000000
--- a/spec/rubyspec/core/io/fixtures/bom_UTF-8.txt
+++ /dev/null
@@ -1 +0,0 @@
-UTF-8
diff --git a/spec/rubyspec/core/io/fixtures/classes.rb b/spec/rubyspec/core/io/fixtures/classes.rb
deleted file mode 100644
index fb431d5023..0000000000
--- a/spec/rubyspec/core/io/fixtures/classes.rb
+++ /dev/null
@@ -1,177 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-module IOSpecs
- class SubIO < IO
- end
-
- def self.collector
- Proc.new { |x| ScratchPad << x }
- end
-
- def self.lines
- [ "Voici la ligne une.\n",
- "Qui \303\250 la linea due.\n",
- "\n",
- "\n",
- "Aqu\303\255 est\303\241 la l\303\255nea tres.\n",
- "Hier ist Zeile vier.\n",
- "\n",
- "Est\303\241 aqui a linha cinco.\n",
- "Here is line six.\n" ]
- end
-
- def self.lines_limit
- [ "Voici la l",
- "igne une.\n",
- "Qui è la ",
- "linea due.",
- "\n",
- "\n",
- "\n",
- "Aquí está",
- " la línea",
- " tres.\n",
- "Hier ist Z",
- "eile vier.",
- "\n",
- "\n",
- "Está aqui",
- " a linha c",
- "inco.\n",
- "Here is li",
- "ne six.\n" ]
- end
-
- def self.lines_space_separator_limit
- [ "Voici ",
- "la ",
- "ligne ",
- "une.\nQui ",
- "è ",
- "la ",
- "linea ",
- "due.\n\n\nAqu",
- "í ",
- "está ",
- "la ",
- "línea ",
- "tres.\nHier",
- " ",
- "ist ",
- "Zeile ",
- "vier.\n\nEst",
- "á ",
- "aqui ",
- "a ",
- "linha ",
- "cinco.\nHer",
- "e ",
- "is ",
- "line ",
- "six.\n" ]
- end
-
- def self.lines_r_separator
- [ "Voici la ligne une.\nQui \303\250 la linea due.\n\n\nAqu\303\255 est\303\241 la l\303\255nea tr",
- "es.\nHier",
- " ist Zeile vier",
- ".\n\nEst\303\241 aqui a linha cinco.\nHer",
- "e is line six.\n" ]
- end
-
- def self.lines_empty_separator
- [ "Voici la ligne une.\nQui \303\250 la linea due.\n\n",
- "Aqu\303\255 est\303\241 la l\303\255nea tres.\nHier ist Zeile vier.\n\n",
- "Est\303\241 aqui a linha cinco.\nHere is line six.\n" ]
- end
-
- def self.lines_space_separator
- [ "Voici ", "la ", "ligne ", "une.\nQui ",
- "\303\250 ", "la ", "linea ", "due.\n\n\nAqu\303\255 ",
- "est\303\241 ", "la ", "l\303\255nea ", "tres.\nHier ",
- "ist ", "Zeile ", "vier.\n\nEst\303\241 ", "aqui ", "a ",
- "linha ", "cinco.\nHere ", "is ", "line ", "six.\n" ]
- end
-
- def self.lines_arbitrary_separator
- [ "Voici la ligne une.\nQui \303\250",
- " la linea due.\n\n\nAqu\303\255 est\303\241 la l\303\255nea tres.\nHier ist Zeile vier.\n\nEst\303\241 aqui a linha cinco.\nHere is line six.\n" ]
- end
-
- def self.paragraphs
- [ "Voici la ligne une.\nQui \303\250 la linea due.\n\n",
- "Aqu\303\255 est\303\241 la l\303\255nea tres.\nHier ist Zeile vier.\n\n",
- "Est\303\241 aqui a linha cinco.\nHere is line six.\n" ]
- end
-
- # Creates an IO instance for an existing fixture file. The
- # file should obviously not be deleted.
- def self.io_fixture(name, options_or_mode="r:utf-8")
- path = fixture __FILE__, name
- name = path if File.exist? path
- new_io name, options_or_mode
- end
-
- # Returns a closed instance of IO that was opened to reference
- # a fixture file (i.e. the IO instance was perfectly valid at
- # one point but is now closed).
- def self.closed_io
- io = io_fixture "lines.txt"
- io.close
- io
- end
-
- # Creates a pipe-based IO fixture containing the specified
- # contents
- def self.pipe_fixture(content)
- source, sink = IO.pipe
- sink.write content
- sink.close
- source
- end
-
- # Defines +method+ on +obj+ using the provided +block+. This
- # special helper is needed for e.g. IO.open specs to avoid
- # mock methods preventing IO#close from running.
- def self.io_mock(obj, method, &block)
- obj.singleton_class.send(:define_method, method, &block)
- end
-
- module CopyStream
- def self.from=(from)
- @from = from
- end
-
- def self.from
- @from
- end
- end
-
- class CopyStreamRead
- def initialize(io)
- @io = io
- end
-
- def read(size, buf=nil)
- @io.read size, buf
- end
-
- def send(*args)
- raise "send called"
- end
- end
-
- class CopyStreamReadPartial
- def initialize(io)
- @io = io
- end
-
- def readpartial(size, buf=nil)
- @io.readpartial size, buf
- end
-
- def send(*args)
- raise "send called"
- end
- end
-end
diff --git a/spec/rubyspec/core/io/fixtures/copy_stream.txt b/spec/rubyspec/core/io/fixtures/copy_stream.txt
deleted file mode 100644
index a2d827b351..0000000000
--- a/spec/rubyspec/core/io/fixtures/copy_stream.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Line one
-
-Line three
-Line four
-
-Line last
diff --git a/spec/rubyspec/core/io/fixtures/empty.txt b/spec/rubyspec/core/io/fixtures/empty.txt
deleted file mode 100644
index e69de29bb2..0000000000
--- a/spec/rubyspec/core/io/fixtures/empty.txt
+++ /dev/null
diff --git a/spec/rubyspec/core/io/fixtures/incomplete.txt b/spec/rubyspec/core/io/fixtures/incomplete.txt
deleted file mode 100644
index 23d432f642..0000000000
--- a/spec/rubyspec/core/io/fixtures/incomplete.txt
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/spec/rubyspec/core/io/fixtures/lines.txt b/spec/rubyspec/core/io/fixtures/lines.txt
deleted file mode 100644
index 0959997e7b..0000000000
--- a/spec/rubyspec/core/io/fixtures/lines.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Voici la ligne une.
-Qui è la linea due.
-
-
-Aquí está la línea tres.
-Hier ist Zeile vier.
-
-Está aqui a linha cinco.
-Here is line six.
diff --git a/spec/rubyspec/core/io/fixtures/no_bom_UTF-8.txt b/spec/rubyspec/core/io/fixtures/no_bom_UTF-8.txt
deleted file mode 100644
index 7edc66b06a..0000000000
--- a/spec/rubyspec/core/io/fixtures/no_bom_UTF-8.txt
+++ /dev/null
@@ -1 +0,0 @@
-UTF-8
diff --git a/spec/rubyspec/core/io/fixtures/numbered_lines.txt b/spec/rubyspec/core/io/fixtures/numbered_lines.txt
deleted file mode 100644
index 70e49a3d98..0000000000
--- a/spec/rubyspec/core/io/fixtures/numbered_lines.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Line 1: One
-Line 2: Two
-Line 3: Three
-Line 4: Four
-Line 5: Five
diff --git a/spec/rubyspec/core/io/fixtures/one_byte.txt b/spec/rubyspec/core/io/fixtures/one_byte.txt
deleted file mode 100644
index 56a6051ca2..0000000000
--- a/spec/rubyspec/core/io/fixtures/one_byte.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 \ No newline at end of file
diff --git a/spec/rubyspec/core/io/fixtures/read_binary.txt b/spec/rubyspec/core/io/fixtures/read_binary.txt
deleted file mode 100644
index fa036dca4b..0000000000
--- a/spec/rubyspec/core/io/fixtures/read_binary.txt
+++ /dev/null
@@ -1 +0,0 @@
-abcdef
diff --git a/spec/rubyspec/core/io/fixtures/read_euc_jp.txt b/spec/rubyspec/core/io/fixtures/read_euc_jp.txt
deleted file mode 100644
index 0e17cd717a..0000000000
--- a/spec/rubyspec/core/io/fixtures/read_euc_jp.txt
+++ /dev/null
@@ -1 +0,0 @@
-꤬Ȥ
diff --git a/spec/rubyspec/core/io/fixtures/read_text.txt b/spec/rubyspec/core/io/fixtures/read_text.txt
deleted file mode 100644
index 5a7a80f6e4..0000000000
--- a/spec/rubyspec/core/io/fixtures/read_text.txt
+++ /dev/null
@@ -1 +0,0 @@
-abcâdef
diff --git a/spec/rubyspec/core/io/fixtures/reopen_stdout.rb b/spec/rubyspec/core/io/fixtures/reopen_stdout.rb
deleted file mode 100644
index 506ba072bd..0000000000
--- a/spec/rubyspec/core/io/fixtures/reopen_stdout.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-STDOUT.reopen ARGV[0]
-system "echo from system"
-exec "echo from exec"
diff --git a/spec/rubyspec/core/io/flush_spec.rb b/spec/rubyspec/core/io/flush_spec.rb
deleted file mode 100644
index c877650ecd..0000000000
--- a/spec/rubyspec/core/io/flush_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#flush" do
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.flush }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/for_fd_spec.rb b/spec/rubyspec/core/io/for_fd_spec.rb
deleted file mode 100644
index b4abc1f87c..0000000000
--- a/spec/rubyspec/core/io/for_fd_spec.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../shared/new', __FILE__)
-
-describe "IO.for_fd" do
- it_behaves_like :io_new, :for_fd
-end
-
-describe "IO.for_fd" do
- it_behaves_like :io_new_errors, :for_fd
-end
diff --git a/spec/rubyspec/core/io/foreach_spec.rb b/spec/rubyspec/core/io/foreach_spec.rb
deleted file mode 100644
index f5fa1459e9..0000000000
--- a/spec/rubyspec/core/io/foreach_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/readlines', __FILE__)
-
-describe "IO.foreach" do
- before :each do
- @name = fixture __FILE__, "lines.txt"
- @count = 0
- ScratchPad.record []
- end
-
- it "updates $. with each yield" do
- IO.foreach(@name) { $..should == @count += 1 }
- end
-
- describe "when the filename starts with |" do
- it "gets data from the standard out of the subprocess" do
- cmd = "|sh -c 'echo hello;echo line2'"
- platform_is :windows do
- cmd = "|cmd.exe /C echo hello&echo line2"
- end
- IO.foreach(cmd) { |l| ScratchPad << l }
- ScratchPad.recorded.should == ["hello\n", "line2\n"]
- end
-
- with_feature :fork do
- it "gets data from a fork when passed -" do
- parent_pid = $$
-
- IO.foreach("|-") { |l| ScratchPad << l }
-
- if $$ == parent_pid
- ScratchPad.recorded.should == ["hello\n", "from a fork\n"]
- else # child
- puts "hello"
- puts "from a fork"
- exit!
- end
- end
- end
- end
-end
-
-describe "IO.foreach" do
- before :each do
- @external = Encoding.default_external
- Encoding.default_external = Encoding::UTF_8
-
- @name = fixture __FILE__, "lines.txt"
- ScratchPad.record []
- end
-
- after :each do
- Encoding.default_external = @external
- end
-
- it "sets $_ to nil" do
- $_ = "test"
- IO.foreach(@name) { }
- $_.should be_nil
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- IO.foreach(@name).should be_an_instance_of(Enumerator)
- IO.foreach(@name).to_a.should == IOSpecs.lines
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- IO.foreach(@name).size.should == nil
- end
- end
- end
- end
-
- it_behaves_like :io_readlines, :foreach, IOSpecs.collector
- it_behaves_like :io_readlines_options_19, :foreach, IOSpecs.collector
-end
diff --git a/spec/rubyspec/core/io/fsync_spec.rb b/spec/rubyspec/core/io/fsync_spec.rb
deleted file mode 100644
index 7816ecc42b..0000000000
--- a/spec/rubyspec/core/io/fsync_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#fsync" do
- before :each do
- @name = tmp("io_fsync.txt")
- ScratchPad.clear
- end
-
- after :each do
- rm_r @name
- end
-
- it "raises an IOError on closed stream" do
- lambda { IOSpecs.closed_io.fsync }.should raise_error(IOError)
- end
-
- it "writes the buffered data to permanent storage" do
- File.open(@name, "w") do |f|
- f.write "one hit wonder"
- f.fsync.should == 0
- end
- end
-end
diff --git a/spec/rubyspec/core/io/getbyte_spec.rb b/spec/rubyspec/core/io/getbyte_spec.rb
deleted file mode 100644
index cb8929890f..0000000000
--- a/spec/rubyspec/core/io/getbyte_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#getbyte" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns the next byte from the stream" do
- @io.readline.should == "Voici la ligne une.\n"
- letters = @io.getbyte, @io.getbyte, @io.getbyte, @io.getbyte, @io.getbyte
- letters.should == [81, 117, 105, 32, 195]
- end
-
- it "returns nil when invoked at the end of the stream" do
- @io.read
- @io.getbyte.should == nil
- end
-
- it "raises an IOError on closed stream" do
- lambda { IOSpecs.closed_io.getbyte }.should raise_error(IOError)
- end
-end
-
-describe "IO#getbyte" do
- before :each do
- @io = IOSpecs.io_fixture "empty.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns nil on empty stream" do
- @io.getbyte.should == nil
- end
-end
diff --git a/spec/rubyspec/core/io/getc_spec.rb b/spec/rubyspec/core/io/getc_spec.rb
deleted file mode 100644
index dfff1a9583..0000000000
--- a/spec/rubyspec/core/io/getc_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#getc" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns the next character from the stream" do
- @io.readline.should == "Voici la ligne une.\n"
- letters = @io.getc, @io.getc, @io.getc, @io.getc, @io.getc
- letters.should == ["Q", "u", "i", " ", "è"]
- end
-
- it "returns nil when invoked at the end of the stream" do
- @io.read
- @io.getc.should be_nil
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.getc }.should raise_error(IOError)
- end
-end
-
-describe "IO#getc" do
- before :each do
- @io = IOSpecs.io_fixture "empty.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns nil on empty stream" do
- @io.getc.should be_nil
- end
-end
diff --git a/spec/rubyspec/core/io/gets_spec.rb b/spec/rubyspec/core/io/gets_spec.rb
deleted file mode 100644
index d984e795c2..0000000000
--- a/spec/rubyspec/core/io/gets_spec.rb
+++ /dev/null
@@ -1,313 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/gets_ascii', __FILE__)
-
-describe "IO#gets" do
- it_behaves_like :io_gets_ascii, :gets
-end
-
-describe "IO#gets" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- @count = 0
- end
-
- after :each do
- @io.close if @io
- end
-
- it "assigns the returned line to $_" do
- IOSpecs.lines.each do |line|
- @io.gets
- $_.should == line
- end
- end
-
- it "returns nil if called at the end of the stream" do
- IOSpecs.lines.length.times { @io.gets }
- @io.gets.should == nil
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.gets }.should raise_error(IOError)
- end
-
- describe "with no separator" do
- it "returns the next line of string that is separated by $/" do
- IOSpecs.lines.each { |line| line.should == @io.gets }
- end
-
- it "returns tainted strings" do
- while line = @io.gets
- line.tainted?.should == true
- end
- end
-
- it "updates lineno with each invocation" do
- while @io.gets
- @io.lineno.should == @count += 1
- end
- end
-
- it "updates $. with each invocation" do
- while @io.gets
- $..should == @count += 1
- end
- end
- end
-
- describe "with nil separator" do
- it "returns the entire contents" do
- @io.gets(nil).should == IOSpecs.lines.join("")
- end
-
- it "returns tainted strings" do
- while line = @io.gets(nil)
- line.tainted?.should == true
- end
- end
-
- it "updates lineno with each invocation" do
- while @io.gets(nil)
- @io.lineno.should == @count += 1
- end
- end
-
- it "updates $. with each invocation" do
- while @io.gets(nil)
- $..should == @count += 1
- end
- end
- end
-
- describe "with an empty String separator" do
- # Two successive newlines in the input separate paragraphs.
- # When there are more than two successive newlines, only two are kept.
- it "returns the next paragraph" do
- @io.gets("").should == IOSpecs.lines[0,3].join("")
- @io.gets("").should == IOSpecs.lines[4,3].join("")
- @io.gets("").should == IOSpecs.lines[7,2].join("")
- end
-
- it "reads until the beginning of the next paragraph" do
- # There are three newlines between the first and second paragraph
- @io.gets("")
- @io.gets.should == IOSpecs.lines[4]
- end
-
- it "returns tainted strings" do
- while line = @io.gets("")
- line.tainted?.should == true
- end
- end
-
- it "updates lineno with each invocation" do
- while @io.gets("")
- @io.lineno.should == @count += 1
- end
- end
-
- it "updates $. with each invocation" do
- while @io.gets("")
- $..should == @count += 1
- end
- end
- end
-
- describe "with an arbitrary String separator" do
- it "reads up to and including the separator" do
- @io.gets("la linea").should == "Voici la ligne une.\nQui \303\250 la linea"
- end
-
- it "returns tainted strings" do
- while line = @io.gets("la")
- line.tainted?.should == true
- end
- end
-
- it "updates lineno with each invocation" do
- while (@io.gets("la"))
- @io.lineno.should == @count += 1
- end
- end
-
- it "updates $. with each invocation" do
- while @io.gets("la")
- $..should == @count += 1
- end
- end
- end
-end
-
-describe "IO#gets" do
- before :each do
- @name = tmp("io_gets")
- end
-
- after :each do
- rm_r @name
- end
-
- it "raises an IOError if the stream is opened for append only" do
- lambda { File.open(@name, fmode("a:utf-8")) { |f| f.gets } }.should raise_error(IOError)
- end
-
- it "raises an IOError if the stream is opened for writing only" do
- lambda { File.open(@name, fmode("w:utf-8")) { |f| f.gets } }.should raise_error(IOError)
- end
-end
-
-describe "IO#gets" do
- before :each do
- @name = tmp("io_gets")
- touch(@name) { |f| f.write "one\n\ntwo\n\nthree\nfour\n" }
- @io = new_io @name, fmode("r:utf-8")
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- end
-
- it "calls #to_int to convert a single object argument to an Integer limit" do
- obj = mock("io gets limit")
- obj.should_receive(:to_int).and_return(6)
-
- @io.gets(obj).should == "one\n"
- end
-
- it "calls #to_int to convert the second object argument to an Integer limit" do
- obj = mock("io gets limit")
- obj.should_receive(:to_int).and_return(2)
-
- @io.gets(nil, obj).should == "on"
- end
-
- it "calls #to_str to convert the first argument to a String when passed a limit" do
- obj = mock("io gets separator")
- obj.should_receive(:to_str).and_return($/)
-
- @io.gets(obj, 5).should == "one\n"
- end
-
- it "reads to the default seperator when passed a single argument greater than the number of bytes to the separator" do
- @io.gets(6).should == "one\n"
- end
-
- it "reads limit bytes when passed a single argument less than the number of bytes to the default separator" do
- @io.gets(3).should == "one"
- end
-
- it "reads limit bytes when passed nil and a limit" do
- @io.gets(nil, 6).should == "one\n\nt"
- end
-
- it "reads all bytes when the limit is higher than the available bytes" do
- @io.gets(nil, 100).should == "one\n\ntwo\n\nthree\nfour\n"
- end
-
- it "reads until the next paragraph when passed '' and a limit greater than the next paragraph" do
- @io.gets("", 6).should == "one\n\n"
- end
-
- it "reads limit bytes when passed '' and a limit less than the next paragraph" do
- @io.gets("", 3).should == "one"
- end
-
- it "reads all bytes when pass a separator and reading more than all bytes" do
- @io.gets("\t", 100).should == "one\n\ntwo\n\nthree\nfour\n"
- end
-end
-
-describe "IO#gets" do
- before :each do
- @name = tmp("io_gets")
- # create data "朝日" + "\xE3\x81" * 100 to avoid utf-8 conflicts
- data = "朝日" + ([227,129].pack('C*') * 100).force_encoding('utf-8')
- touch(@name) { |f| f.write data }
- @io = new_io @name, fmode("r:utf-8")
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- end
-
- it "reads limit bytes and extra bytes when limit is reached not at character boundary" do
- [@io.gets(1), @io.gets(1)].should == ["朝", "日"]
- end
-
- it "read limit bytes and extra bytes with maximum of 16" do
- # create str "朝日\xE3" + "\x81\xE3" * 8 to avoid utf-8 conflicts
- str = "朝日" + ([227] + [129,227] * 8).pack('C*').force_encoding('utf-8')
- @io.gets(7).should == str
- end
-end
-
-describe "IO#gets" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
-
- Encoding.default_external = Encoding::UTF_8
- Encoding.default_internal = nil
-
- @name = tmp("io_gets")
- touch(@name) { |f| f.write "line" }
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- Encoding.default_external = @external
- Encoding.default_internal = @internal
- end
-
- it "uses the default external encoding" do
- @io = new_io @name, 'r'
- @io.gets.encoding.should == Encoding::UTF_8
- end
-
- it "uses the IO object's external encoding, when set" do
- @io = new_io @name, 'r'
- @io.set_encoding Encoding::US_ASCII
- @io.gets.encoding.should == Encoding::US_ASCII
- end
-
- it "transcodes into the default internal encoding" do
- Encoding.default_internal = Encoding::US_ASCII
- @io = new_io @name, 'r'
- @io.gets.encoding.should == Encoding::US_ASCII
- end
-
- it "transcodes into the IO object's internal encoding, when set" do
- Encoding.default_internal = Encoding::US_ASCII
- @io = new_io @name, 'r'
- @io.set_encoding Encoding::UTF_8, Encoding::UTF_16
- @io.gets.encoding.should == Encoding::UTF_16
- end
-
- it "overwrites the default external encoding with the IO object's own external encoding" do
- Encoding.default_external = Encoding::ASCII_8BIT
- Encoding.default_internal = Encoding::UTF_8
- @io = new_io @name, 'r'
- @io.set_encoding Encoding::IBM866
- @io.gets.encoding.should == Encoding::UTF_8
- end
-
- it "ignores the internal encoding if the default external encoding is ASCII-8BIT" do
- Encoding.default_external = Encoding::ASCII_8BIT
- Encoding.default_internal = Encoding::UTF_8
- @io = new_io @name, 'r'
- @io.gets.encoding.should == Encoding::ASCII_8BIT
- end
-
- it "transcodes to internal encoding if the IO object's external encoding is ASCII-8BIT" do
- Encoding.default_external = Encoding::ASCII_8BIT
- Encoding.default_internal = Encoding::UTF_8
- @io = new_io @name, 'r'
- @io.set_encoding Encoding::ASCII_8BIT, Encoding::UTF_8
- @io.gets.encoding.should == Encoding::UTF_8
- end
-end
diff --git a/spec/rubyspec/core/io/initialize_spec.rb b/spec/rubyspec/core/io/initialize_spec.rb
deleted file mode 100644
index 4731257625..0000000000
--- a/spec/rubyspec/core/io/initialize_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#initialize" do
- before :each do
- @name = tmp("io_initialize.txt")
- @io = new_io @name
- @fd = @io.fileno
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- end
-
- it "reassociates the IO instance with the new descriptor when passed a Fixnum" do
- fd = new_fd @name, "r:utf-8"
- @io.send :initialize, fd, 'r'
- @io.fileno.should == fd
- # initialize has closed the old descriptor
- lambda { IO.for_fd(@fd).close }.should raise_error(Errno::EBADF)
- end
-
- it "calls #to_int to coerce the object passed as an fd" do
- obj = mock('fileno')
- fd = new_fd @name, "r:utf-8"
- obj.should_receive(:to_int).and_return(fd)
- @io.send :initialize, obj, 'r'
- @io.fileno.should == fd
- # initialize has closed the old descriptor
- lambda { IO.for_fd(@fd).close }.should raise_error(Errno::EBADF)
- end
-
- it "raises a TypeError when passed an IO" do
- lambda { @io.send :initialize, STDOUT, 'w' }.should raise_error(TypeError)
- end
-
- it "raises a TypeError when passed nil" do
- lambda { @io.send :initialize, nil, 'w' }.should raise_error(TypeError)
- end
-
- it "raises a TypeError when passed a String" do
- lambda { @io.send :initialize, "4", 'w' }.should raise_error(TypeError)
- end
-
- it "raises IOError on closed stream" do
- lambda { @io.send :initialize, IOSpecs.closed_io.fileno }.should raise_error(IOError)
- end
-
- it "raises an Errno::EBADF when given an invalid file descriptor" do
- lambda { @io.send :initialize, -1, 'w' }.should raise_error(Errno::EBADF)
- end
-end
diff --git a/spec/rubyspec/core/io/inspect_spec.rb b/spec/rubyspec/core/io/inspect_spec.rb
deleted file mode 100644
index 1c6bf99b44..0000000000
--- a/spec/rubyspec/core/io/inspect_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO#inspect" do
- after :each do
- @r.close if @r && !@r.closed?
- @w.close if @w && !@w.closed?
- end
-
- it "contains the file descriptor number" do
- @r, @w = IO.pipe
- @r.inspect.should include("fd #{@r.fileno}")
- end
-
- it "contains \"(closed)\" if the stream is closed" do
- @r, @w = IO.pipe
- @r.close
- @r.inspect.should include("(closed)")
- end
-
- it "reports IO as its Method object's owner" do
- IO.instance_method(:inspect).owner.should == IO
- end
-end
diff --git a/spec/rubyspec/core/io/internal_encoding_spec.rb b/spec/rubyspec/core/io/internal_encoding_spec.rb
deleted file mode 100644
index 7578559838..0000000000
--- a/spec/rubyspec/core/io/internal_encoding_spec.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-with_feature :encoding do
- describe :io_internal_encoding, shared: true do
- describe "when Encoding.default_internal is not set" do
- before :each do
- Encoding.default_internal = nil
- end
-
- it "returns nil if the internal encoding is not set" do
- @io = new_io @name, @object
- @io.internal_encoding.should be_nil
- end
-
- it "returns nil if Encoding.default_internal is changed after the instance is created" do
- @io = new_io @name, @object
- Encoding.default_internal = Encoding::IBM437
- @io.internal_encoding.should be_nil
- end
-
- it "returns the value set when the instance was created" do
- @io = new_io @name, "#{@object}:utf-8:euc-jp"
- Encoding.default_internal = Encoding::IBM437
- @io.internal_encoding.should equal(Encoding::EUC_JP)
- end
-
- it "returns the value set by #set_encoding" do
- @io = new_io @name, @object
- @io.set_encoding(Encoding::US_ASCII, Encoding::IBM437)
- @io.internal_encoding.should equal(Encoding::IBM437)
- end
- end
-
- describe "when Encoding.default_internal == Encoding.default_external" do
- before :each do
- Encoding.default_external = Encoding::IBM866
- Encoding.default_internal = Encoding::IBM866
- end
-
- it "returns nil" do
- @io = new_io @name, @object
- @io.internal_encoding.should be_nil
- end
-
- it "returns nil regardless of Encoding.default_internal changes" do
- @io = new_io @name, @object
- Encoding.default_internal = Encoding::IBM437
- @io.internal_encoding.should be_nil
- end
- end
-
- describe "when Encoding.default_internal != Encoding.default_external" do
- before :each do
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
- end
-
- it "returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set" do
- @io = new_io @name, @object
- @io.internal_encoding.should equal(Encoding::IBM866)
- end
-
- it "does not change when Encoding.default_internal is changed" do
- @io = new_io @name, @object
- Encoding.default_internal = Encoding::IBM437
- @io.internal_encoding.should equal(Encoding::IBM866)
- end
-
- it "returns the internal encoding set when the instance was created" do
- @io = new_io @name, "#{@object}:utf-8:euc-jp"
- @io.internal_encoding.should equal(Encoding::EUC_JP)
- end
-
- it "does not change when set and Encoding.default_internal is changed" do
- @io = new_io @name, "#{@object}:utf-8:euc-jp"
- Encoding.default_internal = Encoding::IBM437
- @io.internal_encoding.should equal(Encoding::EUC_JP)
- end
-
- it "returns the value set by #set_encoding" do
- @io = new_io @name, @object
- @io.set_encoding(Encoding::US_ASCII, Encoding::IBM437)
- @io.internal_encoding.should equal(Encoding::IBM437)
- end
-
- it "returns nil when Encoding.default_external is ASCII-8BIT and the internal encoding is not set" do
- Encoding.default_external = Encoding::ASCII_8BIT
- @io = new_io @name, @object
- @io.internal_encoding.should be_nil
- end
-
- it "returns nil when the external encoding is ASCII-8BIT and the internal encoding is not set" do
- @io = new_io @name, "#{@object}:ascii-8bit"
- @io.internal_encoding.should be_nil
- end
- end
- end
-
- describe "IO#internal_encoding" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
-
- @name = tmp("io_internal_encoding")
- touch(@name)
- end
-
- after :each do
- @io.close if @io
- rm_r @name
-
- Encoding.default_external = @external
- Encoding.default_internal = @internal
- end
-
- describe "with 'r' mode" do
- it_behaves_like :io_internal_encoding, nil, "r"
- end
-
- describe "with 'r+' mode" do
- it_behaves_like :io_internal_encoding, nil, "r+"
- end
-
- describe "with 'w' mode" do
- it_behaves_like :io_internal_encoding, nil, "w"
- end
-
- describe "with 'w+' mode" do
- it_behaves_like :io_internal_encoding, nil, "w+"
- end
-
- describe "with 'a' mode" do
- it_behaves_like :io_internal_encoding, nil, "a"
- end
-
- describe "with 'a+' mode" do
- it_behaves_like :io_internal_encoding, nil, "a+"
- end
- end
-end
diff --git a/spec/rubyspec/core/io/io_spec.rb b/spec/rubyspec/core/io/io_spec.rb
deleted file mode 100644
index e196628ef0..0000000000
--- a/spec/rubyspec/core/io/io_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO" do
- it "includes File::Constants" do
- IO.include?(File::Constants).should == true
- end
-
- it "includes Enumerable" do
- IO.include?(Enumerable).should == true
- end
-end
diff --git a/spec/rubyspec/core/io/ioctl_spec.rb b/spec/rubyspec/core/io/ioctl_spec.rb
deleted file mode 100644
index 3b2d271c0c..0000000000
--- a/spec/rubyspec/core/io/ioctl_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#ioctl" do
- platform_is_not :windows do
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.ioctl(5, 5) }.should raise_error(IOError)
- end
- end
-
- platform_is :linux do
- platform_is "86" do # x86 / x86_64
- it "resizes an empty String to match the output size" do
- File.open(__FILE__, 'r') do |f|
- buffer = ''
- # FIONREAD in /usr/include/asm-generic/ioctls.h
- f.ioctl 0x541B, buffer
- buffer.unpack('I').first.should be_kind_of(Integer)
- end
- end
- end
-
- it "raises an Errno error when ioctl fails" do
- File.open(__FILE__, 'r') do |f|
- lambda {
- # TIOCGWINSZ in /usr/include/asm-generic/ioctls.h
- f.ioctl 0x5413, nil
- }.should raise_error(Errno::ENOTTY)
- end
- end
- end
-end
diff --git a/spec/rubyspec/core/io/isatty_spec.rb b/spec/rubyspec/core/io/isatty_spec.rb
deleted file mode 100644
index 87172dddd7..0000000000
--- a/spec/rubyspec/core/io/isatty_spec.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../shared/tty', __FILE__)
-
-describe "IO#isatty" do
- it_behaves_like :io_tty, :isatty
-end
diff --git a/spec/rubyspec/core/io/lineno_spec.rb b/spec/rubyspec/core/io/lineno_spec.rb
deleted file mode 100644
index 4fddbf135c..0000000000
--- a/spec/rubyspec/core/io/lineno_spec.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#lineno" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "raises an IOError on a closed stream" do
- lambda { IOSpecs.closed_io.lineno }.should raise_error(IOError)
- end
-
- it "returns the current line number" do
- @io.lineno.should == 0
-
- count = 0
- while @io.gets
- @io.lineno.should == count += 1
- end
-
- @io.rewind
- @io.lineno.should == 0
- end
-end
-
-describe "IO#lineno=" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "raises an IOError on a closed stream" do
- lambda { IOSpecs.closed_io.lineno = 5 }.should raise_error(IOError)
- end
-
- it "calls #to_int on a non-numeric argument" do
- obj = mock('123')
- obj.should_receive(:to_int).and_return(123)
-
- @io.lineno = obj
- @io.lineno.should == 123
- end
-
- it "truncates a Float argument" do
- @io.lineno = 1.5
- @io.lineno.should == 1
-
- @io.lineno = 92233.72036854775808
- @io.lineno.should == 92233
- end
-
- it "raises TypeError on nil argument" do
- lambda { @io.lineno = nil }.should raise_error(TypeError)
- end
-
- it "sets the current line number to the given value" do
- @io.lineno = count = 500
-
- while @io.gets
- @io.lineno.should == count += 1
- end
-
- @io.rewind
- @io.lineno.should == 0
- end
-
- it "does not change $." do
- original_line = $.
- numbers = [-2**30, -2**16, -2**8, -100, -10, -1, 0, 1, 10, 2**8, 2**16, 2**30]
- numbers.each do |num|
- @io.lineno = num
- @io.lineno.should == num
- $..should == original_line
- end
- end
-
- it "does not change $. until next read" do
- $. = 0
- $..should == 0
-
- @io.lineno = count = 500
- $..should == 0
-
- while @io.gets
- $..should == count += 1
- end
- end
-end
diff --git a/spec/rubyspec/core/io/lines_spec.rb b/spec/rubyspec/core/io/lines_spec.rb
deleted file mode 100644
index 90ddc4e4cf..0000000000
--- a/spec/rubyspec/core/io/lines_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#lines" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns an Enumerator" do
- @io.lines.should be_an_instance_of(Enumerator)
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- @io.lines.should be_an_instance_of(Enumerator)
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- @io.lines.size.should == nil
- end
- end
- end
- end
-
- it "returns a line when accessed" do
- enum = @io.lines
- enum.first.should == IOSpecs.lines[0]
- end
-
- it "yields each line to the passed block" do
- ScratchPad.record []
- @io.lines { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.lines
- end
-end
diff --git a/spec/rubyspec/core/io/new_spec.rb b/spec/rubyspec/core/io/new_spec.rb
deleted file mode 100644
index ce922a4856..0000000000
--- a/spec/rubyspec/core/io/new_spec.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../shared/new', __FILE__)
-
-describe "IO.new" do
- it_behaves_like :io_new, :new
-end
-
-describe "IO.new" do
- it_behaves_like :io_new_errors, :new
-end
diff --git a/spec/rubyspec/core/io/open_spec.rb b/spec/rubyspec/core/io/open_spec.rb
deleted file mode 100644
index f87ee6c7c2..0000000000
--- a/spec/rubyspec/core/io/open_spec.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/new', __FILE__)
-
-describe "IO.open" do
- it_behaves_like :io_new, :open
-end
-
-describe "IO.open" do
- it_behaves_like :io_new_errors, :open
-end
-
-# These specs use a special mock helper to avoid mock
-# methods from preventing IO#close from running and
-# which would prevent the file referenced by @fd from
-# being deleted on Windows.
-
-describe "IO.open" do
- before :each do
- @name = tmp("io_open.txt")
- @fd = new_fd @name
- ScratchPad.clear
- end
-
- after :each do
- rm_r @name
- end
-
- it "calls #close after yielding to the block" do
- IO.open(@fd, "w") do |io|
- IOSpecs.io_mock(io, :close) do
- super()
- ScratchPad.record :called
- end
- io.closed?.should be_false
- end
- ScratchPad.recorded.should == :called
- end
-
- it "propagates an exception raised by #close that is not a StandardError" do
- lambda do
- IO.open(@fd, "w") do |io|
- IOSpecs.io_mock(io, :close) do
- super()
- ScratchPad.record :called
- raise Exception
- end
- end
- end.should raise_error(Exception)
- ScratchPad.recorded.should == :called
- end
-
- it "propagates an exception raised by #close that is a StandardError" do
- lambda do
- IO.open(@fd, "w") do |io|
- IOSpecs.io_mock(io, :close) do
- super()
- ScratchPad.record :called
- raise StandardError
- end
- end
- end.should raise_error(StandardError)
- ScratchPad.recorded.should == :called
- end
-
- it "does not propagate a IOError with 'closed stream' message raised by #close" do
- IO.open(@fd, "w") do |io|
- IOSpecs.io_mock(io, :close) do
- super()
- ScratchPad.record :called
- raise IOError, 'closed stream'
- end
- end
- ScratchPad.recorded.should == :called
- end
-
- it "does not set last error when a IOError with 'closed stream' raised by #close" do
- IO.open(@fd, "w") do |io|
- IOSpecs.io_mock(io, :close) do
- super()
- raise IOError, 'closed stream'
- end
- end
- $!.should == nil
- end
-end
diff --git a/spec/rubyspec/core/io/output_spec.rb b/spec/rubyspec/core/io/output_spec.rb
deleted file mode 100644
index 2d52315430..0000000000
--- a/spec/rubyspec/core/io/output_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#<<" do
- it "writes an object to the IO stream" do
- lambda {
- $stderr << "Oh noes, an error!"
- }.should output_to_fd("Oh noes, an error!", $stderr)
- end
-
- it "calls #to_s on the object to print it" do
- lambda {
- $stderr << 1337
- }.should output_to_fd("1337", $stderr)
- end
-
- it "raises an error if the stream is closed" do
- io = IOSpecs.closed_io
- lambda { io << "test" }.should raise_error(IOError)
- end
-
- it "returns self" do
- lambda {
- ($stderr << "to_stderr").should == $stderr
- }.should output(nil, "to_stderr")
- end
-end
diff --git a/spec/rubyspec/core/io/pid_spec.rb b/spec/rubyspec/core/io/pid_spec.rb
deleted file mode 100644
index a4f6bbfcf8..0000000000
--- a/spec/rubyspec/core/io/pid_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes.rb', __FILE__)
-
-describe "IO#pid" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns nil for IO not associated with a process" do
- @io.pid.should == nil
- end
-end
-
-describe "IO#pid" do
- before :each do
- @io = IO.popen ruby_cmd('STDIN.read'), "r+"
- end
-
- after :each do
- @io.close if @io && !@io.closed?
- end
-
- it "returns the ID of a process associated with stream" do
- @io.pid.should_not be_nil
- end
-
- it "raises an IOError on closed stream" do
- @io.close
- lambda { @io.pid }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/pipe_spec.rb b/spec/rubyspec/core/io/pipe_spec.rb
deleted file mode 100644
index b4984fdeb7..0000000000
--- a/spec/rubyspec/core/io/pipe_spec.rb
+++ /dev/null
@@ -1,214 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO.pipe" do
- after :each do
- @r.close if @r && !@r.closed?
- @w.close if @w && !@w.closed?
- end
-
- it "creates a two-ended pipe" do
- @r, @w = IO.pipe
- @w.puts "test_create_pipe\\n"
- @w.close
- @r.read(16).should == "test_create_pipe"
- end
-
- it "returns two IO objects" do
- @r, @w = IO.pipe
- @r.should be_kind_of(IO)
- @w.should be_kind_of(IO)
- end
-
- it "returns instances of a subclass when called on a subclass" do
- @r, @w = IOSpecs::SubIO.pipe
- @r.should be_an_instance_of(IOSpecs::SubIO)
- @w.should be_an_instance_of(IOSpecs::SubIO)
- end
-end
-
-describe "IO.pipe" do
- describe "passed a block" do
- it "yields two IO objects" do
- IO.pipe do |r, w|
- r.should be_kind_of(IO)
- w.should be_kind_of(IO)
- end
- end
-
- it "returns the result of the block" do
- IO.pipe { |r, w| :result }.should == :result
- end
-
- it "closes both IO objects" do
- r, w = IO.pipe do |_r, _w|
- [_r, _w]
- end
- r.closed?.should == true
- w.closed?.should == true
- end
-
- it "closes both IO objects when the block raises" do
- r = w = nil
- lambda do
- IO.pipe do |_r, _w|
- r = _r
- w = _w
- raise RuntimeError
- end
- end.should raise_error(RuntimeError)
- r.closed?.should == true
- w.closed?.should == true
- end
-
- it "allows IO objects to be closed within the block" do
- r, w = IO.pipe do |_r, _w|
- _r.close
- _w.close
- [_r, _w]
- end
- r.closed?.should == true
- w.closed?.should == true
- end
- end
-end
-
-describe "IO.pipe" do
- before :each do
- @default_external = Encoding.default_external
- @default_internal = Encoding.default_internal
- end
-
- after :each do
- Encoding.default_external = @default_external
- Encoding.default_internal = @default_internal
- end
-
- it "sets the external encoding of the read end to the default when passed no arguments" do
- Encoding.default_external = Encoding::ISO_8859_1
-
- IO.pipe do |r, w|
- r.external_encoding.should == Encoding::ISO_8859_1
- r.internal_encoding.should be_nil
- end
- end
-
- it "sets the internal encoding of the read end to the default when passed no arguments" do
- Encoding.default_external = Encoding::ISO_8859_1
- Encoding.default_internal = Encoding::UTF_8
-
- IO.pipe do |r, w|
- r.external_encoding.should == Encoding::ISO_8859_1
- r.internal_encoding.should == Encoding::UTF_8
- end
- end
-
- it "sets the internal encoding to nil if the same as the external" do
- Encoding.default_external = Encoding::UTF_8
- Encoding.default_internal = Encoding::UTF_8
-
- IO.pipe do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should be_nil
- end
- end
-
- it "sets the external encoding of the read end when passed an Encoding argument" do
- IO.pipe(Encoding::UTF_8) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should be_nil
- end
- end
-
- it "sets the external and internal encodings of the read end when passed two Encoding arguments" do
- IO.pipe(Encoding::UTF_8, Encoding::UTF_16BE) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::UTF_16BE
- end
- end
-
- it "sets the external encoding of the read end when passed the name of an Encoding" do
- IO.pipe("UTF-8") do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should be_nil
- end
- end
-
- it "accepts 'bom|' prefix for external encoding" do
- IO.pipe("BOM|UTF-8") do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should be_nil
- end
- end
-
- it "sets the external and internal encodings specified as a String and separated with a colon" do
- IO.pipe("UTF-8:ISO-8859-1") do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::ISO_8859_1
- end
- end
-
- it "accepts 'bom|' prefix for external encoding when specifying 'external:internal'" do
- IO.pipe("BOM|UTF-8:ISO-8859-1") do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::ISO_8859_1
- end
- end
-
- it "sets the external and internal encoding when passed two String arguments" do
- IO.pipe("UTF-8", "UTF-16BE") do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::UTF_16BE
- end
- end
-
- it "accepts an options Hash with one String encoding argument" do
- IO.pipe("BOM|UTF-8:ISO-8859-1", invalid: :replace) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::ISO_8859_1
- end
- end
-
- it "accepts an options Hash with two String encoding arguments" do
- IO.pipe("UTF-8", "ISO-8859-1", invalid: :replace) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::ISO_8859_1
- end
- end
-
- it "calls #to_hash to convert an options argument" do
- options = mock("io pipe encoding options")
- options.should_receive(:to_hash).and_return({ invalid: :replace })
- IO.pipe("UTF-8", "ISO-8859-1", options) { |r, w| }
- end
-
- it "calls #to_str to convert the first argument to a String" do
- obj = mock("io_pipe_encoding")
- obj.should_receive(:to_str).and_return("UTF-8:UTF-16BE")
- IO.pipe(obj) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::UTF_16BE
- end
- end
-
- it "calls #to_str to convert the second argument to a String" do
- obj = mock("io_pipe_encoding")
- obj.should_receive(:to_str).at_least(1).times.and_return("UTF-16BE")
- IO.pipe(Encoding::UTF_8, obj) do |r, w|
- r.external_encoding.should == Encoding::UTF_8
- r.internal_encoding.should == Encoding::UTF_16BE
- end
- end
-
- it "sets no external encoding for the write end" do
- IO.pipe(Encoding::UTF_8) do |r, w|
- w.external_encoding.should be_nil
- end
- end
-
- it "sets no internal encoding for the write end" do
- IO.pipe(Encoding::UTF_8) do |r, w|
- w.external_encoding.should be_nil
- end
- end
-end
diff --git a/spec/rubyspec/core/io/popen_spec.rb b/spec/rubyspec/core/io/popen_spec.rb
deleted file mode 100644
index 45bb0e2cab..0000000000
--- a/spec/rubyspec/core/io/popen_spec.rb
+++ /dev/null
@@ -1,285 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO.popen" do
- before :each do
- @io = nil
- end
-
- after :each do
- @io.close if @io
- end
-
- it "returns an open IO" do
- @io = IO.popen(ruby_cmd('exit'), "r")
- @io.closed?.should be_false
- end
-
- it "reads a read-only pipe" do
- @io = IO.popen(ruby_cmd('puts "foo"'), "r")
- @io.read.should == "foo\n"
- end
-
- it "raises IOError when writing a read-only pipe" do
- @io = IO.popen(ruby_cmd('puts "foo"'), "r")
- lambda { @io.write('foo') }.should raise_error(IOError)
- end
-end
-
-describe "IO.popen" do
- before :each do
- @fname = tmp("IO_popen_spec")
- @io = nil
- end
-
- after :each do
- @io.close if @io and !@io.closed?
- rm_r @fname
- end
-
- it "sees an infinitely looping subprocess exit when read pipe is closed" do
- io = IO.popen ruby_cmd('r = loop{puts "y"; 0} rescue 1; exit r'), 'r'
- io.close
-
- $?.exitstatus.should_not == 0
- end
-
- it "writes to a write-only pipe" do
- @io = IO.popen(ruby_cmd('IO.copy_stream(STDIN,STDOUT)', args: "> #{@fname}"), "w")
- @io.write("bar")
- @io.close
-
- File.read(@fname).should == "bar"
- end
-
- it "raises IOError when reading a write-only pipe" do
- @io = IO.popen(ruby_cmd('IO.copy_stream(STDIN,STDOUT)'), "w")
- lambda { @io.read }.should raise_error(IOError)
- end
-
- it "reads and writes a read/write pipe" do
- @io = IO.popen(ruby_cmd('IO.copy_stream(STDIN,STDOUT)'), "r+")
- @io.write("bar")
- @io.read(3).should == "bar"
- end
-
- it "waits for the child to finish" do
- @io = IO.popen(ruby_cmd('IO.copy_stream(STDIN,STDOUT)', args: "> #{@fname}"), "w")
- @io.write("bar")
- @io.close
-
- $?.exitstatus.should == 0
-
- File.read(@fname).should == "bar"
- end
-
- it "does not throw an exception if child exited and has been waited for" do
- @io = IO.popen([*ruby_exe, '-e', 'sleep'])
- pid = @io.pid
- Process.kill "KILL", pid
- @io.close
- platform_is_not :windows do
- $?.signaled?.should == true
- end
- platform_is :windows do
- $?.exited?.should == true
- end
- end
-
- it "returns an instance of a subclass when called on a subclass" do
- @io = IOSpecs::SubIO.popen(ruby_cmd('exit'), "r")
- @io.should be_an_instance_of(IOSpecs::SubIO)
- end
-
- it "coerces mode argument with #to_str" do
- mode = mock("mode")
- mode.should_receive(:to_str).and_return("r")
- @io = IO.popen(ruby_cmd('exit 0'), mode)
- end
-end
-
-describe "IO.popen" do
- before :each do
- @io = nil
- end
-
- after :each do
- @io.close if @io
- end
-
- describe "with a block" do
- it "yields an open IO to the block" do
- IO.popen(ruby_cmd('exit'), "r") do |io|
- io.closed?.should be_false
- end
- end
-
- it "yields an instance of a subclass when called on a subclass" do
- IOSpecs::SubIO.popen(ruby_cmd('exit'), "r") do |io|
- io.should be_an_instance_of(IOSpecs::SubIO)
- end
- end
-
- it "closes the IO after yielding" do
- io = IO.popen(ruby_cmd('exit'), "r") { |_io| _io }
- io.closed?.should be_true
- end
-
- it "allows the IO to be closed inside the block" do
- io = IO.popen(ruby_cmd('exit'), 'r') { |_io| _io.close; _io }
- io.closed?.should be_true
- end
-
- it "returns the value of the block" do
- IO.popen(ruby_cmd('exit'), "r") { :hello }.should == :hello
- end
- end
-
- with_feature :fork do
- it "starts returns a forked process if the command is -" do
- io = IO.popen("-")
-
- if io # parent
- begin
- io.gets.should == "hello from child\n"
- ensure
- io.close
- end
- else # child
- puts "hello from child"
- exit!
- end
- end
- end
-
- with_feature :encoding do
- it "has the given external encoding" do
- @io = IO.popen(ruby_cmd('exit'), external_encoding: Encoding::EUC_JP)
- @io.external_encoding.should == Encoding::EUC_JP
- end
-
- it "has the given internal encoding" do
- @io = IO.popen(ruby_cmd('exit'), internal_encoding: Encoding::EUC_JP)
- @io.internal_encoding.should == Encoding::EUC_JP
- end
-
- it "sets the internal encoding to nil if it's the same as the external encoding" do
- @io = IO.popen(ruby_cmd('exit'), external_encoding: Encoding::EUC_JP,
- internal_encoding: Encoding::EUC_JP)
- @io.internal_encoding.should be_nil
- end
- end
-
- context "with a leading ENV Hash" do
- it "accepts a single String command" do
- IO.popen({"FOO" => "bar"}, ruby_cmd('puts ENV["FOO"]')) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts a single String command, and an IO mode" do
- IO.popen({"FOO" => "bar"}, ruby_cmd('puts ENV["FOO"]'), "r") do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts a single String command with a trailing Hash of Process.exec options" do
- IO.popen({"FOO" => "bar"}, ruby_cmd('STDERR.puts ENV["FOO"]'),
- err: [:child, :out]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts a single String command with a trailing Hash of Process.exec options, and an IO mode" do
- IO.popen({"FOO" => "bar"}, ruby_cmd('STDERR.puts ENV["FOO"]'), "r",
- err: [:child, :out]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts an Array of command and arguments" do
- exe, *args = ruby_exe
- IO.popen({"FOO" => "bar"}, [[exe, "specfu"], *args, "-e", "puts ENV['FOO']"]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts an Array of command and arguments, and an IO mode" do
- exe, *args = ruby_exe
- IO.popen({"FOO" => "bar"}, [[exe, "specfu"], *args, "-e", "puts ENV['FOO']"], "r") do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts an Array command with a separate trailing Hash of Process.exec options" do
- IO.popen({"FOO" => "bar"}, [*ruby_exe, "-e", "STDERR.puts ENV['FOO']"],
- err: [:child, :out]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts an Array command with a separate trailing Hash of Process.exec options, and an IO mode" do
- IO.popen({"FOO" => "bar"}, [*ruby_exe, "-e", "STDERR.puts ENV['FOO']"],
- "r", err: [:child, :out]) do |io|
- io.read.should == "bar\n"
- end
- end
- end
-
- context "with a leading Array argument" do
- it "uses the Array as command plus args for the child process" do
- IO.popen([*ruby_exe, "-e", "puts 'hello'"]) do |io|
- io.read.should == "hello\n"
- end
- end
-
- it "accepts a leading ENV Hash" do
- IO.popen([{"FOO" => "bar"}, *ruby_exe, "-e", "puts ENV['FOO']"]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts a trailing Hash of Process.exec options" do
- IO.popen([*ruby_exe, "does_not_exist", {err: [:child, :out]}]) do |io|
- io.read.should =~ /LoadError/
- end
- end
-
- it "accepts an IO mode argument following the Array" do
- IO.popen([*ruby_exe, "does_not_exist", {err: [:child, :out]}], "r") do |io|
- io.read.should =~ /LoadError/
- end
- end
-
- it "accepts [env, command, arg1, arg2, ..., exec options]" do
- IO.popen([{"FOO" => "bar"}, *ruby_exe, "-e", "STDERR.puts ENV[:FOO.to_s]",
- err: [:child, :out]]) do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts '[env, command, arg1, arg2, ..., exec options], mode'" do
- IO.popen([{"FOO" => "bar"}, *ruby_exe, "-e", "STDERR.puts ENV[:FOO.to_s]",
- err: [:child, :out]], "r") do |io|
- io.read.should == "bar\n"
- end
- end
-
- it "accepts '[env, command, arg1, arg2, ..., exec options], mode, IO options'" do
- IO.popen([{"FOO" => "bar"}, *ruby_exe, "-e", "STDERR.puts ENV[:FOO.to_s]",
- err: [:child, :out]], "r",
- internal_encoding: Encoding::EUC_JP) do |io|
- io.read.should == "bar\n"
- io.internal_encoding.should == Encoding::EUC_JP
- end
- end
-
- it "accepts '[env, command, arg1, arg2, ...], mode, IO + exec options'" do
- IO.popen([{"FOO" => "bar"}, *ruby_exe, "-e", "STDERR.puts ENV[:FOO.to_s]"], "r",
- err: [:child, :out], internal_encoding: Encoding::EUC_JP) do |io|
- io.read.should == "bar\n"
- io.internal_encoding.should == Encoding::EUC_JP
- end
- end
- end
-end
diff --git a/spec/rubyspec/core/io/pos_spec.rb b/spec/rubyspec/core/io/pos_spec.rb
deleted file mode 100644
index 300925a284..0000000000
--- a/spec/rubyspec/core/io/pos_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/pos', __FILE__)
-
-describe "IO#pos" do
- it_behaves_like :io_pos, :pos
-end
-
-describe "IO#pos=" do
- it_behaves_like :io_set_pos, :pos=
-end
-
diff --git a/spec/rubyspec/core/io/print_spec.rb b/spec/rubyspec/core/io/print_spec.rb
deleted file mode 100644
index e852757385..0000000000
--- a/spec/rubyspec/core/io/print_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe IO, "#print" do
- before :each do
- @old_separator = $\
- $\ = '->'
- @name = tmp("io_print")
- end
-
- after :each do
- $\ = @old_separator
- rm_r @name
- end
-
- it "writes $_.to_s followed by $\\ (if any) to the stream if no arguments given" do
- o = mock('o')
- o.should_receive(:to_s).and_return("mockmockmock")
- $_ = o
-
- touch(@name) { |f| f.print }
- IO.read(@name).should == "mockmockmock#{$\}"
-
- # Set $_ to something known
- string = File.open(__FILE__) {|f| f.gets }
-
- touch(@name) { |f| f.print }
- IO.read(@name).should == "#{string}#{$\}"
- end
-
- it "calls obj.to_s and not obj.to_str then writes the record separator" do
- o = mock('o')
- o.should_not_receive(:to_str)
- o.should_receive(:to_s).and_return("hello")
-
- touch(@name) { |f| f.print(o) }
-
- IO.read(@name).should == "hello#{$\}"
- end
-
- it "writes each obj.to_s to the stream and appends $\\ (if any) given multiple objects" do
- o, o2 = Object.new, Object.new
- def o.to_s(); 'o'; end
- def o2.to_s(); 'o2'; end
-
- touch(@name) { |f| f.print(o, o2) }
- IO.read(@name).should == "#{o.to_s}#{o2.to_s}#{$\}"
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.print("stuff") }.should raise_error(IOError)
- end
-end
-
diff --git a/spec/rubyspec/core/io/printf_spec.rb b/spec/rubyspec/core/io/printf_spec.rb
deleted file mode 100644
index 34be4c8e79..0000000000
--- a/spec/rubyspec/core/io/printf_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#printf" do
- before :each do
- @name = tmp("io_printf.txt")
- @io = new_io @name
- @io.sync = true
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- end
-
- it "calls #to_str to convert the format object to a String" do
- obj = mock("printf format")
- obj.should_receive(:to_str).and_return("%s")
-
- @io.printf obj, "printf"
- File.read(@name).should == "printf"
- end
-
- it "writes the #sprintf formatted string" do
- @io.printf "%d %s", 5, "cookies"
- File.read(@name).should == "5 cookies"
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.printf("stuff") }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/putc_spec.rb b/spec/rubyspec/core/io/putc_spec.rb
deleted file mode 100644
index 9803d0c1a1..0000000000
--- a/spec/rubyspec/core/io/putc_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../../../shared/io/putc', __FILE__)
-
-describe "IO#putc" do
- before :each do
- @name = tmp("io_putc.txt")
- @io_object = @io = new_io(@name)
- end
-
- it_behaves_like :io_putc, :putc
-end
diff --git a/spec/rubyspec/core/io/puts_spec.rb b/spec/rubyspec/core/io/puts_spec.rb
deleted file mode 100644
index 8f2f4f2c81..0000000000
--- a/spec/rubyspec/core/io/puts_spec.rb
+++ /dev/null
@@ -1,144 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#puts" do
- before :each do
- @before_separator = $/
- @name = tmp("io_puts.txt")
- @io = new_io @name
- ScratchPad.record ""
- def @io.write(str)
- ScratchPad << str
- end
- end
-
- after :each do
- ScratchPad.clear
- @io.close if @io
- rm_r @name
- $/ = @before_separator
- end
-
- it "writes just a newline when given no args" do
- @io.puts.should == nil
- ScratchPad.recorded.should == "\n"
- end
-
- it "writes just a newline when given just a newline" do
- lambda { $stdout.puts "\n" }.should output_to_fd("\n", STDOUT)
- end
-
- it "writes empty string with a newline when given nil as an arg" do
- @io.puts(nil).should == nil
- ScratchPad.recorded.should == "\n"
- end
-
- it "writes empty string with a newline when when given nil as multiple args" do
- @io.puts(nil, nil).should == nil
- ScratchPad.recorded.should == "\n\n"
- end
-
- it "calls :to_ary before writing non-string objects, regardless of it being implemented in the receiver" do
- object = mock('hola')
- object.should_receive(:method_missing).with(:to_ary)
- object.should_receive(:to_s).and_return("#<Object:0x...>")
-
- @io.should_receive(:write).with("#<Object:0x...>")
- @io.should_receive(:write).with("\n")
- @io.puts(object).should == nil
- end
-
- it "calls :to_ary before writing non-string objects" do
- object = mock('hola')
- object.should_receive(:to_ary).and_return(["hola"])
-
- @io.should_receive(:write).with("hola")
- @io.should_receive(:write).with("\n")
- @io.puts(object).should == nil
- end
-
- it "calls :to_s before writing non-string objects that don't respond to :to_ary" do
- object = mock('hola')
- object.should_receive(:to_s).and_return("hola")
-
- @io.puts(object).should == nil
- ScratchPad.recorded.should == "hola\n"
- end
-
- it "returns general object info if :to_s does not return a string" do
- object = mock('hola')
- object.should_receive(:to_s).and_return(false)
-
- @io.should_receive(:write).with(object.inspect.split(" ")[0] + ">")
- @io.should_receive(:write).with("\n")
- @io.puts(object).should == nil
- end
-
- it "writes each arg if given several" do
- @io.puts(1, "two", 3).should == nil
- ScratchPad.recorded.should == "1\ntwo\n3\n"
- end
-
- it "flattens a nested array before writing it" do
- @io.puts([1, 2, [3]]).should == nil
- ScratchPad.recorded.should == "1\n2\n3\n"
- end
-
- it "writes nothing for an empty array" do
- x = []
- @io.should_not_receive(:write)
- @io.puts(x).should == nil
- end
-
- it "writes [...] for a recursive array arg" do
- x = []
- x << 2 << x
- @io.puts(x).should == nil
- ScratchPad.recorded.should == "2\n[...]\n"
- end
-
- it "writes a newline after objects that do not end in newlines" do
- @io.puts(5).should == nil
- ScratchPad.recorded.should == "5\n"
- end
-
- it "does not write a newline after objects that end in newlines" do
- @io.puts("5\n").should == nil
- ScratchPad.recorded.should == "5\n"
- end
-
- it "ignores the $/ separator global" do
- $/ = ":"
- @io.puts(5).should == nil
- ScratchPad.recorded.should == "5\n"
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.puts("stuff") }.should raise_error(IOError)
- end
-
- with_feature :encoding do
- it "writes crlf when IO is opened with newline: :crlf" do
- File.open(@name, 'wt', newline: :crlf) do |file|
- file.puts
- end
- File.binread(@name).should == "\r\n"
- end
-
- it "writes cr when IO is opened with newline: :cr" do
- File.open(@name, 'wt', newline: :cr) do |file|
- file.puts
- end
- File.binread(@name).should == "\r"
- end
-
- platform_is_not :windows do # https://bugs.ruby-lang.org/issues/12436
- it "writes lf when IO is opened with newline: :lf" do
- File.open(@name, 'wt', newline: :lf) do |file|
- file.puts
- end
- File.binread(@name).should == "\n"
- end
- end
- end
-end
diff --git a/spec/rubyspec/core/io/read_nonblock_spec.rb b/spec/rubyspec/core/io/read_nonblock_spec.rb
deleted file mode 100644
index 2b314987bc..0000000000
--- a/spec/rubyspec/core/io/read_nonblock_spec.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#read_nonblock" do
- before :each do
- @read, @write = IO.pipe
- end
-
- after :each do
- @read.close if @read && !@read.closed?
- @write.close if @write && !@write.closed?
- end
-
- it "raises an exception extending IO::WaitReadable when there is no data" do
- lambda { @read.read_nonblock(5) }.should raise_error(IO::WaitReadable) { |e|
- platform_is_not :windows do
- e.should be_kind_of(Errno::EAGAIN)
- end
- platform_is :windows do
- e.should be_kind_of(Errno::EWOULDBLOCK)
- end
- }
- end
-
- ruby_version_is "2.3" do
- context "when exception option is set to false" do
- context "when there is no data" do
- it "returns :wait_readable" do
- @read.read_nonblock(5, exception: false).should == :wait_readable
- end
- end
-
- context "when the end is reached" do
- it "returns nil" do
- @write << "hello"
- @write.close
-
- @read.read_nonblock(5)
-
- @read.read_nonblock(5, exception: false).should be_nil
- end
- end
- end
- end
-
- it "returns at most the number of bytes requested" do
- @write << "hello"
- @read.read_nonblock(4).should == "hell"
- end
-
- it "returns less data if that is all that is available" do
- @write << "hello"
- @read.read_nonblock(10).should == "hello"
- end
-
- it "allows for reading 0 bytes before any write" do
- @read.read_nonblock(0).should == ""
- end
-
- it "allows for reading 0 bytes after a write" do
- @write.write "1"
- @read.read_nonblock(0).should == ""
- @read.read_nonblock(1).should == "1"
- end
-
- it "reads into the passed buffer" do
- buffer = ""
- @write.write("1")
- @read.read_nonblock(1, buffer)
- buffer.should == "1"
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.read_nonblock(5) }.should raise_error(IOError)
- end
-
- it "raises EOFError when the end is reached" do
- @write << "hello"
- @write.close
-
- @read.read_nonblock(5)
-
- lambda { @read.read_nonblock(5) }.should raise_error(EOFError)
- end
-end
diff --git a/spec/rubyspec/core/io/read_spec.rb b/spec/rubyspec/core/io/read_spec.rb
deleted file mode 100644
index 223e3cde06..0000000000
--- a/spec/rubyspec/core/io/read_spec.rb
+++ /dev/null
@@ -1,616 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO.read" do
- before :each do
- @fname = tmp("io_read.txt")
- @contents = "1234567890"
- touch(@fname) { |f| f.write @contents }
- end
-
- after :each do
- rm_r @fname
- end
-
- it "reads the contents of a file" do
- IO.read(@fname).should == @contents
- end
-
- it "calls #to_path on non-String arguments" do
- p = mock('path')
- p.should_receive(:to_path).and_return(@fname)
- IO.read(p)
- end
-
- it "accepts an empty options Hash" do
- IO.read(@fname, {}).should == @contents
- end
-
- it "accepts a length, offset, and empty options Hash" do
- IO.read(@fname, 3, 0, {}).should == @contents[0, 3]
- end
-
- it "raises an IOError if the options Hash specifies write mode" do
- lambda { IO.read(@fname, 3, 0, {mode: "w"}) }.should raise_error(IOError)
- end
-
- it "raises an IOError if the options Hash specifies append only mode" do
- lambda { IO.read(@fname, {mode: "a"}) }.should raise_error(IOError)
- end
-
- it "reads the file if the options Hash includes read mode" do
- IO.read(@fname, {mode: "r"}).should == @contents
- end
-
- it "reads the file if the options Hash includes read/write mode" do
- IO.read(@fname, {mode: "r+"}).should == @contents
- end
-
- it "reads the file if the options Hash includes read/write append mode" do
- IO.read(@fname, {mode: "a+"}).should == @contents
- end
-
- it "treats second nil argument as no length limit" do
- IO.read(@fname, nil).should == @contents
- IO.read(@fname, nil, 5).should == IO.read(@fname, @contents.length, 5)
- end
-
- it "treats third nil argument as 0" do
- IO.read(@fname, nil, nil).should == @contents
- IO.read(@fname, 5, nil).should == IO.read(@fname, 5, 0)
- end
-
- it "reads the contents of a file up to a certain size when specified" do
- IO.read(@fname, 5).should == @contents.slice(0..4)
- end
-
- it "reads the contents of a file from an offset of a specific size when specified" do
- IO.read(@fname, 5, 3).should == @contents.slice(3, 5)
- end
-
- it "returns nil at end-of-file when length is passed" do
- IO.read(@fname, 1, 10).should == nil
- end
-
- it "raises an Errno::ENOENT when the requested file does not exist" do
- rm_r @fname
- lambda { IO.read @fname }.should raise_error(Errno::ENOENT)
- end
-
- it "raises a TypeError when not passed a String type" do
- lambda { IO.read nil }.should raise_error(TypeError)
- end
-
- it "raises an ArgumentError when not passed a valid length" do
- lambda { IO.read @fname, -1 }.should raise_error(ArgumentError)
- end
-
- it "raises an Errno::EINVAL when not passed a valid offset" do
- lambda { IO.read @fname, 0, -1 }.should raise_error(Errno::EINVAL)
- lambda { IO.read @fname, -1, -1 }.should raise_error(Errno::EINVAL)
- end
-
- with_feature :encoding do
- it "uses the external encoding specified via the :external_encoding option" do
- str = IO.read(@fname, external_encoding: Encoding::ISO_8859_1)
- str.encoding.should == Encoding::ISO_8859_1
- end
-
- it "uses the external encoding specified via the :encoding option" do
- str = IO.read(@fname, encoding: Encoding::ISO_8859_1)
- str.encoding.should == Encoding::ISO_8859_1
- end
- end
-end
-
-describe "IO.read from a pipe" do
- it "runs the rest as a subprocess and returns the standard output" do
- cmd = "|sh -c 'echo hello'"
- platform_is :windows do
- cmd = "|cmd.exe /C echo hello"
- end
- IO.read(cmd).should == "hello\n"
- end
-
- with_feature :fork do
- it "opens a pipe to a fork if the rest is -" do
- str = IO.read("|-")
- if str # parent
- str.should == "hello from child\n"
- else #child
- puts "hello from child"
- exit!
- end
- end
- end
-
- it "reads only the specified number of bytes requested" do
- cmd = "|sh -c 'echo hello'"
- platform_is :windows do
- cmd = "|cmd.exe /C echo hello"
- end
- IO.read(cmd, 1).should == "h"
- end
-
- platform_is_not :windows do
- it "raises Errno::ESPIPE if passed an offset" do
- lambda {
- IO.read("|sh -c 'echo hello'", 1, 1)
- }.should raise_error(Errno::ESPIPE)
- end
- end
-
-quarantine! do # The process tried to write to a nonexistent pipe.
- platform_is :windows do
- # TODO: It should raise Errno::ESPIPE on Windows as well
- # once https://bugs.ruby-lang.org/issues/12230 is fixed.
- it "raises Errno::EINVAL if passed an offset" do
- lambda {
- IO.read("|cmd.exe /C echo hello", 1, 1)
- }.should raise_error(Errno::EINVAL)
- end
- end
-end
-end
-
-describe "IO.read on an empty file" do
- before :each do
- @fname = tmp("io_read_empty.txt")
- touch(@fname)
- end
-
- after :each do
- rm_r @fname
- end
-
- it "returns nil when length is passed" do
- IO.read(@fname, 1).should == nil
- end
-
- it "returns an empty string when no length is passed" do
- IO.read(@fname).should == ""
- end
-end
-
-describe "IO#read" do
-
- before :each do
- @fname = tmp("io_read.txt")
- @contents = "1234567890"
- touch(@fname) { |f| f.write @contents }
-
- @io = open @fname, "r+"
- end
-
- after :each do
- @io.close
- rm_r @fname
- end
-
- it "can be read from consecutively" do
- @io.read(1).should == '1'
- @io.read(2).should == '23'
- @io.read(3).should == '456'
- @io.read(4).should == '7890'
- end
-
- it "clears the output buffer if there is nothing to read" do
- @io.pos = 10
-
- buf = 'non-empty string'
-
- @io.read(10, buf).should == nil
-
- buf.should == ''
- end
-
- it "consumes zero bytes when reading zero bytes" do
- @io.read(0).should == ''
- @io.pos.should == 0
-
- @io.getc.chr.should == '1'
- end
-
- it "is at end-of-file when everything has been read" do
- @io.read
- @io.eof?.should == true
- end
-
- it "reads the contents of a file" do
- @io.read.should == @contents
- end
-
- it "places the specified number of bytes in the buffer" do
- buf = ""
- @io.read 5, buf
-
- buf.should == "12345"
- end
-
- it "expands the buffer when too small" do
- buf = "ABCDE"
- @io.read nil, buf
-
- buf.should == @contents
- end
-
- it "overwrites the buffer" do
- buf = "ABCDEFGHIJ"
- @io.read nil, buf
-
- buf.should == @contents
- end
-
- it "truncates the buffer when too big" do
- buf = "ABCDEFGHIJKLMNO"
- @io.read nil, buf
- buf.should == @contents
-
- @io.rewind
-
- buf = "ABCDEFGHIJKLMNO"
- @io.read 5, buf
- buf.should == @contents[0..4]
- end
-
- it "returns the given buffer" do
- buf = ""
-
- @io.read(nil, buf).object_id.should == buf.object_id
- end
-
- it "coerces the second argument to string and uses it as a buffer" do
- buf = "ABCDE"
- obj = mock("buff")
- obj.should_receive(:to_str).any_number_of_times.and_return(buf)
-
- @io.read(15, obj).object_id.should_not == obj.object_id
- buf.should == @contents
- end
-
- it "returns an empty string at end-of-file" do
- @io.read
- @io.read.should == ''
- end
-
- it "reads the contents of a file when more bytes are specified" do
- @io.read(@contents.length + 1).should == @contents
- end
-
- it "returns an empty string at end-of-file" do
- @io.read
- @io.read.should == ''
- end
-
- it "returns an empty string when the current pos is bigger than the content size" do
- @io.pos = 1000
- @io.read.should == ''
- end
-
- it "returns nil at end-of-file with a length" do
- @io.read
- @io.read(1).should == nil
- end
-
- it "with length argument returns nil when the current pos is bigger than the content size" do
- @io.pos = 1000
- @io.read(1).should == nil
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.read }.should raise_error(IOError)
- end
-
-
- platform_is_not :windows do
- it "raises IOError when stream is closed by another thread" do
- r, w = IO.pipe
- t = Thread.new do
- begin
- r.read(1)
- rescue => e
- e
- end
- end
-
- Thread.pass until t.stop?
- r.close
- t.join
- t.value.should be_kind_of(IOError)
- w.close
- end
- end
-end
-
-platform_is :windows do
- describe "IO#read on Windows" do
- before :each do
- @fname = tmp("io_read.txt")
- touch(@fname, "wb") { |f| f.write "a\r\nb\r\nc" }
- end
-
- after :each do
- @io.close if @io
- rm_r @fname
- end
-
- it "normalizes line endings in text mode" do
- @io = new_io(@fname, "r")
- @io.read.should == "a\nb\nc"
- end
-
- it "does not normalize line endings in binary mode" do
- @io = new_io(@fname, "rb")
- @io.read.should == "a\r\nb\r\nc"
- end
- end
-end
-
-describe "IO#read" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close if @io
- end
-
- it "ignores unicode encoding" do
- @io.readline.should == "Voici la ligne une.\n"
- # read "Qui è"
- @io.read(5).should == "Qui " + [195].pack('C*')
- end
-end
-
-describe "IO#read in binary mode" do
- before :each do
- @internal = Encoding.default_internal
- @name = fixture __FILE__, "read_binary.txt"
- end
-
- after :each do
- Encoding.default_internal = @internal
- end
-
- it "does not transcode file contents when Encoding.default_internal is set" do
- Encoding.default_internal = "utf-8"
-
- result = File.open(@name, "rb") { |f| f.read }.chomp
-
- result.encoding.should == Encoding::ASCII_8BIT
- xE2 = [226].pack('C*')
- result.should == ("abc" + xE2 + "def").force_encoding(Encoding::ASCII_8BIT)
- end
-
- it "does not transcode file contents when an internal encoding is specified" do
- result = File.open(@name, "r:binary:utf-8") { |f| f.read }.chomp
- result.encoding.should == Encoding::ASCII_8BIT
- xE2 = [226].pack('C*')
- result.should == ("abc" + xE2 + "def").force_encoding(Encoding::ASCII_8BIT)
- end
-end
-
-describe "IO#read in text mode" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
- @name = fixture __FILE__, "read_text.txt"
- end
-
- after :each do
- Encoding.default_external = @external
- Encoding.default_internal = @internal
- end
-
- it "reads data according to the internal encoding" do
- Encoding.default_internal = "utf-8"
- Encoding.default_external = "utf-8"
-
- result = File.open(@name, "rt") { |f| f.read }.chomp
-
- result.encoding.should == Encoding::UTF_8
- result.should == "abcâdef"
- end
-end
-
-describe "IO.read with BOM" do
- it "reads a file without a bom" do
- name = fixture __FILE__, "no_bom_UTF-8.txt"
- result = File.read(name, mode: "rb:BOM|utf-8")
- result.force_encoding("ascii-8bit").should == "UTF-8\n"
- end
-
- it "reads a file with a utf-8 bom" do
- name = fixture __FILE__, "bom_UTF-8.txt"
- result = File.read(name, mode: "rb:BOM|utf-16le")
- result.force_encoding("ascii-8bit").should == "UTF-8\n"
- end
-
- it "reads a file with a utf-16le bom" do
- name = fixture __FILE__, "bom_UTF-16LE.txt"
- result = File.read(name, mode: "rb:BOM|utf-8")
- result.force_encoding("ascii-8bit").should == "U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00\n\x00"
- end
-
- it "reads a file with a utf-16be bom" do
- name = fixture __FILE__, "bom_UTF-16BE.txt"
- result = File.read(name, mode: "rb:BOM|utf-8")
- result.force_encoding("ascii-8bit").should == "\x00U\x00T\x00F\x00-\x001\x006\x00B\x00E\x00\n"
- end
-
- it "reads a file with a utf-32le bom" do
- name = fixture __FILE__, "bom_UTF-32LE.txt"
- result = File.read(name, mode: "rb:BOM|utf-8")
- result.force_encoding("ascii-8bit").should == "U\x00\x00\x00T\x00\x00\x00F\x00\x00\x00-\x00\x00\x003\x00\x00\x002\x00\x00\x00L\x00\x00\x00E\x00\x00\x00\n\x00\x00\x00"
- end
-
- it "reads a file with a utf-32be bom" do
- name = fixture __FILE__, "bom_UTF-32BE.txt"
- result = File.read(name, mode: "rb:BOM|utf-8")
- result.force_encoding("ascii-8bit").should == "\x00\x00\x00U\x00\x00\x00T\x00\x00\x00F\x00\x00\x00-\x00\x00\x003\x00\x00\x002\x00\x00\x00B\x00\x00\x00E\x00\x00\x00\n"
- end
-end
-
-with_feature :encoding do
- describe :io_read_internal_encoding, shared: true do
- it "returns a transcoded String" do
- @io.read.should == "ありがとう\n"
- end
-
- it "sets the String encoding to the internal encoding" do
- @io.read.encoding.should equal(Encoding::UTF_8)
- end
-
- describe "when passed nil for limit" do
- it "sets the buffer to a transcoded String" do
- result = @io.read(nil, buf = "")
- buf.should equal(result)
- buf.should == "ありがとう\n"
- end
-
- it "sets the buffer's encoding to the internal encoding" do
- buf = "".force_encoding Encoding::ISO_8859_1
- @io.read(nil, buf)
- buf.encoding.should equal(Encoding::UTF_8)
- end
- end
- end
-
- describe :io_read_size_internal_encoding, shared: true do
- it "reads bytes when passed a size" do
- @io.read(2).should == [164, 162].pack('C*').force_encoding(Encoding::ASCII_8BIT)
- end
-
- it "returns a String in ASCII-8BIT when passed a size" do
- @io.read(4).encoding.should equal(Encoding::ASCII_8BIT)
- end
-
- it "does not change the buffer's encoding when passed a limit" do
- buf = "".force_encoding Encoding::ISO_8859_1
- @io.read(4, buf)
- buf.should == [164, 162, 164, 234].pack('C*').force_encoding(Encoding::ISO_8859_1)
- buf.encoding.should equal(Encoding::ISO_8859_1)
- end
-
- it "trucates the buffer but does not change the buffer's encoding when no data remains" do
- buf = "abc".force_encoding Encoding::ISO_8859_1
- @io.read
-
- @io.read(1, buf).should be_nil
- buf.size.should == 0
- buf.encoding.should equal(Encoding::ISO_8859_1)
- end
- end
-
- describe "IO#read" do
- describe "when IO#external_encoding and IO#internal_encoding are nil" do
- before :each do
- @name = tmp("io_read.txt")
- touch(@name) { |f| f.write "\x00\x01\x02" }
- @io = new_io @name, "r+"
- end
-
- after :each do
- @io.close if @io
- rm_r @name
- end
-
- it "sets the String encoding to Encoding.default_external" do
- @io.read.encoding.should equal(Encoding.default_external)
- end
- end
-
- describe "with internal encoding" do
- after :each do
- @io.close if @io
- end
-
- describe "not specified" do
- before :each do
- @io = IOSpecs.io_fixture "read_euc_jp.txt", "r:euc-jp"
- end
-
- it "does not transcode the String" do
- @io.read.should == ("ありがとう\n").encode(Encoding::EUC_JP)
- end
-
- it "sets the String encoding to the external encoding" do
- @io.read.encoding.should equal(Encoding::EUC_JP)
- end
-
- it_behaves_like :io_read_size_internal_encoding, nil
- end
-
- describe "specified by open mode" do
- before :each do
- @io = IOSpecs.io_fixture "read_euc_jp.txt", "r:euc-jp:utf-8"
- end
-
- it_behaves_like :io_read_internal_encoding, nil
- it_behaves_like :io_read_size_internal_encoding, nil
- end
-
- describe "specified by mode: option" do
- before :each do
- @io = IOSpecs.io_fixture "read_euc_jp.txt", mode: "r:euc-jp:utf-8"
- end
-
- it_behaves_like :io_read_internal_encoding, nil
- it_behaves_like :io_read_size_internal_encoding, nil
- end
-
- describe "specified by internal_encoding: option" do
- before :each do
- options = { mode: "r",
- internal_encoding: "utf-8",
- external_encoding: "euc-jp" }
- @io = IOSpecs.io_fixture "read_euc_jp.txt", options
- end
-
- it_behaves_like :io_read_internal_encoding, nil
- it_behaves_like :io_read_size_internal_encoding, nil
- end
-
- describe "specified by encoding: option" do
- before :each do
- options = { mode: "r", encoding: "euc-jp:utf-8" }
- @io = IOSpecs.io_fixture "read_euc_jp.txt", options
- end
-
- it_behaves_like :io_read_internal_encoding, nil
- it_behaves_like :io_read_size_internal_encoding, nil
- end
- end
- end
-end
-
-describe "IO#read with large data" do
- before :each do
- # TODO: what is the significance of this mystery math?
- @data_size = 8096 * 2 + 1024
- @data = "*" * @data_size
-
- @fname = tmp("io_read.txt")
- touch(@fname) { |f| f.write @data }
- end
-
- after :each do
- rm_r @fname
- end
-
- it "reads all the data at once" do
- File.open(@fname, 'r') { |io| ScratchPad.record io.read }
-
- ScratchPad.recorded.size.should == @data_size
- ScratchPad.recorded.should == @data
- end
-
- it "reads only the requested number of bytes" do
- read_size = @data_size / 2
- File.open(@fname, 'r') { |io| ScratchPad.record io.read(read_size) }
-
- ScratchPad.recorded.size.should == read_size
- ScratchPad.recorded.should == @data[0, read_size]
- end
-end
diff --git a/spec/rubyspec/core/io/readbyte_spec.rb b/spec/rubyspec/core/io/readbyte_spec.rb
deleted file mode 100644
index 1cc588eea5..0000000000
--- a/spec/rubyspec/core/io/readbyte_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO#readbyte" do
- before :each do
- @io = File.open(__FILE__, 'r')
- end
-
- after :each do
- @io.close
- end
-
- it "reads one byte from the stream" do
- byte = @io.readbyte
- byte.should == ?r.getbyte(0)
- @io.pos.should == 1
- end
-
- it "raises EOFError on EOF" do
- @io.seek(999999)
- lambda do
- @io.readbyte
- end.should raise_error EOFError
- end
-
- it "needs to be reviewed for spec completeness"
-end
diff --git a/spec/rubyspec/core/io/readchar_spec.rb b/spec/rubyspec/core/io/readchar_spec.rb
deleted file mode 100644
index 6771fcab59..0000000000
--- a/spec/rubyspec/core/io/readchar_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#readchar" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns the next string from the stream" do
- @io.readchar.should == 'V'
- @io.readchar.should == 'o'
- @io.readchar.should == 'i'
- # read the rest of line
- @io.readline.should == "ci la ligne une.\n"
- @io.readchar.should == 'Q'
- end
-
- it "raises an EOFError when invoked at the end of the stream" do
- @io.read
- lambda { @io.readchar }.should raise_error(EOFError)
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.readchar }.should raise_error(IOError)
- end
-end
-
-describe "IO#readchar" do
- before :each do
- @io = IOSpecs.io_fixture "empty.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "raises EOFError on empty stream" do
- lambda { @io.readchar }.should raise_error(EOFError)
- end
-end
diff --git a/spec/rubyspec/core/io/readline_spec.rb b/spec/rubyspec/core/io/readline_spec.rb
deleted file mode 100644
index 39706948eb..0000000000
--- a/spec/rubyspec/core/io/readline_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#readline" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns the next line on the stream" do
- @io.readline.should == "Voici la ligne une.\n"
- @io.readline.should == "Qui è la linea due.\n"
- end
-
- it "goes back to first position after a rewind" do
- @io.readline.should == "Voici la ligne une.\n"
- @io.rewind
- @io.readline.should == "Voici la ligne une.\n"
- end
-
- it "returns characters after the position set by #seek" do
- @io.seek(1)
- @io.readline.should == "oici la ligne une.\n"
- end
-
- it "raises EOFError on end of stream" do
- IOSpecs.lines.length.times { @io.readline }
- lambda { @io.readline }.should raise_error(EOFError)
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.readline }.should raise_error(IOError)
- end
-
- it "assigns the returned line to $_" do
- IOSpecs.lines.each do |line|
- @io.readline
- $_.should == line
- end
- end
-end
diff --git a/spec/rubyspec/core/io/readlines_spec.rb b/spec/rubyspec/core/io/readlines_spec.rb
deleted file mode 100644
index 22ba844b52..0000000000
--- a/spec/rubyspec/core/io/readlines_spec.rb
+++ /dev/null
@@ -1,210 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/readlines', __FILE__)
-
-describe "IO#readlines" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- @orig_exteenc = Encoding.default_external
- Encoding.default_external = Encoding::UTF_8
- end
-
- after :each do
- @io.close unless @io.closed?
- Encoding.default_external = @orig_exteenc
- end
-
- it "raises an IOError if the stream is closed" do
- @io.close
- lambda { @io.readlines }.should raise_error(IOError)
- end
-
- describe "when passed no arguments" do
- before :each do
- @sep, $/ = $/, " "
- end
-
- after :each do
- $/ = @sep
- end
-
- it "returns an Array containing lines based on $/" do
- @io.readlines.should == IOSpecs.lines_space_separator
- end
- end
-
- describe "when passed no arguments" do
- it "updates self's position" do
- @io.readlines
- @io.pos.should eql(137)
- end
-
- it "updates self's lineno based on the number of lines read" do
- @io.readlines
- @io.lineno.should eql(9)
- end
-
- it "does not change $_" do
- $_ = "test"
- @io.readlines
- $_.should == "test"
- end
-
- it "returns an empty Array when self is at the end" do
- @io.readlines.should == IOSpecs.lines
- @io.readlines.should == []
- end
- end
-
- describe "when passed nil" do
- it "returns the remaining content as one line starting at the current position" do
- @io.readlines(nil).should == [IOSpecs.lines.join]
- end
- end
-
- describe "when passed an empty String" do
- it "returns an Array containing all paragraphs" do
- @io.readlines("").should == IOSpecs.paragraphs
- end
- end
-
- describe "when passed a separator" do
- it "returns an Array containing lines based on the separator" do
- @io.readlines("r").should == IOSpecs.lines_r_separator
- end
-
- it "returns an empty Array when self is at the end" do
- @io.readlines
- @io.readlines("r").should == []
- end
-
- it "updates self's lineno based on the number of lines read" do
- @io.readlines("r")
- @io.lineno.should eql(5)
- end
-
- it "updates self's position based on the number of characters read" do
- @io.readlines("r")
- @io.pos.should eql(137)
- end
-
- it "does not change $_" do
- $_ = "test"
- @io.readlines("r")
- $_.should == "test"
- end
-
- it "tries to convert the passed separator to a String using #to_str" do
- obj = mock('to_str')
- obj.stub!(:to_str).and_return("r")
- @io.readlines(obj).should == IOSpecs.lines_r_separator
- end
- end
-
- describe "when passed a string that starts with a |" do
- it "gets data from the standard out of the subprocess" do
- cmd = "|sh -c 'echo hello;echo line2'"
- platform_is :windows do
- cmd = "|cmd.exe /C echo hello&echo line2"
- end
- lines = IO.readlines(cmd)
- lines.should == ["hello\n", "line2\n"]
- end
-
- with_feature :fork do
- it "gets data from a fork when passed -" do
- lines = IO.readlines("|-")
-
- if lines # parent
- lines.should == ["hello\n", "from a fork\n"]
- else
- puts "hello"
- puts "from a fork"
- exit!
- end
- end
- end
- end
-end
-
-describe "IO#readlines" do
- before :each do
- @name = tmp("io_readlines")
- end
-
- after :each do
- rm_r @name
- end
-
- it "raises an IOError if the stream is opened for append only" do
- lambda do
- File.open(@name, fmode("a:utf-8")) { |f| f.readlines }
- end.should raise_error(IOError)
- end
-
- it "raises an IOError if the stream is opened for write only" do
- lambda do
- File.open(@name, fmode("w:utf-8")) { |f| f.readlines }
- end.should raise_error(IOError)
- end
-end
-
-describe "IO.readlines" do
- before :each do
- @external = Encoding.default_external
- Encoding.default_external = Encoding::UTF_8
-
- @name = fixture __FILE__, "lines.txt"
- ScratchPad.record []
- end
-
- after :each do
- Encoding.default_external = @external
- end
-
- it "does not change $_" do
- $_ = "test"
- IO.readlines(@name)
- $_.should == "test"
- end
-
- it_behaves_like :io_readlines, :readlines
- it_behaves_like :io_readlines_options_19, :readlines
-end
-
-describe "IO.readlines" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
- @name = fixture __FILE__, "lines.txt"
- @dollar_slash = $/
- end
-
- after :each do
- Encoding.default_external = @external
- Encoding.default_internal = @internal
- $/ = @dollar_slash
- end
-
- it "encodes lines using the default external encoding" do
- Encoding.default_external = Encoding::UTF_8
- lines = IO.readlines(@name)
- lines.all? { |s| s.encoding == Encoding::UTF_8 }.should be_true
- end
-
- it "encodes lines using the default internal encoding, when set" do
- Encoding.default_external = Encoding::UTF_8
- Encoding.default_internal = Encoding::UTF_16
- $/ = $/.encode Encoding::UTF_16
- lines = IO.readlines(@name)
- lines.all? { |s| s.encoding == Encoding::UTF_16 }.should be_true
- end
-
- it "ignores the default internal encoding if the external encoding is ASCII-8BIT" do
- Encoding.default_external = Encoding::ASCII_8BIT
- Encoding.default_internal = Encoding::UTF_8
- lines = IO.readlines(@name)
- lines.all? { |s| s.encoding == Encoding::ASCII_8BIT }.should be_true
- end
-end
diff --git a/spec/rubyspec/core/io/readpartial_spec.rb b/spec/rubyspec/core/io/readpartial_spec.rb
deleted file mode 100644
index 16cb08dada..0000000000
--- a/spec/rubyspec/core/io/readpartial_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# -*- encoding: ascii-8bit -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#readpartial" do
- before :each do
- @rd, @wr = IO.pipe
- @rd.binmode
- @wr.binmode
- end
-
- after :each do
- @rd.close unless @rd.closed?
- @wr.close unless @wr.closed?
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.readpartial(10) }.should raise_error(IOError)
-
- @rd.close
- lambda { @rd.readpartial(10) }.should raise_error(IOError)
- end
-
- it "reads at most the specified number of bytes" do
- @wr.write("foobar")
-
- # buffered read
- @rd.read(1).should == 'f'
- # return only specified number, not the whole buffer
- @rd.readpartial(1).should == "o"
- end
-
- it "reads after ungetc with data in the buffer" do
- @wr.write("foobar")
- c = @rd.getc
- @rd.ungetc(c)
- @rd.readpartial(3).should == "foo"
- @rd.readpartial(3).should == "bar"
- end
-
- it "reads after ungetc with multibyte characters in the buffer" do
- @wr.write("∂φ/∂x = gaîté")
- c = @rd.getc
- @rd.ungetc(c)
- @rd.readpartial(3).should == "\xE2\x88\x82"
- @rd.readpartial(3).should == "\xCF\x86/"
- end
-
- it "reads after ungetc without data in the buffer" do
- @wr.write("f")
- c = @rd.getc
- @rd.ungetc(c)
- @rd.readpartial(2).should == "f"
-
- # now, also check that the ungot char is cleared and
- # not returned again
- @wr.write("b")
- @rd.readpartial(2).should == "b"
- end
-
- it "discards the existing buffer content upon successful read" do
- buffer = "existing"
- @wr.write("hello world")
- @wr.close
- @rd.readpartial(11, buffer)
- buffer.should == "hello world"
- end
-
- it "raises EOFError on EOF" do
- @wr.write("abc")
- @wr.close
- @rd.readpartial(10).should == 'abc'
- lambda { @rd.readpartial(10) }.should raise_error(EOFError)
- end
-
- it "discards the existing buffer content upon error" do
- buffer = 'hello'
- @wr.close
- lambda { @rd.readpartial(1, buffer) }.should raise_error(EOFError)
- buffer.should be_empty
- end
-
- it "raises IOError if the stream is closed" do
- @wr.close
- lambda { @rd.readpartial(1) }.should raise_error(IOError)
- end
-
- it "raises ArgumentError if the negative argument is provided" do
- lambda { @rd.readpartial(-1) }.should raise_error(ArgumentError)
- end
-
- it "immediately returns an empty string if the length argument is 0" do
- @rd.readpartial(0).should == ""
- end
-
-end
diff --git a/spec/rubyspec/core/io/reopen_spec.rb b/spec/rubyspec/core/io/reopen_spec.rb
deleted file mode 100644
index 63020d5f3e..0000000000
--- a/spec/rubyspec/core/io/reopen_spec.rb
+++ /dev/null
@@ -1,302 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-require 'fcntl'
-
-describe "IO#reopen" do
- before :each do
- @name = tmp("io_reopen.txt")
- @other_name = tmp("io_reopen_other.txt")
-
- @io = new_io @name
- @other_io = File.open @other_name, "w"
- end
-
- after :each do
- @io.close unless @io.closed?
- @other_io.close unless @other_io.closed?
- rm_r @name, @other_name
- end
-
- it "calls #to_io to convert an object" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return(@other_io)
- @io.reopen obj
- end
-
- it "changes the class of the instance to the class of the object returned by #to_io" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return(@other_io)
- @io.reopen(obj).should be_an_instance_of(File)
- end
-
- it "raises an IOError if the object returned by #to_io is closed" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return(IOSpecs.closed_io)
- lambda { @io.reopen obj }.should raise_error(IOError)
- end
-
- it "raises a TypeError if #to_io does not return an IO instance" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return("something else")
- lambda { @io.reopen obj }.should raise_error(TypeError)
- end
-
- it "raises an IOError when called on a closed stream with an object" do
- @io.close
- obj = mock("io")
- obj.should_not_receive(:to_io)
- lambda { @io.reopen(STDOUT) }.should raise_error(IOError)
- end
-
- it "raises an IOError if the IO argument is closed" do
- lambda { @io.reopen(IOSpecs.closed_io) }.should raise_error(IOError)
- end
-
- it "raises an IOError when called on a closed stream with an IO" do
- @io.close
- lambda { @io.reopen(STDOUT) }.should raise_error(IOError)
- end
-end
-
-describe "IO#reopen with a String" do
- before :each do
- @name = fixture __FILE__, "numbered_lines.txt"
- @other_name = tmp("io_reopen.txt")
- touch @other_name
- @io = IOSpecs.io_fixture "lines.txt"
-
- @tmp_file = tmp("reopen")
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @other_name, @tmp_file
- end
-
- it "does not raise an exception when called on a closed stream with a path" do
- @io.close
- @io.reopen @name, "r"
- @io.closed?.should be_false
- @io.gets.should == "Line 1: One\n"
- end
-
- it "returns self" do
- @io.reopen(@name).should equal(@io)
- end
-
- it "positions a newly created instance at the beginning of the new stream" do
- @io.reopen(@name)
- @io.gets.should == "Line 1: One\n"
- end
-
- it "positions an instance that has been read from at the beginning of the new stream" do
- @io.gets
- @io.reopen(@name)
- @io.gets.should == "Line 1: One\n"
- end
-
- platform_is_not :windows do
- it "passes all mode flags through" do
- @io.reopen(@tmp_file, "ab")
- (@io.fcntl(Fcntl::F_GETFL) & File::APPEND).should == File::APPEND
- end
- end
-
- platform_is_not :windows do
- # TODO Should this work on Windows?
- it "affects exec/system/fork performed after it" do
- ruby_exe fixture(__FILE__, "reopen_stdout.rb"), args: @tmp_file
- File.read(@tmp_file).should == "from system\nfrom exec\n"
- end
- end
-
- it "calls #to_path on non-String arguments" do
- obj = mock('path')
- obj.should_receive(:to_path).and_return(@other_name)
- @io.reopen(obj)
- end
-end
-
-describe "IO#reopen with a String" do
- before :each do
- @name = tmp("io_reopen.txt")
- @other_name = tmp("io_reopen_other.txt")
- @other_io = nil
-
- rm_r @other_name
- end
-
- after :each do
- @io.close unless @io.closed?
- @other_io.close if @other_io and not @other_io.closed?
- rm_r @name, @other_name
- end
-
- it "opens a path after writing to the original file descriptor" do
- @io = new_io @name, "w"
-
- @io.print "original data"
- @io.reopen @other_name
- @io.print "new data"
- @io.flush
-
- File.read(@name).should == "original data"
- File.read(@other_name).should == "new data"
- end
-
- it "closes the file descriptor obtained by opening the new file" do
- @io = new_io @name, "w"
-
- @other_io = File.open @other_name, "w"
- max = @other_io.fileno
- @other_io.close
-
- @io.reopen @other_name
-
- @other_io = File.open @other_name, "w"
- @other_io.fileno.should == max
- end
-
- it "creates the file if it doesn't exist if the IO is opened in write mode" do
- @io = new_io @name, "w"
-
- @io.reopen(@other_name)
- File.exist?(@other_name).should be_true
- end
-
- it "creates the file if it doesn't exist if the IO is opened in write mode" do
- @io = new_io @name, "a"
-
- @io.reopen(@other_name)
- File.exist?(@other_name).should be_true
- end
-end
-
-describe "IO#reopen with a String" do
- before :each do
- @name = tmp("io_reopen.txt")
- @other_name = tmp("io_reopen_other.txt")
-
- touch @name
- rm_r @other_name
- end
-
- after :each do
- @io.close
- rm_r @name, @other_name
- end
-
- it "raises an Errno::ENOENT if the file does not exist and the IO is not opened in write mode" do
- @io = new_io @name, "r"
- lambda { @io.reopen(@other_name) }.should raise_error(Errno::ENOENT)
- end
-end
-
-describe "IO#reopen with an IO at EOF" do
- before :each do
- @name = tmp("io_reopen.txt")
- touch(@name) { |f| f.puts "a line" }
- @other_name = tmp("io_reopen_other.txt")
- touch(@other_name) do |f|
- f.puts "Line 1"
- f.puts "Line 2"
- end
-
- @io = new_io @name, "r"
- @other_io = new_io @other_name, "r"
- @io.read
- end
-
- after :each do
- @io.close unless @io.closed?
- @other_io.close unless @other_io.closed?
- rm_r @name, @other_name
- end
-
- it "resets the EOF status to false" do
- @io.eof?.should be_true
- @io.reopen @other_io
- @io.eof?.should be_false
- end
-end
-
-describe "IO#reopen with an IO" do
- before :each do
- @name = tmp("io_reopen.txt")
- @other_name = tmp("io_reopen_other.txt")
- touch(@other_name) do |f|
- f.puts "Line 1"
- f.puts "Line 2"
- end
-
- @io = new_io @name
- @other_io = new_io @other_name, "r"
- end
-
- after :each do
- @io.close unless @io.closed?
- @other_io.close unless @other_io.closed?
- rm_r @name, @other_name
- end
-
- it "does not call #to_io" do
- # Why do we not use #should_not_receive(:to_io) here? Because
- # MRI actually changes the class of @io in the call to #reopen
- # but does not preserve the existing singleton class of @io.
- def @io.to_io; flunk; end
- @io.reopen(@other_io).should be_an_instance_of(IO)
- end
-
- it "does not change the object_id" do
- obj_id = @io.object_id
- @io.reopen @other_io
- @io.object_id.should == obj_id
- end
-
- it "reads from the beginning if the other IO has not been read from" do
- @io.reopen @other_io
- @io.gets.should == "Line 1\n"
- end
-
- it "reads from the current position of the other IO's stream" do
- @other_io.gets.should == "Line 1\n"
- @io.reopen @other_io
- @io.gets.should == "Line 2\n"
- end
-end
-
-describe "IO#reopen with an IO" do
- before :each do
- @name = tmp("io_reopen.txt")
- @other_name = tmp("io_reopen_other.txt")
-
- @io = new_io @name
- @other_io = File.open @other_name, "w"
- end
-
- after :each do
- @io.close unless @io.closed?
- @other_io.close unless @other_io.closed?
- rm_r @name, @other_name
- end
-
- it "associates the IO instance with the other IO's stream" do
- File.read(@other_name).should == ""
- @io.reopen @other_io
- @io.print "io data"
- @io.flush
- File.read(@name).should == ""
- File.read(@other_name).should == "io data"
- end
-
- it "may change the class of the instance" do
- @io.reopen @other_io
- @io.should be_an_instance_of(File)
- end
-
- it "sets path equals to the other IO's path if other IO is File" do
- @io.reopen @other_io
- @io.path.should == @other_io.path
- end
-end
diff --git a/spec/rubyspec/core/io/rewind_spec.rb b/spec/rubyspec/core/io/rewind_spec.rb
deleted file mode 100644
index ecf8a71891..0000000000
--- a/spec/rubyspec/core/io/rewind_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#rewind" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "positions the instance to the beginning of input" do
- @io.readline.should == "Voici la ligne une.\n"
- @io.readline.should == "Qui è la linea due.\n"
- @io.rewind
- @io.readline.should == "Voici la ligne une.\n"
- end
-
- it "positions the instance to the beginning of input and clears EOF" do
- value = @io.read
- @io.rewind
- @io.eof?.should == false
- value.should == @io.read
- end
-
- it "sets lineno to 0" do
- @io.readline.should == "Voici la ligne une.\n"
- @io.lineno.should == 1
- @io.rewind
- @io.lineno.should == 0
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.rewind }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/seek_spec.rb b/spec/rubyspec/core/io/seek_spec.rb
deleted file mode 100644
index f7e138cbe9..0000000000
--- a/spec/rubyspec/core/io/seek_spec.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/pos', __FILE__)
-
-describe "IO#seek" do
- it_behaves_like :io_set_pos, :seek
-end
-
-describe "IO#seek" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "moves the read position relative to the current position with SEEK_CUR" do
- lambda { @io.seek(-1) }.should raise_error(Errno::EINVAL)
- @io.seek(10, IO::SEEK_CUR)
- @io.readline.should == "igne une.\n"
- @io.seek(-5, IO::SEEK_CUR)
- @io.readline.should == "une.\n"
- end
-
- it "moves the read position relative to the start with SEEK_SET" do
- @io.seek(1)
- @io.pos.should == 1
- @io.rewind
- @io.seek(43, IO::SEEK_SET)
- @io.readline.should == "Aquí está la línea tres.\n"
- @io.seek(5, IO::SEEK_SET)
- @io.readline.should == " la ligne une.\n"
- end
-
- it "moves the read position relative to the end with SEEK_END" do
- @io.seek(0, IO::SEEK_END)
- @io.tell.should == 137
- @io.seek(-25, IO::SEEK_END)
- @io.readline.should == "cinco.\n"
- end
-
- it "moves the read position and clears EOF with SEEK_SET" do
- value = @io.read
- @io.seek(0, IO::SEEK_SET)
- @io.eof?.should == false
- value.should == @io.read
- end
-
- it "moves the read position and clears EOF with SEEK_CUR" do
- value = @io.read
- @io.seek(-1, IO::SEEK_CUR)
- @io.eof?.should == false
- value[-1].should == @io.read[0]
- end
-
- it "moves the read position and clears EOF with SEEK_END" do
- value = @io.read
- @io.seek(-1, IO::SEEK_END)
- @io.eof?.should == false
- value[-1].should == @io.read[0]
- end
-
- platform_is :darwin do
- it "supports seek offsets greater than 2^32" do
- begin
- zero = File.open('/dev/zero')
- offset = 2**33
- zero.seek(offset, File::SEEK_SET)
- pos = zero.pos
-
- pos.should == offset
- ensure
- zero.close rescue nil
- end
- end
- end
-end
diff --git a/spec/rubyspec/core/io/select_spec.rb b/spec/rubyspec/core/io/select_spec.rb
deleted file mode 100644
index aa1199c03b..0000000000
--- a/spec/rubyspec/core/io/select_spec.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO.select" do
- before :each do
- @rd, @wr = IO.pipe
- end
-
- after :each do
- @rd.close unless @rd.closed?
- @wr.close unless @wr.closed?
- end
-
- it "blocks for duration of timeout and returns nil if there are no objects ready for I/O" do
- IO.select([@rd], nil, nil, 0.001).should == nil
- end
-
- it "returns immediately all objects that are ready for I/O when timeout is 0" do
- @wr.write("be ready")
- result = IO.select [@rd], [@wr], nil, 0
- result.should == [[@rd], [@wr], []]
- end
-
- it "returns nil after timeout if there are no objects ready for I/O" do
- result = IO.select [@rd], nil, nil, 0
- result.should == nil
- end
-
- it "returns supplied objects when they are ready for I/O" do
- main = Thread.current
- t = Thread.new {
- Thread.pass until main.status == "sleep"
- @wr.write "be ready"
- }
- result = IO.select [@rd], nil, nil, nil
- result.should == [[@rd], [], []]
- t.join
- end
-
- it "leaves out IO objects for which there is no I/O ready" do
- @wr.write "be ready"
- platform_is :aix do
- # In AIX, when a pipe is readable, select(2) returns the write side
- # of the pipe as "readable", even though you cannot actually read
- # anything from the write side.
- result = IO.select [@wr, @rd], nil, nil, nil
- result.should == [[@wr, @rd], [], []]
- end
- platform_is_not :aix do
- # Order matters here. We want to see that @wr doesn't expand the size
- # of the returned array, so it must be 1st.
- result = IO.select [@wr, @rd], nil, nil, nil
- result.should == [[@rd], [], []]
- end
- end
-
- it "returns supplied objects correctly even when monitoring the same object in different arrays" do
- filename = tmp("IO_select_pipe_file") + $$.to_s
- io = File.open(filename, 'w+')
- result = IO.select [io], [io], nil, 0
- result.should == [[io], [io], []]
- io.close
- rm_r filename
- end
-
- it "invokes to_io on supplied objects that are not IO and returns the supplied objects" do
- # make some data available
- @wr.write("foobar")
-
- obj = mock("read_io")
- obj.should_receive(:to_io).at_least(1).and_return(@rd)
- IO.select([obj]).should == [[obj], [], []]
-
- obj = mock("write_io")
- obj.should_receive(:to_io).at_least(1).and_return(@wr)
- IO.select(nil, [obj]).should == [[], [obj], []]
- end
-
- it "raises TypeError if supplied objects are not IO" do
- lambda { IO.select([Object.new]) }.should raise_error(TypeError)
- lambda { IO.select(nil, [Object.new]) }.should raise_error(TypeError)
-
- obj = mock("io")
- obj.should_receive(:to_io).any_number_of_times.and_return(nil)
-
- lambda { IO.select([obj]) }.should raise_error(TypeError)
- lambda { IO.select(nil, [obj]) }.should raise_error(TypeError)
- end
-
- it "raises a TypeError if the specified timeout value is not Numeric" do
- lambda { IO.select([@rd], nil, nil, Object.new) }.should raise_error(TypeError)
- end
-
- it "raises TypeError if the first three arguments are not Arrays" do
- lambda { IO.select(Object.new)}.should raise_error(TypeError)
- lambda { IO.select(nil, Object.new)}.should raise_error(TypeError)
- lambda { IO.select(nil, nil, Object.new)}.should raise_error(TypeError)
- end
-
- it "raises an ArgumentError when passed a negative timeout" do
- lambda { IO.select(nil, nil, nil, -5)}.should raise_error(ArgumentError)
- end
-end
-
-describe "IO.select when passed nil for timeout" do
- it "sleeps forever and sets the thread status to 'sleep'" do
- t = Thread.new do
- IO.select(nil, nil, nil, nil)
- end
-
- Thread.pass while t.status && t.status != "sleep"
- t.status.should == "sleep"
- t.kill
- t.join
- end
-end
diff --git a/spec/rubyspec/core/io/set_encoding_spec.rb b/spec/rubyspec/core/io/set_encoding_spec.rb
deleted file mode 100644
index 1d6e2a8f3b..0000000000
--- a/spec/rubyspec/core/io/set_encoding_spec.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-with_feature :encoding do
- describe :io_set_encoding_write, shared: true do
- it "sets the encodings to nil" do
- @io = new_io @name, "#{@object}:ibm437:ibm866"
- @io.set_encoding nil, nil
-
- @io.external_encoding.should be_nil
- @io.internal_encoding.should be_nil
- end
-
- it "prevents the encodings from changing when Encoding defaults are changed" do
- @io = new_io @name, "#{@object}:utf-8:us-ascii"
- @io.set_encoding nil, nil
-
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
-
- @io.external_encoding.should be_nil
- @io.internal_encoding.should be_nil
- end
-
- it "sets the encodings to the current Encoding defaults" do
- @io = new_io @name, @object
-
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
-
- @io.set_encoding nil, nil
-
- @io.external_encoding.should == Encoding::IBM437
- @io.internal_encoding.should == Encoding::IBM866
- end
- end
-
- describe "IO#set_encoding when passed nil, nil" do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
-
- Encoding.default_external = Encoding::UTF_8
- Encoding.default_internal = nil
-
- @name = tmp('io_set_encoding.txt')
- touch(@name)
- end
-
- after :each do
- Encoding.default_external = @external
- Encoding.default_internal = @internal
-
- @io.close if @io and not @io.closed?
- rm_r @name
- end
-
- describe "with 'r' mode" do
- it "sets the encodings to the current Encoding defaults" do
- @io = new_io @name, "r"
-
- Encoding.default_external = Encoding::IBM437
- Encoding.default_internal = Encoding::IBM866
-
- @io.set_encoding nil, nil
- @io.external_encoding.should equal(Encoding::IBM437)
- @io.internal_encoding.should equal(Encoding::IBM866)
- end
-
- it "prevents the #internal_encoding from changing when Encoding.default_internal is changed" do
- @io = new_io @name, "r"
- @io.set_encoding nil, nil
-
- Encoding.default_internal = Encoding::IBM437
-
- @io.internal_encoding.should be_nil
- end
-
- it "allows the #external_encoding to change when Encoding.default_external is changed" do
- @io = new_io @name, "r"
- @io.set_encoding nil, nil
-
- Encoding.default_external = Encoding::IBM437
-
- @io.external_encoding.should equal(Encoding::IBM437)
- end
- end
-
- describe "with 'rb' mode" do
- it "returns Encoding.default_external" do
- @io = new_io @name, "rb"
- @io.external_encoding.should equal(Encoding::ASCII_8BIT)
-
- @io.set_encoding nil, nil
- @io.external_encoding.should equal(Encoding.default_external)
- end
- end
-
- describe "with 'r+' mode" do
- it_behaves_like :io_set_encoding_write, nil, "r+"
- end
-
- describe "with 'w' mode" do
- it_behaves_like :io_set_encoding_write, nil, "w"
- end
-
- describe "with 'w+' mode" do
- it_behaves_like :io_set_encoding_write, nil, "w+"
- end
-
- describe "with 'a' mode" do
- it_behaves_like :io_set_encoding_write, nil, "a"
- end
-
- describe "with 'a+' mode" do
- it_behaves_like :io_set_encoding_write, nil, "a+"
- end
- end
-
- describe "IO#set_encoding" do
- before :each do
- @name = tmp('io_set_encoding.txt')
- touch(@name)
- @io = new_io @name
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- it "returns self" do
- @io.set_encoding(Encoding::UTF_8).should equal(@io)
- end
-
- it "sets the external encoding when passed an Encoding argument" do
- @io.set_encoding(Encoding::UTF_8)
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should be_nil
- end
-
- it "sets the external and internal encoding when passed two Encoding arguments" do
- @io.set_encoding(Encoding::UTF_8, Encoding::UTF_16BE)
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should == Encoding::UTF_16BE
- end
-
- it "sets the external encoding when passed the name of an Encoding" do
- @io.set_encoding("utf-8")
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should be_nil
- end
-
- it "ignores the internal encoding if the same as external when passed Encoding objects" do
- @io.set_encoding(Encoding::UTF_8, Encoding::UTF_8)
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should be_nil
- end
-
- it "ignores the internal encoding if the same as external when passed encoding names separanted by ':'" do
- @io.set_encoding("utf-8:utf-8")
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should be_nil
- end
-
- it "sets the external and internal encoding when passed the names of Encodings separated by ':'" do
- @io.set_encoding("utf-8:utf-16be")
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should == Encoding::UTF_16BE
- end
-
- it "sets the external and internal encoding when passed two String arguments" do
- @io.set_encoding("utf-8", "utf-16be")
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should == Encoding::UTF_16BE
- end
-
- it "calls #to_str to convert an abject to a String" do
- obj = mock("io_set_encoding")
- obj.should_receive(:to_str).and_return("utf-8:utf-16be")
- @io.set_encoding(obj)
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should == Encoding::UTF_16BE
- end
-
- it "calls #to_str to convert the second argument to a String" do
- obj = mock("io_set_encoding")
- obj.should_receive(:to_str).at_least(1).times.and_return("utf-16be")
- @io.set_encoding(Encoding::UTF_8, obj)
- @io.external_encoding.should == Encoding::UTF_8
- @io.internal_encoding.should == Encoding::UTF_16BE
- end
- end
-end
diff --git a/spec/rubyspec/core/io/shared/binwrite.rb b/spec/rubyspec/core/io/shared/binwrite.rb
deleted file mode 100644
index 67f0fd5c86..0000000000
--- a/spec/rubyspec/core/io/shared/binwrite.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe :io_binwrite, shared: true do
- before :each do
- @filename = tmp("IO_binwrite_file") + $$.to_s
- File.open(@filename, "w") do |file|
- file << "012345678901234567890123456789"
- end
- end
-
- after :each do
- rm_r @filename
- end
-
- it "coerces the argument to a string using to_s" do
- (obj = mock('test')).should_receive(:to_s).and_return('a string')
- IO.send(@method, @filename, obj)
- end
-
- it "returns the number of bytes written" do
- IO.send(@method, @filename, "abcde").should == 5
- end
-
- it "creates a file if missing" do
- fn = @filename + "xxx"
- begin
- File.exist?(fn).should be_false
- IO.send(@method, fn, "test")
- File.exist?(fn).should be_true
- ensure
- rm_r fn
- end
- end
-
- it "creates file if missing even if offset given" do
- fn = @filename + "xxx"
- begin
- File.exist?(fn).should be_false
- IO.send(@method, fn, "test", 0)
- File.exist?(fn).should be_true
- ensure
- rm_r fn
- end
- end
-
- it "truncates the file and writes the given string" do
- IO.send(@method, @filename, "hello, world!")
- File.read(@filename).should == "hello, world!"
- end
-
- it "doesn't truncate the file and writes the given string if an offset is given" do
- IO.send(@method, @filename, "hello, world!", 0)
- File.read(@filename).should == "hello, world!34567890123456789"
- IO.send(@method, @filename, "hello, world!", 20)
- File.read(@filename).should == "hello, world!3456789hello, world!"
- end
-
- it "doesn't truncate and writes at the given offset after passing empty opts" do
- IO.send(@method, @filename, "hello world!", 1, {})
- File.read(@filename).should == "0hello world!34567890123456789"
- end
-
- it "accepts a :mode option" do
- IO.send(@method, @filename, "hello, world!", mode: 'a')
- File.read(@filename).should == "012345678901234567890123456789hello, world!"
- IO.send(@method, @filename, "foo", 2, mode: 'w')
- File.read(@filename).should == "\0\0foo"
- end
-
- it "raises an error if readonly mode is specified" do
- lambda { IO.send(@method, @filename, "abcde", mode: "r") }.should raise_error(IOError)
- end
-
- it "truncates if empty :opts provided and offset skipped" do
- IO.send(@method, @filename, "hello, world!", {})
- File.read(@filename).should == "hello, world!"
- end
-end
diff --git a/spec/rubyspec/core/io/shared/chars.rb b/spec/rubyspec/core/io/shared/chars.rb
deleted file mode 100644
index 7f2edd2b6d..0000000000
--- a/spec/rubyspec/core/io/shared/chars.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- encoding: utf-8 -*-
-describe :io_chars, shared: true do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- ScratchPad.record []
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "yields each character" do
- @io.readline.should == "Voici la ligne une.\n"
-
- count = 0
- @io.send(@method) do |c|
- ScratchPad << c
- break if 4 < count += 1
- end
-
- ScratchPad.recorded.should == ["Q", "u", "i", " ", "è"]
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- enum = @io.send(@method)
- enum.should be_an_instance_of(Enumerator)
- enum.first(5).should == ["V", "o", "i", "c", "i"]
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- @io.send(@method).size.should == nil
- end
- end
- end
- end
-
- it "returns itself" do
- @io.send(@method) { |c| }.should equal(@io)
- end
-
- it "returns an enumerator for a closed stream" do
- IOSpecs.closed_io.send(@method).should be_an_instance_of(Enumerator)
- end
-
- it "raises an IOError when an enumerator created on a closed stream is accessed" do
- lambda { IOSpecs.closed_io.send(@method).first }.should raise_error(IOError)
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.send(@method) {} }.should raise_error(IOError)
- end
-end
-
-describe :io_chars_empty, shared: true do
- before :each do
- @name = tmp("io_each_char")
- @io = new_io @name, "w+:utf-8"
- ScratchPad.record []
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- it "does not yield any characters on an empty stream" do
- @io.send(@method) { |c| ScratchPad << c }
- ScratchPad.recorded.should == []
- end
-end
diff --git a/spec/rubyspec/core/io/shared/codepoints.rb b/spec/rubyspec/core/io/shared/codepoints.rb
deleted file mode 100644
index 3bb3dce939..0000000000
--- a/spec/rubyspec/core/io/shared/codepoints.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe :io_codepoints, shared: true do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- @enum = @io.send(@method)
- end
-
- after :each do
- @io.close
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- @enum.should be_an_instance_of(Enumerator)
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- @enum.size.should == nil
- end
- end
- end
- end
-
- it "yields each codepoint" do
- @enum.first(25).should == [
- 86, 111, 105, 99, 105, 32, 108, 97, 32, 108, 105, 103, 110,
- 101, 32, 117, 110, 101, 46, 10, 81, 117, 105, 32, 232
- ]
- end
-
- it "yields each codepoint starting from the current position" do
- @io.pos = 130
- @enum.to_a.should == [101, 32, 115, 105, 120, 46, 10]
- end
-
- it "raises an error if reading invalid sequence" do
- @io.pos = 60 # inside of a multibyte sequence
- lambda { @enum.first }.should raise_error(ArgumentError)
- end
-
- it "does not change $_" do
- $_ = "test"
- @enum.to_a
- $_.should == "test"
- end
-
- it "raises an IOError when self is not readable" do
- lambda { IOSpecs.closed_io.send(@method).to_a }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/shared/each.rb b/spec/rubyspec/core/io/shared/each.rb
deleted file mode 100644
index dc07434ecd..0000000000
--- a/spec/rubyspec/core/io/shared/each.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe :io_each, shared: true do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- ScratchPad.record []
- end
-
- after :each do
- @io.close if @io
- end
-
- describe "with no separator" do
- it "yields each line to the passed block" do
- @io.send(@method) { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.lines
- end
-
- it "yields each line starting from the current position" do
- @io.pos = 41
- @io.send(@method) { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.lines[2..-1]
- end
-
- it "returns self" do
- @io.send(@method) { |l| l }.should equal(@io)
- end
-
- it "does not change $_" do
- $_ = "test"
- @io.send(@method) { |s| s }
- $_.should == "test"
- end
-
- it "returns self" do
- @io.send(@method) { |l| l }.should equal(@io)
- end
-
- it "raises an IOError when self is not readable" do
- lambda { IOSpecs.closed_io.send(@method) {} }.should raise_error(IOError)
- end
-
- it "makes line count accessible via lineno" do
- @io.send(@method) { ScratchPad << @io.lineno }
- ScratchPad.recorded.should == [ 1,2,3,4,5,6,7,8,9 ]
- end
-
- it "makes line count accessible via $." do
- @io.send(@method) { ScratchPad << $. }
- ScratchPad.recorded.should == [ 1,2,3,4,5,6,7,8,9 ]
- end
-
- describe "when no block is given" do
- it "returns an Enumerator" do
- enum = @io.send(@method)
- enum.should be_an_instance_of(Enumerator)
-
- enum.each { |l| ScratchPad << l }
- ScratchPad.recorded.should == IOSpecs.lines
- end
-
- describe "returned Enumerator" do
- describe "size" do
- it "should return nil" do
- @io.send(@method).size.should == nil
- end
- end
- end
- end
- end
-
- describe "with limit" do
- describe "when limit is 0" do
- it "raises an ArgumentError" do
- # must pass block so Enumerator is evaluated and raises
- lambda { @io.send(@method, 0){} }.should raise_error(ArgumentError)
- end
- end
- end
-
- describe "when passed a String containing one space as a separator" do
- it "uses the passed argument as the line separator" do
- @io.send(@method, " ") { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.lines_space_separator
- end
-
- it "does not change $_" do
- $_ = "test"
- @io.send(@method, " ") { |s| }
- $_.should == "test"
- end
-
- it "tries to convert the passed separator to a String using #to_str" do
- obj = mock("to_str")
- obj.stub!(:to_str).and_return(" ")
-
- @io.send(@method, obj) { |l| ScratchPad << l }
- ScratchPad.recorded.should == IOSpecs.lines_space_separator
- end
- end
-
- describe "when passed nil as a separator" do
- it "yields self's content starting from the current position when the passed separator is nil" do
- @io.pos = 100
- @io.send(@method, nil) { |s| ScratchPad << s }
- ScratchPad.recorded.should == ["qui a linha cinco.\nHere is line six.\n"]
- end
- end
-
- describe "when passed an empty String as a separator" do
- it "yields each paragraph" do
- @io.send(@method, "") { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.paragraphs
- end
- end
-end
-
-describe :io_each_default_separator, shared: true do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- ScratchPad.record []
- @sep, $/ = $/, " "
- end
-
- after :each do
- @io.close if @io
- $/ = @sep
- end
-
- it "uses $/ as the default line separator" do
- @io.send(@method) { |s| ScratchPad << s }
- ScratchPad.recorded.should == IOSpecs.lines_space_separator
- end
-end
diff --git a/spec/rubyspec/core/io/shared/gets_ascii.rb b/spec/rubyspec/core/io/shared/gets_ascii.rb
deleted file mode 100644
index 2a8fe3c9a5..0000000000
--- a/spec/rubyspec/core/io/shared/gets_ascii.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- encoding: binary -*-
-describe :io_gets_ascii, shared: true do
- describe "with ASCII separator" do
- before :each do
- @name = tmp("gets_specs.txt")
- touch(@name, "wb") { |f| f.print "this is a test\xFFtesty\ntestier" }
-
- File.open(@name, "rb") { |f| @data = f.send(@method, "\xFF") }
- end
-
- after :each do
- rm_r @name
- end
-
- it "returns the separator's character representation" do
- @data.should == "this is a test\xFF"
- end
- end
-end
diff --git a/spec/rubyspec/core/io/shared/new.rb b/spec/rubyspec/core/io/shared/new.rb
deleted file mode 100644
index 12f889f646..0000000000
--- a/spec/rubyspec/core/io/shared/new.rb
+++ /dev/null
@@ -1,378 +0,0 @@
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-# This group of specs may ONLY contain specs that do successfully create
-# an IO instance from the file descriptor returned by #new_fd helper.
-describe :io_new, shared: true do
- before :each do
- @name = tmp("io_new.txt")
- @fd = new_fd @name
- @io = nil
- end
-
- after :each do
- if @io
- @io.close
- elsif @fd
- IO.new(@fd, "w").close
- end
- rm_r @name
- end
-
- it "creates an IO instance from a Fixnum argument" do
- @io = IO.send(@method, @fd, "w")
- @io.should be_an_instance_of(IO)
- end
-
- it "creates an IO instance when STDOUT is closed" do
- verbose, $VERBOSE = $VERBOSE, nil
- stdout = STDOUT
- stdout_file = tmp("stdout.txt")
-
- begin
- @io = IO.send(@method, @fd, "w")
- @io.should be_an_instance_of(IO)
- ensure
- STDOUT = stdout
- $VERBOSE = verbose
- rm_r stdout_file
- end
- end
-
- it "creates an IO instance when STDERR is closed" do
- verbose, $VERBOSE = $VERBOSE, nil
- stderr = STDERR
- stderr_file = tmp("stderr.txt")
- STDERR = new_io stderr_file
- STDERR.close
-
- begin
- @io = IO.send(@method, @fd, "w")
- @io.should be_an_instance_of(IO)
- ensure
- STDERR = stderr
- $VERBOSE = verbose
- rm_r stderr_file
- end
- end
-
- it "calls #to_int on an object to convert to a Fixnum" do
- obj = mock("file descriptor")
- obj.should_receive(:to_int).and_return(@fd)
- @io = IO.send(@method, obj, "w")
- @io.should be_an_instance_of(IO)
- end
-
- it "accepts a :mode option" do
- @io = IO.send(@method, @fd, mode: "w")
- @io.write("foo").should == 3
- end
-
- it "accepts a mode argument set to nil with a valid :mode option" do
- @io = IO.send(@method, @fd, nil, mode: "w")
- @io.write("foo").should == 3
- end
-
- it "accepts a mode argument with a :mode option set to nil" do
- @io = IO.send(@method, @fd, "w", mode: nil)
- @io.write("foo").should == 3
- end
-
- it "uses the external encoding specified in the mode argument" do
- @io = IO.send(@method, @fd, 'w:utf-8')
- @io.external_encoding.to_s.should == 'UTF-8'
- end
-
- it "uses the external and the internal encoding specified in the mode argument" do
- @io = IO.send(@method, @fd, 'w:utf-8:ISO-8859-1')
- @io.external_encoding.to_s.should == 'UTF-8'
- @io.internal_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "uses the external encoding specified via the :external_encoding option" do
- @io = IO.send(@method, @fd, 'w', {external_encoding: 'utf-8'})
- @io.external_encoding.to_s.should == 'UTF-8'
- end
-
- it "uses the internal encoding specified via the :internal_encoding option" do
- @io = IO.send(@method, @fd, 'w', {internal_encoding: 'ibm866'})
- @io.internal_encoding.to_s.should == 'IBM866'
- end
-
- it "uses the colon-separated encodings specified via the :encoding option" do
- @io = IO.send(@method, @fd, 'w', {encoding: 'utf-8:ISO-8859-1'})
- @io.external_encoding.to_s.should == 'UTF-8'
- @io.internal_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "uses the :encoding option as the external encoding when only one is given" do
- @io = IO.send(@method, @fd, 'w', {encoding: 'ISO-8859-1'})
- @io.external_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "uses the :encoding options as the external encoding when it's an Encoding object" do
- @io = IO.send(@method, @fd, 'w', {encoding: Encoding::ISO_8859_1})
- @io.external_encoding.should == Encoding::ISO_8859_1
- end
-
- it "ignores the :encoding option when the :external_encoding option is present" do
- lambda {
- @io = IO.send(@method, @fd, 'w', {external_encoding: 'utf-8', encoding: 'iso-8859-1:iso-8859-1'})
- }.should complain(/Ignoring encoding parameter/)
- @io.external_encoding.to_s.should == 'UTF-8'
- end
-
- it "ignores the :encoding option when the :internal_encoding option is present" do
- lambda {
- @io = IO.send(@method, @fd, 'w', {internal_encoding: 'ibm866', encoding: 'iso-8859-1:iso-8859-1'})
- }.should complain(/Ignoring encoding parameter/)
- @io.internal_encoding.to_s.should == 'IBM866'
- end
-
- it "uses the encoding specified via the :mode option hash" do
- @io = IO.send(@method, @fd, {mode: 'w:utf-8:ISO-8859-1'})
- @io.external_encoding.to_s.should == 'UTF-8'
- @io.internal_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "ignores the :internal_encoding option when the same as the external encoding" do
- @io = IO.send(@method, @fd, 'w', {external_encoding: 'utf-8', internal_encoding: 'utf-8'})
- @io.external_encoding.to_s.should == 'UTF-8'
- @io.internal_encoding.to_s.should == ''
- end
-
- it "sets internal encoding to nil when passed '-'" do
- @io = IO.send(@method, @fd, 'w', {external_encoding: 'utf-8', internal_encoding: '-'})
- @io.external_encoding.to_s.should == 'UTF-8'
- @io.internal_encoding.to_s.should == ''
- end
-
- it "sets binmode from mode string" do
- @io = IO.send(@method, @fd, 'wb')
- @io.binmode?.should == true
- end
-
- it "does not set binmode without being asked" do
- @io = IO.send(@method, @fd, 'w')
- @io.binmode?.should == false
- end
-
- it "sets binmode from :binmode option" do
- @io = IO.send(@method, @fd, 'w', {binmode: true})
- @io.binmode?.should == true
- end
-
- it "does not set binmode from false :binmode" do
- @io = IO.send(@method, @fd, 'w', {binmode: false})
- @io.binmode?.should == false
- end
-
- it "sets external encoding to binary with binmode in mode string" do
- @io = IO.send(@method, @fd, 'wb')
- @io.external_encoding.to_s.should == 'ASCII-8BIT'
- end
-
- # #5917
- it "sets external encoding to binary with :binmode option" do
- @io = IO.send(@method, @fd, 'w', {binmode: true})
- @io.external_encoding.to_s.should == 'ASCII-8BIT'
- end
-
- it "does not use binary encoding when mode encoding is specified" do
- @io = IO.send(@method, @fd, 'wb:iso-8859-1')
- @io.external_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "does not use binary encoding when :encoding option is specified" do
- @io = IO.send(@method, @fd, 'wb', encoding: "iso-8859-1")
- @io.external_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "does not use binary encoding when :external_encoding option is specified" do
- @io = IO.send(@method, @fd, 'wb', external_encoding: "iso-8859-1")
- @io.external_encoding.to_s.should == 'ISO-8859-1'
- end
-
- it "does not use binary encoding when :internal_encoding option is specified" do
- @io = IO.send(@method, @fd, 'wb', internal_encoding: "ibm866")
- @io.internal_encoding.to_s.should == 'IBM866'
- end
-
- it "accepts nil options" do
- @io = IO.send(@method, @fd, 'w', nil)
- @io.write("foo").should == 3
- end
-
- it "coerces mode with #to_str" do
- mode = mock("mode")
- mode.should_receive(:to_str).and_return('w')
- @io = IO.send(@method, @fd, mode)
- end
-
- it "coerces mode with #to_int" do
- mode = mock("mode")
- mode.should_receive(:to_int).and_return(File::WRONLY)
- @io = IO.send(@method, @fd, mode)
- end
-
- it "coerces mode with #to_str when passed in options" do
- mode = mock("mode")
- mode.should_receive(:to_str).and_return('w')
- @io = IO.send(@method, @fd, mode: mode)
- end
-
- it "coerces mode with #to_int when passed in options" do
- mode = mock("mode")
- mode.should_receive(:to_int).and_return(File::WRONLY)
- @io = IO.send(@method, @fd, mode: mode)
- end
-
- it "coerces :encoding option with #to_str" do
- encoding = mock("encoding")
- encoding.should_receive(:to_str).and_return('utf-8')
- @io = IO.send(@method, @fd, 'w', encoding: encoding)
- end
-
- it "coerces :external_encoding option with #to_str" do
- encoding = mock("encoding")
- encoding.should_receive(:to_str).and_return('utf-8')
- @io = IO.send(@method, @fd, 'w', external_encoding: encoding)
- end
-
- it "coerces :internal_encoding option with #to_str" do
- encoding = mock("encoding")
- encoding.should_receive(:to_str).at_least(:once).and_return('utf-8')
- @io = IO.send(@method, @fd, 'w', internal_encoding: encoding)
- end
-
- it "coerces options as third argument with #to_hash" do
- options = mock("options")
- options.should_receive(:to_hash).and_return({})
- @io = IO.send(@method, @fd, 'w', options)
- end
-
- it "coerces options as second argument with #to_hash" do
- options = mock("options")
- options.should_receive(:to_hash).and_return({})
- @io = IO.send(@method, @fd, options)
- end
-
- it "accepts an :autoclose option" do
- @io = IO.send(@method, @fd, 'w', autoclose: false)
- @io.autoclose?.should == false
- @io.autoclose = true
- end
-
- it "accepts any truthy option :autoclose" do
- @io = IO.send(@method, @fd, 'w', autoclose: 42)
- @io.autoclose?.should == true
- end
-end
-
-# This group of specs may ONLY contain specs that do not actually create
-# an IO instance from the file descriptor returned by #new_fd helper.
-describe :io_new_errors, shared: true do
- before :each do
- @name = tmp("io_new.txt")
- @fd = new_fd @name
- end
-
- after :each do
- IO.new(@fd, "w").close if @fd
- rm_r @name
- end
-
- it "raises an Errno::EBADF if the file descriptor is not valid" do
- lambda { IO.send(@method, -1, "w") }.should raise_error(Errno::EBADF)
- end
-
- it "raises an IOError if passed a closed stream" do
- lambda { IO.send(@method, IOSpecs.closed_io.fileno, 'w') }.should raise_error(IOError)
- end
-
- platform_is_not :windows do
- it "raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode" do
- lambda { IO.send(@method, @fd, "r") }.should raise_error(Errno::EINVAL)
- end
- end
-
- it "raises ArgumentError if passed an empty mode string" do
- lambda { IO.send(@method, @fd, "") }.should raise_error(ArgumentError)
- end
-
- it "raises an error if passed modes two ways" do
- lambda {
- IO.send(@method, @fd, "w", mode: "w")
- }.should raise_error(ArgumentError)
- end
-
- it "raises an error if passed encodings two ways" do
- lambda {
- @io = IO.send(@method, @fd, 'w:ISO-8859-1', {encoding: 'ISO-8859-1'})
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, 'w:ISO-8859-1', {external_encoding: 'ISO-8859-1'})
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, 'w:ISO-8859-1:UTF-8', {internal_encoding: 'ISO-8859-1'})
- }.should raise_error(ArgumentError)
- end
-
- it "raises an error if passed matching binary/text mode two ways" do
- lambda {
- @io = IO.send(@method, @fd, "wb", binmode: true)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, "wt", textmode: true)
- }.should raise_error(ArgumentError)
-
- lambda {
- @io = IO.send(@method, @fd, "wb", textmode: false)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, "wt", binmode: false)
- }.should raise_error(ArgumentError)
- end
-
- it "raises an error if passed conflicting binary/text mode two ways" do
- lambda {
- @io = IO.send(@method, @fd, "wb", binmode: false)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, "wt", textmode: false)
- }.should raise_error(ArgumentError)
-
- lambda {
- @io = IO.send(@method, @fd, "wb", textmode: true)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, "wt", binmode: true)
- }.should raise_error(ArgumentError)
- end
-
- it "raises an error when trying to set both binmode and textmode" do
- lambda {
- @io = IO.send(@method, @fd, "w", textmode: true, binmode: true)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, File::Constants::WRONLY, textmode: true, binmode: true)
- }.should raise_error(ArgumentError)
- end
-
- it "raises ArgumentError if not passed a hash or nil for options" do
- lambda {
- @io = IO.send(@method, @fd, 'w', false)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, false, false)
- }.should raise_error(ArgumentError)
- lambda {
- @io = IO.send(@method, @fd, nil, false)
- }.should raise_error(ArgumentError)
- end
-
- it "raises TypeError if passed a hash for mode and nil for options" do
- lambda {
- @io = IO.send(@method, @fd, {mode: 'w'}, nil)
- }.should raise_error(TypeError)
- end
-end
diff --git a/spec/rubyspec/core/io/shared/pos.rb b/spec/rubyspec/core/io/shared/pos.rb
deleted file mode 100644
index fef7ab2bf7..0000000000
--- a/spec/rubyspec/core/io/shared/pos.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-describe :io_pos, shared: true do
- before :each do
- @fname = tmp('test.txt')
- File.open(@fname, 'w') { |f| f.write "123" }
- end
-
- after :each do
- rm_r @fname
- end
-
- it "gets the offset" do
- File.open @fname do |f|
- f.send(@method).should == 0
- f.read 1
- f.send(@method).should == 1
- f.read 2
- f.send(@method).should == 3
- end
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.send(@method) }.should raise_error(IOError)
- end
-
- it "resets #eof?" do
- open @fname do |io|
- io.read 1
- io.read 1
- io.send(@method)
- io.eof?.should == false
- end
- end
-end
-
-describe :io_set_pos, shared: true do
- before :each do
- @fname = tmp('test.txt')
- File.open(@fname, 'w') { |f| f.write "123" }
- end
-
- after :each do
- rm_r @fname
- end
-
- it "sets the offset" do
- File.open @fname do |f|
- val1 = f.read 1
- f.send @method, 0
- f.read(1).should == val1
- end
- end
-
- it "converts arguments to Integers" do
- File.open @fname do |io|
- o = mock("o")
- o.should_receive(:to_int).and_return(1)
-
- io.send @method, o
- io.pos.should == 1
- end
- end
-
- it "does not accept Bignums that don't fit in a C long" do
- File.open @fname do |io|
- lambda { io.send @method, 2**128 }.should raise_error(RangeError)
- end
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.send @method, 0 }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/shared/readlines.rb b/spec/rubyspec/core/io/shared/readlines.rb
deleted file mode 100644
index 4cb821274a..0000000000
--- a/spec/rubyspec/core/io/shared/readlines.rb
+++ /dev/null
@@ -1,204 +0,0 @@
-describe :io_readlines, shared: true do
- it "raises TypeError if the first parameter is nil" do
- lambda { IO.send(@method, nil, &@object) }.should raise_error(TypeError)
- end
-
- it "raises an Errno::ENOENT if the file does not exist" do
- name = tmp("nonexistent.txt")
- lambda { IO.send(@method, name, &@object) }.should raise_error(Errno::ENOENT)
- end
-
- it "yields a single string with entire content when the separator is nil" do
- result = IO.send(@method, @name, nil, &@object)
- (result ? result : ScratchPad.recorded).should == [IO.read(@name)]
- end
-
- it "yields a sequence of paragraphs when the separator is an empty string" do
- result = IO.send(@method, @name, "", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_empty_separator
- end
-end
-
-describe :io_readlines_options_19, shared: true do
- before :each do
- @filename = tmp("io readlines options")
- end
-
- after :each do
- rm_r @filename
- end
-
- describe "when passed name" do
- it "calls #to_path to convert the name" do
- name = mock("io name to_path")
- name.should_receive(:to_path).and_return(@name)
- IO.send(@method, name, &@object)
- end
-
- it "defaults to $/ as the separator" do
- result = IO.send(@method, @name, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines
- end
- end
-
- describe "when passed name, object" do
- it "calls #to_str to convert the object to a separator" do
- sep = mock("io readlines separator")
- sep.should_receive(:to_str).at_least(1).and_return(" ")
- result = IO.send(@method, @name, sep, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator
- end
-
- describe "when the object is a Fixnum" do
- before :each do
- @sep = $/
- end
-
- after :each do
- $/ = @sep
- end
-
- it "defaults to $/ as the separator" do
- $/ = " "
- result = IO.send(@method, @name, 10, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "uses the object as a limit if it is a Fixnum" do
- result = IO.send(@method, @name, 10, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_limit
- end
- end
-
- describe "when the object is a String" do
- it "uses the value as the separator" do
- result = IO.send(@method, @name, " ", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator
- end
-
- it "accepts non-ASCII data as separator" do
- result = IO.send(@method, @name, "\303\250".force_encoding("utf-8"), &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_arbitrary_separator
- end
- end
-
- describe "when the object is a Hash" do
- it "uses the value as the options hash" do
- result = IO.send(@method, @name, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines
- end
- end
- end
-
- describe "when passed name, object, object" do
- describe "when the first object is a Fixnum" do
- it "uses the second object as an options Hash" do
- lambda do
- IO.send(@method, @filename, 10, mode: "w", &@object)
- end.should raise_error(IOError)
- end
-
- it "calls #to_hash to convert the second object to a Hash" do
- options = mock("io readlines options Hash")
- options.should_receive(:to_hash).and_return({ mode: "w" })
- lambda do
- IO.send(@method, @filename, 10, options, &@object)
- end.should raise_error(IOError)
- end
- end
-
- describe "when the first object is a String" do
- it "uses the second object as a limit if it is a Fixnum" do
- result = IO.send(@method, @name, " ", 10, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "calls #to_int to convert the second object" do
- limit = mock("io readlines limit")
- limit.should_receive(:to_int).at_least(1).and_return(10)
- result = IO.send(@method, @name, " ", limit, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "uses the second object as an options Hash" do
- lambda do
- IO.send(@method, @filename, " ", mode: "w", &@object)
- end.should raise_error(IOError)
- end
-
- it "calls #to_hash to convert the second object to a Hash" do
- options = mock("io readlines options Hash")
- options.should_receive(:to_hash).and_return({ mode: "w" })
- lambda do
- IO.send(@method, @filename, " ", options, &@object)
- end.should raise_error(IOError)
- end
- end
-
- describe "when the first object is not a String or Fixnum" do
- it "calls #to_str to convert the object to a String" do
- sep = mock("io readlines separator")
- sep.should_receive(:to_str).at_least(1).and_return(" ")
- result = IO.send(@method, @name, sep, 10, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "uses the second object as a limit if it is a Fixnum" do
- result = IO.send(@method, @name, " ", 10, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "calls #to_int to convert the second object" do
- limit = mock("io readlines limit")
- limit.should_receive(:to_int).at_least(1).and_return(10)
- result = IO.send(@method, @name, " ", limit, &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "uses the second object as an options Hash" do
- lambda do
- IO.send(@method, @filename, " ", mode: "w", &@object)
- end.should raise_error(IOError)
- end
-
- it "calls #to_hash to convert the second object to a Hash" do
- options = mock("io readlines options Hash")
- options.should_receive(:to_hash).and_return({ mode: "w" })
- lambda do
- IO.send(@method, @filename, " ", options, &@object)
- end.should raise_error(IOError)
- end
- end
- end
-
- describe "when passed name, separator, limit, options" do
- it "calls #to_path to convert the name object" do
- name = mock("io name to_path")
- name.should_receive(:to_path).and_return(@name)
- result = IO.send(@method, name, " ", 10, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "calls #to_str to convert the separator object" do
- sep = mock("io readlines separator")
- sep.should_receive(:to_str).at_least(1).and_return(" ")
- result = IO.send(@method, @name, sep, 10, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "calls #to_int to convert the limit argument" do
- limit = mock("io readlines limit")
- limit.should_receive(:to_int).at_least(1).and_return(10)
- result = IO.send(@method, @name, " ", limit, mode: "r", &@object)
- (result ? result : ScratchPad.recorded).should == IOSpecs.lines_space_separator_limit
- end
-
- it "calls #to_hash to convert the options object" do
- options = mock("io readlines options Hash")
- options.should_receive(:to_hash).and_return({ mode: "w" })
- lambda do
- IO.send(@method, @filename, " ", 10, options, &@object)
- end.should raise_error(IOError)
- end
- end
-end
diff --git a/spec/rubyspec/core/io/shared/tty.rb b/spec/rubyspec/core/io/shared/tty.rb
deleted file mode 100644
index eddc5d15af..0000000000
--- a/spec/rubyspec/core/io/shared/tty.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe :io_tty, shared: true do
- platform_is_not :windows do
- it "returns true if this stream is a terminal device (TTY)" do
- begin
- # check to enabled tty
- File.open('/dev/tty') {}
- rescue Errno::ENXIO
- # workaround for not configured environment like OS X
- 1.should == 1
- else
- File.open('/dev/tty') { |f| f.send(@method) }.should == true
- end
- end
- end
-
- it "returns false if this stream is not a terminal device (TTY)" do
- File.open(__FILE__) { |f| f.send(@method) }.should == false
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.send @method }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/shared/write.rb b/spec/rubyspec/core/io/shared/write.rb
deleted file mode 100644
index fd4b0af30e..0000000000
--- a/spec/rubyspec/core/io/shared/write.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# encoding: utf-8
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe :io_write, shared: true do
- before :each do
- @filename = tmp("IO_syswrite_file") + $$.to_s
- File.open(@filename, "w") do |file|
- file.send(@method, "012345678901234567890123456789")
- end
- @file = File.open(@filename, "r+")
- @readonly_file = File.open(@filename)
- end
-
- after :each do
- @readonly_file.close if @readonly_file
- @file.close if @file
- rm_r @filename
- end
-
- it "coerces the argument to a string using to_s" do
- (obj = mock('test')).should_receive(:to_s).and_return('a string')
- @file.send(@method, obj)
- end
-
- it "checks if the file is writable if writing more than zero bytes" do
- lambda { @readonly_file.send(@method, "abcde") }.should raise_error(IOError)
- end
-
- it "returns the number of bytes written" do
- written = @file.send(@method, "abcde")
- written.should == 5
- end
-
- it "invokes to_s on non-String argument" do
- data = "abcdefgh9876"
- (obj = mock(data)).should_receive(:to_s).and_return(data)
- @file.send(@method, obj)
- @file.seek(0)
- @file.read(data.size).should == data
- end
-
- it "writes all of the string's bytes without buffering if mode is sync" do
- @file.sync = true
- written = @file.send(@method, "abcde")
- written.should == 5
- File.open(@filename) do |file|
- file.read(10).should == "abcde56789"
- end
- end
-
- it "does not warn if called after IO#read" do
- @file.read(5)
- lambda { @file.send(@method, "fghij") }.should_not complain
- end
-
- it "writes to the current position after IO#read" do
- @file.read(5)
- @file.send(@method, "abcd")
- @file.rewind
- @file.read.should == "01234abcd901234567890123456789"
- end
-
- it "advances the file position by the count of given bytes" do
- @file.send(@method, "abcde")
- @file.read(10).should == "5678901234"
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.send(@method, "hello") }.should raise_error(IOError)
- end
-
-end
diff --git a/spec/rubyspec/core/io/stat_spec.rb b/spec/rubyspec/core/io/stat_spec.rb
deleted file mode 100644
index d59535843a..0000000000
--- a/spec/rubyspec/core/io/stat_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#stat" do
- before :each do
- @io = IO.popen 'cat', "r+"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.stat }.should raise_error(IOError)
- end
-
- it "returns a File::Stat object for the stream" do
- STDOUT.stat.should be_an_instance_of(File::Stat)
- end
-
- it "can stat pipes" do
- @io.stat.should be_an_instance_of(File::Stat)
- end
-end
diff --git a/spec/rubyspec/core/io/sync_spec.rb b/spec/rubyspec/core/io/sync_spec.rb
deleted file mode 100644
index 5cd873d799..0000000000
--- a/spec/rubyspec/core/io/sync_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#sync=" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "sets the sync mode to true or false" do
- @io.sync = true
- @io.sync.should == true
- @io.sync = false
- @io.sync.should == false
- end
-
- it "accepts non-boolean arguments" do
- @io.sync = 10
- @io.sync.should == true
- @io.sync = nil
- @io.sync.should == false
- @io.sync = Object.new
- @io.sync.should == true
- end
-
- it "raises an IOError on closed stream" do
- lambda { IOSpecs.closed_io.sync = true }.should raise_error(IOError)
- end
-end
-
-describe "IO#sync" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns the current sync mode" do
- @io.sync.should == false
- end
-
- it "raises an IOError on closed stream" do
- lambda { IOSpecs.closed_io.sync }.should raise_error(IOError)
- end
-end
-
-describe "IO#sync" do
- it "is false by default for STDIN" do
- STDIN.sync.should == false
- end
-
- it "is false by default for STDOUT" do
- STDOUT.sync.should == false
- end
-
- it "is true by default for STDERR" do
- STDERR.sync.should == true
- end
-end
diff --git a/spec/rubyspec/core/io/sysopen_spec.rb b/spec/rubyspec/core/io/sysopen_spec.rb
deleted file mode 100644
index f6d37de364..0000000000
--- a/spec/rubyspec/core/io/sysopen_spec.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO.sysopen" do
- before :each do
- @filename = tmp("rubinius-spec-io-sysopen-#{$$}.txt")
- @fd = nil
- end
-
- after :each do
- IO.for_fd(@fd).close if @fd
- rm_r @filename
- end
-
- it "returns the file descriptor for a given path" do
- @fd = IO.sysopen(@filename, "w")
- @fd.should be_kind_of(Fixnum)
- @fd.should_not equal(0)
- end
-
- # opening a directory is not supported on Windows
- platform_is_not :windows do
- it "works on directories" do
- @fd = IO.sysopen(tmp("")) # /tmp
- @fd.should be_kind_of(Fixnum)
- @fd.should_not equal(0)
- end
- end
-
- it "calls #to_path to convert an object to a path" do
- path = mock('sysopen to_path')
- path.should_receive(:to_path).and_return(@filename)
- @fd = IO.sysopen(path, 'w')
- end
-
- it "accepts a mode as second argument" do
- lambda { @fd = IO.sysopen(@filename, "w") }.should_not raise_error
- @fd.should_not equal(0)
- end
-
- it "accepts permissions as third argument" do
- @fd = IO.sysopen(@filename, "w", 777)
- @fd.should_not equal(0)
- end
-
- it "accepts mode & permission that are nil" do
- touch @filename # create the file
- @fd = IO.sysopen(@filename, nil, nil)
- @fd.should_not equal(0)
- end
-end
diff --git a/spec/rubyspec/core/io/sysread_spec.rb b/spec/rubyspec/core/io/sysread_spec.rb
deleted file mode 100644
index 1993653df9..0000000000
--- a/spec/rubyspec/core/io/sysread_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#sysread on a file" do
- before :each do
- @file_name = tmp("IO_sysread_file") + $$.to_s
- File.open(@file_name, "w") do |f|
- # write some stuff
- f.write("012345678901234567890123456789")
- end
- @file = File.open(@file_name, "r+")
- end
-
- after :each do
- @file.close
- rm_r @file_name
- end
-
- it "reads the specified number of bytes from the file" do
- @file.sysread(15).should == "012345678901234"
- end
-
- it "reads the specified number of bytes from the file to the buffer" do
- buf = "" # empty buffer
- @file.sysread(15, buf).should == buf
- buf.should == "012345678901234"
-
- @file.rewind
-
- buf = "ABCDE" # small buffer
- @file.sysread(15, buf).should == buf
- buf.should == "012345678901234"
-
- @file.rewind
-
- buf = "ABCDE" * 5 # large buffer
- @file.sysread(15, buf).should == buf
- buf.should == "012345678901234"
- end
-
- it "coerces the second argument to string and uses it as a buffer" do
- buf = "ABCDE"
- (obj = mock("buff")).should_receive(:to_str).any_number_of_times.and_return(buf)
- @file.sysread(15, obj).should == buf
- buf.should == "012345678901234"
- end
-
- it "advances the position of the file by the specified number of bytes" do
- @file.sysread(15)
- @file.sysread(5).should == "56789"
- end
-
- it "reads normally even when called immediately after a buffered IO#read" do
- @file.read(15)
- @file.sysread(5).should == "56789"
- end
-
- it "does not raise error if called after IO#read followed by IO#write" do
- @file.read(5)
- @file.write("abcde")
- lambda { @file.sysread(5) }.should_not raise_error(IOError)
- end
-
- it "does not raise error if called after IO#read followed by IO#syswrite" do
- @file.read(5)
- @file.syswrite("abcde")
- lambda { @file.sysread(5) }.should_not raise_error(IOError)
- end
-
- it "reads updated content after the flushed buffered IO#write" do
- @file.write("abcde")
- @file.flush
- @file.sysread(5).should == "56789"
- File.open(@file_name) do |f|
- f.sysread(10).should == "abcde56789"
- end
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.sysread(5) }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/sysseek_spec.rb b/spec/rubyspec/core/io/sysseek_spec.rb
deleted file mode 100644
index bcce968c7d..0000000000
--- a/spec/rubyspec/core/io/sysseek_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/pos', __FILE__)
-
-describe "IO#sysseek" do
- it_behaves_like :io_set_pos, :seek
-end
-
-describe "IO#sysseek" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "moves the read position relative to the current position with SEEK_CUR" do
- @io.sysseek(10, IO::SEEK_CUR)
- @io.readline.should == "igne une.\n"
- end
-
- it "raises an error when called after buffered reads" do
- @io.readline
- lambda { @io.sysseek(-5, IO::SEEK_CUR) }.should raise_error(IOError)
- end
-
- it "moves the read position relative to the start with SEEK_SET" do
- @io.sysseek(43, IO::SEEK_SET)
- @io.readline.should == "Aquí está la línea tres.\n"
- end
-
- it "moves the read position relative to the end with SEEK_END" do
- @io.sysseek(1, IO::SEEK_END)
-
- # this is the safest way of checking the EOF when
- # sys-* methods are invoked
- lambda { @io.sysread(1) }.should raise_error(EOFError)
-
- @io.sysseek(-25, IO::SEEK_END)
- @io.sysread(7).should == "cinco.\n"
- end
-end
diff --git a/spec/rubyspec/core/io/syswrite_spec.rb b/spec/rubyspec/core/io/syswrite_spec.rb
deleted file mode 100644
index 879423de2e..0000000000
--- a/spec/rubyspec/core/io/syswrite_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/write', __FILE__)
-
-describe "IO#syswrite on a file" do
- before :each do
- @filename = tmp("IO_syswrite_file") + $$.to_s
- File.open(@filename, "w") do |file|
- file.syswrite("012345678901234567890123456789")
- end
- @file = File.open(@filename, "r+")
- @readonly_file = File.open(@filename)
- end
-
- after :each do
- @file.close
- @readonly_file.close
- rm_r @filename
- end
-
- it "writes all of the string's bytes but does not buffer them" do
- written = @file.syswrite("abcde")
- written.should == 5
- File.open(@filename) do |file|
- file.sysread(10).should == "abcde56789"
- file.seek(0)
- @file.fsync
- file.sysread(10).should == "abcde56789"
- end
- end
-
- it "warns if called immediately after a buffered IO#write" do
- @file.write("abcde")
- lambda { @file.syswrite("fghij") }.should complain(/syswrite/)
- end
-
- it "does not warn if called after IO#write with intervening IO#sysread" do
- @file.syswrite("abcde")
- @file.sysread(5)
- lambda { @file.syswrite("fghij") }.should_not complain
- end
-
- it "writes to the actual file position when called after buffered IO#read" do
- @file.read(5)
- @file.syswrite("abcde")
- File.open(@filename) do |file|
- file.sysread(10).should == "01234abcde"
- end
- end
-end
-
-describe "IO#syswrite" do
- it_behaves_like :io_write, :syswrite
-end
diff --git a/spec/rubyspec/core/io/tell_spec.rb b/spec/rubyspec/core/io/tell_spec.rb
deleted file mode 100644
index d2f523cf10..0000000000
--- a/spec/rubyspec/core/io/tell_spec.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/pos', __FILE__)
-
-describe "IO#tell" do
- it_behaves_like(:io_pos, :tell)
-end
diff --git a/spec/rubyspec/core/io/to_i_spec.rb b/spec/rubyspec/core/io/to_i_spec.rb
deleted file mode 100644
index bbe656cdcc..0000000000
--- a/spec/rubyspec/core/io/to_i_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#to_i" do
- it "returns the numeric file descriptor of the given IO object" do
- $stdout.to_i.should == 1
- end
-
- it "raises IOError on closed stream" do
- lambda { IOSpecs.closed_io.to_i }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/to_io_spec.rb b/spec/rubyspec/core/io/to_io_spec.rb
deleted file mode 100644
index 76ebefb38f..0000000000
--- a/spec/rubyspec/core/io/to_io_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#to_io" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
- end
-
- after :each do
- @io.close unless @io.closed?
- end
-
- it "returns self for open stream" do
- @io.to_io.should equal(@io)
- end
-
- it "returns self for closed stream" do
- io = IOSpecs.closed_io
- io.to_io.should equal(io)
- end
-end
diff --git a/spec/rubyspec/core/io/try_convert_spec.rb b/spec/rubyspec/core/io/try_convert_spec.rb
deleted file mode 100644
index 0326982ff1..0000000000
--- a/spec/rubyspec/core/io/try_convert_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO.try_convert" do
- before :each do
- @name = tmp("io_try_convert.txt")
- @io = new_io @name
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- it "returns the passed IO object" do
- IO.try_convert(@io).should equal(@io)
- end
-
- it "does not call #to_io on an IO instance" do
- @io.should_not_receive(:to_io)
- IO.try_convert(@io)
- end
-
- it "calls #to_io to coerce an object" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return(@io)
- IO.try_convert(obj).should equal(@io)
- end
-
- it "returns nil when the passed object does not respond to #to_io" do
- IO.try_convert(mock("io")).should be_nil
- end
-
- it "return nil when BasicObject is passed" do
- IO.try_convert(BasicObject.new).should be_nil
- end
-
- it "raises a TypeError if the object does not return an IO from #to_io" do
- obj = mock("io")
- obj.should_receive(:to_io).and_return("io")
- lambda { IO.try_convert(obj) }.should raise_error(TypeError)
- end
-
- it "propagates an exception raised by #to_io" do
- obj = mock("io")
- obj.should_receive(:to_io).and_raise(TypeError.new)
- lambda{ IO.try_convert(obj) }.should raise_error(TypeError)
- end
-end
diff --git a/spec/rubyspec/core/io/tty_spec.rb b/spec/rubyspec/core/io/tty_spec.rb
deleted file mode 100644
index 3c1449b030..0000000000
--- a/spec/rubyspec/core/io/tty_spec.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../shared/tty', __FILE__)
-
-describe "IO#tty?" do
- it_behaves_like :io_tty, :tty?
-end
diff --git a/spec/rubyspec/core/io/ungetbyte_spec.rb b/spec/rubyspec/core/io/ungetbyte_spec.rb
deleted file mode 100644
index ee334b469b..0000000000
--- a/spec/rubyspec/core/io/ungetbyte_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe "IO#ungetbyte" do
- before :each do
- @name = tmp("io_ungetbyte")
- touch(@name) { |f| f.write "a" }
- @io = new_io @name, "r"
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @name
- end
-
- it "does nothing when passed nil" do
- @io.ungetbyte(nil).should be_nil
- @io.getbyte.should == 97
- end
-
- it "puts back each byte in a String argument" do
- @io.ungetbyte("cat").should be_nil
- @io.getbyte.should == 99
- @io.getbyte.should == 97
- @io.getbyte.should == 116
- @io.getbyte.should == 97
- end
-
- it "calls #to_str to convert the argument" do
- str = mock("io ungetbyte")
- str.should_receive(:to_str).and_return("dog")
-
- @io.ungetbyte(str).should be_nil
- @io.getbyte.should == 100
- @io.getbyte.should == 111
- @io.getbyte.should == 103
- @io.getbyte.should == 97
- end
-
- it "puts back one byte for an Integer argument" do
- @io.ungetbyte(4095).should be_nil
- @io.getbyte.should == 255
- end
-
- it "raises an IOError if the IO is closed" do
- @io.close
- lambda { @io.ungetbyte(42) }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/ungetc_spec.rb b/spec/rubyspec/core/io/ungetc_spec.rb
deleted file mode 100644
index ce4cc9d346..0000000000
--- a/spec/rubyspec/core/io/ungetc_spec.rb
+++ /dev/null
@@ -1,119 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-
-describe "IO#ungetc" do
- before :each do
- @io = IOSpecs.io_fixture "lines.txt"
-
- @empty = tmp('empty.txt')
- end
-
- after :each do
- @io.close unless @io.closed?
- rm_r @empty
- end
-
- it "pushes back one character onto stream" do
- @io.getc.should == ?V
- @io.ungetc(86)
- @io.getc.should == ?V
-
- @io.ungetc(10)
- @io.getc.should == ?\n
-
- @io.getc.should == ?o
- @io.getc.should == ?i
- # read the rest of line
- @io.readline.should == "ci la ligne une.\n"
- @io.getc.should == ?Q
- @io.ungetc(99)
- @io.getc.should == ?c
- end
-
- it "pushes back one character when invoked at the end of the stream" do
- # read entire content
- @io.read
- @io.ungetc(100)
- @io.getc.should == ?d
- end
-
- it "pushes back one character when invoked at the start of the stream" do
- @io.read(0)
- @io.ungetc(100)
- @io.getc.should == ?d
- end
-
- it "pushes back one character when invoked on empty stream" do
- touch(@empty)
-
- File.open(@empty) { |empty|
- empty.getc().should == nil
- empty.ungetc(10)
- empty.getc.should == ?\n
- }
- end
-
- it "affects EOF state" do
- touch(@empty)
-
- File.open(@empty) { |empty|
- empty.eof?.should == true
- empty.getc.should == nil
- empty.ungetc(100)
- empty.eof?.should == false
- }
- end
-
- it "adjusts the stream position" do
- @io.pos.should == 0
-
- # read one char
- c = @io.getc
- @io.pos.should == 1
- @io.ungetc(c)
- @io.pos.should == 0
-
- # read all
- @io.read
- pos = @io.pos
- @io.ungetc(98)
- @io.pos.should == pos - 1
- end
-
- it "makes subsequent unbuffered operations to raise IOError" do
- @io.getc
- @io.ungetc(100)
- lambda { @io.sysread(1) }.should raise_error(IOError)
- end
-
- it "does not affect the stream and returns nil when passed nil" do
- @io.getc.should == ?V
- @io.ungetc(nil)
- @io.getc.should == ?o
- end
-
- it "puts one or more characters back in the stream" do
- @io.gets
- @io.ungetc("Aquí ").should be_nil
- @io.gets.chomp.should == "Aquí Qui è la linea due."
- end
-
- it "calls #to_str to convert the argument if it is not an Integer" do
- chars = mock("io ungetc")
- chars.should_receive(:to_str).and_return("Aquí ")
-
- @io.ungetc(chars).should be_nil
- @io.gets.chomp.should == "Aquí Voici la ligne une."
- end
-
- it "returns nil when invoked on stream that was not yet read" do
- @io.ungetc(100).should be_nil
- end
-
- it "raises IOError on closed stream" do
- @io.getc
- @io.close
- lambda { @io.ungetc(100) }.should raise_error(IOError)
- end
-end
diff --git a/spec/rubyspec/core/io/write_nonblock_spec.rb b/spec/rubyspec/core/io/write_nonblock_spec.rb
deleted file mode 100644
index a6a263e931..0000000000
--- a/spec/rubyspec/core/io/write_nonblock_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/write', __FILE__)
-
-# See https://bugs.ruby-lang.org/issues/5954#note-5
-platform_is_not :windows do
- describe "IO#write_nonblock on a file" do
- before :each do
- @filename = tmp("IO_syswrite_file") + $$.to_s
- File.open(@filename, "w") do |file|
- file.write_nonblock("012345678901234567890123456789")
- end
- @file = File.open(@filename, "r+")
- @readonly_file = File.open(@filename)
- end
-
- after :each do
- @file.close if @file
- @readonly_file.close if @readonly_file
- rm_r @filename
- end
-
- it "writes all of the string's bytes but does not buffer them" do
- written = @file.write_nonblock("abcde")
- written.should == 5
- File.open(@filename) do |file|
- file.sysread(10).should == "abcde56789"
- file.seek(0)
- @file.fsync
- file.sysread(10).should == "abcde56789"
- end
- end
-
- it "checks if the file is writable if writing zero bytes" do
- lambda { @readonly_file.write_nonblock("") }.should raise_error
- end
- end
-
- describe "IO#write_nonblock" do
- it_behaves_like :io_write, :write_nonblock
- end
-end
-
-describe 'IO#write_nonblock' do
- before do
- @read, @write = IO.pipe
- end
-
- after do
- @read.close
- @write.close
- end
-
- it "raises an exception extending IO::WaitWritable when the write would block" do
- lambda {
- loop { @write.write_nonblock('a' * 10_000) }
- }.should raise_error(IO::WaitWritable) { |e|
- platform_is_not :windows do
- e.should be_kind_of(Errno::EAGAIN)
- end
- platform_is :windows do
- e.should be_kind_of(Errno::EWOULDBLOCK)
- end
- }
- end
-
- ruby_version_is "2.3" do
- context "when exception option is set to false" do
- it "returns :wait_writable when the operation would block" do
- loop { break if @write.write_nonblock("a" * 10_000, exception: false) == :wait_writable }
- 1.should == 1
- end
- end
- end
-
-end
diff --git a/spec/rubyspec/core/io/write_spec.rb b/spec/rubyspec/core/io/write_spec.rb
deleted file mode 100644
index 1011efe8d5..0000000000
--- a/spec/rubyspec/core/io/write_spec.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- encoding: utf-8 -*-
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/classes', __FILE__)
-require File.expand_path('../shared/write', __FILE__)
-require File.expand_path('../shared/binwrite', __FILE__)
-
-describe "IO#write on a file" do
- before :each do
- @filename = tmp("IO_syswrite_file") + $$.to_s
- File.open(@filename, "w") do |file|
- file.write("012345678901234567890123456789")
- end
- @file = File.open(@filename, "r+")
- @readonly_file = File.open(@filename)
- end
-
- after :each do
- @file.close
- @readonly_file.close
- rm_r @filename
- end
-
- it "does not check if the file is writable if writing zero bytes" do
- lambda { @readonly_file.write("") }.should_not raise_error
- end
-
- it "returns a length of 0 when writing a blank string" do
- @file.write('').should == 0
- end
-
- with_feature :encoding do
- before :each do
- @external = Encoding.default_external
- @internal = Encoding.default_internal
-
- Encoding.default_external = Encoding::UTF_8
- end
-
- after :each do
- Encoding.default_external = @external
- Encoding.default_internal = @internal
- end
-
- it "returns the number of bytes written" do
- @file.write("hellø").should == 6
- end
-
- it "uses the encoding from the given option for non-ascii encoding" do
- File.open(@filename, "w", encoding: Encoding::UTF_32LE) do |file|
- file.write("hi").should == 8
- end
- File.binread(@filename).should == "h\u0000\u0000\u0000i\u0000\u0000\u0000"
- end
-
- it "uses an :open_args option" do
- IO.write(@filename, 'hi', open_args: ["w", nil, {encoding: Encoding::UTF_32LE}]).should == 8
- end
-
- it "raises a invalid byte sequence error if invalid bytes are being written" do
- # pack "\xFEhi" to avoid utf-8 conflict
- xFEhi = ([254].pack('C*') + 'hi').force_encoding('utf-8')
- File.open(@filename, "w", encoding: Encoding::US_ASCII) do |file|
- lambda { file.write(xFEhi) }.should raise_error(Encoding::InvalidByteSequenceError)
- end
- end
-
- it "writes binary data if no encoding is given" do
- File.open(@filename, "w") do |file|
- file.write('Hëllö'.encode('ISO-8859-1'))
- end
- ë = ([235].pack('U')).encode('ISO-8859-1')
- ö = ([246].pack('U')).encode('ISO-8859-1')
- res = "H#{ë}ll#{ö}"
- File.binread(@filename).should == res.force_encoding(Encoding::ASCII_8BIT)
- end
- end
-end
-
-describe "IO.write" do
- it_behaves_like :io_binwrite, :write
-
- it "uses an :open_args option" do
- IO.write(@filename, 'hi', open_args: ["w", nil, {encoding: Encoding::UTF_32LE}]).should == 8
- end
-
- it "disregards other options if :open_args is given" do
- IO.write(@filename, 'hi', 2, mode: "r", encoding: Encoding::UTF_32LE, open_args: ["w"]).should == 2
- File.read(@filename).should == "\0\0hi"
- end
-
- it "uses the given encoding and returns the number of bytes written" do
- IO.write(@filename, 'hi', mode: "w", encoding: Encoding::UTF_32LE).should == 8
- end
-
- it "writes binary data if no encoding is given" do
- IO.write(@filename, 'Hëllö'.encode('ISO-8859-1'))
- xEB = [235].pack('C*')
- xF6 = [246].pack('C*')
- File.binread(@filename).should == ("H" + xEB + "ll" + xF6).force_encoding(Encoding::ASCII_8BIT)
- end
-
- platform_is_not :windows do
- describe "on a FIFO" do
- before :each do
- @fifo = tmp("File_open_fifo")
- system "mkfifo #{@fifo}"
- end
-
- after :each do
- rm_r @fifo
- end
-
- it "writes correctly" do
- thr = Thread.new do
- IO.read(@fifo)
- end
- begin
- string = "hi"
- IO.write(@fifo, string).should == string.length
- ensure
- thr.join
- end
- end
- end
- end
-end
-
-describe "IO#write" do
- it_behaves_like :io_write, :write
-end
-
-platform_is :windows do
- describe "IO#write on Windows" do
- before :each do
- @fname = tmp("io_write.txt")
- end
-
- after :each do
- rm_r @fname
- @io.close if @io and !@io.closed?
- end
-
- it "normalizes line endings in text mode" do
- @io = new_io(@fname, "wt")
- @io.write "a\nb\nc"
- @io.close
- File.binread(@fname).should == "a\r\nb\r\nc"
- end
-
- it "does not normalize line endings in binary mode" do
- @io = new_io(@fname, "wb")
- @io.write "a\r\nb\r\nc"
- @io.close
- File.binread(@fname).should == "a\r\nb\r\nc"
- end
- end
-end