Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / robot / recorder.js

History | View | Annotate | Download (8.43 KB)

1 9 andrej.cim
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6
7
8
if(!dojo._hasResource["dojox.robot.recorder"]){
9
dojo._hasResource["dojox.robot.recorder"]=true;
10
dojo.provide("dojox.robot.recorder");
11
dojo.experimental("dojox.robot.recorder");
12
(function(){
13
var _1=1000;
14
var _2=500;
15
var _3=10000;
16
var _4=[];
17
var _5=0;
18
var _6=null;
19
var _7=null;
20
var _8=function(){
21
alert("Started recording.");
22
_4=[];
23
_6=new Date();
24
_7=new Date();
25
};
26
var _9=function(_a,_b){
27
if(_6==null||_a=="doh.robot.keyPress"&&_b[0]==dojo.keys.ENTER&&eval("("+_b[2]+")").ctrl&&eval("("+_b[2]+")").alt){
28
return;
29
}
30
var dt=Math.max(Math.min(Math.round((new Date()).getTime()-_7.getTime()),_3),1);
31
if(_a=="doh.robot.mouseMove"){
32
_b[2]=dt;
33
}else{
34
_b[1]=dt;
35
}
36
_4.push({name:_a,args:_b});
37
_7=new Date();
38
};
39
var _c=function(){
40
var c=_4;
41
if(c[0].name=="doh.robot.keyPress"&&(c[0].args[0]==dojo.keys.ENTER||c[0].args[0]==77)){
42
c.splice(0,1);
43
}
44
for(var i=c.length-1;(i>=c.length-2)&&(i>=0);i--){
45
if(c[i].name=="doh.robot.keyPress"&&c[i].args[0]==dojo.keys.ALT||c[i].args[0]==dojo.keys.CTRL){
46
c.splice(i,1);
47
}
48
}
49
for(i=0;i<c.length;i++){
50
var _d,_e;
51
if(c[i+1]&&c[i].name=="doh.robot.mouseMove"&&c[i+1].name==c[i].name&&c[i+1].args[2]<_2){
52
_d=c[i+1];
53
_e=0;
54
while(_d&&_d.name==c[i].name&&_d.args[2]<_2){
55
c.splice(i+1,1);
56
_e+=_d.args[2];
57
c[i].args[0]=_d.args[0];
58
c[i].args[1]=_d.args[1];
59
_d=c[i+1];
60
}
61
c[i].args[3]=_e;
62
}else{
63
if(c[i+1]&&c[i].name=="doh.robot.mouseWheel"&&c[i+1].name==c[i].name&&c[i+1].args[1]<_2){
64
_d=c[i+1];
65
_e=0;
66
while(_d&&_d.name==c[i].name&&_d.args[1]<_2){
67
c.splice(i+1,1);
68
_e+=_d.args[1];
69
c[i].args[0]+=_d.args[0];
70
_d=c[i+1];
71
}
72
c[i].args[2]=_e;
73
}else{
74
if(c[i+2]&&c[i].name=="doh.robot.mouseMoveAt"&&c[i+2].name=="doh.robot.scrollIntoView"){
75
var _f=c.splice(i+2,1)[0];
76
c.splice(i,0,_f);
77
}else{
78
if(c[i+1]&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseRelease"&&c[i].args[0]==c[i+1].args[0]){
79
c[i].name="doh.robot.mouseClick";
80
c.splice(i+1,1);
81
if(c[i+1]&&c[i+1].name=="doh.robot.mouseClick"&&c[i].args[0]==c[i+1].args[0]){
82
c.splice(i+1,1);
83
}
84
}else{
85
if(c[i+1]&&c[i-1]&&c[i-1].name=="doh.robot.mouseMoveAt"&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseMove"){
86
var cmd={name:"doh.robot.mouseMoveAt",args:[c[i-1].args[0],1,100,c[i-1].args[3]+1,c[i-1].args[4]]};
87
c.splice(i+1,0,cmd);
88
}else{
89
if(c[i+1]&&((c[i].name=="doh.robot.keyPress"&&typeof c[i].args[0]=="string")||c[i].name=="doh.robot.typeKeys")&&c[i+1].name=="doh.robot.keyPress"&&typeof c[i+1].args[0]=="string"&&c[i+1].args[1]<=_1&&!eval("("+c[i].args[2]+")").ctrl&&!eval("("+c[i].args[2]+")").alt&&!eval("("+c[i+1].args[2]+")").ctrl&&!eval("("+c[i+1].args[2]+")").alt){
90
c[i].name="doh.robot.typeKeys";
91
c[i].args.splice(3,1);
92
_d=c[i+1];
93
var _10=0;
94
while(_d&&_d.name=="doh.robot.keyPress"&&typeof _d.args[0]=="string"&&_d.args[1]<=_1&&!eval("("+_d.args[2]+")").ctrl&&!eval("("+_d.args[2]+")").alt){
95
c.splice(i+1,1);
96
c[i].args[0]+=_d.args[0];
97
_10+=_d.args[1];
98
_d=c[i+1];
99
}
100
c[i].args[2]=_10;
101
c[i].args[0]="'"+c[i].args[0]+"'";
102
}else{
103
if(c[i].name=="doh.robot.keyPress"){
104
if(typeof c[i].args[0]=="string"){
105
c[i].args[0]="'"+c[i].args[0]+"'";
106
}else{
107
if(c[i].args[0]==0){
108
c.splice(i,1);
109
}else{
110
for(var j in dojo.keys){
111
if(dojo.keys[j]==c[i].args[0]){
112
c[i].args[0]="dojo.keys."+j;
113
break;
114
}
115
}
116
}
117
}
118
}
119
}
120
}
121
}
122
}
123
}
124
}
125
}
126
};
127
var _11=function(){
128
if(!_6){
129
_8();
130
}else{
131
_12();
132
}
133
};
134
var _12=function(){
135
var dt=Math.round((new Date()).getTime()-_6.getTime());
136
_6=null;
137
_c();
138
var c=_4;
139
if(c.length){
140
var s="doh.register('dojox.robot.AutoGeneratedTestGroup',{\n";
141
s+="     name: 'autotest"+(_5++)+"',\n";
142
s+="     timeout: "+(dt+2000)+",\n";
143
s+="     runTest: function(){\n";
144
s+="          var d = new doh.Deferred();\n";
145
for(var i=0;i<c.length;i++){
146
s+="          "+c[i].name+"(";
147
for(var j=0;j<c[i].args.length;j++){
148
var arg=c[i].args[j];
149
s+=arg;
150
if(j!=c[i].args.length-1){
151
s+=", ";
152
}
153
}
154
s+=");\n";
155
}
156
s+="          doh.robot.sequence(function(){\n";
157
s+="               if(/*Your condition here*/){\n";
158
s+="                    d.callback(true);\n";
159
s+="               }else{\n";
160
s+="                    d.errback(new Error('We got a failure'));\n";
161
s+="               }\n";
162
s+="          }, 1000);\n";
163
s+="          return d;\n";
164
s+="     }\n";
165
s+="});\n";
166
var div=document.createElement("div");
167
div.id="dojox.robot.recorder";
168
div.style.backgroundColor="white";
169
div.style.position="absolute";
170
var _13={y:(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),x:(window.pageXOffset||(window["dojo"]?dojo._fixIeBiDiScrollLeft(document.documentElement.scrollLeft):undefined)||document.body.scrollLeft||0)};
171
div.style.left=_13.x+"px";
172
div.style.top=_13.y+"px";
173
var h1=document.createElement("h1");
174
h1.innerHTML="Your code:";
175
div.appendChild(h1);
176
var pre=document.createElement("pre");
177
if(pre.innerText!==undefined){
178
pre.innerText=s;
179
}else{
180
pre.textContent=s;
181
}
182
div.appendChild(pre);
183
var _14=document.createElement("button");
184
_14.innerHTML="Close";
185
var _15=dojo.connect(_14,"onmouseup",function(e){
186
dojo.stopEvent(e);
187
document.body.removeChild(div);
188
dojo.disconnect(_15);
189
});
190
div.appendChild(_14);
191
document.body.appendChild(div);
192
_4=[];
193
}
194
};
195
var _16=function(_17){
196
if(typeof _17=="string"){
197
return "'"+_17+"'";
198
}else{
199
if(_17.id){
200
return "'"+_17.id+"'";
201
}else{
202
var _18=document.getElementsByTagName(_17.nodeName);
203
var i;
204
for(i=0;i<_18.length;i++){
205
if(_18[i]==_17){
206
break;
207
}
208
}
209
return "function(){ return document.getElementsByTagName('"+_17.nodeName+"')["+i+"]; }";
210
}
211
}
212
};
213
var _19=function(b){
214
return "{left:"+(b==0)+", middle:"+(b==1)+", right:"+(b==2)+"}";
215
};
216
var _1a=function(e){
217
return "{'shift':"+(e.shiftKey)+", 'ctrl':"+(e.ctrlKey)+", 'alt':"+(e.altKey)+"}";
218
};
219
dojo.connect(document,"onkeydown",function(e){
220
if((e.keyCode==dojo.keys.ENTER||e.keyCode==77)&&e.ctrlKey&&e.altKey){
221
dojo.stopEvent(e);
222
_11();
223
}
224
});
225
var _1b={type:""};
226
var _1c=function(e){
227
if(!e||_1b.type==e.type&&_1b.button==e.button){
228
return;
229
}
230
_1b={type:e.type,button:e.button};
231
var _1d=_16(e.target);
232
var _1e=dojo.coords(e.target);
233
_9("doh.robot.mouseMoveAt",[_1d,0,100,e.clientX-_1e.x,e.clientY-_1e.y]);
234
_9("doh.robot.mousePress",[_19(e.button-(dojo.isIE?1:0)),0]);
235
};
236
var _1f=function(e){
237
if(!e||_1b.type==e.type&&_1b.button==e.button){
238
return;
239
}
240
_1b={type:e.type,button:e.button};
241
var _20=_16(e.target);
242
var _21=dojo.coords(e.target);
243
_9("doh.robot.mouseClick",[_19(e.button-(dojo.isIE?1:0)),0]);
244
};
245
var _22=function(e){
246
if(!e||_1b.type==e.type&&_1b.button==e.button){
247
return;
248
}
249
_1b={type:e.type,button:e.button};
250
var _23=_16(e.target);
251
var _24=dojo.coords(e.target);
252
_9("doh.robot.mouseRelease",[_19(e.button-(dojo.isIE?1:0)),0]);
253
};
254
var _25=function(e){
255
if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
256
return;
257
}
258
_1b={type:e.type,pageX:e.pageX,pageY:e.pageY};
259
_9("doh.robot.mouseMove",[e.pageX,e.pageY,0,100,true]);
260
};
261
var _26=function(e){
262
if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
263
return;
264
}
265
_1b={type:e.type,detail:(e.detail?(e.detail):(-e.wheelDelta/120))};
266
_9("doh.robot.mouseWheel",[_1b.detail]);
267
};
268
var _27=function(e){
269
if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
270
return;
271
}
272
_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
273
_9("doh.robot.keyPress",[e.charOrCode==dojo.keys.SPACE?" ":e.charOrCode,0,_1a(e)]);
274
};
275
var _28=function(e){
276
if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
277
return;
278
}
279
_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
280
};
281
dojo.connect(document,"onmousedown",_1c);
282
dojo.connect(document,"onmouseup",_22);
283
dojo.connect(document,"onclick",_1f);
284
dojo.connect(document,"onkeypress",_27);
285
dojo.connect(document,"onkeyup",_28);
286
dojo.connect(document,"onmousemove",_25);
287
dojo.connect(document,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll",_26);
288
dojo.addOnLoad(function(){
289
if(dojo.window){
290
dojo.connect(dojo.window,"scrollIntoView",function(_29){
291
_9("doh.robot.scrollIntoView",[_16(_29)]);
292
});
293
}
294
});
295
dojo.connect(dojo,"connect",function(_2a,_2b,f){
296
if(_2a&&(!f||!f._mine)){
297
var _2c=null;
298
if(_2b.toLowerCase()=="onmousedown"){
299
_2c=dojo.hitch(this,_1c);
300
}else{
301
if(_2b.toLowerCase()==(!dojo.isMozilla?"onmousewheel":"dommousescroll")){
302
_2c=dojo.hitch(this,_26);
303
}else{
304
if(_2b.toLowerCase()=="onclick"){
305
_2c=dojo.hitch(this,_1f);
306
}else{
307
if(_2b.toLowerCase()=="onmouseup"){
308
_2c=dojo.hitch(this,_22);
309
}else{
310
if(_2b.toLowerCase()=="onkeypress"){
311
_2c=dojo.hitch(this,_27);
312
}else{
313
if(_2b.toLowerCase()=="onkeyup"){
314
_2c=dojo.hitch(this,_28);
315
}
316
}
317
}
318
}
319
}
320
}
321
if(_2c==null){
322
return;
323
}
324
_2c._mine=true;
325
dojo.connect(_2a,_2b,_2c);
326
}
327
});
328
})();
329
}