/* Copyright (c) 2014 Alex Diener This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Alex Diener alex@ludobloom.com */ #ifndef __TestSerializationContext_H__ #define __TestSerializationContext_H__ #ifdef __cplusplus extern "C" { #endif #include "serialization/SerializationContext.h" #include #include typedef struct TestSerializationContext TestSerializationContext; #define TestSerializationContext_superclass SerializationContext struct TestSerializationContext_expectedCall { void * functionPtr; unsigned int lineNumber; char * key; union { int8_t int8Value; uint8_t uint8Value; int16_t int16Value; uint16_t uint16Value; int32_t int32Value; uint32_t uint32Value; int64_t int64Value; uint64_t uint64Value; float floatValue; double doubleValue; fixed16_16 fixed16_16Value; const char * stringValue; const void * blobValue; bool boolValue; int intValue; } value; union TestSerializationContext_additionalArg { const char * stringValue; int intValue; size_t length; unsigned int count; Serialization_enumKeyValue * values; Serialization_bitName * bitNames; } * additionalArgs; }; #define TestSerializationContext_ivars \ SerializationContext_ivars \ \ jmp_buf * sequenceBreakJmpEnv; \ char error[512]; \ unsigned int callIndexToFail; \ int failStatus; \ struct TestSerializationContext_expectedCall * expectedCalls; \ unsigned int numExpectedCalls; \ unsigned int nextExpectedCallIndex; #define TestSerializationContext_vtable(self_type) \ SerializationContext_vtable(self_type) \ \ void (* expectCall)(self_type * self, unsigned int lineNumber, void * functionPtr, ...); \ void (* failNthCall)(self_type * self, unsigned int callIndex, int status); \ void (* finish)(self_type * self); \ void (* rewind)(self_type * self); stemobject_declare(TestSerializationContext) TestSerializationContext * TestSerializationContext_create(jmp_buf * sequenceBreakJmpEnv); bool TestSerializationContext_init(TestSerializationContext * self, jmp_buf * sequenceBreakJmpEnv); void TestSerializationContext_dispose(TestSerializationContext * self); void TestSerializationContext_beginStructure(TestSerializationContext * self, const char * key); void TestSerializationContext_beginDictionary(TestSerializationContext * self, const char * key); void TestSerializationContext_beginArray(TestSerializationContext * self, const char * key); void TestSerializationContext_endStructure(TestSerializationContext * self); void TestSerializationContext_endDictionary(TestSerializationContext * self); void TestSerializationContext_endArray(TestSerializationContext * self); void TestSerializationContext_writeInt8(TestSerializationContext * self, const char * key, int8_t value); void TestSerializationContext_writeUInt8(TestSerializationContext * self, const char * key, uint8_t value); void TestSerializationContext_writeInt16(TestSerializationContext * self, const char * key, int16_t value); void TestSerializationContext_writeUInt16(TestSerializationContext * self, const char * key, uint16_t value); void TestSerializationContext_writeInt32(TestSerializationContext * self, const char * key, int32_t value); void TestSerializationContext_writeUInt32(TestSerializationContext * self, const char * key, uint32_t value); void TestSerializationContext_writeInt64(TestSerializationContext * self, const char * key, int64_t value); void TestSerializationContext_writeUInt64(TestSerializationContext * self, const char * key, uint64_t value); void TestSerializationContext_writeFloat(TestSerializationContext * self, const char * key, float value); void TestSerializationContext_writeDouble(TestSerializationContext * self, const char * key, double value); void TestSerializationContext_writeFixed16_16(TestSerializationContext * self, const char * key, fixed16_16 value); void TestSerializationContext_writeBoolean(TestSerializationContext * self, const char * key, bool value); void TestSerializationContext_writeEnumeration(TestSerializationContext * self, const char * key, int value, unsigned int valueCount, Serialization_enumKeyValue * values); void TestSerializationContext_writeEnumeration8(TestSerializationContext * self, const char * key, int8_t value, unsigned int valueCount, Serialization_enumKeyValue * values); void TestSerializationContext_writeEnumeration16(TestSerializationContext * self, const char * key, int16_t value, unsigned int valueCount, Serialization_enumKeyValue * values); void TestSerializationContext_writeEnumeration32(TestSerializationContext * self, const char * key, int32_t value, unsigned int valueCount, Serialization_enumKeyValue * values); void TestSerializationContext_writeBitfield8(TestSerializationContext * self, const char * key, uint8_t value, unsigned int bitNameCount, Serialization_bitName * bitNames); void TestSerializationContext_writeBitfield16(TestSerializationContext * self, const char * key, uint16_t value, unsigned int bitNameCount, Serialization_bitName * bitNames); void TestSerializationContext_writeBitfield32(TestSerializationContext * self, const char * key, uint32_t value, unsigned int bitNameCount, Serialization_bitName * bitNames); void TestSerializationContext_writeBitfield64(TestSerializationContext * self, const char * key, uint64_t value, unsigned int bitNameCount, Serialization_bitName * bitNames); void TestSerializationContext_writeString(TestSerializationContext * self, const char * key, const char * value); void TestSerializationContext_writeStringNullable(TestSerializationContext * self, const char * key, const char * value); void TestSerializationContext_writeBlob(TestSerializationContext * self, const char * key, const void * value, size_t length); // selfPtr, functionPtr, key (if applicable), value (if applicable), additional args (if applicable) void TestSerializationContext_expectCall(TestSerializationContext * self, unsigned int lineNumber, void * functionPtr, ...); void TestSerializationContext_failNthCall(TestSerializationContext * self, unsigned int callIndex, int status); void TestSerializationContext_finish(TestSerializationContext * self); void TestSerializationContext_rewind(TestSerializationContext * self); #ifdef __cplusplus } #endif #endif