QUnit tests for some javascript helpers

This commit is contained in:
Gina Häußge 2015-08-27 10:29:31 +02:00
parent 097800ae9c
commit b5a338d6e5
5 changed files with 4350 additions and 0 deletions

View file

@ -0,0 +1,291 @@
/*!
* QUnit 1.18.0
* http://qunitjs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-04-03T10:23Z
*/
/** 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: 400;
border-radius: 5px 5px 0 0;
}
#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 0.5em 0 0.1em;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 1em 0.5em 1em;
color: #5E740B;
background-color: #EEE;
overflow: hidden;
}
#qunit-userAgent {
padding: 0.5em 1em 0.5em 1em;
background-color: #2B81AF;
color: #FFF;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
#qunit-modulefilter-container {
float: right;
padding: 0.2em;
}
.qunit-url-config {
display: inline-block;
padding: 0.1em;
}
.qunit-filter {
display: block;
float: right;
margin-left: 1em;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 1em 0.4em 1em;
border-bottom: 1px solid #FFF;
list-style-position: inside;
}
#qunit-tests > li {
display: none;
}
#qunit-tests li.running,
#qunit-tests li.pass,
#qunit-tests li.fail,
#qunit-tests li.skipped {
display: list-item;
}
#qunit-tests.hidepass li.running,
#qunit-tests.hidepass li.pass {
visibility: hidden;
position: absolute;
width: 0px;
height: 0px;
padding: 0;
border: 0;
margin: 0;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li.skipped strong {
cursor: default;
}
#qunit-tests li a {
padding: 0.5em;
color: #C2CCD1;
text-decoration: none;
}
#qunit-tests li p a {
padding: 0.25em;
color: #6B6464;
}
#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;
}
.qunit-collapsed {
display: none;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: 0.2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 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: #000; }
#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: #999; }
#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;
}
#qunit-tests .fail { color: #000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: #008000; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/*** Skipped tests */
#qunit-tests .skipped {
background-color: #EBECE9;
}
#qunit-tests .qunit-skipped-label {
background-color: #F4FF77;
display: inline-block;
font-style: normal;
color: #366097;
line-height: 1.8em;
padding: 0 0.5em;
margin: -0.4em 0.4em -0.4em 0;
}
/** Result */
#qunit-testresult {
padding: 0.5em 1em 0.5em 1em;
color: #2B81AF;
background-color: #D2E0E6;
border-bottom: 1px solid #FFF;
}
#qunit-testresult .module-name {
font-weight: 700;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,133 @@
/*
* Parameterize v 0.4
* A QUnit Addon For Running Parameterized Tests
* https://github.com/AStepaniuk/qunit-parameterize
* Released under the MIT license.
*/
QUnit.extend(QUnit, {
cases : function(testCases) {
var currentCases = testCases;
var createTest = function(methodName, title, expected, callback, parameters) {
QUnit[methodName](
title,
expected,
function(assert) { return callback.call(this, parameters, assert); }
);
};
var iterateTestCases = function(methodName, title, expected, callback) {
if (!currentCases || currentCases.length == 0) {
// setup test which will always fail
QUnit.test(title, function(assert) {
assert.ok(false, "No test cases are provided");
});
return;
}
if (!callback) {
callback = expected;
expected = null;
}
for (var i = 0; i < currentCases.length; ++i) {
var parameters = currentCases[i];
var testCaseTitle = title;
if (parameters.title) {
testCaseTitle += "[" + parameters.title + "]";
}
createTest(methodName, testCaseTitle, expected, callback, parameters);
}
}
var getLength = function(arr) {
return arr ? arr.length : 0;
}
var getItem = function(arr, idx) {
return arr ? arr[idx] : undefined;
}
var mix = function(testCase, mixData) {
if (testCase && mixData) {
var result = clone(testCase);
for(var p in mixData) {
if (p !== "title") {
if (!(p in result)) result[p] = mixData[p];
} else {
result[p] = [result[p], mixData[p]].join("");
}
}
return result;
} else if (testCase) {
return testCase;
} else if (mixData) {
return mixData;
} else {
// return null or undefined whatever testCase is
return testCase;
}
}
var clone = function(testCase) {
var result = {};
for (var p in testCase) {
result[p] = testCase[p];
}
return result;
}
return {
sequential : function(addData) {
var casesLength = getLength(currentCases);
var addDataLength = getLength(addData);
var length = casesLength > addDataLength ? casesLength : addDataLength;
var newCases = [];
for (var i = 0; i < length; ++i) {
var currentCaseI = getItem(currentCases, i);
var dataI = getItem(addData, i);
var newCase = mix(currentCaseI, dataI);
if (newCase) newCases.push(newCase);
}
currentCases = newCases;
return this;
},
combinatorial : function(mixData) {
var current = (currentCases && currentCases.length > 0) ? currentCases : [ null ];
mixData = (mixData && mixData.length > 0) ? mixData : [ null ];
var currentLength = current.length;
var mixDataLength = mixData.length;
var newCases = [];
for (var i = 0; i < currentLength; ++i) {
for(var j = 0; j < mixDataLength; ++j) {
var currentCaseI = current[i];
var dataJ = mixData[j];
var newCase = mix(currentCaseI, dataJ);
if (newCase) newCases.push(newCase);
}
}
currentCases = newCases;
return this;
},
test : function(title, expected, callback) {
iterateTestCases("test", title, expected, callback);
return this;
},
asyncTest : function(title, expected, callback) {
iterateTestCases("asyncTest", title, expected, callback);
return this;
}
}
}
});

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>src/octoprint/static/js/app/helpers.js Tests</title>
<link rel="stylesheet" href="lib/qunit-1.18.0.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="lib/qunit-1.18.0.js"></script>
<script src="lib/qunit-parameterize.js"></script>
<script src="../../../src/octoprint/static/js/lib/lodash.min.js"></script>
<script src="../../../src/octoprint/static/js/lib/sprintf.min.js"></script>
<script src="../../../src/octoprint/static/js/app/helpers.js"></script>
<script src="test-helpers.js"></script>
</body>
</html>

