QUnit tests for some javascript helpers
This commit is contained in:
parent
097800ae9c
commit
b5a338d6e5
5 changed files with 4350 additions and 0 deletions
291
tests/static/js/lib/qunit-1.18.0.css
Normal file
291
tests/static/js/lib/qunit-1.18.0.css
Normal 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;
|
||||
}
|
||||
3828
tests/static/js/lib/qunit-1.18.0.js
Normal file
3828
tests/static/js/lib/qunit-1.18.0.js
Normal file
File diff suppressed because it is too large
Load diff
133
tests/static/js/lib/qunit-parameterize.js
Normal file
133
tests/static/js/lib/qunit-parameterize.js
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
18
tests/static/js/test-helpers.html
Normal file
18
tests/static/js/test-helpers.html
Normal 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>
|
||||
80
tests/static/js/test-helpers.js
Normal file
80
tests/static/js/test-helpers.js
Normal 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));
|
||||
}
|
||||
);
|
||||
Loading…
Reference in a new issue