/* Copyright (C) 2000 Stefan Westerfeld stefan@space.twc.de This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "buffer.h" #include "test.h" using namespace Arts; using namespace std; struct TestBuffer : public TestCase { TESTCASE(TestBuffer); Arts::Buffer *buffer, *buffer1234; void setUp() { buffer = new Buffer(); buffer1234 = new Buffer(); buffer1234->writeByte(1); buffer1234->writeByte(2); buffer1234->writeByte(3); buffer1234->writeByte(4); } void tearDown() { delete buffer; buffer = 0; delete buffer1234; buffer1234 = 0; } TEST(writeByte) { buffer->writeByte(0x42); testEquals("42",buffer->toString("")); testEquals(0x42,buffer->readByte()); } TEST(writeLong) { buffer->writeLong(10001025); testEquals("00989a81",buffer->toString("")); testEquals(10001025, buffer->readLong()); } TEST(writeString) { buffer->writeString("hello"); /* __size__ h e l l o \0 */ testEquals("00000006""68656c6c6f00",buffer->toString("")); string s; buffer->readString(s); testEquals("hello", s); } TEST(writeBool) { buffer->writeBool(true); buffer->writeBool(false); testEquals("0100",buffer->toString("")); testEquals(true, buffer->readBool()); testEquals(false, buffer->readBool()); } TEST(writeFloat) { float f = 2.15; buffer->writeFloat(f); testEquals("4009999a",buffer->toString("")); testEquals(f,buffer->readFloat()); } TEST(write) { vector b; b.push_back(1); b.push_back(2); buffer->write(b); testEquals("0102",buffer->toString("")); char c[2] = { 3,4 }; buffer->write(c,2); testEquals("01020304",buffer->toString("")); } TEST(read) { vector bytes; buffer1234->read(bytes,4); testEquals(4, bytes.size()); testEquals(1, bytes[0]); testEquals(2, bytes[1]); testEquals(3, bytes[2]); testEquals(4, bytes[3]); // read shall overwrite the vector it gets as parameter buffer1234->rewind(); buffer1234->read(bytes,3); testEquals(3, bytes.size()); } TEST(errorHandling) { testEquals(false, buffer1234->readError()); testEquals(4, buffer1234->size()); testEquals(4, buffer1234->remaining()); buffer1234->readLong(); testEquals(4, buffer1234->size()); testEquals(0, buffer1234->remaining()); testEquals(false, buffer1234->readError()); buffer1234->readByte(); testEquals(4, buffer1234->size()); testEquals(0, buffer1234->remaining()); testEquals(true, buffer1234->readError()); testEquals(false, buffer->readError()); buffer->writeLong(0xdddddddd); buffer->writeLong(0x12345678); // check that it terminates properly upon reading broken data string s; testEquals(false,buffer->readError()); buffer->readString(s); testEquals(true, buffer->readError()); } }; TESTMAIN(TestBuffer);