You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arts/tests/testbuffer.cc

140 lines
3.5 KiB

/*
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<mcopbyte> 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<mcopbyte> 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);