var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;input=Base64._utf8_encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
output=output+
this._keyStr.charAt(enc1)+this._keyStr.charAt(enc2)+
this._keyStr.charAt(enc3)+this._keyStr.charAt(enc4);}
return output;},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
if(enc4!=64){output=output+String.fromCharCode(chr3);}}
output=Base64._utf8_decode(output);return output;},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128);}}
return utftext;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
return string;}}
function testdone(name,callback)
{if(callback===undefined)
{callback=name
name="render"}
var def=new $.Deferred();var time=50
setTimeout(function(name){setTimeout(function(){if(callback)
{callback(name)}
def.resolve()},time)},time,name,0)
return def.promise();}
function saveReport()
{$("body").html('<div id="qunit-saveReport"></div><div id="qunit">'+$("#qunit").html()+'</div>');$("body").append('<link rel="stylesheet" href="'+hostname+window.guiStaticPath+'js/tests/phantomjs/qunit/qunit-2.2.1.css">')
console.log("saveReport")}
window.qunitTestsArray={}
function injectQunit()
{$("body").append('<link rel="stylesheet" href="'+hostname+window.guiStaticPath+'js/tests/phantomjs/qunit/qunit-2.2.1.css">')
$("body").append('<script src="'+hostname+window.guiStaticPath+'js/tests/phantomjs/qunit/qunit-2.2.1.js"></script>')
$("body").append('<div id="qunit"></div><div id="qunit-fixture"></div>')
var intervalId=setInterval(function()
{if(!window.QUnit)
{return;}
console.log("Начинаем тесты от Qunit");clearInterval(intervalId)
QUnit.done(function(details){console.log("Total: "+details.total+" Failed: "+details.failed+" Passed: "+details.passed+" Runtime: "+details.runtime);});QUnit.testDone(function(details){var result={"Module name":details.module,"Test name":details.name,"Assertions":{"Total":details.total,"Passed":details.passed,"Failed":details.failed},"Skipped":details.skipped,"Runtime":details.runtime};if(!syncQUnit.nextTest())
{saveReport()
testdone("ok-done",window.close)}})
for(let i in window.qunitTestsArray)
{window.qunitTestsArray[i].test.call()}
syncQUnit.nextTest()},1000)}
syncQUnit={}
syncQUnit.testsArray=[]
syncQUnit.addTest=function(name,test)
{syncQUnit.testsArray.push({name:name,test:test})}
syncQUnit.nextTest=function(name,test)
{if(!syncQUnit.testsArray.length)
{return false;}
var test=syncQUnit.testsArray.shift()
guiPopUp.warning("Test "+test.name+", "+syncQUnit.testsArray.length+" tests remain");QUnit.test(test.name,test.test);return true;}
window.qunitTestsArray['trim']={test:function()
{syncQUnit.addTest('trim',function(assert){var done=assert.async();assert.equal(trim(''),'','Пустая строка');assert.ok(trim('   ')==='','Строка из пробельных символов');assert.equal(trim(),'','Без параметра');assert.equal(trim(' x'),'x','Начальные пробелы');assert.equal(trim('x '),'x','Концевые пробелы');assert.equal(trim(' x '),'x','Пробелы с обоих концов');assert.equal(trim('    x  '),'x','Табы');assert.equal(trim('    x   y  '),'x   y','Табы и пробелы внутри строки не трогаем');testdone(done);});syncQUnit.addTest('trim',function(assert){var done=assert.async();var stringArr=["abc","A \" A","A ' \\ \\\\ \t \\ \ g \" ' \' ",'"','a"b\' g \" \t \ \\ \\\ c',' \' \\ " \t \r  \b \e \c \d \n',];for(var i in stringArr)
{assert.equal(stripslashes(addslashes(stringArr[i])),stringArr[i],"i:"+stringArr[i]);}
testdone(done);});}}