~sethj/ubuntu/wily/unity/fix-for-1445595

1737.2.16 by Gord Allott
added tests
1
#include "test_service_hud.h"
2
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
3
namespace unity
4
{
5
namespace service
6
{
7
namespace
8
{
9
const char * hud_interface =
1737.2.16 by Gord Allott
added tests
10
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
11
"<node name=\"/\">\n"
1737.2.24 by Gord Allott
fixed up tests
12
"        <interface name=\"com.canonical.hud\">\n"
1737.2.16 by Gord Allott
added tests
13
"<!-- Properties -->\n"
1737.2.24 by Gord Allott
fixed up tests
14
"                <!-- None -->\n"
1737.2.16 by Gord Allott
added tests
15
"\n"
16
"<!-- Functions -->\n"
1737.2.24 by Gord Allott
fixed up tests
17
"                <method name=\"StartQuery\">\n"
18
"                        <!-- in -->\n"
19
"                        <arg type=\"s\" name=\"query\" direction=\"in\" />\n"
20
"                        <arg type=\"i\" name=\"entries\" direction=\"in\" />\n"
21
"                        <!-- out -->\n"
22
"                        <arg type=\"s\" name=\"target\" direction=\"out\" />\n"
23
"                        <arg type=\"a(sssssv)\" name=\"suggestions\" direction=\"out\" />\n"
24
"                        <arg type=\"v\" name=\"querykey\" direction=\"out\" />\n"
25
"                </method>\n"
26
"\n"
27
"                <method name=\"ExecuteQuery\">\n"
28
"                        <arg type=\"v\" name=\"key\" direction=\"in\" />\n"
29
"                        <arg type=\"u\" name=\"timestamp\" direction=\"in\" />\n"
30
"                </method>\n"
31
"\n"
32
"                <method name=\"CloseQuery\">\n"
33
"                        <arg type=\"v\" name=\"querykey\" direction=\"in\" />\n"
34
"                </method>\n"
1737.2.16 by Gord Allott
added tests
35
"\n"
36
"<!-- Signals -->\n"
1737.2.24 by Gord Allott
fixed up tests
37
"                <signal name=\"UpdatedQuery\">\n"
38
"                        <arg type=\"s\" name=\"target\" direction=\"out\" />\n"
39
"                        <arg type=\"a(sssssv)\" name=\"suggestions\" direction=\"out\" />\n"
40
"                        <arg type=\"v\" name=\"querykey\" direction=\"out\" />\n"
41
"                </signal>\n"
1737.2.16 by Gord Allott
added tests
42
"\n"
43
"<!-- End of interesting stuff -->\n"
44
"\n"
1737.2.24 by Gord Allott
fixed up tests
45
"        </interface>\n"
1737.2.16 by Gord Allott
added tests
46
"</node>\n"
47
;
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
48
}
49
50
51
Hud::Hud()
52
{
53
  auto object = std::make_shared<glib::DBusObject>(hud_interface, "com.canonical.hud");
54
  object->SetMethodsCallsHandler(sigc::mem_fun(this, &Hud::OnMethodCall));
55
  object->registered.connect([this] (std::string const&) {
56
    timeout_.reset(new glib::TimeoutSeconds(1));
57
    timeout_->Run([this] { EmitSignal(); return true; });
58
  });
59
60
  server_.AddObject(object, "/com/canonical/hud");
61
}
62
63
void Hud::EmitSignal()
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
64
{
65
  GVariant *query;
66
  int num_entries = 5;
67
68
  /* Build into into a variant */
69
  GVariantBuilder ret_builder;
70
  g_variant_builder_init(&ret_builder, G_VARIANT_TYPE_TUPLE);
71
  g_variant_builder_add_value(&ret_builder, g_variant_new_string("target"));
72
  GVariantBuilder builder;
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
73
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
74
  g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
75
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
76
  int i = 0;
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
77
  for (i = 0; i < num_entries; i++)
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
78
  {
79
    gchar* target = g_strdup_printf("test-%i", i);
80
    gchar* icon = g_strdup_printf("icon-%i", i);
81
    gchar* future_icon = g_strdup(icon);
82
    gchar* completion_text = g_strdup_printf("completion-%i", i);
83
    gchar* accelerator = g_strdup_printf("<alt>+whatever");
84
85
    GVariantBuilder tuple;
86
    g_variant_builder_init(&tuple, G_VARIANT_TYPE_TUPLE);
87
    g_variant_builder_add_value(&tuple, g_variant_new_string(target));
88
    g_variant_builder_add_value(&tuple, g_variant_new_string(icon));
89
    g_variant_builder_add_value(&tuple, g_variant_new_string(future_icon));
90
    g_variant_builder_add_value(&tuple, g_variant_new_string(completion_text));
91
    g_variant_builder_add_value(&tuple, g_variant_new_string(accelerator));
92
    // build a fake key
93
    GVariant* key;
94
    {
95
      GVariantBuilder keybuilder;
96
      g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE);
97
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
98
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
99
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
100
      g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986));
101
102
      key = g_variant_new_variant(g_variant_builder_end(&keybuilder));
103
    }
104
    g_variant_ref_sink(key);
105
    g_variant_builder_add_value(&tuple, key);
106
    g_variant_builder_add_value(&builder, g_variant_builder_end(&tuple));
107
    g_free(target);
108
    g_free(icon);
109
    g_free(future_icon);
110
    g_free(completion_text);
111
  }
