[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [dferry] tests/serialization: tst_arguments: Extract the code for "vanilla" roundtrips.
From:       Andreas Hartmetz <ahartmetz () gmail ! com>
Date:       2016-10-12 0:57:08
Message-ID: E1bu7r2-0007PZ-3G () code ! kde ! org
[Download RAW message or body]

Git commit 56053e9d77adb6daa2e52be5ad8ad4b577fc9982 by Andreas Hartmetz.
Committed on 12/10/2016 at 00:19.
Pushed by ahartmetz into branch 'master'.

tst_arguments: Extract the code for "vanilla" roundtrips.

Makes it reusable for different kinds of roundtrips.

M  +113  -96   tests/serialization/tst_arguments.cpp

http://commits.kde.org/dferry/56053e9d77adb6daa2e52be5ad8ad4b577fc9982

diff --git a/tests/serialization/tst_arguments.cpp \
b/tests/serialization/tst_arguments.cpp index 5c4a3af..cd22da4 100644
--- a/tests/serialization/tst_arguments.cpp
+++ b/tests/serialization/tst_arguments.cpp
@@ -282,6 +282,118 @@ static void testReadWithSkip(const Arguments &arg, bool \
debugPrint)  }
 }
 
+// When using this to iterate over the reader, it will make an exact copy using the \
Writer. +// You need to do something only in states where something special should \
happen. +static void defaultReadToWrite(Arguments::Reader *reader, Arguments::Writer \
*writer, uint32 *emptyNesting) +{
+    switch(reader->state()) {
+    case Arguments::BeginStruct:
+        reader->beginStruct();
+        writer->beginStruct();
+        break;
+    case Arguments::EndStruct:
+        reader->endStruct();
+        writer->endStruct();
+        break;
+    case Arguments::BeginVariant:
+        reader->beginVariant();
+        writer->beginVariant();
+        break;
+    case Arguments::EndVariant:
+        reader->endVariant();
+        writer->endVariant();
+        break;
+    case Arguments::BeginArray: {
+        const bool hasData = \
reader->beginArray(Arguments::Reader::ReadTypesOnlyIfEmpty); +        \
writer->beginArray(hasData ? Arguments::Writer::NonEmptyArray +                       \
: Arguments::Writer::WriteTypesOfEmptyArray); +        *emptyNesting += hasData ? 0 : \
1; +        break; }
+    case Arguments::EndArray:
+        reader->endArray();
+        writer->endArray();
+        *emptyNesting = std::max(*emptyNesting - 1, 0u);
+        break;
+    case Arguments::BeginDict: {
+        const bool hasData = \
reader->beginDict(Arguments::Reader::ReadTypesOnlyIfEmpty); +        \
writer->beginDict(hasData ? Arguments::Writer::NonEmptyArray +                        \
: Arguments::Writer::WriteTypesOfEmptyArray); +        *emptyNesting += hasData ? 0 : \
1; +        break; }
+    case Arguments::EndDict:
+        reader->endDict();
+        writer->endDict();
+        *emptyNesting = std::max(*emptyNesting - 1, 0u);
+        break;
+    case Arguments::Byte:
+        writer->writeByte(reader->readByte());
+        break;
+    case Arguments::Boolean:
+        writer->writeBoolean(reader->readBoolean());
+        break;
+    case Arguments::Int16:
+        writer->writeInt16(reader->readInt16());
+        break;
+    case Arguments::Uint16:
+        writer->writeUint16(reader->readUint16());
+        break;
+    case Arguments::Int32:
+        writer->writeInt32(reader->readInt32());
+        break;
+    case Arguments::Uint32:
+        writer->writeUint32(reader->readUint32());
+        break;
+    case Arguments::Int64:
+        writer->writeInt64(reader->readInt64());
+        break;
+    case Arguments::Uint64:
+        writer->writeUint64(reader->readUint64());
+        break;
+    case Arguments::Double:
+        writer->writeDouble(reader->readDouble());
+        break;
+    case Arguments::String: {
+        cstring s = reader->readString();
+        if (*emptyNesting) {
+            s = cstring("");
+        } else {
+            TEST(Arguments::isStringValid(s));
+        }
+        writer->writeString(s);
+        break; }
+    case Arguments::ObjectPath: {
+        cstring objectPath = reader->readObjectPath();
+        if (*emptyNesting) {
+            objectPath = cstring("/");
+        } else {
+            TEST(Arguments::isObjectPathValid(objectPath));
+        }
+        writer->writeObjectPath(objectPath);
+        break; }
+    case Arguments::Signature: {
+        cstring signature = reader->readSignature();
+        if (*emptyNesting) {
+            signature = cstring("");
+        } else {
+            TEST(Arguments::isSignatureValid(signature));
+        }
+        writer->writeSignature(signature);
+        break; }
+    case Arguments::UnixFd:
+        writer->writeUnixFd(reader->readUnixFd());
+        break;
+    // special cases follow
+    case Arguments::Finished:
+        break; // You *probably* want to handle that one in the caller, but you \
don't have to +    case Arguments::NeedMoreData:
+        TEST(false); // No way to handle that one here
+        break;
+    default:
+        TEST(false);
+        break;
+    }
+}
+
 static void doRoundtripForReal(const Arguments &original, uint32 dataIncrement, bool \
debugPrint)  {
     Arguments::Reader reader(original);
@@ -321,103 +433,8 @@ static void doRoundtripForReal(const Arguments &original, \
uint32 dataIncrement,  }
             reader.replaceData(shortData);
             break; }
