1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
require "spec"
require "compress/deflate"
private def new_sample_io
io = IO::Memory.new
"cbc9cc4b350402ae1c20c30808b800".scan(/../).each do |match|
io.write_byte match[0].to_u8(16)
end
io.rewind
end
module Compress::Deflate
describe Reader do
it "should read byte by byte (#4192)" do
io = new_sample_io
reader = Reader.new(io)
str = String::Builder.build do |builder|
while b = reader.read_byte
builder.write_byte b
end
end
str.should eq("line1111\nline2222\n")
end
it "should rewind" do
io = new_sample_io
reader = Reader.new(io)
reader.gets.should eq("line1111")
reader.rewind
reader.gets_to_end.should eq("line1111\nline2222\n")
end
describe ".open" do
it "yields itself to block" do
# Hello Crystal!
message = Bytes[243, 72, 205, 201, 201, 87, 112, 46, 170, 44, 46, 73,
204, 81, 4, 0]
io = IO::Memory.new(message)
Reader.open(io) do |reader|
reader.gets_to_end.should eq("Hello Crystal!")
end
end
end
end
describe Writer do
it "should be able to write" do
message = "this is a test string !!!!\n"
io = IO::Memory.new
writer = Writer.new(io)
writer.print message
writer.close
io.rewind
reader = Reader.new(io)
reader.gets_to_end.should eq(message)
end
it "can be closed without sync" do
io = IO::Memory.new
writer = Writer.new(io)
writer.close
writer.closed?.should be_true
io.closed?.should be_false
expect_raises IO::Error, "Closed stream" do
writer.print "a"
end
end
it "can be closed with sync (1)" do
io = IO::Memory.new
writer = Writer.new(io, sync_close: true)
writer.close
writer.closed?.should be_true
io.closed?.should be_true
end
it "can be closed with sync (2)" do
io = IO::Memory.new
writer = Writer.new(io)
writer.sync_close = true
writer.close
writer.closed?.should be_true
io.closed?.should be_true
end
describe ".open" do
it "yields itself to block" do
io = IO::Memory.new
Writer.open(io) do |writer|
writer.write "Hello Crystal!".to_slice
end
io.rewind
io.to_slice.should eq(Bytes[243, 72, 205, 201, 201, 87, 112, 46, 170, 44, 46, 73,
204, 81, 4, 0])
end
end
end
end
|