112
  g_variant_builder_add_value(&ret_builder, g_variant_builder_end(&builder));
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
113
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
114
  GVariant* query_key;
115
  {
116
    GVariantBuilder keybuilder;
117
    g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE);
118
    g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
119
    g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
120
    g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
121
    g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986));
122
123
    query_key = g_variant_new_variant(g_variant_builder_end(&keybuilder));
124
  }
125
  g_variant_ref_sink(query_key);
126
  g_variant_builder_add_value(&ret_builder, query_key);
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
127
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
128
  query = g_variant_builder_end(&ret_builder);
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
129
130
  server_.EmitSignal("com.canonical.hud", "UpdatedQuery", query);
2120.5.1 by Gord Allott
emit signal (1 line) and tests (about a billion lines)
131
}
132
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
133
GVariant* Hud::OnMethodCall(std::string const& method, GVariant *parameters)
1737.2.16 by Gord Allott
added tests
134
{
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
135
  if (method == "StartQuery")
1737.2.16 by Gord Allott
added tests
136
  {
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
137
    glib::String query;
1737.2.24 by Gord Allott
fixed up tests
138
    int num_entries = 0;
1737.2.16 by Gord Allott
added tests
139
1737.2.24 by Gord Allott
fixed up tests
140
    g_variant_get(parameters, "(si)", &query, &num_entries);
1737.2.16 by Gord Allott
added tests
141
142
    /* Build into into a variant */
143
    GVariantBuilder ret_builder;
144
    g_variant_builder_init(&ret_builder, G_VARIANT_TYPE_TUPLE);
145
    g_variant_builder_add_value(&ret_builder, g_variant_new_string("target"));
146
    GVariantBuilder builder;
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
147
1737.2.24 by Gord Allott
fixed up tests
148
    g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
149
1737.2.24 by Gord Allott
fixed up tests
150
    int i = 0;
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
151
    for (i = 0; i < num_entries; i++)
1737.2.16 by Gord Allott
added tests
152
    {
1737.2.24 by Gord Allott
fixed up tests
153
      gchar* target = g_strdup_printf("test-%i", i);
154
      gchar* icon = g_strdup_printf("icon-%i", i);
155
      gchar* future_icon = g_strdup(icon);
156
      gchar* completion_text = g_strdup_printf("completion-%i", i);
157
      gchar* accelerator = g_strdup_printf("<alt>+whatever");
158
159
      GVariantBuilder tuple;
160
      g_variant_builder_init(&tuple, G_VARIANT_TYPE_TUPLE);
161
      g_variant_builder_add_value(&tuple, g_variant_new_string(target));
162
      g_variant_builder_add_value(&tuple, g_variant_new_string(icon));
163
      g_variant_builder_add_value(&tuple, g_variant_new_string(future_icon));
164
      g_variant_builder_add_value(&tuple, g_variant_new_string(completion_text));
165
      g_variant_builder_add_value(&tuple, g_variant_new_string(accelerator));
166
      // build a fake key
167
      GVariant* key;
1737.2.16 by Gord Allott
added tests
168
      {
1737.2.24 by Gord Allott
fixed up tests
169
        GVariantBuilder keybuilder;
170
        g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE);
171
        g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
172
        g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
173
        g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
174
        g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986));
175
176
        key = g_variant_new_variant(g_variant_builder_end(&keybuilder));
1737.2.16 by Gord Allott
added tests
177
      }
1737.2.24 by Gord Allott
fixed up tests
178
      g_variant_ref_sink(key);
179
      g_variant_builder_add_value(&tuple, key);
180
      g_variant_builder_add_value(&builder, g_variant_builder_end(&tuple));
181
      g_free(target);
182
      g_free(icon);
183
      g_free(future_icon);
184
      g_free(completion_text);
185
    }
186
    g_variant_builder_add_value(&ret_builder, g_variant_builder_end(&builder));
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
187
1737.2.24 by Gord Allott
fixed up tests
188
    GVariant* query_key;
1737.2.16 by Gord Allott
added tests
189
    {
1737.2.24 by Gord Allott
fixed up tests
190
      GVariantBuilder keybuilder;
191
      g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE);
192
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
193
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
194
      g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string"));
195
      g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986));
196
197
      query_key = g_variant_new_variant(g_variant_builder_end(&keybuilder));
1737.2.16 by Gord Allott
added tests
198
    }
1737.2.24 by Gord Allott
fixed up tests
199
    g_variant_ref_sink(query_key);
200
    g_variant_builder_add_value(&ret_builder, query_key);
3149.2.1 by Marco Trevisan (Treviño)
test-gtest-service: move services to GDBusServer/GDBusObject
201
202
    return g_variant_builder_end(&ret_builder);
203
  }
204
  else if (method == "ExecuteQuery")
205
  {
206
    GVariant * key = NULL;
207
    key = g_variant_get_child_value(parameters, 0);
208
    g_variant_unref(key);
209
  }
210
  else if (method == "CloseQuery")
211
  {
212
    GVariant * key = NULL;
213
    key = g_variant_get_child_value(parameters, 0);
214
    g_variant_unref(key);
215
  }
216
217
  return nullptr;
218
}
219
220
}
1737.2.16 by Gord Allott
added tests
221
}
222