switched tests to qunit
This commit is contained in:
parent
b3aff50d6a
commit
c78bc6cef5
8 changed files with 2568 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,6 +3,7 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.project
|
.project
|
||||||
.settings
|
.settings
|
||||||
|
lib/tests/pid.txt
|
||||||
|
|
||||||
comicbook
|
comicbook
|
||||||
node_modules
|
node_modules
|
||||||
|
|
7
Makefile
7
Makefile
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
#
|
#
|
||||||
# build package & update examples
|
# build package & update examples
|
||||||
#
|
#
|
||||||
|
@ -28,14 +29,14 @@ build:
|
||||||
@echo "Done"
|
@echo "Done"
|
||||||
|
|
||||||
#
|
#
|
||||||
# run jshint & jasmine tests
|
# run jshint & quint tests
|
||||||
#
|
#
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@./node_modules/.bin/jshint lib/ComicBook.js --config lib/.jshintrc
|
@./node_modules/.bin/jshint lib/ComicBook.js --config lib/.jshintrc
|
||||||
@./node_modules/.bin/jshint lib/tests/spec/*.js --config lib/.jshintrc
|
@./node_modules/.bin/jshint lib/tests/unit/*.js --config lib/.jshintrc
|
||||||
@node lib/tests/server.js &
|
@node lib/tests/server.js &
|
||||||
@./node_modules/.bin/phantomjs lib/tests/run-jasmine.js http://127.0.0.1:3000/lib/tests/SpecRunner.html
|
@./node_modules/.bin/phantomjs lib/tests/phantom.js "http://localhost:3000/lib/tests"
|
||||||
@kill -9 `cat lib/tests/pid.txt`
|
@kill -9 `cat lib/tests/pid.txt`
|
||||||
@rm lib/tests/pid.txt
|
@rm lib/tests/pid.txt
|
||||||
|
|
||||||
|
|
27
lib/tests/index.html
Normal file
27
lib/tests/index.html
Normal 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
63
lib/tests/phantom.js
Normal 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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
53
lib/tests/unit/ComicBook.js
Normal file
53
lib/tests/unit/ComicBook.js
Normal 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
24
lib/tests/unit/logger.js
Normal 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
244
lib/tests/vendor/qunit-1.11.0.css
vendored
Normal 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
2152
lib/tests/vendor/qunit-1.11.0.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue