1
0
Fork 0

added unit tests

This commit is contained in:
Jan Steemann 2013-07-09 12:32:47 +02:00
parent 9290838dd2
commit 4c952ad927
4 changed files with 148 additions and 15 deletions

View File

@ -29,6 +29,7 @@
#include "Basics/StringBuffer.h"
#include "BasicsC/files.h"
#include "BasicsC/json.h"
using namespace triagens::basics;
@ -183,6 +184,50 @@ BOOST_AUTO_TEST_CASE (tst_absolute_paths) {
TRI_Free(TRI_UNKNOWN_MEM_ZONE, path);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief test slurp file
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE (tst_slurp) {
size_t length;
char* path;
char* filename;
char* result;
path = TRI_GetTempPath();
filename = TRI_Concatenate2File(path, "files-unittest.tmp");
// remove file if it exists
TRI_UnlinkFile(filename);
// non-existing file
result = TRI_SlurpFile(TRI_CORE_MEM_ZONE, filename, &length);
BOOST_CHECK_EQUAL((char*) 0, result);
TRI_json_t* json = TRI_JsonString(TRI_CORE_MEM_ZONE, "{ \"this\" : true, \"is\" : [ \"a\", \"test\" ] }");
bool ok = TRI_SaveJson(filename, json, false);
BOOST_CHECK_EQUAL(true, ok);
// file exists now
result = TRI_SlurpFile(TRI_CORE_MEM_ZONE, filename, &length);
BOOST_CHECK_EQUAL(0, strcmp("{\"this\":true,\"is\":[\"a\",\"test\"]}\n", result));
BOOST_CHECK_EQUAL(length, strlen("{\"this\":true,\"is\":[\"a\",\"test\"]}\n"));
TRI_Free(TRI_CORE_MEM_ZONE, result);
// test without length
length = 42;
result = TRI_SlurpFile(TRI_CORE_MEM_ZONE, filename, 0);
BOOST_CHECK_EQUAL(0, strcmp("{\"this\":true,\"is\":[\"a\",\"test\"]}\n", result));
BOOST_CHECK_EQUAL(42, length);
TRI_Free(TRI_CORE_MEM_ZONE, result);
TRI_FreeJson(TRI_CORE_MEM_ZONE, json);
TRI_Free(TRI_CORE_MEM_ZONE, filename);
TRI_Free(TRI_CORE_MEM_ZONE, path);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief generate tests
////////////////////////////////////////////////////////////////////////////////

View File

@ -468,6 +468,72 @@ BOOST_AUTO_TEST_CASE (tst_length) {
TRI_DestroyStringBuffer(&sb);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief tst_last_char
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE (tst_last_char) {
TRI_string_buffer_t sb;
TRI_InitStringBuffer(&sb, TRI_CORE_MEM_ZONE);
BOOST_CHECK_EQUAL('\0', TRI_LastCharStringBuffer(&sb));
TRI_AppendStringStringBuffer(&sb, "f");
BOOST_CHECK_EQUAL('f', TRI_LastCharStringBuffer(&sb));
TRI_AppendCharStringBuffer(&sb, '1');
BOOST_CHECK_EQUAL('1', TRI_LastCharStringBuffer(&sb));
TRI_AppendCharStringBuffer(&sb, '\n');
BOOST_CHECK_EQUAL('\n', TRI_LastCharStringBuffer(&sb));
TRI_ClearStringBuffer(&sb);
BOOST_CHECK_EQUAL('\0', TRI_LastCharStringBuffer(&sb));
for (size_t i = 0; i < 100; ++i) {
TRI_AppendStringStringBuffer(&sb, "the quick brown fox jumped over the lazy dog");
BOOST_CHECK_EQUAL('g', TRI_LastCharStringBuffer(&sb));
}
TRI_AppendCharStringBuffer(&sb, '.');
BOOST_CHECK_EQUAL('.', TRI_LastCharStringBuffer(&sb));
TRI_AnnihilateStringBuffer(&sb);
BOOST_CHECK_EQUAL('\0', TRI_LastCharStringBuffer(&sb));
TRI_DestroyStringBuffer(&sb);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief tst_reserve
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE (tst_reserve) {
TRI_string_buffer_t sb;
TRI_InitStringBuffer(&sb, TRI_CORE_MEM_ZONE);
BOOST_CHECK_EQUAL(0, TRI_LengthStringBuffer(&sb));
TRI_ReserveStringBuffer(&sb, 0);
BOOST_CHECK_EQUAL(0, TRI_LengthStringBuffer(&sb));
TRI_ReserveStringBuffer(&sb, 1000);
BOOST_CHECK_EQUAL(0, TRI_LengthStringBuffer(&sb));
TRI_AppendStringStringBuffer(&sb, "f");
BOOST_CHECK_EQUAL(1, TRI_LengthStringBuffer(&sb));
for (size_t i = 0; i < 5000; ++i) {
TRI_AppendCharStringBuffer(&sb, '.');
}
BOOST_CHECK_EQUAL(5001, TRI_LengthStringBuffer(&sb));
TRI_ReserveStringBuffer(&sb, 1000);
BOOST_CHECK_EQUAL(5001, TRI_LengthStringBuffer(&sb));
TRI_DestroyStringBuffer(&sb);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief tst_timing
////////////////////////////////////////////////////////////////////////////////

View File

@ -52,6 +52,25 @@
#include <tchar.h>
#endif
// -----------------------------------------------------------------------------
// --SECTION-- private defines
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup Files
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief read buffer size (used for bulk file reading)
////////////////////////////////////////////////////////////////////////////////
#define READBUFFER_SIZE 8192
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
// --SECTION-- private variables
// -----------------------------------------------------------------------------
@ -845,11 +864,11 @@ bool TRI_fsync (int fd) {
/// @brief slurps in a file
////////////////////////////////////////////////////////////////////////////////
char* TRI_SlurpFile (TRI_memory_zone_t* zone, char const* filename, size_t* length) {
char* TRI_SlurpFile (TRI_memory_zone_t* zone,
char const* filename,
size_t* length) {
TRI_string_buffer_t result;
char buffer[10240];
int fd;
int res;
fd = TRI_OPEN(filename, O_RDONLY);
@ -861,9 +880,20 @@ char* TRI_SlurpFile (TRI_memory_zone_t* zone, char const* filename, size_t* leng
TRI_InitStringBuffer(&result, zone);
while (true) {
int res;
ssize_t n;
n = TRI_READ(fd, buffer, sizeof(buffer));
res = TRI_ReserveStringBuffer(&result, READBUFFER_SIZE);
if (res != TRI_ERROR_NO_ERROR) {
TRI_CLOSE(fd);
TRI_AnnihilateStringBuffer(&result);
TRI_set_errno(TRI_ERROR_SYS_ERROR);
return NULL;
}
n = TRI_READ(fd, (void*) TRI_EndStringBuffer(&result), READBUFFER_SIZE);
if (n == 0) {
break;
@ -877,16 +907,8 @@ char* TRI_SlurpFile (TRI_memory_zone_t* zone, char const* filename, size_t* leng
TRI_set_errno(TRI_ERROR_SYS_ERROR);
return NULL;
}
res = TRI_AppendString2StringBuffer(&result, buffer, n);
if (res != TRI_ERROR_NO_ERROR) {
TRI_CLOSE(fd);
TRI_AnnihilateStringBuffer(&result);
return NULL;
}
TRI_IncreaseLengthStringBuffer(&result, (size_t) n);
}
if (length != NULL) {

View File

@ -206,10 +206,10 @@ void TRI_DestroyStringBuffer (TRI_string_buffer_t * self) {
void TRI_AnnihilateStringBuffer (TRI_string_buffer_t * self) {
if (self->_buffer != NULL) {
// somewhat paranoid? don't ask me
memset(self->_buffer, 0, self->_len);
TRI_Free(self->_memoryZone, self->_buffer);
self->_buffer = NULL;
}
}