window.expect = chai.expect;
window.assert = chai.assert;
window.has_focus = function(elem) {
return !!(elem === document.activeElement);
};
var current_test_label = document.createElement('h1');
current_test_label.setAttribute('style', 'white-space:nowrap;overflow:hidden');
document.body.appendChild(current_test_label);
var sandbox = document.createElement('div');
sandbox.setAttribute('role','main');
document.body.appendChild(sandbox);
var IS_MAC = /Mac/.test(navigator.userAgent);
var shortcut_key = IS_MAC ? 'meta' : 'ctrl';
var test_number = 0;
var teardownLast = function(){
if( window.test_last ){
if( window.test_last.instance ){
window.test_last.instance.destroy();
delete window.test_last.instance;
}
sandbox.innerHTML = '';
window.test_last = null;
}
}
var test_html = {
AB_Multi : '',
AB_Single : '',
AB_Single_Long : '',
}
Array.prototype.foo = function(){
return true;
}
window.setup_test = function(html, options, callback) {
var instance, select;
teardownLast();
if( html in test_html ){
html = test_html[html];
}
if( typeof html == 'string' ){
sandbox.innerHTML = html;
}else{
sandbox.append(html);
}
select = sandbox.querySelector('.setup-here');
if( !select ){
select = sandbox.firstChild;
}
if( select.nodeName == 'SELECT' || select.nodeName == 'INPUT' ){
instance = tomSelect(select,options);
}
var test = window.test_last = {
html: sandbox.firstChild,
select: select,
callback: callback,
instance: instance
};
return test;
};
/**
* Create a test with two options
*
*/
window.ABTestSingle = function(options){
return setup_test('ABTestSingle', options);
};
after(function() {
window.teardownLast();
});
var it_n = function(label,orig_func){
var new_func;
label = (test_number++) + ' - ' + label
if( orig_func.length > 0 ){
new_func = function(done){
current_test_label.textContent = label;
return orig_func.call(this,done);
};
}else{
var func = orig_func.toString();
if( func.match(/(\s|syn\.)(type|click)\(/) ){
throw 'test should be async or use done():'+func;
}
new_func = function(){
current_test_label.textContent = label;
return orig_func.call(this);
};
}
it.call( this, label, new_func );
}
var click = function(el, cb) {
syn.click(el).delay(100, cb);
};
function isVisible(el){
return (el.offsetParent !== null)
}