Updated RubySpec source to b897f30c.
[rbx.git] / spec / frozen / 1.8 / core / argf / seek_spec.rb
blob3e7066a0c03d4934d1e08423bacb01fb9b930162
1 require File.dirname(__FILE__) + '/../../spec_helper'
2 require File.dirname(__FILE__) + '/fixtures/classes'
4 describe "ARGF.seek" do
5   before :each do
6     ARGV.clear
7     @file1 = ARGFSpecs.fixture_file('file1.txt')
8     @file2 = ARGFSpecs.fixture_file('file2.txt')
9     @stdin = ARGFSpecs.fixture_file('stdin.txt')
10     @contents_file1 = File.read(@file1)
11     @contents_file2 = File.read(@file2)
12     @contents_stdin = File.read(@stdin)
13   end
15   after :each do
16     # Close any open file (catch exception if already closed)
17     ARGF.close rescue nil
18     ARGFSpecs.fixture_file_delete(@file1,@file2,@stdin)
19   end
21   it "sets the correct absolute position relative to beginning of file" do
22     ARGFSpecs.file_args('file1.txt', 'file2.txt')
23     linef1_1, linef1_2 =  @contents_file1.split($/).collect { |l| l+$/ }
24     linef2_1, linef2_2 =  @contents_file2.split($/).collect { |l| l+$/ }
26     res =[]
27     ARGF.seek(2); res << ARGF.gets
28     ARGF.seek(linef1_1.size); res << ARGF.gets
29     ARGF.seek(0, IO::SEEK_END); res << ARGF.gets
31     res.should == [linef1_1[2..-1], linef1_2, linef2_1]
32   end
33   
34   it "sets the correct position relative to current position in file" do
35     ARGFSpecs.file_args('file1.txt', 'file2.txt')
36     linef1_1, linef1_2 =  @contents_file1.split($/).collect { |l| l+$/ }
37     linef2_1, linef2_2 =  @contents_file2.split($/).collect { |l| l+$/ }
39     res =[]
40     ARGF.seek(0, IO::SEEK_CUR); res << ARGF.gets
41     ARGF.seek(-linef1_1.size+2, IO::SEEK_CUR); res << ARGF.gets
42     ARGF.seek(1, IO::SEEK_CUR); res << ARGF.gets
43     ARGF.seek(3, IO::SEEK_CUR); res << ARGF.gets # seek doesn't go beyond file limit
44     ARGF.seek(linef1_2.size, IO::SEEK_CUR); res << ARGF.gets 
46     res.should == [linef1_1, linef1_1[2..-1], linef1_2[1..-1], linef2_1, nil]
47   end
48   
49   it "sets the correct absolute position relative to end of file" do
50     ARGFSpecs.file_args('file1.txt', 'file2.txt')
51     linef1_1, linef1_2 =  @contents_file1.split($/).collect { |l| l+$/ }
52     linef2_1, linef2_2 =  @contents_file2.split($/).collect { |l| l+$/ }
54     res =[]
55     ARGF.seek(-linef1_1.size-linef1_2.size, IO::SEEK_END); res << ARGF.gets
56     ARGF.seek(-6, IO::SEEK_END); res << ARGF.gets
57     ARGF.seek(-4, IO::SEEK_END); res << ARGF.gets
58     res << ARGF.gets
59     ARGF.seek(-6, IO::SEEK_END); res << ARGF.gets
61     res.should == [linef1_1, linef1_2[-6..-1], linef1_2[4..-1], linef2_1, linef2_2[-6..-1]]
62   end
63   
64   it "takes at least one argument (offset)" do
65     lambda { ARGF.seek() }.should raise_error(ArgumentError)
66   end
67   
68 end