mirror of https://gitee.com/bigwinds/arangodb
added unit tests
This commit is contained in:
parent
9290838dd2
commit
4c952ad927
|
@ -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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue