public void File_AppendBytes1()
{
string s;
string crlf = "\r\n";
var stream = new TestStream(false, B(
"ab\r\r\n" +
"e" + (s = "fgh" + crlf + "ijkl" + crlf + "mnop" + crlf + crlf + crlf + crlf + "qrst") +
crlf + "!"
));
int s_crlf_count = 6;
var io = new RubyBufferedStream(stream);
Assert(io.PeekByte() == (byte)'a');
var buffer = MutableString.CreateBinary(B("foo:"));
Assert(io.AppendBytes(buffer, 4, false) == 4);
Assert(buffer.ToString() == "foo:ab\r\n");
buffer = MutableString.CreateBinary();
Assert(io.AppendBytes(buffer, 1, false) == 1);
Assert(buffer.ToString() == "e");
buffer = MutableString.CreateMutable("x:", RubyEncoding.Binary);
int c = s.Length - s_crlf_count - 2;
Assert(io.AppendBytes(buffer, c, false) == c);
Assert(buffer.ToString() == "x:" + s.Replace(crlf, "\n").Substring(0, c));
buffer = MutableString.CreateBinary();
Assert(io.AppendBytes(buffer, 10, false) == 4);
Assert(buffer.ToString() == "st\n!");
buffer = MutableString.CreateBinary();
Assert(io.AppendBytes(buffer, 10, false) == 0);
Assert(buffer.ToString() == "");
stream = new TestStream(false, B(s = "abcd" + crlf + "xyz" + crlf + "qqq;"));
io = new RubyBufferedStream(stream);
buffer = MutableString.CreateBinary();
Assert(io.AppendBytes(buffer, Int32.MaxValue, true) == s.Length);
io.BaseStream.Seek(0, SeekOrigin.Begin);
Assert(io.AppendBytes(buffer, Int32.MaxValue, false) == s.Length - 2);
Assert(buffer.ToString() == s + s.Replace(crlf, "\n"));
}