2 * Copyright (c) 2012, Intel Corporation.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 /* --------------------------- utility code ------------------------------- */
14 init: function(log_id) {
15 this.logElement = document.getElementById(log_id);
18 scrollToBottom: function() {
19 this.logElement.scrollTop = this.logElement.scrollHeight;
23 this.logElement.innerHTML = "";
27 this.logElement.innerHTML += "<div class='PassClass'>PASS: " + msg + "</div>";
28 this.scrollToBottom();
32 this.logElement.innerHTML += "<div class='FailClass'>FAIL: " + msg + "</div>";
33 this.scrollToBottom();
37 this.logElement.innerHTML += "<div class='LogClass'> " + msg + "</div>";
38 this.scrollToBottom();
42 /* ----------------------------- test code --------------------------------- */
44 var vehicleEventType = new VehicleEventType();
47 function getTypes(event) {
48 var types = window.vehicle.getSupportedEventTypes(event, false,
50 if (data && data.length > 1) {
51 PRINT.pass(event + " is a set of " + data.length + " events:");
55 } else if (data && data.length > 0) {
56 PRINT.pass(event + " is a single event:");
61 PRINT.fail(event + " unexcepted empty data field");
65 PRINT.fail(((event === "") ? "all events" : event) + ":<br>" + msg);
70 function updateInput(input, value) {
72 input.className = "change";
73 input.addEventListener('webkitTransitionEnd', function callback(e) {
74 e.target.removeEventListener('webkitTransitionEnd', callback, false);
75 e.target.className = "";
79 function getValue(eventlist) {
80 var zoneList = getZone(eventlist);
81 var types = window.vehicle.get(eventlist, zoneList,
84 PRINT.pass("values received:");
85 if (eventlist.length > 1 && !! data.length && data.length > 0) {
87 for (var i = 0; i < data.length; i++) {
88 list[i] = data[i].property;
89 //list[i] = data[i].name; ???
90 PRINT.log(data[i].property + ": " + data[i].value + ", zone: " + data[i].zone);
91 //PRINT.log(data[i].name+": "+data[i].value); ???
94 var elements = document.getElementsByClassName('proptest');
95 for (var i = 0; i < elements.length; i++) {
96 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
97 var name = propinfo.innerHTML;
98 var idx = list.indexOf(name);
100 var zone = elements[i].getElementsByTagName('input')[1];
101 updateInput(zone, zone.value);
102 var input = elements[i].getElementsByTagName('input')[0];
103 updateInput(input, data[idx].value);
107 PRINT.log(JSON.stringify(data));
108 var elements = document.getElementsByClassName('proptest');
109 for (var i = 0; i < elements.length; i++) {
110 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
111 if (data.property == propinfo.innerHTML) {
112 var zone = elements[i].getElementsByTagName('input')[1];
113 updateInput(zone, zone.value);
114 var input = elements[i].getElementsByTagName('input')[0];
115 updateInput(input, data.value);
120 PRINT.fail("no values retrieved for " + eventlist);
129 function setValue(eventlist) {
130 var zoneList = getZone(eventlist);
131 var elements = document.getElementsByClassName('proptest');
132 var i, valuelist = [] ;
134 /* initialize the value list */
135 for (i = 0; i < eventlist.length; i++) {
139 for (var i = 0; i < elements.length; i++) {
140 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
141 var name = propinfo.innerHTML;
142 var idx = eventlist.indexOf(name);
145 var input = elements[i].getElementsByTagName('input')[0];
146 valuelist[idx] = input.value;
150 var types = window.vehicle.set(eventlist, valuelist, zoneList,
152 PRINT.pass("Set success for: " + JSON.stringify(msg));
155 PRINT.fail("Set error: " + JSON.stringify(msg));
160 function eventListener(e) {
161 PRINT.log(e.name + " update: " + JSON.stringify(e.value));
162 var elements = document.getElementsByClassName('proptest');
163 for (var i = 0; i < elements.length; i++) {
164 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
165 var name = propinfo.innerHTML;
166 if (name === e.name) {
167 var input = elements[i].getElementsByTagName('input')[0];
168 updateInput(input, e.value.value);
169 var zone = elements[i].getElementsByTagName('input')[1];
170 updateInput(zone, e.value.zone);
175 function subscribe(eventlist) {
176 var zoneList = getZone(eventlist);
177 window.vehicle.subscribe(eventlist, zoneList,
179 PRINT.pass("Subscribe success for: " + data);
180 for (var i = 0; i < data.length; i++) {
181 var sub = data[i] + "_subscribe";
182 var unsub = data[i] + "_unsubscribe";
183 // document.getElementById(sub).className = "testbutton subscribe disable"
184 // document.getElementById(unsub).className = "testbutton unsubscribe";
185 document.addEventListener(data[i], eventListener, false);
189 PRINT.fail("Subscribe failed for: " + msg);
194 function unsubscribe(eventlist, zoneList) {
195 zoneList = getZone(eventlist);
196 /* kill the handers first, so even if the service fails to acknowledge */
197 /* we've stopped listening */
198 for (var i = 0; i < eventlist.length; i++) {
199 document.removeEventListener(eventlist[i], eventListener, false);
201 window.vehicle.unsubscribe(eventlist, zoneList,
203 PRINT.pass("Unsubscribe success for: " + data);
204 for (var i = 0; i < data.length; i++) {
205 var sub = data[i] + "_subscribe";
206 var unsub = data[i] + "_unsubscribe";
207 // document.getElementById(unsub).className = "testbutton unsubscribe disable";
208 // document.getElementById(sub).className = "testbutton subscribe";
212 PRINT.fail("Unsubscribe failed for: " + msg);
217 function getZone(eventlist) {
219 if (eventlist.length > 1) {
221 // for (var i = 0; i < data.length; i++) {
222 // list[i] = data[i].property;
223 // //list[i] = data[i].name; ???
224 // PRINT.log(data[i].property + ": " + data[i].value);
225 // //PRINT.log(data[i].name+": "+data[i].value); ???
228 var elements = document.getElementsByClassName('proptest');
229 for (var i = 0; i < elements.length; i++) {
230 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
231 var name = propinfo.innerHTML;
232 var idx = eventlist.indexOf(name);
234 var zone = elements[i].getElementsByTagName('input')[1];
235 list.push(zone.value);
239 var elements = document.getElementsByClassName('proptest');
240 for (var i = 0; i < elements.length; i++) {
241 var propinfo = elements[i].getElementsByClassName('propinfo')[0];
242 if (eventlist[0] == propinfo.innerHTML) {
243 var zone = elements[i].getElementsByTagName('input')[1];
244 list.push(zone.value);
251 function select(elem) {
252 var name = elem.innerHTML;
253 if (!vehicleEventType.isValid(name))
256 var idx = selected.indexOf(name);
257 if (elem.className == "propinfo") {
259 selected[selected.length] = name;
261 elem.className = "propinfo select";
262 } else if (elem.className == "propinfo select") {
264 selected.splice(idx, 1);
266 elem.className = "propinfo";
270 function start(msg) {
271 if (window.vehicle && window.vehicle.getSupportedEventTypes) {
272 PRINT.pass("vehicle interface online " + msg);
274 PRINT.fail("vehicle interface not found");
278 var tester = document.getElementById("tester");
279 var part = ['<div class="proptest"><div class="propinfo" onclick=select(this)>',
280 '</div><div class="buttons"><div class="testbutton types" onclick=getTypes("',
281 '")></div><div id="',
282 '_subscribe" class="testbutton subscribe" onclick=subscribe(["',
283 '"])></div><div id="',
284 '_unsubscribe" class="testbutton unsubscribe" onclick=unsubscribe(["',
285 '"])></div><div class="testbutton get" onclick=getValue(["',
286 '"])></div><div class="testbutton set" onclick=setValue(["',
287 '"])></div><input class = "Textvalue" type="text" value="0" placeholder="Value" /><div class = "smallText"> Zone: </div><input class = "zone" type="text" value="0" placeholder="Zone"/></div></div>'
289 var events = vehicleEventType.event;
291 /* apply on all selected events */
292 var html = '<div class="proptest"><div class="propinfo unselectable">apply on all selected events' +
293 '</div><div class="buttons">' +
294 '<div class="testbutton subscribe" onclick=subscribe(selected)></div>' +
295 '<div class="testbutton unsubscribe" onclick=unsubscribe(selected)></div>' +
296 '<div class="testbutton get" onclick=getValue(selected)></div>' +
297 '<div class="testbutton set" onclick=setValue(selected)></div></div></div>';
300 html += '<div class="proptest"><div class="propinfo unselectable">all events';
301 html += '</div><div class="buttons"><div class="testbutton types" onclick=getTypes("' ;
302 html += '")></div><div class="testbutton subscribe" onclick=\"subscribe([\'' ;
303 html += events.join("','") ;
304 html += '\'])\"></div><div class="testbutton unsubscribe" onclick= \"unsubscribe([\'' ;
305 html += events.join("','");
306 html += '\'])\"></div><div class="testbutton get" onclick=\"getValue([\'' ;
307 html += events.join("','");
308 html += '\'])\"></div></div></div>';
311 for (var i = 0; i < events.length; i++) {
313 for (var j = 0; j < part.length - 1; j++) {
314 piece += part[j] + events[i];
316 html += piece + part[j];
318 tester.innerHTML = html;
321 function error(msg) {
325 function init(url, protocol) {
326 PRINT.init("result");
327 window.vehicle = new Vehicle(start, error, url, protocol);