View file

@ -0,0 +1,80 @@
_.mixin({"sprintf": sprintf, "vsprintf": vsprintf});
QUnit.module("bytesFromSize");
QUnit
.cases(function(){
var cases = [];
var params = [
// empty inputs
{ input: undefined, expected: undefined },
{ input: "", expected: undefined },
// unknown units
{ input: "1 PB", expected: undefined },
{ input: "234.5 unknown", expected: undefined },
{ input: "234.5unknown", expected: undefined },
// conversion
{ input: "1", expected: 1 },
{ input: "1b", expected: 1 },
{ input: "1 B", expected: 1 },
{ input: "1 byte", expected: 1 },
{ input: "1 bYtES", expected: 1 },
{ input: "1.1", expected: 1.1 },
{ input: ".1", expected: 0.1 },
{ input: "1 KB", expected: 1024 },
{ input: "2 KB", expected: 2048 },
{ input: "1 MB", expected: Math.pow(1024, 2)},
{ input: "500mb", expected: 500 * Math.pow(1024, 2)},
{ input: "500.2mb", expected: 500.2 * Math.pow(1024, 2)},
{ input: "1 GB", expected: Math.pow(1024, 3)},
{ input: "1 TB", expected: Math.pow(1024, 4)}
];
var param, i;
for (i = 0; i < params.length; i++) {
param = params[i];
param["title"] = param.input != undefined ? '"' + String(param.input) + '"' : "undefined";
cases.push(param);
}
return cases;
}())
.test("bytesFromSize", function(params, assert) {
assert.equal(params.expected, bytesFromSize(params.input), "As expected: " + String(params.expected));
}
);
QUnit.module("formatSize");
QUnit
.cases(function(){
var cases = [];
var params = [
{ input: undefined, expected: "-" },
{ input: "", expected: "-" },
{ input: 1, expected: "1.0bytes" },
{ input: 1.1, expected: "1.1bytes" },
{ input: 1024, expected: "1.0KB" },
{ input: 2048, expected: "2.0KB" },
{ input: 2.2 * 1024, expected: "2.2KB" },
{ input: 23.5 * Math.pow(1024, 2), expected: "23.5MB" },
{ input: 23.5 * Math.pow(1024, 3), expected: "23.5GB" },
{ input: 23.5 * Math.pow(1024, 4), expected: "23.5TB" },
{ input: 2 * Math.pow(1024, 5), expected: "2048.0TB" }
];
var param, i;
for (i = 0; i < params.length; i++) {
param = params[i];
param["title"] = String(param.input);
cases.push(param);
}
return cases;
}())
.test("formatSize", function(params, assert) {
assert.equal(params.expected, formatSize(params.input), "As expected: " + String(params.expected));
}
);