/******************************************************************** * COPYRIGHT: * Copyright (c) 1998-2001, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* * File memstrts.c (Tests the API in umemstrm) * * Modification History: * * Date Name Description * 07/19/2000 Madhu Creation ******************************************************************************* */ #include #include "unicode/utypes.h" #include "unicode/ustring.h" #include "cmemory.h" #include "cintltst.h" #include "umemstrm.h" static void TestMemoryStreamAPI(void); static void printUSeqErr(const uint8_t *a, int len); void addMemoryStreamTest(TestNode** root); static void printUSeqErr(const uint8_t *a, int len) { int i=0; fprintf(stderr, "{U+ "); while (i size\n"); x=uprv_mstrm_write(memStream, buffer, sizeof(buffer)/sizeof(buffer[0]) ); if(x == -1){ log_err("uprv_mstrm_write() failed\n"); } if(x != sizeof(buffer)/sizeof(buffer[0])){ log_err("uprv_mstrm_write() wrote %d characters instead of %d\n", x, sizeof(buffer)/sizeof(buffer[0])); } log_verbose("Testing how different functions behave when error is set to true using setError\n"); uprv_mstrm_setError(memStream); gotBuffer=uprv_mstrm_getBuffer(memStream, &x); if(gotBuffer != NULL || x !=0 ){ log_err("uprv_mstrm_getBuffer() should fail when the error is set to true using uprv_mstrm_setError()"); } uprv_mstrm_close(memStream); /* Test the following APIs: uprv_mstrm_write8 uprv_mstrm_write16 uprv_mstrm_write32 uprv_mstrm_writeString uprv_mstrm_writeUString uprv_mstrm_writePadding uprv_mstrm_writeBlock uprv_mstrm_getCurrentBuffer uprv_mstrm_jump uprv_mstrm_skip */ { uint8_t byteValue = 0x12; uint16_t wordValue = 0x2112; uint32_t wydeValue = 0x12211221; uint32_t wydeRead = 0; const char* stringVal = "This is a string"; UChar UCharBuff[256]; const UChar* ucharVal = UCharBuff; const uint8_t *data = NULL; int32_t bufLen = 0; u_unescape("This is an Unicode String", UCharBuff, 256); memStream=uprv_mstrm_openNew(size); if(memStream == NULL){ log_err("uprv_mstrm_openNew() failed\n"); } uprv_mstrm_write8(memStream, byteValue); uprv_mstrm_writePadding(memStream, 3); uprv_mstrm_write16(memStream, wordValue); uprv_mstrm_writePadding(memStream, 2); uprv_mstrm_write32(memStream, wydeValue); uprv_mstrm_writeBlock(memStream, &wydeValue, 4); uprv_mstrm_writeString(memStream, stringVal, -1); uprv_mstrm_writeString(memStream, stringVal, strlen(stringVal)); uprv_mstrm_writeUString(memStream, ucharVal, -1); uprv_mstrm_writeUString(memStream, ucharVal, u_strlen(ucharVal)); /* Now, lets get the values back */ data = uprv_mstrm_getBuffer(memStream, &bufLen); if(data == NULL || bufLen == 0) { log_err("get Buffer failed!\n"); } else { if(byteValue != *(uint8_t *)data) { log_err("Failed getting byte value\n"); } data += 4; /* skip byte and 3 padding */ if(wordValue != *(uint16_t *)data) { log_err("Failed getting word value\n"); } data += 4; /* skip word and 2 padding */ if(wydeValue != *(uint32_t *)data) { log_err("Failed getting word value\n"); } data += 4; /* skip wyde */ if(wydeValue != *(uint32_t *)data) { log_err("Failed getting word value\n"); } data += 4; /* skip wyde */ if(strncmp(stringVal, (char *)data, strlen(stringVal)) != 0) { log_err("String was not written correctly\n"); } data += strlen(stringVal); if(strncmp(stringVal, (char *)data, strlen(stringVal)) != 0) { log_err("String was not written correctly\n"); } data += strlen(stringVal); if(u_strncmp(ucharVal, (UChar *)data, u_strlen(ucharVal)) != 0) { log_err("UString was not written correctly\n"); } data += u_strlen(ucharVal)*2; if(u_strncmp(ucharVal, (UChar *)data, u_strlen(ucharVal)) != 0) { log_err("UString was not written correctly\n"); } data += u_strlen(ucharVal)*2; uprv_mstrm_skip(memStream, 8); /* skip to first wyde */ bufLen = uprv_mstrm_read(memStream, &wydeRead, 4); if(bufLen != 4 || wydeValue != wydeRead) { log_err("Reading after skip failed\n"); } /* this should get us to the second wyde */ data = uprv_mstrm_getCurrentBuffer(memStream, &bufLen); if(wydeValue != *(uint32_t *)data) { log_err("Failed getting wyde value after getCurrentBuffer\n"); } uprv_mstrm_skip(memStream, -8); data = uprv_mstrm_getCurrentBuffer(memStream, &bufLen); uprv_mstrm_jump(memStream, data+4); data = uprv_mstrm_getCurrentBuffer(memStream, &bufLen); if(wydeValue != *(uint32_t *)data) { log_err("Failed getting wyde value after getCurrentBuffer\n"); } } uprv_mstrm_close(memStream); } }