/*
	Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved.
	Available via Academic Free License >= 2.1 OR the modified BSD license.
	see: http://dojotoolkit.org/license for details
*/


if(!dojo._hasResource["dojox.testing.DocTest"]){
dojo._hasResource["dojox.testing.DocTest"]=true;
dojo.provide("dojox.testing.DocTest");
dojo.require("dojo.string");
dojo.declare("dojox.testing.DocTest",null,{errors:[],getTests:function(_1){
var _2=dojo.moduleUrl(_1).path;
var _3=_2.substring(0,_2.length-1)+".js";
var _4=dojo.xhrGet({url:_3,handleAs:"text"});
var _5=dojo._getText(_3);
return this._getTestsFromString(_5,true);
},getTestsFromString:function(_6){
return this._getTestsFromString(_6,false);
},_getTestsFromString:function(_7,_8){
var _9=dojo.hitch(dojo.string,"trim");
var _a=_7.split("\n");
var _b=_a.length;
var _c=[];
var _d={commands:[],expectedResult:[],line:null};
for(var i=0;i<_b+1;i++){
var l=_9(_a[i]||"");
if((_8&&l.match(/^\/\/\s+>>>\s.*/))||l.match(/^\s*>>>\s.*/)){
if(!_d.line){
_d.line=i+1;
}
if(_d.expectedResult.length>0){
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
_d={commands:[],expectedResult:[],line:i+1};
}
l=_8?_9(l).substring(2,l.length):l;
l=_9(l).substring(3,l.length);
_d.commands.push(_9(l));
}else{
if((!_8||l.match(/^\/\/\s+.*/))&&_d.commands.length&&_d.expectedResult.length==0){
l=_8?_9(l).substring(3,l.length):l;
_d.expectedResult.push(_9(l));
}else{
if(_d.commands.length>0&&_d.expectedResult.length){
if(!_8||l.match(/^\/\/\s*$/)){
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
}
if(_8&&!l.match(/^\/\//)){
_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
}
_d={commands:[],expectedResult:[],line:0};
}
}
}
}
return _c;
},run:function(_10){
this.errors=[];
var _11=this.getTests(_10);
if(_11){
this._run(_11);
}
},_run:function(_12){
var len=_12.length;
this.tests=len;
var oks=0;
for(var i=0;i<len;i++){
var t=_12[i];
var res=this.runTest(t.commands,t.expectedResult);
var msg="Test "+(i+1)+": ";
var _19=t.commands.join(" ");
_19=(_19.length>50?_19.substr(0,50)+"...":_19);
if(res.success){

oks+=1;
}else{
this.errors.push({commands:t.commands,actual:res.actualResult,expected:t.expectedResult});
console.error(msg+"Failed: "+_19,{commands:t.commands,actualResult:res.actualResult,expectedResult:t.expectedResult});
}
}

},runTest:function(_1a,_1b){
var ret={success:false,actualResult:null};
var _1d=_1a.join("\n");
ret.actualResult=eval(_1d);
if((String(ret.actualResult)==_1b)||(dojo.toJson(ret.actualResult)==_1b)||((_1b.charAt(0)=="\"")&&(_1b.charAt(_1b.length-1)=="\"")&&(String(ret.actualResult)==_1b.substring(1,_1b.length-1)))){
ret.success=true;
}
return ret;
}});
}
