2 Copyright © 2008 Movial Creative Technologies Inc
3 Feel free to use the contents of this file in any way you want
4 If you can make money with it, please contact info@movial.com
5 and you have almost-guaranteed sales position waiting for you!
10 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
12 <script type='text/javascript' src='dbus.js'></script>
13 <script type='text/javascript'>
18 var current_test = null;
20 function Test(method_name, arg, convert, xfail, signature, variant_signature)
22 this.method_name = method_name;
24 this.convert = convert;
25 this.signature = signature;
26 this.variant_signature = variant_signature;
41 variant_signature: null,
48 if (!this.method_name)
50 alert("Test error: No method name specified!");
54 if (typeof this.arg != 'boolean' && !this.arg)
56 alert("Test error: No argument specified!");
60 var method = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
62 this.method_name, 'org.movial.Unit', this.signature,
64 this.signal = dbus.getSignal(dbus.SESSION, 'org.movial.Unit', this.method_name,
66 this.signal.onemit = this.onemit;
68 // We need to receive replies as we go to get a meaningful report
69 // but do test with async replies too!
72 var status = document.getElementById('status');
75 if (typeof this.convert === "function")
77 if (this.convert == dbus.Variant)
79 send_arg = this.convert(this.variant_signature, this.arg);
81 send_arg = this.convert(this.arg);
94 status.innerHTML += '<p>Result: <span style="color: ' + color + ';">Converting "' + this.arg + '" failed</span>';
95 current_test = this.next;
96 setTimeout(run_next, 10);
103 method.onreply = this.method_reply;
104 method.onerror = this.error_reply;
106 var argstr = get_argstr(this.arg);
108 status.innerHTML += '<p>Sending ' + this.method_name + ':<span style="color: blue; padding-left: 1em;">' + argstr + ' of type ' + typeof send_arg + ' with signature ' + this.signature + '</span>';
110 this.signal.enabled = !this.xfail;
114 onemit: function (reply_arg)
116 var status = document.getElementById('status');
117 status.innerHTML += '<p>Got signal "' + this.method_name + '"';
118 this.signal.enabled = false;
119 this.method_reply(reply_arg);
121 current_test = this.next;
122 setTimeout(run_next, 10);
126 method_reply: function (reply_arg)
128 var status = document.getElementById('status');
132 status.innerHTML += '<p style="margin-top: -0.5em"><span style="color:red; padding-left: 1em;">This test should have failed, but did not!</span>';
134 current_test = this.next;
135 setTimeout(run_next, 10);
141 if (!is_equal(this.arg, reply_arg))
144 var argstr = get_argstr(reply_arg);
153 status.innerHTML += '<p style="margin-top: -0.5em">Result: <span style="color: ' + color + '; padding-left: 1em;">' + argstr + ', ' + typeof reply_arg + '</span>';
158 error_reply: function (error_name, error_message)
160 var status = document.getElementById('status');
162 this.signal.enabled = false;
166 status.innerHTML += '<p style="color: green;">Expected failure:';
169 status.innerHTML += '<p style="color: red;">' + error_name + ':';
172 status.innerHTML += '<span style="color: red; padding-left: 1em;">' + error_message + '</span>';
174 current_test = this.next;
175 setTimeout(run_next, 10);
181 function get_argstr(arg)
185 if (arg instanceof Array || arg instanceof Object)
189 for (var propname in arg)
196 argstr += propname + ":" + get_argstr(arg[propname]);
200 if (typeof arg == 'boolean')
202 argstr = arg.toString();
204 argstr = arg.toString();
213 function is_equal(a, b)
215 if ((a instanceof Array && b instanceof Array)
216 || (a instanceof Object && b instanceof Object))
220 if (!is_equal(a[i], b[i]))
240 var status = document.getElementById('status');
241 status.innerHTML += "<p>Ending test...";
242 var end = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
244 "end", 'org.movial.Unit');
249 function show_results()
251 var results = document.getElementById('results');
252 results.innerHTML = '<p>Total of ' + n_tests + ' tests, <span style="color: green">passed ' + good + '</span>, <span style="color:red">failed ' + bad + '</span>, unknown ' + (n_tests - good - bad) + ", " + Math.round((good/n_tests)*100) + '% success rate';
255 var tests = new Array();
259 var status = document.getElementById('status');
263 status.innerHTML += "<p>Browser D-Bus Bridge not available, cannot run tests.";
267 setTimeout(show_results, 1000);
269 status.innerHTML += "<p>Starting test...";
270 var start = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
272 "start", 'org.movial.Unit');
277 tests[i++] = new Test('Boolean', true, null, false);
278 tests[i++] = new Test('Boolean', true, null, false, 'b');
280 tests[i++] = new Test('Int16', 32767, dbus.Int16, false);
281 tests[i++] = new Test('Int16', 32767, null, true);
282 tests[i++] = new Test('Int16', 32767, dbus.Int16, false, 'n');
283 tests[i++] = new Test('Int16', 32767, null, false, 'n');
285 tests[i++] = new Test('Int32', 2147483647, dbus.Int32, false);
286 tests[i++] = new Test('Int32', 2147483647, null, true);
287 tests[i++] = new Test('Int32', 2147483647, dbus.Int32, false, 'i');
288 tests[i++] = new Test('Int32', 2147483647, null, false, 'i');
290 // There's problems with the (u)int64 types since doubles can't hold
291 // large enough values accurately.
292 tests[i++] = new Test('Int64', 17179869176, dbus.Int64, false);
293 tests[i++] = new Test('Int64', 17179869176, null, true);
294 tests[i++] = new Test('Int64', 17179869176, dbus.Int64, false, 'x');
295 tests[i++] = new Test('Int64', 17179869176, null, false, 'x');
297 tests[i++] = new Test('UInt16', 32767, dbus.UInt16, false);
298 tests[i++] = new Test('UInt16', 32767, null, true);
299 tests[i++] = new Test('UInt16', 32767, dbus.UInt16, false, 'q');
300 tests[i++] = new Test('UInt16', 32767, null, false, 'q');
302 tests[i++] = new Test('UInt32', 2147483647, dbus.UInt32, false);
303 tests[i++] = new Test('UInt32', 2147483647, null, true);
304 tests[i++] = new Test('UInt32', 2147483647, dbus.UInt32, false, 'u');
305 tests[i++] = new Test('UInt32', 2147483647, null, false, 'u');
307 tests[i++] = new Test('UInt64', 17179869176, dbus.UInt64, false);
308 tests[i++] = new Test('UInt64', 17179869176, null, true);
309 tests[i++] = new Test('UInt64', 17179869176, dbus.UInt64, false, 't');
310 tests[i++] = new Test('UInt64', 17179869176, null, false, 't');
312 tests[i++] = new Test('Double', 1024.1024, null, false);
313 tests[i++] = new Test('Double', 1024.1024, null, false, 'd');
315 tests[i++] = new Test('Byte', 1, dbus.Byte, false);
316 tests[i++] = new Test('Byte', 1, null, true);
317 tests[i++] = new Test('Byte', 1, dbus.Byte, false, 'y');
318 tests[i++] = new Test('Byte', 1, null, false, 'y');
320 tests[i++] = new Test('String', "abc åäö", null, false);
321 tests[i++] = new Test('String', "abc åäö", null, false, 's');
323 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", dbus.ObjectPath, false);
324 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", null, true);
325 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", dbus.ObjectPath, false, 'o');
326 tests[i++] = new Test('ObjectPath', "I'm invalid object path", dbus.ObjectPath, true);
327 tests[i++] = new Test('ObjectPath', "/not//valid/either", dbus.ObjectPath, true);
329 tests[i++] = new Test('Signature', "sib", dbus.Signature, false);
330 tests[i++] = new Test('Signature', "sib", null, true);
331 tests[i++] = new Test('Signature', "sib", dbus.Signature, false, 'g');
332 tests[i++] = new Test('Signature', "sib", null, false, 'g');
334 tests[i++] = new Test("Array", ["a", "b", "äöÄÖ"], null, false, null);
335 tests[i++] = new Test("Array", [1, 2, 3], null, false, null);
336 tests[i++] = new Test("Array", ["a", "b", "äöÄÖ"], null, false, 'as');
337 tests[i++] = new Test("Array", [1, 2, 3], null, false, 'ai');
339 var dict = new Object();
340 dict["abc åäö"] = "abc åäö";
341 tests[i++] = new Test("Dict", dict, null, false, 'a{ss}');
343 var dict = new Object();
344 dict["test"] = [100.0, 2.0, 3000.0];
345 tests[i++] = new Test("Dict", dict, null, false, 'a{sad}');
347 var dict = new Object();
348 dict["test"] = [100, 2, 3000];
349 tests[i++] = new Test("Dict", dict, null, false, 'a{sai}');
351 var dict = new Object();
352 var array = new Array("abc", "def", "åäö");
353 dict["abc åäö"] = array;
354 tests[i++] = new Test("Dict", dict, null, false, 'a{sas}');
356 var dict = new Object();
357 var dict2 = new Object();
358 dict2["abc"] = "åäö";
360 tests[i++] = new Test("Dict", dict, null, false, 'a{sa{ss}}');
362 var dict = new Object();
363 var dict2 = new Object();
364 dict2["åäö"] = ["abc", "def", "åäö"];
366 tests[i++] = new Test("Dict", dict, null, false, 'a{sa{sas}}');
368 // Test for very deep container structure
369 var deep = new Object();
370 var deep_sig = "a{s";
371 function add_dict(o, d, depth)
381 add_array(o[0], d + 1, depth);
384 function add_array(o, d, depth)
386 o["abc"] = new Array();
394 add_dict(o["abc"], d + 1, depth);
397 add_array(deep, 0, 20);
399 tests[i++] = new Test("Dict", deep, null, false, deep_sig);
401 tests[i++] = new Test("Variant", "woot", null, false, 'v');
402 tests[i++] = new Test("Variant", ["woot", "bar"], null, false, 'v');
404 var dict = new Object();
405 dict["abc åäö"] = "abc åäö";
406 var dict2 = new Object();
407 dict2["def"] = "bleb";
408 tests[i++] = new Test("Variant", [dict, dict2], null, false, 'v');
410 var struct = new Array("abc åäö", 1004);
411 var struct2 = new Array("def", [42, 1004, 105]);
412 var dict = new Object();
413 dict["abc åäö"] = struct2;
415 tests[i++] = new Test("Struct", struct, null, false, '(si)');
416 tests[i++] = new Test("Array", [struct, struct2], null, false, 'a(sv)');
417 tests[i++] = new Test("Dict", dict, null, false, 'a{s(sv)}');
419 for (var j = 0; j < i-1; j++)
421 tests[j].next = tests[j+1]
423 current_test = tests[0];
430 <body onload='do_unit();'>
431 <div><a href="javascript:window.location.reload();">Run again</a> <a href="http://google.fi">Leave the page</a></div>
432 <div id='results' style='border: solid blue 0.1em; padding: 1em; margin: 1em;'></div>
433 <div id='status' style='border: dashed black 0.1em; padding: 1em;'></div>