-        case Arguments::BeginStruct:
-            reader.beginStruct();
-            writer.beginStruct();
-            break;
-        case Arguments::EndStruct:
-            reader.endStruct();
-            writer.endStruct();
-            break;
-        case Arguments::BeginVariant:
-            reader.beginVariant();
-            writer.beginVariant();
-            break;
-        case Arguments::EndVariant:
-            reader.endVariant();
-            writer.endVariant();
-            break;
-        case Arguments::BeginArray: {
-            const bool hasData = \
                reader.beginArray(Arguments::Reader::ReadTypesOnlyIfEmpty);
-            writer.beginArray(hasData ? Arguments::Writer::NonEmptyArray
-                                      : Arguments::Writer::WriteTypesOfEmptyArray);
-            emptyNesting += hasData ? 0 : 1;
-            break; }
-        case Arguments::EndArray:
-            reader.endArray();
-            writer.endArray();
-            emptyNesting = std::max(emptyNesting - 1, 0u);
-            break;
-        case Arguments::BeginDict: {
-            const bool hasData = \
                reader.beginDict(Arguments::Reader::ReadTypesOnlyIfEmpty);
-            writer.beginDict(hasData ? Arguments::Writer::NonEmptyArray
-                                     : Arguments::Writer::WriteTypesOfEmptyArray);
-            emptyNesting += hasData ? 0 : 1;
-            break; }
-        case Arguments::EndDict:
-            reader.endDict();
-            writer.endDict();
-            emptyNesting = std::max(emptyNesting - 1, 0u);
-            break;
-        case Arguments::Byte:
-            writer.writeByte(reader.readByte());
-            break;
-        case Arguments::Boolean:
-            writer.writeBoolean(reader.readBoolean());
-            break;
-        case Arguments::Int16:
-            writer.writeInt16(reader.readInt16());
-            break;
-        case Arguments::Uint16:
-            writer.writeUint16(reader.readUint16());
-            break;
-        case Arguments::Int32:
-            writer.writeInt32(reader.readInt32());
-            break;
-        case Arguments::Uint32:
-            writer.writeUint32(reader.readUint32());
-            break;
-        case Arguments::Int64:
-            writer.writeInt64(reader.readInt64());
-            break;
-        case Arguments::Uint64:
-            writer.writeUint64(reader.readUint64());
-            break;
-        case Arguments::Double:
-            writer.writeDouble(reader.readDouble());
-            break;
-        case Arguments::String: {
-            cstring s = reader.readString();
-            if (emptyNesting) {
-                s = cstring("");
-            } else {
-                TEST(Arguments::isStringValid(s));
-            }
-            writer.writeString(s);
-            break; }
-        case Arguments::ObjectPath: {
-            cstring objectPath = reader.readObjectPath();
-            if (emptyNesting) {
-                objectPath = cstring("/");
-            } else {
-                TEST(Arguments::isObjectPathValid(objectPath));
-            }
-            writer.writeObjectPath(objectPath);
-            break; }
-        case Arguments::Signature: {
-            cstring signature = reader.readSignature();
-            if (emptyNesting) {
-                signature = cstring("");
-            } else {
-                TEST(Arguments::isSignatureValid(signature));
-            }
-            writer.writeSignature(signature);
-            break; }
-        case Arguments::UnixFd:
-            writer.writeUnixFd(reader.readUnixFd());
-            break;
         default:
-            TEST(false);
+            defaultReadToWrite(&reader, &writer, &emptyNesting);
             break;
         }
     }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic