~pete-woods/libqtdbusmock/new-templates-in-common-package

« back to all changes in this revision

Viewing changes to src/libqtdbusmock/MethodCall.cpp

  • Committer: Tarmac
  • Author(s): Pete Woods
  • Date: 2013-09-17 16:27:39 UTC
  • mfrom: (25.1.1 trunk)
  • Revision ID: tarmac-20130917162739-2v9d9gr0ld191vma
Correctly handle variant maps inside method argument lists.

Approved by PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
71
71
        return argument;
72
72
}
73
73
 
 
74
static void transform(QVariantMap &map);
 
75
 
 
76
static void transform(QVariant &variant) {
 
77
        if (variant.canConvert<QDBusArgument>()) {
 
78
                QDBusArgument value(variant.value<QDBusArgument>());
 
79
                if (value.currentType() == QDBusArgument::MapType) {
 
80
                        QVariantMap map;
 
81
                        value >> map;
 
82
                        transform(map);
 
83
                        variant = map;
 
84
                }
 
85
        }
 
86
}
 
87
 
 
88
static void transform(QVariantMap &map) {
 
89
        for (auto it(map.begin()); it != map.end(); ++it) {
 
90
                transform(*it);
 
91
        }
 
92
}
 
93
 
 
94
static void transform(QVariantList &list) {
 
95
        for (auto it(list.begin()); it != list.end(); ++it) {
 
96
                transform(*it);
 
97
        }
 
98
}
 
99
 
74
100
const QDBusArgument &operator>>(const QDBusArgument &argument,
75
101
                MethodCall &methodCall) {
76
102
 
81
107
        argument >> timestamp >> args;
82
108
        argument.endStructure();
83
109
 
 
110
        transform(args);
 
111
 
84
112
        methodCall.setTimestamp(timestamp);
85
113
        methodCall.setArgs(args);
86
114