Merge pull request #105 from pistolero/e2e_tests
Added end to end test suite and test for issue #99
This commit is contained in:
commit
7cb6982e57
7 changed files with 2538 additions and 1 deletions
|
|
@ -4,3 +4,4 @@ node_js:
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- grunt test
|
- grunt test
|
||||||
|
- grunt teste2e
|
||||||
|
|
|
||||||
14
Gruntfile.js
14
Gruntfile.js
|
|
@ -102,6 +102,17 @@ module.exports = function(grunt) {
|
||||||
execute: {
|
execute: {
|
||||||
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
|
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
|
||||||
},
|
},
|
||||||
|
qunit: {
|
||||||
|
all: ['tests/e2e/**/*.html']
|
||||||
|
},
|
||||||
|
connect: {
|
||||||
|
server: {
|
||||||
|
options: {
|
||||||
|
port: 8000,
|
||||||
|
base: '.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
clean: {
|
clean: {
|
||||||
options: {force: true},
|
options: {force: true},
|
||||||
generated: [tempFolder]
|
generated: [tempFolder]
|
||||||
|
|
@ -116,9 +127,12 @@ module.exports = function(grunt) {
|
||||||
grunt.loadNpmTasks("grunt-md2html");
|
grunt.loadNpmTasks("grunt-md2html");
|
||||||
grunt.loadNpmTasks("grunt-replace");
|
grunt.loadNpmTasks("grunt-replace");
|
||||||
grunt.loadNpmTasks('grunt-zip');
|
grunt.loadNpmTasks('grunt-zip');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||||
|
|
||||||
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
|
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
|
||||||
grunt.registerTask("test", ["concat", "execute"]);
|
grunt.registerTask("test", ["concat", "execute"]);
|
||||||
|
grunt.registerTask('teste2e', ['connect', 'qunit']);
|
||||||
grunt.registerTask("default", ["build"]);
|
grunt.registerTask("default", ["build"]);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@
|
||||||
"grunt-execute": "*",
|
"grunt-execute": "*",
|
||||||
"grunt-md2html": "*",
|
"grunt-md2html": "*",
|
||||||
"grunt-replace": "*",
|
"grunt-replace": "*",
|
||||||
|
"grunt-contrib-qunit": "*",
|
||||||
|
"grunt-contrib-connect": "*",
|
||||||
"grunt-zip": "*"
|
"grunt-zip": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
244
tests/e2e/libs/qunit.css
Normal file
244
tests/e2e/libs/qunit.css
Normal file
|
|
@ -0,0 +1,244 @@
|
||||||
|
/**
|
||||||
|
* QUnit v1.12.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;
|
||||||
|
}
|
||||||
2212
tests/e2e/libs/qunit.js
Normal file
2212
tests/e2e/libs/qunit.js
Normal file
File diff suppressed because it is too large
Load diff
17
tests/e2e/test.html
Normal file
17
tests/e2e/test.html
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Basic Test Suite</title>
|
||||||
|
<!-- Load local QUnit. -->
|
||||||
|
<link rel="stylesheet" href="libs/qunit.css" media="screen">
|
||||||
|
<script src="libs/qunit.js"></script>
|
||||||
|
<!-- Load local lib and tests. -->
|
||||||
|
<script src="../../mithril.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="qunit"></div>
|
||||||
|
<div id="dummy"></div>
|
||||||
|
</body>
|
||||||
|
<script src="tests.js"></script>
|
||||||
|
</html>
|
||||||
47
tests/e2e/tests.js
Normal file
47
tests/e2e/tests.js
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
var dummyEl = document.getElementById('dummy')
|
||||||
|
|
||||||
|
test('Mithril accessible as window.m', function() {
|
||||||
|
expect(1);
|
||||||
|
ok(window.m);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('array item removal', function() {
|
||||||
|
expect(2);
|
||||||
|
var view1 = m('div', {}, [
|
||||||
|
m('div', {}, '0'),
|
||||||
|
m('div', {}, '1'),
|
||||||
|
m('div', {}, '2')
|
||||||
|
]);
|
||||||
|
|
||||||
|
var view2= m('div', {}, [
|
||||||
|
m('div', {}, '0'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
m.render(dummyEl, view1);
|
||||||
|
equal(dummyEl.innerHTML, '<div><div>0</div><div>1</div><div>2</div></div>', 'view1 rendered correctly');
|
||||||
|
|
||||||
|
m.render(dummyEl, view2);
|
||||||
|
equal(dummyEl.innerHTML, '<div><div>0</div></div>', 'view2 should be rendered correctly');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
test('issue99 regression', function() {
|
||||||
|
// see https://github.com/lhorie/mithril.js/issues/99
|
||||||
|
expect(2);
|
||||||
|
var view1 = m('div', {}, [
|
||||||
|
m('div', {}, '0'),
|
||||||
|
m('div', {}, '1'),
|
||||||
|
m('div', {}, '2')
|
||||||
|
]);
|
||||||
|
|
||||||
|
var view2= m('div', {}, [
|
||||||
|
m('span', {}, '0'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
m.render(dummyEl, view1);
|
||||||
|
equal(dummyEl.innerHTML, '<div><div>0</div><div>1</div><div>2</div></div>', 'view1 rendered correctly');
|
||||||
|
|
||||||
|
m.render(dummyEl, view2);
|
||||||
|
equal(dummyEl.innerHTML, '<div><span>0</span></div>', 'view2 should be rendered correctly');
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue