Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / testing / DocTest.js

History | View | Annotate | Download (2.69 KB)

1
/*
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.testing.DocTest"]){
9
dojo._hasResource["dojox.testing.DocTest"]=true;
10
dojo.provide("dojox.testing.DocTest");
11
dojo.require("dojo.string");
12
dojo.declare("dojox.testing.DocTest",null,{errors:[],getTests:function(_1){
13
var _2=dojo.moduleUrl(_1).path;
14
var _3=_2.substring(0,_2.length-1)+".js";
15
var _4=dojo.xhrGet({url:_3,handleAs:"text"});
16
var _5=dojo._getText(_3);
17
return this._getTestsFromString(_5,true);
18
},getTestsFromString:function(_6){
19
return this._getTestsFromString(_6,false);
20
},_getTestsFromString:function(_7,_8){
21
var _9=dojo.hitch(dojo.string,"trim");
22
var _a=_7.split("\n");
23
var _b=_a.length;
24
var _c=[];
25
var _d={commands:[],expectedResult:[],line:null};
26
for(var i=0;i<_b+1;i++){
27
var l=_9(_a[i]||"");
28
if((_8&&l.match(/^\/\/\s+>>>\s.*/))||l.match(/^\s*>>>\s.*/)){
29
if(!_d.line){
30
_d.line=i+1;
31
}
32
if(_d.expectedResult.length>0){
33
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
34
_d={commands:[],expectedResult:[],line:i+1};
35
}
36
l=_8?_9(l).substring(2,l.length):l;
37
l=_9(l).substring(3,l.length);
38
_d.commands.push(_9(l));
39
}else{
40
if((!_8||l.match(/^\/\/\s+.*/))&&_d.commands.length&&_d.expectedResult.length==0){
41
l=_8?_9(l).substring(3,l.length):l;
42
_d.expectedResult.push(_9(l));
43
}else{
44
if(_d.commands.length>0&&_d.expectedResult.length){
45
if(!_8||l.match(/^\/\/\s*$/)){
46
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
47
}
48
if(_8&&!l.match(/^\/\//)){
49
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
50
}
51
_d={commands:[],expectedResult:[],line:0};
52
}
53
}
54
}
55
}
56
return _c;
57
},run:function(_e){
58
this.errors=[];
59
var _f=this.getTests(_e);
60
if(_f){
61
this._run(_f);
62
}
63
},_run:function(_10){
64
var len=_10.length;
65
this.tests=len;
66
var oks=0;
67
for(var i=0;i<len;i++){
68
var t=_10[i];
69
var res=this.runTest(t.commands,t.expectedResult);
70
var msg="Test "+(i+1)+": ";
71
var _11=t.commands.join(" ");
72
_11=(_11.length>50?_11.substr(0,50)+"...":_11);
73
if(res.success){
74
oks+=1;
75
}else{
76
this.errors.push({commands:t.commands,actual:res.actualResult,expected:t.expectedResult});
77
console.error(msg+"Failed: "+_11,{commands:t.commands,actualResult:res.actualResult,expectedResult:t.expectedResult});
78
}
79
}
80
},runTest:function(_12,_13){
81
var ret={success:false,actualResult:null};
82
var _14=_12.join("\n");
83
ret.actualResult=eval(_14);
84
if((String(ret.actualResult)==_13)||(dojo.toJson(ret.actualResult)==_13)||((_13.charAt(0)=="\"")&&(_13.charAt(_13.length-1)=="\"")&&(String(ret.actualResult)==_13.substring(1,_13.length-1)))){
85
ret.success=true;
86
}
87
return ret;
88
}});
89
}