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, next_test)
22 this.method_name = method_name;
24 this.convert = convert;
25 this.signature = signature;
31 this.next = next_test;
47 if (!this.method_name)
49 alert("Test error: No method name specified!");
53 if (typeof this.arg != 'boolean' && !this.arg)
55 alert("Test error: No argument specified!");
59 var method = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
61 this.method_name, 'org.movial.Unit', this.signature,
63 this.signal = dbus.getSignal(dbus.SESSION, 'org.movial.Unit', this.method_name,
65 this.signal.onemit = this.onemit;
67 // We need to receive replies as we go to get a meaningful report
68 // but do test with async replies too!
71 var status = document.getElementById('status');
74 if (this.convert instanceof Function)
76 send_arg = this.convert(this.arg);
87 status.innerHTML += '<p>Result: <span style="color: ' + color + ';">Converting "' + this.arg + '" failed</span>';
88 current_test = this.next;
89 setTimeout(run_next, 10);
96 method.onreply = this.method_reply;
97 method.onerror = this.error_reply;
99 var argstr = get_argstr(this.arg);
101 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>';
103 this.signal.enabled = !this.xfail;
107 onemit: function (reply_arg)
109 var status = document.getElementById('status');
110 status.innerHTML += '<p>Got signal "' + this.method_name + '"';
111 this.signal.enabled = false;
112 this.method_reply(reply_arg);
114 current_test = this.next;
115 setTimeout(run_next, 10);
119 method_reply: function (reply_arg)
121 var status = document.getElementById('status');
125 status.innerHTML += '<p style="margin-top: -0.5em"><span style="color:red; padding-left: 1em;">This test should have failed, but did not!</span>';
127 current_test = this.next;
128 setTimeout(run_next, 10);
134 if (!is_equal(this.arg, reply_arg))
137 var argstr = get_argstr(reply_arg);
146 status.innerHTML += '<p style="margin-top: -0.5em">Result: <span style="color: ' + color + '; padding-left: 1em;">' + argstr + ', ' + typeof reply_arg + '</span>';
151 error_reply: function (error_name, error_message)
153 var status = document.getElementById('status');
157 status.innerHTML += '<p style="color: green;">Expected failure:';
160 status.innerHTML += '<p style="color: red;">' + error_name + ':';
163 status.innerHTML += '<span style="color: red; padding-left: 1em;">' + error_message + '</span>';
165 current_test = this.next;
166 setTimeout(run_next, 10);
172 function get_argstr(arg)
176 if (arg instanceof Array || arg instanceof Object)
180 for (var propname in arg)
187 argstr += propname + ":" + get_argstr(arg[propname]);
191 if (typeof arg == 'boolean')
193 argstr = arg.toString();
195 argstr = arg.toString();
204 function is_equal(a, b)
206 if ((a instanceof Array && b instanceof Array)
207 || (a instanceof Object && b instanceof Object))
211 if (!is_equal(a[i], b[i]))
231 var status = document.getElementById('status');
232 status.innerHTML += "<p>Ending test...";
233 var end = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
235 "end", 'org.movial.Unit');
240 function show_results()
242 var results = document.getElementById('results');
243 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';
246 var tests = new Array();
250 var status = document.getElementById('status');
254 status.innerHTML += "<p>Browser D-Bus Bridge not available, cannot run tests.";
258 setTimeout(show_results, 1000);
260 status.innerHTML += "<p>Starting test...";
261 var start = dbus.getMethod(dbus.SESSION, 'org.movial.Unit',
263 "start", 'org.movial.Unit');
268 tests[i++] = new Test('Boolean', true, null, false);
269 tests[i++] = new Test('Boolean', true, null, false, 'b');
271 tests[i++] = new Test('Int16', 32767, dbus.Int16, false);
272 tests[i++] = new Test('Int16', 32767, null, true);
273 tests[i++] = new Test('Int16', 32767, dbus.Int16, false, 'n');
274 tests[i++] = new Test('Int16', 32767, null, false, 'n');
276 tests[i++] = new Test('Int32', 2147483647, dbus.Int32, false);
277 tests[i++] = new Test('Int32', 2147483647, null, true);
278 tests[i++] = new Test('Int32', 2147483647, dbus.Int32, false, 'i');
279 tests[i++] = new Test('Int32', 2147483647, null, false, 'i');
281 // There's problems with the (u)int64 types since doubles can't hold
282 // large enough values accurately.
283 tests[i++] = new Test('Int64', 17179869176, dbus.Int64, false);
284 tests[i++] = new Test('Int64', 17179869176, null, true);
285 tests[i++] = new Test('Int64', 17179869176, dbus.Int64, false, 'x');
286 tests[i++] = new Test('Int64', 17179869176, null, false, 'x');
288 tests[i++] = new Test('UInt16', 32767, dbus.UInt16, false);
289 tests[i++] = new Test('UInt16', 32767, null, true);
290 tests[i++] = new Test('UInt16', 32767, dbus.UInt16, false, 'q');
291 tests[i++] = new Test('UInt16', 32767, null, false, 'q');
293 tests[i++] = new Test('UInt32', 2147483647, dbus.UInt32, false);
294 tests[i++] = new Test('UInt32', 2147483647, null, true);
295 tests[i++] = new Test('UInt32', 2147483647, dbus.UInt32, false, 'u');
296 tests[i++] = new Test('UInt32', 2147483647, null, false, 'u');
298 tests[i++] = new Test('UInt64', 17179869176, dbus.UInt64, false);
299 tests[i++] = new Test('UInt64', 17179869176, null, true);
300 tests[i++] = new Test('UInt64', 17179869176, dbus.UInt64, false, 't');
301 tests[i++] = new Test('UInt64', 17179869176, null, false, 't');
303 tests[i++] = new Test('Double', 1024.1024, null, false);
304 tests[i++] = new Test('Double', 1024.1024, null, false, 'd');
306 tests[i++] = new Test('Byte', 1, dbus.Byte, false);
307 tests[i++] = new Test('Byte', 1, null, true);
308 tests[i++] = new Test('Byte', 1, dbus.Byte, false, 'y');
309 tests[i++] = new Test('Byte', 1, null, false, 'y');
311 tests[i++] = new Test('String', "abc åäö", null, false);
312 tests[i++] = new Test('String', "abc åäö", null, false, 's');
314 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", dbus.ObjectPath, false);
315 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", null, true);
316 tests[i++] = new Test('ObjectPath', "/org/movial/Unit", dbus.ObjectPath, false, 'o');
317 tests[i++] = new Test('ObjectPath', "I'm invalid object path", dbus.ObjectPath, true);
318 tests[i++] = new Test('ObjectPath', "/not//valid/either", dbus.ObjectPath, true);
320 tests[i++] = new Test('Signature', "sib", dbus.Signature, false);
321 tests[i++] = new Test('Signature', "sib", null, true);
322 tests[i++] = new Test('Signature', "sib", dbus.Signature, false, 'g');
323 tests[i++] = new Test('Signature', "sib", null, false, 'g');
325 tests[i++] = new Test("Array", ["a", "b", "äöÄÖ"], null, false, null);
326 tests[i++] = new Test("Array", [1, 2, 3], null, false, null);
327 tests[i++] = new Test("Array", ["a", "b", "äöÄÖ"], null, false, 'as');
328 tests[i++] = new Test("Array", [1, 2, 3], null, false, 'ai');
330 var dict = new Object();
331 dict["abc åäö"] = "abc åäö";
332 tests[i++] = new Test("Dict", dict, null, false, 'a{ss}');
334 var dict = new Object();
335 dict["test"] = [100.0, 2.0, 3000.0];
336 tests[i++] = new Test("Dict", dict, null, false, 'a{sad}');
338 var dict = new Object();
339 dict["test"] = [100, 2, 3000];
340 tests[i++] = new Test("Dict", dict, null, false, 'a{sai}');
342 var dict = new Object();
343 var array = new Array("abc", "def", "åäö");
344 dict["abc åäö"] = array;
345 tests[i++] = new Test("Dict", dict, null, false, 'a{sas}');
347 var dict = new Object();
348 var dict2 = new Object();
349 dict2["abc"] = "åäö";
351 tests[i++] = new Test("Dict", dict, null, false, 'a{sa{ss}}');
353 var dict = new Object();
354 var dict2 = new Object();
355 dict2["åäö"] = ["abc", "def", "åäö"];
357 tests[i++] = new Test("Dict", dict, null, false, 'a{sa{sas}}');
359 // Test for very deep container structure
360 var deep = new Object();
361 var deep_sig = "a{s";
362 function add_dict(o, d, depth)
372 add_array(o[0], d + 1, depth);
375 function add_array(o, d, depth)
377 o["abc"] = new Array();
385 add_dict(o["abc"], d + 1, depth);
388 add_array(deep, 0, 20);
390 tests[i++] = new Test("Dict", deep, null, false, deep_sig);
392 tests[i++] = new Test("Variant", "woot", null, false, 'v');
393 tests[i++] = new Test("Variant", ["woot", "bar"], null, false, 'v');
395 var dict = new Object();
396 dict["abc åäö"] = "abc åäö";
397 var dict2 = new Object();
398 dict2["def"] = "bleb";
399 tests[i++] = new Test("Variant", [dict, dict2], null, false, 'v');
401 /* TODO: We don't really yet know how exactly we want these to go...
402 var struct = new Object();
403 struct.what = "that";
404 struct.how_many = 42;
406 tests[i++] = new Test("Struct", struct, dbus.Struct, false);
407 tests[i++] = new Test("Struct", struct, dbus.Struct, false, '(si)');
410 for (var j = 0; j < i-1; j++)
412 tests[j].next = tests[j+1]
414 current_test = tests[0];
421 <body onload='do_unit();'>
422 <div><a href="unit.html">Run again</a> <a href="http://google.fi">Leave the page</a></div>
423 <div id='results' style='border: solid blue 0.1em; padding: 1em; margin: 1em;'></div>
424 <div id='status' style='border: dashed black 0.1em; padding: 1em;'></div>