Ox.load('UI', { debug: true, theme: 'classic' }, function() { Ox.load('Geo', function() { var $div = $('
') .css({ width: window.innerWidth, height: window.innerHeight, overflowY: 'scroll' }) .appendTo(Ox.UI.$body), colors = [ [[255, 64, 64], [224, 32, 32]], [[64, 192, 64], [32, 160, 32]] ], counter = 0, files = [ Ox.PATH + 'Ox.js', Ox.PATH + 'Ox.Geo/Ox.Geo.js' ], tests = []; files.forEach(function(file) { Ox.test(file, function(fileTests) { tests = Ox.merge(tests, fileTests); if (++counter == files.length) { renderTests(); } }); }); function renderTests() { var total = tests.length, succeeded = tests.filter(function(test) { return test.success; }).length, failed = total - succeeded, names = Ox.unique(tests.map(function(test) { return test.name; })).sort(); testsByName = {}; tests.forEach(function(test) { if (!(test.name in testsByName)) { testsByName[test.name] = []; } testsByName[test.name].push(test); }); getBar(total == succeeded) .html( '' + total + ' tests, ' + succeeded + ' succeeded, ' + failed + ' failed' ) .appendTo($div); names.forEach(function(name) { var tests = testsByName[name], total = tests.length, succeeded = tests.filter(function(test) { return test.success; }).length, failed = total - succeeded, classname = name.replace('.', ''); getBar(total == succeeded) .html( '' + name + ' — ' + total + ' test' + (total == 1 ? '' : 's') + ', ' + succeeded + ' succeeded, ' + failed + ' failed' ) .click(function() { $('.' + classname).toggle(); }) .appendTo($div); tests.forEach(function(test) { getBar(test.success, true) .addClass(classname) .html( Ox.repeat(' ', 4) + '> ' + Ox.encodeHTML(test.statement) + ' ==> ' + (test.success ? '' : Ox.encodeHTML(test.actual) + ' !=> ') + Ox.encodeHTML(test.expected) ) .hide() .appendTo($div); }); }); } function getBar(success, darker) { var $div = $('
') .css({ width: window.innerWidth - Ox.UI.SCROLLBAR_SIZE, height: '15px', padding: '4px 8px 4px 8px', fontFamily: 'Menlo, Monaco, Courier', fontSize: '12px', whiteSpace: 'nowrap', MozUserSelect: 'text', WebkitUserSelect: 'text' }); ['moz', 'webkit'].forEach(function(browser) { $div.css({ background: '-' + browser + '-linear-gradient(top, rgb(' + getColor(success, 0) + '), rgb(' + getColor(success, 1) + '))' }); }); function getColor(success, i) { return colors[+success][i].map(function(color) { return color - (darker || 0) * 32; }).join(', ') } return $div; } }); });