void test_io_read_into_buffer() { int fds[2]; TS_ASSERT(!pipe(fds)); TestChannelObject chan(state); event::Read* read = new event::Read(state, &chan, fds[0]); IOBuffer *buf = IOBuffer::create(state, 12); read->into_buffer(buf, 1); TS_ASSERT_EQUALS(buf->used(), Fixnum::from(0)); TS_ASSERT_EQUALS(buf->start(), Fixnum::from(0)); state->events->start(read); TS_ASSERT(!chan.called); state->events->poll(); TS_ASSERT(!chan.called); /* Write some garbage into the buffer to be sure it's overridden */ char* str = buf->byte_address(); str[0] = str[1] = 47; TS_ASSERT_EQUALS(write(fds[1], "!", 1),1); state->events->poll(); TS_ASSERT(chan.called); TS_ASSERT_EQUALS(chan.value, Fixnum::from(1)); TS_ASSERT_EQUALS(buf->used(), Fixnum::from(1)); TS_ASSERT_EQUALS(buf->start(), Fixnum::from(0)); TS_ASSERT_EQUALS(str[0], '!'); TS_ASSERT_EQUALS(str[1], 0); close(fds[0]); close(fds[1]); }