switched tests to qunit

This commit is contained in:
Bala Clark 2013-05-09 23:55:29 +02:00
parent b3aff50d6a
commit c78bc6cef5
8 changed files with 2568 additions and 3 deletions

27
lib/tests/index.html Normal file
View file

@ -0,0 +1,27 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Comic Book Reader Test Suite</title>
<script src="../vendor/jquery-2.0.0.min.js"></script>
<link rel="stylesheet" href="vendor/qunit-1.11.0.css" type="text/css" media="screen" />
<script src="vendor/qunit-1.11.0.js"></script>
<script src="unit/logger.js"></script>
<script src="../vendor/pixastic/pixastic.js"></script>
<script src="../vendor/pixastic/pixastic.effects.js"></script>
<script src="../vendor/pixastic/pixastic.worker.js"></script>
<script src="../vendor/handlebars.runtime-1.0.rc.1.min.js"></script>
<script src="../templates.js"></script>
<script src="../Comicbook.js"></script>
<script src="unit/ComicBook.js"></script>
</head>
<body>
<div>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</div>
</body>
</html>

63
lib/tests/phantom.js Normal file
View file

@ -0,0 +1,63 @@
// Simple phantom.js integration script
// Taken from Twitter Bootstrap
function waitFor(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5001 //< Default Max Timout is 5s
, start = new Date().getTime()
, condition = false
, interval = setInterval(function () {
if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()) //< defensive code
} else {
if (!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout")
phantom.exit(1)
} else {
// Condition fulfilled (timeout and/or condition is 'true')
typeof(onReady) === "string" ? eval(onReady) : onReady() //< Do what it's supposed to do once the condition is fulfilled
clearInterval(interval) //< Stop this interval
}
}
}, 100) //< repeat check every 100ms
}
if (phantom.args.length === 0 || phantom.args.length > 2) {
console.log('Usage: phantom.js URL')
phantom.exit()
}
var page = new WebPage()
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
page.onConsoleMessage = function(msg) {
console.log(msg)
};
page.open(phantom.args[0], function(status){
if (status !== "success") {
console.log("Unable to access network")
phantom.exit()
} else {
waitFor(function(){
return page.evaluate(function(){
var el = document.getElementById('qunit-testresult')
if (el && el.innerText.match('completed')) {
return true
}
return false
})
}, function(){
var failedNum = page.evaluate(function(){
var el = document.getElementById('qunit-testresult')
try {
return el.getElementsByClassName('failed')[0].innerHTML
} catch (e) { }
return 10000
});
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0)
})
}
})

View file

@ -0,0 +1,53 @@
/* global $: false, module: false, test: false, equal: false, ComicBook: false console: false */
$(function () {
'use strict';
var $fixture;
var book;
module('ComicBook', {
setup: function () {
$fixture = $('#qunit-fixture');
$fixture.append('<canvas id="comic"></canvas>');
book = new ComicBook(
'comic',
['img/1.png','img/2.png','img/3.png','img/4.png','img/5.png','img/6.png'],
{ libPath: '../vendor/' }
);
// book.draw();
},
teardown: function () {
}
});
test('render all controls on draw', function () {
equal($('.cb-control, .toolbar').length, 0, 'book not drawn yet, nothing should be rendered');
book.draw();
equal($('.cb-control, .toolbar').length, 5, 'All toolbar elements should have rendered after book.draw');
});
// navigate on keyboard
// don't navigate if nothing left
// show current page
// customise keyboard control
// dropdown menus
// apply effects
// maximise
// minimise
// fit width
// single page / double page
// single page should allow double page spreads
// preloading
// update hash
// resume based on hash
// load from middle of page
// emit custom events based on data-attributes
// destroy
});

24
lib/tests/unit/logger.js Normal file
View file

@ -0,0 +1,24 @@
/* jshint strict: false */
/* global console: false, QUnit: false */
// Logging setup for phantom integration
// Taken from Twitter Bootstrap
QUnit.begin = function () {
console.log('Starting test suite');
console.log('================================================\n');
};
QUnit.moduleDone = function (opts) {
if (opts.failed === 0) {
console.log('\u2714 All tests passed in "' + opts.name + '" module');
} else {
console.log('\u2716 ' + opts.failed + ' tests failed in "' + opts.name + '" module');
}
};
QUnit.done = function (opts) {
console.log('\n================================================');
console.log('Tests completed in ' + opts.runtime + ' milliseconds');
console.log(opts.passed + ' tests of ' + opts.total + ' passed, ' + opts.failed + ' failed.');
};

244
lib/tests/vendor/qunit-1.11.0.css vendored Normal file
View file

@ -0,0 +1,244 @@
/**
* QUnit v1.11.0 - A JavaScript Unit Testing Framework
*
* http://qunitjs.com
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-testrunner-toolbar label {
display: inline-block;
padding: 0 .5em 0 .1em;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
overflow: hidden;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
#qunit-modulefilter-container {
float: right;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests li .runtime {
float: right;
font-size: smaller;
}
.qunit-assert-list {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.qunit-collapsed {
display: none;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
padding: 5px;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #3c510c;
background-color: #fff;
border-left: 10px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 10px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
#qunit-testresult .module-name {
font-weight: bold;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}

2152
lib/tests/vendor/qunit-1.11.0.js vendored Normal file

File diff suppressed because it is too large Load diff