summaryrefslogtreecommitdiffstats
path: root/docs/com/test
diff options
context:
space:
mode:
authorMorgan Richomme <morgan.richomme@orange.com>2016-10-14 09:13:38 +0000
committerGerrit Code Review <gerrit@opnfv.org>2016-10-14 09:13:38 +0000
commitcfb353b01c2dd21007db01c2d18a5cbd415689b8 (patch)
tree16cd87a5c956af7bb0126e068d0702dda0f9768e /docs/com/test
parent733dbe143cd4d37787cdb167021129b9ffac78fa (diff)
parent6bb45e4d1ba014c1dd33bedff49be8afa9426d17 (diff)
Merge "remove 3rd part files with MIT or BSD license"
Diffstat (limited to 'docs/com/test')
-rwxr-xr-xdocs/com/test/examples/assets/image1.pngbin21991 -> 0 bytes
-rwxr-xr-xdocs/com/test/examples/assets/image2.pngbin10237 -> 0 bytes
-rwxr-xr-xdocs/com/test/examples/barebones.html41
-rwxr-xr-xdocs/com/test/examples/embedded-media.html49
-rwxr-xr-xdocs/com/test/examples/math.html185
-rwxr-xr-xdocs/com/test/examples/slide-backgrounds.html144
-rwxr-xr-xdocs/com/test/examples/slide-transitions.html101
-rwxr-xr-xdocs/com/test/qunit-1.12.0.css244
-rwxr-xr-xdocs/com/test/qunit-1.12.0.js2212
-rwxr-xr-xdocs/com/test/test-markdown-element-attributes.html134
-rwxr-xr-xdocs/com/test/test-markdown-element-attributes.js46
-rwxr-xr-xdocs/com/test/test-markdown-slide-attributes.html128
-rwxr-xr-xdocs/com/test/test-markdown-slide-attributes.js47
-rwxr-xr-xdocs/com/test/test-markdown.html52
-rwxr-xr-xdocs/com/test/test-markdown.js15
-rwxr-xr-xdocs/com/test/test-pdf.html83
-rwxr-xr-xdocs/com/test/test-pdf.js15
-rwxr-xr-xdocs/com/test/test.html86
-rwxr-xr-xdocs/com/test/test.js597
19 files changed, 0 insertions, 4179 deletions
diff --git a/docs/com/test/examples/assets/image1.png b/docs/com/test/examples/assets/image1.png
deleted file mode 100755
index 87475945d..000000000
--- a/docs/com/test/examples/assets/image1.png
+++ /dev/null
Binary files differ
diff --git a/docs/com/test/examples/assets/image2.png b/docs/com/test/examples/assets/image2.png
deleted file mode 100755
index 6c403a0d2..000000000
--- a/docs/com/test/examples/assets/image2.png
+++ /dev/null
Binary files differ
diff --git a/docs/com/test/examples/barebones.html b/docs/com/test/examples/barebones.html
deleted file mode 100755
index 2bee3cb02..000000000
--- a/docs/com/test/examples/barebones.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Barebones</title>
-
- <link rel="stylesheet" href="../../css/reveal.css">
- </head>
-
- <body>
-
- <div class="reveal">
-
- <div class="slides">
-
- <section>
- <h2>Barebones Presentation</h2>
- <p>This example contains the bare minimum includes and markup required to run a reveal.js presentation.</p>
- </section>
-
- <section>
- <h2>No Theme</h2>
- <p>There's no theme included, so it will fall back on browser defaults.</p>
- </section>
-
- </div>
-
- </div>
-
- <script src="../../js/reveal.js"></script>
-
- <script>
-
- Reveal.initialize();
-
- </script>
-
- </body>
-</html>
diff --git a/docs/com/test/examples/embedded-media.html b/docs/com/test/examples/embedded-media.html
deleted file mode 100755
index bbad4be3b..000000000
--- a/docs/com/test/examples/embedded-media.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Embedded Media</title>
-
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-
- <link rel="stylesheet" href="../../css/reveal.css">
- <link rel="stylesheet" href="../../css/theme/default.css" id="theme">
- </head>
-
- <body>
-
- <div class="reveal">
-
- <div class="slides">
-
- <section>
- <h2>Embedded Media Test</h2>
- </section>
-
- <section>
- <iframe data-autoplay width="420" height="345" src="http://www.youtube.com/embed/l3RQZ4mcr1c"></iframe>
- </section>
-
- <section>
- <h2>Empty Slide</h2>
- </section>
-
- </div>
-
- </div>
-
- <script src="../../lib/js/head.min.js"></script>
- <script src="../../js/reveal.js"></script>
-
- <script>
-
- Reveal.initialize({
- transition: 'linear'
- });
-
- </script>
-
- </body>
-</html>
diff --git a/docs/com/test/examples/math.html b/docs/com/test/examples/math.html
deleted file mode 100755
index 1b80e034d..000000000
--- a/docs/com/test/examples/math.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Math Plugin</title>
-
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-
- <link rel="stylesheet" href="../../css/reveal.css">
- <link rel="stylesheet" href="../../css/theme/night.css" id="theme">
- </head>
-
- <body>
-
- <div class="reveal">
-
- <div class="slides">
-
- <section>
- <h2>reveal.js Math Plugin</h2>
- <p>A thin wrapper for MathJax</p>
- </section>
-
- <section>
- <h3>The Lorenz Equations</h3>
-
- \[\begin{aligned}
- \dot{x} &amp; = \sigma(y-x) \\
- \dot{y} &amp; = \rho x - y - xz \\
- \dot{z} &amp; = -\beta z + xy
- \end{aligned} \]
- </section>
-
- <section>
- <h3>The Cauchy-Schwarz Inequality</h3>
-
- <script type="math/tex; mode=display">
- \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)
- </script>
- </section>
-
- <section>
- <h3>A Cross Product Formula</h3>
-
- \[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix}
- \mathbf{i} &amp; \mathbf{j} &amp; \mathbf{k} \\
- \frac{\partial X}{\partial u} &amp; \frac{\partial Y}{\partial u} &amp; 0 \\
- \frac{\partial X}{\partial v} &amp; \frac{\partial Y}{\partial v} &amp; 0
- \end{vmatrix} \]
- </section>
-
- <section>
- <h3>The probability of getting \(k\) heads when flipping \(n\) coins is</h3>
-
- \[P(E) = {n \choose k} p^k (1-p)^{ n-k} \]
- </section>
-
- <section>
- <h3>An Identity of Ramanujan</h3>
-
- \[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
- 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
- {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
- </section>
-
- <section>
- <h3>A Rogers-Ramanujan Identity</h3>
-
- \[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
- \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}\]
- </section>
-
- <section>
- <h3>Maxwell&#8217;s Equations</h3>
-
- \[ \begin{aligned}
- \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} &amp; = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} &amp; = 4 \pi \rho \\
- \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} &amp; = \vec{\mathbf{0}} \\
- \nabla \cdot \vec{\mathbf{B}} &amp; = 0 \end{aligned}
- \]
- </section>
-
- <section>
- <section>
- <h3>The Lorenz Equations</h3>
-
- <div class="fragment">
- \[\begin{aligned}
- \dot{x} &amp; = \sigma(y-x) \\
- \dot{y} &amp; = \rho x - y - xz \\
- \dot{z} &amp; = -\beta z + xy
- \end{aligned} \]
- </div>
- </section>
-
- <section>
- <h3>The Cauchy-Schwarz Inequality</h3>
-
- <div class="fragment">
- \[ \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
- </div>
- </section>
-
- <section>
- <h3>A Cross Product Formula</h3>
-
- <div class="fragment">
- \[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix}
- \mathbf{i} &amp; \mathbf{j} &amp; \mathbf{k} \\
- \frac{\partial X}{\partial u} &amp; \frac{\partial Y}{\partial u} &amp; 0 \\
- \frac{\partial X}{\partial v} &amp; \frac{\partial Y}{\partial v} &amp; 0
- \end{vmatrix} \]
- </div>
- </section>
-
- <section>
- <h3>The probability of getting \(k\) heads when flipping \(n\) coins is</h3>
-
- <div class="fragment">
- \[P(E) = {n \choose k} p^k (1-p)^{ n-k} \]
- </div>
- </section>
-
- <section>
- <h3>An Identity of Ramanujan</h3>
-
- <div class="fragment">
- \[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
- 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
- {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
- </div>
- </section>
-
- <section>
- <h3>A Rogers-Ramanujan Identity</h3>
-
- <div class="fragment">
- \[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
- \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}\]
- </div>
- </section>
-
- <section>
- <h3>Maxwell&#8217;s Equations</h3>
-
- <div class="fragment">
- \[ \begin{aligned}
- \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} &amp; = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} &amp; = 4 \pi \rho \\
- \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} &amp; = \vec{\mathbf{0}} \\
- \nabla \cdot \vec{\mathbf{B}} &amp; = 0 \end{aligned}
- \]
- </div>
- </section>
- </section>
-
- </div>
-
- </div>
-
- <script src="../../lib/js/head.min.js"></script>
- <script src="../../js/reveal.js"></script>
-
- <script>
-
- Reveal.initialize({
- history: true,
- transition: 'linear',
-
- math: {
- // mathjax: 'http://cdn.mathjax.org/mathjax/latest/MathJax.js',
- config: 'TeX-AMS_HTML-full'
- },
-
- dependencies: [
- { src: '../../lib/js/classList.js' },
- { src: '../../plugin/math/math.js', async: true }
- ]
- });
-
- </script>
-
- </body>
-</html>
diff --git a/docs/com/test/examples/slide-backgrounds.html b/docs/com/test/examples/slide-backgrounds.html
deleted file mode 100755
index 4e5e40617..000000000
--- a/docs/com/test/examples/slide-backgrounds.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Slide Backgrounds</title>
-
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-
- <link rel="stylesheet" href="../../css/reveal.css">
- <link rel="stylesheet" href="../../css/theme/serif.css" id="theme">
- <style type="text/css" media="screen">
- .slides section.has-dark-background,
- .slides section.has-dark-background h2 {
- color: #fff;
- }
- .slides section.has-light-background,
- .slides section.has-light-background h2 {
- color: #222;
- }
- </style>
- </head>
-
- <body>
-
- <div class="reveal">
-
- <div class="slides">
-
- <section data-background="#00ffff">
- <h2>data-background: #00ffff</h2>
- </section>
-
- <section data-background="#bb00bb">
- <h2>data-background: #bb00bb</h2>
- </section>
-
- <section data-background-color="lightblue">
- <h2>data-background: lightblue</h2>
- </section>
-
- <section>
- <section data-background="#ff0000">
- <h2>data-background: #ff0000</h2>
- </section>
- <section data-background="rgba(0, 0, 0, 0.2)">
- <h2>data-background: rgba(0, 0, 0, 0.2)</h2>
- </section>
- <section data-background="salmon">
- <h2>data-background: salmon</h2>
- </section>
- </section>
-
- <section data-background="rgba(0, 100, 100, 0.2)">
- <section>
- <h2>Background applied to stack</h2>
- </section>
- <section>
- <h2>Background applied to stack</h2>
- </section>
- <section data-background="rgb(66, 66, 66)">
- <h2>Background applied to slide inside of stack</h2>
- </section>
- </section>
-
- <section data-background-transition="slide" data-background="assets/image1.png">
- <h2>Background image</h2>
- </section>
-
- <section>
- <section data-background-transition="slide" data-background="assets/image1.png">
- <h2>Background image</h2>
- </section>
- <section data-background-transition="slide" data-background="assets/image1.png">
- <h2>Background image</h2>
- </section>
- </section>
-
- <section data-background="assets/image2.png" data-background-size="100px" data-background-repeat="repeat" data-background-color="#111">
- <h2>Background image</h2>
- <pre>data-background-size="100px" data-background-repeat="repeat" data-background-color="#111"</pre>
- </section>
-
- <section data-background="#888888">
- <h2>Same background twice (1/2)</h2>
- </section>
- <section data-background="#888888">
- <h2>Same background twice (2/2)</h2>
- </section>
-
- <section data-background-video="https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.mp4,https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.webm">
- <h2>Video background</h2>
- </section>
-
- <section data-background-iframe="https://slides.com">
- <h2>Iframe background</h2>
- </section>
-
- <section>
- <section data-background="#417203">
- <h2>Same background twice vertical (1/2)</h2>
- </section>
- <section data-background="#417203">
- <h2>Same background twice vertical (2/2)</h2>
- </section>
- </section>
-
- <section data-background="#934f4d">
- <h2>Same background from horizontal to vertical (1/3)</h2>
- </section>
- <section>
- <section data-background="#934f4d">
- <h2>Same background from horizontal to vertical (2/3)</h2>
- </section>
- <section data-background="#934f4d">
- <h2>Same background from horizontal to vertical (3/3)</h2>
- </section>
- </section>
-
- </div>
-
- </div>
-
- <script src="../../lib/js/head.min.js"></script>
- <script src="../../js/reveal.js"></script>
-
- <script>
-
- // Full list of configuration options available here:
- // https://github.com/hakimel/reveal.js#configuration
- Reveal.initialize({
- center: true,
- // rtl: true,
-
- transition: 'linear',
- // transitionSpeed: 'slow',
- // backgroundTransition: 'slide'
- });
-
- </script>
-
- </body>
-</html>
diff --git a/docs/com/test/examples/slide-transitions.html b/docs/com/test/examples/slide-transitions.html
deleted file mode 100755
index 88119dc72..000000000
--- a/docs/com/test/examples/slide-transitions.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Slide Transitions</title>
-
- <link rel="stylesheet" href="../../css/reveal.css">
- <link rel="stylesheet" href="../../css/theme/white.css" id="theme">
- <style type="text/css" media="screen">
- .slides section.has-dark-background,
- .slides section.has-dark-background h3 {
- color: #fff;
- }
- .slides section.has-light-background,
- .slides section.has-light-background h3 {
- color: #222;
- }
- </style>
- </head>
-
- <body>
-
- <div class="reveal">
-
- <div class="slides">
-
- <section>
- <h3>Default</h3>
- </section>
-
- <section>
- <h3>Default</h3>
- </section>
-
- <section data-transition="zoom">
- <h3>data-transition: zoom</h3>
- </section>
-
- <section data-transition="zoom-in fade-out">
- <h3>data-transition: zoom-in fade-out</h3>
- </section>
-
- <section>
- <h3>Default</h3>
- </section>
-
- <section data-transition="convex">
- <h3>data-transition: convex</h3>
- </section>
-
- <section data-transition="convex-in concave-out">
- <h3>data-transition: convex-in concave-out</h3>
- </section>
-
- <section>
- <section data-transition="zoom">
- <h3>Default</h3>
- </section>
- <section data-transition="concave">
- <h3>data-transition: concave</h3>
- </section>
- <section data-transition="convex-in fade-out">
- <h3>data-transition: convex-in fade-out</h3>
- </section>
- <section>
- <h3>Default</h3>
- </section>
- </section>
-
- <section data-transition="none">
- <h3>data-transition: none</h3>
- </section>
-
- <section>
- <h3>Default</h3>
- </section>
-
- </div>
-
- </div>
-
- <script src="../../lib/js/head.min.js"></script>
- <script src="../../js/reveal.js"></script>
-
- <script>
-
- Reveal.initialize({
- center: true,
- history: true,
-
- // transition: 'slide',
- // transitionSpeed: 'slow',
- // backgroundTransition: 'slide'
- });
-
- </script>
-
- </body>
-</html>
diff --git a/docs/com/test/qunit-1.12.0.css b/docs/com/test/qunit-1.12.0.css
deleted file mode 100755
index 00ac1d3c7..000000000
--- a/docs/com/test/qunit-1.12.0.css
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * 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;
-} \ No newline at end of file
diff --git a/docs/com/test/qunit-1.12.0.js b/docs/com/test/qunit-1.12.0.js
deleted file mode 100755
index 61af483d2..000000000
--- a/docs/com/test/qunit-1.12.0.js
+++ /dev/null
@@ -1,2212 +0,0 @@
-/**
- * QUnit v1.12.0 - A JavaScript Unit Testing Framework
- *
- * http://qunitjs.com
- *
- * Copyright 2013 jQuery Foundation and other contributors
- * Released under the MIT license.
- * https://jquery.org/license/
- */
-
-(function( window ) {
-
-var QUnit,
- assert,
- config,
- onErrorFnPrev,
- testId = 0,
- fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- // Keep a local reference to Date (GH-283)
- Date = window.Date,
- setTimeout = window.setTimeout,
- defined = {
- setTimeout: typeof window.setTimeout !== "undefined",
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch( e ) {
- return false;
- }
- }())
- },
- /**
- * Provides a normalized error string, correcting an issue
- * with IE 7 (and prior) where Error.prototype.toString is
- * not properly implemented
- *
- * Based on http://es5.github.com/#x15.11.4.4
- *
- * @param {String|Error} error
- * @return {String} error message
- */
- errorString = function( error ) {
- var name, message,
- errorString = error.toString();
- if ( errorString.substring( 0, 7 ) === "[object" ) {
- name = error.name ? error.name.toString() : "Error";
- message = error.message ? error.message.toString() : "";
- if ( name && message ) {
- return name + ": " + message;
- } else if ( name ) {
- return name;
- } else if ( message ) {
- return message;
- } else {
- return "Error";
- }
- } else {
- return errorString;
- }
- },
- /**
- * Makes a clone of an object using only Array or Object as base,
- * and copies over the own enumerable properties.
- *
- * @param {Object} obj
- * @return {Object} New object with only the own properties (recursively).
- */
- objectValues = function( obj ) {
- // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
- /*jshint newcap: false */
- var key, val,
- vals = QUnit.is( "array", obj ) ? [] : {};
- for ( key in obj ) {
- if ( hasOwn.call( obj, key ) ) {
- val = obj[key];
- vals[key] = val === Object(val) ? objectValues(val) : val;
- }
- }
- return vals;
- };
-
-function Test( settings ) {
- extend( this, settings );
- this.assertions = [];
- this.testNumber = ++Test.count;
-}
-
-Test.count = 0;
-
-Test.prototype = {
- init: function() {
- var a, b, li,
- tests = id( "qunit-tests" );
-
- if ( tests ) {
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml;
-
- // `a` initialized at top of scope
- a = document.createElement( "a" );
- a.innerHTML = "Rerun";
- a.href = QUnit.url({ testNumber: this.testNumber });
-
- li = document.createElement( "li" );
- li.appendChild( b );
- li.appendChild( a );
- li.className = "running";
- li.id = this.id = "qunit-test-output" + testId++;
-
- tests.appendChild( li );
- }
- },
- setup: function() {
- if (
- // Emit moduleStart when we're switching from one module to another
- this.module !== config.previousModule ||
- // They could be equal (both undefined) but if the previousModule property doesn't
- // yet exist it means this is the first test in a suite that isn't wrapped in a
- // module, in which case we'll just emit a moduleStart event for 'undefined'.
- // Without this, reporters can get testStart before moduleStart which is a problem.
- !hasOwn.call( config, "previousModule" )
- ) {
- if ( hasOwn.call( config, "previousModule" ) ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.previousModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- config.previousModule = this.module;
- config.moduleStats = { all: 0, bad: 0 };
- runLoggingCallbacks( "moduleStart", QUnit, {
- name: this.module
- });
- }
-
- config.current = this;
-
- this.testEnvironment = extend({
- setup: function() {},
- teardown: function() {}
- }, this.moduleTestEnvironment );
-
- this.started = +new Date();
- runLoggingCallbacks( "testStart", QUnit, {
- name: this.testName,
- module: this.module
- });
-
- /*jshint camelcase:false */
-
-
- /**
- * Expose the current test environment.
- *
- * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead.
- */
- QUnit.current_testEnvironment = this.testEnvironment;
-
- /*jshint camelcase:true */
-
- if ( !config.pollution ) {
- saveGlobal();
- }
- if ( config.notrycatch ) {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- return;
- }
- try {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- },
- run: function() {
- config.current = this;
-
- var running = id( "qunit-testresult" );
-
- if ( running ) {
- running.innerHTML = "Running: <br/>" + this.nameHtml;
- }
-
- if ( this.async ) {
- QUnit.stop();
- }
-
- this.callbackStarted = +new Date();
-
- if ( config.notrycatch ) {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- return;
- }
-
- try {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- } catch( e ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
-
- QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
- // else next test will carry the responsibility
- saveGlobal();
-
- // Restart the tests if they're blocking
- if ( config.blocking ) {
- QUnit.start();
- }
- }
- },
- teardown: function() {
- config.current = this;
- if ( config.notrycatch ) {
- if ( typeof this.callbackRuntime === "undefined" ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
- }
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- return;
- } else {
- try {
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- }
- checkPollution();
- },
- finish: function() {
- config.current = this;
- if ( config.requireExpects && this.expected === null ) {
- QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
- } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
- QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
- } else if ( this.expected === null && !this.assertions.length ) {
- QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
- }
-
- var i, assertion, a, b, time, li, ol,
- test = this,
- good = 0,
- bad = 0,
- tests = id( "qunit-tests" );
-
- this.runtime = +new Date() - this.started;
- config.stats.all += this.assertions.length;
- config.moduleStats.all += this.assertions.length;
-
- if ( tests ) {
- ol = document.createElement( "ol" );
- ol.className = "qunit-assert-list";
-
- for ( i = 0; i < this.assertions.length; i++ ) {
- assertion = this.assertions[i];
-
- li = document.createElement( "li" );
- li.className = assertion.result ? "pass" : "fail";
- li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
- ol.appendChild( li );
-
- if ( assertion.result ) {
- good++;
- } else {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
-
- // store result when possible
- if ( QUnit.config.reorder && defined.sessionStorage ) {
- if ( bad ) {
- sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
- } else {
- sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
- }
- }
-
- if ( bad === 0 ) {
- addClass( ol, "qunit-collapsed" );
- }
-
- // `b` initialized at top of scope
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
-
- addEvent(b, "click", function() {
- var next = b.parentNode.lastChild,
- collapsed = hasClass( next, "qunit-collapsed" );
- ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
- });
-
- addEvent(b, "dblclick", function( e ) {
- var target = e && e.target ? e.target : window.event.srcElement;
- if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
- target = target.parentNode;
- }
- if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
- window.location = QUnit.url({ testNumber: test.testNumber });
- }
- });
-
- // `time` initialized at top of scope
- time = document.createElement( "span" );
- time.className = "runtime";
- time.innerHTML = this.runtime + " ms";
-
- // `li` initialized at top of scope
- li = id( this.id );
- li.className = bad ? "fail" : "pass";
- li.removeChild( li.firstChild );
- a = li.firstChild;
- li.appendChild( b );
- li.appendChild( a );
- li.appendChild( time );
- li.appendChild( ol );
-
- } else {
- for ( i = 0; i < this.assertions.length; i++ ) {
- if ( !this.assertions[i].result ) {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
- }
-
- runLoggingCallbacks( "testDone", QUnit, {
- name: this.testName,
- module: this.module,
- failed: bad,
- passed: this.assertions.length - bad,
- total: this.assertions.length,
- duration: this.runtime
- });
-
- QUnit.reset();
-
- config.current = undefined;
- },
-
- queue: function() {
- var bad,
- test = this;
-
- synchronize(function() {
- test.init();
- });
- function run() {
- // each of these can by async
- synchronize(function() {
- test.setup();
- });
- synchronize(function() {
- test.run();
- });
- synchronize(function() {
- test.teardown();
- });
- synchronize(function() {
- test.finish();
- });
- }
-
- // `bad` initialized at top of scope
- // defer when previous test run passed, if storage is available
- bad = QUnit.config.reorder && defined.sessionStorage &&
- +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
-
- if ( bad ) {
- run();
- } else {
- synchronize( run, true );
- }
- }
-};
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-QUnit = {
-
- // call on start of module test to prepend name to all tests
- module: function( name, testEnvironment ) {
- config.currentModule = name;
- config.currentModuleTestEnvironment = testEnvironment;
- config.modules[name] = true;
- },
-
- asyncTest: function( testName, expected, callback ) {
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- QUnit.test( testName, expected, callback, true );
- },
-
- test: function( testName, expected, callback, async ) {
- var test,
- nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
-
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- if ( config.currentModule ) {
- nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
- }
-
- test = new Test({
- nameHtml: nameHtml,
- testName: testName,
- expected: expected,
- async: async,
- callback: callback,
- module: config.currentModule,
- moduleTestEnvironment: config.currentModuleTestEnvironment,
- stack: sourceFromStacktrace( 2 )
- });
-
- if ( !validTest( test ) ) {
- return;
- }
-
- test.queue();
- },
-
- // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
- expect: function( asserts ) {
- if (arguments.length === 1) {
- config.current.expected = asserts;
- } else {
- return config.current.expected;
- }
- },
-
- start: function( count ) {
- // QUnit hasn't been initialized yet.
- // Note: RequireJS (et al) may delay onLoad
- if ( config.semaphore === undefined ) {
- QUnit.begin(function() {
- // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
- setTimeout(function() {
- QUnit.start( count );
- });
- });
- return;
- }
-
- config.semaphore -= count || 1;
- // don't start until equal number of stop-calls
- if ( config.semaphore > 0 ) {
- return;
- }
- // ignore if start is called more often then stop
- if ( config.semaphore < 0 ) {
- config.semaphore = 0;
- QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
- return;
- }
- // A slight delay, to avoid any current callbacks
- if ( defined.setTimeout ) {
- setTimeout(function() {
- if ( config.semaphore > 0 ) {
- return;
- }
- if ( config.timeout ) {
- clearTimeout( config.timeout );
- }
-
- config.blocking = false;
- process( true );
- }, 13);
- } else {
- config.blocking = false;
- process( true );
- }
- },
-
- stop: function( count ) {
- config.semaphore += count || 1;
- config.blocking = true;
-
- if ( config.testTimeout && defined.setTimeout ) {
- clearTimeout( config.timeout );
- config.timeout = setTimeout(function() {
- QUnit.ok( false, "Test timed out" );
- config.semaphore = 1;
- QUnit.start();
- }, config.testTimeout );
- }
- }
-};
-
-// `assert` initialized at top of scope
-// Assert helpers
-// All of these must either call QUnit.push() or manually do:
-// - runLoggingCallbacks( "log", .. );
-// - config.current.assertions.push({ .. });
-// We attach it to the QUnit object *after* we expose the public API,
-// otherwise `assert` will become a global variable in browsers (#341).
-assert = {
- /**
- * Asserts rough true-ish result.
- * @name ok
- * @function
- * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
- */
- ok: function( result, msg ) {
- if ( !config.current ) {
- throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
- result = !!result;
- msg = msg || (result ? "okay" : "failed" );
-
- var source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: msg
- };
-
- msg = "<span class='test-message'>" + escapeText( msg ) + "</span>";
-
- if ( !result ) {
- source = sourceFromStacktrace( 2 );
- if ( source ) {
- details.source = source;
- msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
- }
- }
- runLoggingCallbacks( "log", QUnit, details );
- config.current.assertions.push({
- result: result,
- message: msg
- });
- },
-
- /**
- * Assert that the first two arguments are equal, with an optional message.
- * Prints out both actual and expected values.
- * @name equal
- * @function
- * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
- */
- equal: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected == actual, actual, expected, message );
- },
-
- /**
- * @name notEqual
- * @function
- */
- notEqual: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected != actual, actual, expected, message );
- },
-
- /**
- * @name propEqual
- * @function
- */
- propEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notPropEqual
- * @function
- */
- notPropEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name deepEqual
- * @function
- */
- deepEqual: function( actual, expected, message ) {
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notDeepEqual
- * @function
- */
- notDeepEqual: function( actual, expected, message ) {
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name strictEqual
- * @function
- */
- strictEqual: function( actual, expected, message ) {
- QUnit.push( expected === actual, actual, expected, message );
- },
-
- /**
- * @name notStrictEqual
- * @function
- */
- notStrictEqual: function( actual, expected, message ) {
- QUnit.push( expected !== actual, actual, expected, message );
- },
-
- "throws": function( block, expected, message ) {
- var actual,
- expectedOutput = expected,
- ok = false;
-
- // 'expected' is optional
- if ( typeof expected === "string" ) {
- message = expected;
- expected = null;
- }
-
- config.current.ignoreGlobalErrors = true;
- try {
- block.call( config.current.testEnvironment );
- } catch (e) {
- actual = e;
- }
- config.current.ignoreGlobalErrors = false;
-
- if ( actual ) {
- // we don't want to validate thrown error
- if ( !expected ) {
- ok = true;
- expectedOutput = null;
- // expected is a regexp
- } else if ( QUnit.objectType( expected ) === "regexp" ) {
- ok = expected.test( errorString( actual ) );
- // expected is a constructor
- } else if ( actual instanceof expected ) {
- ok = true;
- // expected is a validation function which returns true is validation passed
- } else if ( expected.call( {}, actual ) === true ) {
- expectedOutput = null;
- ok = true;
- }
-
- QUnit.push( ok, actual, expectedOutput, message );
- } else {
- QUnit.pushFailure( message, null, "No exception was thrown." );
- }
- }
-};
-
-/**
- * @deprecated since 1.8.0
- * Kept assertion helpers in root for backwards compatibility.
- */
-extend( QUnit, assert );
-
-/**
- * @deprecated since 1.9.0
- * Kept root "raises()" for backwards compatibility.
- * (Note that we don't introduce assert.raises).
- */
-QUnit.raises = assert[ "throws" ];
-
-/**
- * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
- * Kept to avoid TypeErrors for undefined methods.
- */
-QUnit.equals = function() {
- QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
-};
-QUnit.same = function() {
- QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
-};
-
-// We want access to the constructor's prototype
-(function() {
- function F() {}
- F.prototype = QUnit;
- QUnit = new F();
- // Make F QUnit's constructor so that we can add to the prototype later
- QUnit.constructor = F;
-}());
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
- // The queue of tests to run
- queue: [],
-
- // block until document ready
- blocking: true,
-
- // when enabled, show only failing tests
- // gets persisted through sessionStorage and can be changed in UI via checkbox
- hidepassed: false,
-
- // by default, run previously failed tests first
- // very useful in combination with "Hide passed tests" checked
- reorder: true,
-
- // by default, modify document.title when suite is done
- altertitle: true,
-
- // when enabled, all tests must call expect()
- requireExpects: false,
-
- // add checkboxes that are persisted in the query-string
- // when enabled, the id is set to `true` as a `QUnit.config` property
- urlConfig: [
- {
- id: "noglobals",
- label: "Check for Globals",
- tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
- },
- {
- id: "notrycatch",
- label: "No try-catch",
- tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
- }
- ],
-
- // Set of all modules.
- modules: {},
-
- // logging callback queues
- begin: [],
- done: [],
- log: [],
- testStart: [],
- testDone: [],
- moduleStart: [],
- moduleDone: []
-};
-
-// Export global variables, unless an 'exports' object exists,
-// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
-if ( typeof exports === "undefined" ) {
- extend( window, QUnit.constructor.prototype );
-
- // Expose QUnit object
- window.QUnit = QUnit;
-}
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
- var i,
- location = window.location || { search: "", protocol: "file:" },
- params = location.search.slice( 1 ).split( "&" ),
- length = params.length,
- urlParams = {},
- current;
-
- if ( params[ 0 ] ) {
- for ( i = 0; i < length; i++ ) {
- current = params[ i ].split( "=" );
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
- // allow just a key to turn on a flag, e.g., test.html?noglobals
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
- urlParams[ current[ 0 ] ] = current[ 1 ];
- }
- }
-
- QUnit.urlParams = urlParams;
-
- // String search anywhere in moduleName+testName
- config.filter = urlParams.filter;
-
- // Exact match of the module name
- config.module = urlParams.module;
-
- config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
-
- // Figure out if we're running the tests from a server or not
- QUnit.isLocal = location.protocol === "file:";
-}());
-
-// Extend QUnit object,
-// these after set here because they should not be exposed as global functions
-extend( QUnit, {
- assert: assert,
-
- config: config,
-
- // Initialize the configuration options
- init: function() {
- extend( config, {
- stats: { all: 0, bad: 0 },
- moduleStats: { all: 0, bad: 0 },
- started: +new Date(),
- updateRate: 1000,
- blocking: false,
- autostart: true,
- autorun: false,
- filter: "",
- queue: [],
- semaphore: 1
- });
-
- var tests, banner, result,
- qunit = id( "qunit" );
-
- if ( qunit ) {
- qunit.innerHTML =
- "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
- "<h2 id='qunit-banner'></h2>" +
- "<div id='qunit-testrunner-toolbar'></div>" +
- "<h2 id='qunit-userAgent'></h2>" +
- "<ol id='qunit-tests'></ol>";
- }
-
- tests = id( "qunit-tests" );
- banner = id( "qunit-banner" );
- result = id( "qunit-testresult" );
-
- if ( tests ) {
- tests.innerHTML = "";
- }
-
- if ( banner ) {
- banner.className = "";
- }
-
- if ( result ) {
- result.parentNode.removeChild( result );
- }
-
- if ( tests ) {
- result = document.createElement( "p" );
- result.id = "qunit-testresult";
- result.className = "result";
- tests.parentNode.insertBefore( result, tests );
- result.innerHTML = "Running...<br/>&nbsp;";
- }
- },
-
- // Resets the test setup. Useful for tests that modify the DOM.
- /*
- DEPRECATED: Use multiple tests instead of resetting inside a test.
- Use testStart or testDone for custom cleanup.
- This method will throw an error in 2.0, and will be removed in 2.1
- */
- reset: function() {
- var fixture = id( "qunit-fixture" );
- if ( fixture ) {
- fixture.innerHTML = config.fixture;
- }
- },
-
- // Trigger an event on an element.
- // @example triggerEvent( document.body, "click" );
- triggerEvent: function( elem, type, event ) {
- if ( document.createEvent ) {
- event = document.createEvent( "MouseEvents" );
- event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
- 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-
- elem.dispatchEvent( event );
- } else if ( elem.fireEvent ) {
- elem.fireEvent( "on" + type );
- }
- },
-
- // Safe object type checking
- is: function( type, obj ) {
- return QUnit.objectType( obj ) === type;
- },
-
- objectType: function( obj ) {
- if ( typeof obj === "undefined" ) {
- return "undefined";
- // consider: typeof null === object
- }
- if ( obj === null ) {
- return "null";
- }
-
- var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
- type = match && match[1] || "";
-
- switch ( type ) {
- case "Number":
- if ( isNaN(obj) ) {
- return "nan";
- }
- return "number";
- case "String":
- case "Boolean":
- case "Array":
- case "Date":
- case "RegExp":
- case "Function":
- return type.toLowerCase();
- }
- if ( typeof obj === "object" ) {
- return "object";
- }
- return undefined;
- },
-
- push: function( result, actual, expected, message ) {
- if ( !config.current ) {
- throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
- }
-
- var output, source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: message,
- actual: actual,
- expected: expected
- };
-
- message = escapeText( message ) || ( result ? "okay" : "failed" );
- message = "<span class='test-message'>" + message + "</span>";
- output = message;
-
- if ( !result ) {
- expected = escapeText( QUnit.jsDump.parse(expected) );
- actual = escapeText( QUnit.jsDump.parse(actual) );
- output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
-
- if ( actual !== expected ) {
- output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
- output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
- }
-
- source = sourceFromStacktrace();
-
- if ( source ) {
- details.source = source;
- output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
- }
-
- output += "</table>";
- }
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: !!result,
- message: output
- });
- },
-
- pushFailure: function( message, source, actual ) {
- if ( !config.current ) {
- throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
-
- var output,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: false,
- message: message
- };
-
- message = escapeText( message ) || "error";
- message = "<span class='test-message'>" + message + "</span>";
- output = message;
-
- output += "<table>";
-
- if ( actual ) {
- output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
- }
-
- if ( source ) {
- details.source = source;
- output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
- }
-
- output += "</table>";
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: false,
- message: output
- });
- },
-
- url: function( params ) {
- params = extend( extend( {}, QUnit.urlParams ), params );
- var key,
- querystring = "?";
-
- for ( key in params ) {
- if ( hasOwn.call( params, key ) ) {
- querystring += encodeURIComponent( key ) + "=" +
- encodeURIComponent( params[ key ] ) + "&";
- }
- }
- return window.location.protocol + "//" + window.location.host +
- window.location.pathname + querystring.slice( 0, -1 );
- },
-
- extend: extend,
- id: id,
- addEvent: addEvent,
- addClass: addClass,
- hasClass: hasClass,
- removeClass: removeClass
- // load, equiv, jsDump, diff: Attached later
-});
-
-/**
- * @deprecated: Created for backwards compatibility with test runner that set the hook function
- * into QUnit.{hook}, instead of invoking it and passing the hook function.
- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
- * Doing this allows us to tell if the following methods have been overwritten on the actual
- * QUnit object.
- */
-extend( QUnit.constructor.prototype, {
-
- // Logging callbacks; all receive a single argument with the listed properties
- // run test/logs.html for any related changes
- begin: registerLoggingCallback( "begin" ),
-
- // done: { failed, passed, total, runtime }
- done: registerLoggingCallback( "done" ),
-
- // log: { result, actual, expected, message }
- log: registerLoggingCallback( "log" ),
-
- // testStart: { name }
- testStart: registerLoggingCallback( "testStart" ),
-
- // testDone: { name, failed, passed, total, duration }
- testDone: registerLoggingCallback( "testDone" ),
-
- // moduleStart: { name }
- moduleStart: registerLoggingCallback( "moduleStart" ),
-
- // moduleDone: { name, failed, passed, total }
- moduleDone: registerLoggingCallback( "moduleDone" )
-});
-
-if ( typeof document === "undefined" || document.readyState === "complete" ) {
- config.autorun = true;
-}
-
-QUnit.load = function() {
- runLoggingCallbacks( "begin", QUnit, {} );
-
- // Initialize the config, saving the execution queue
- var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
- urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
- numModules = 0,
- moduleNames = [],
- moduleFilterHtml = "",
- urlConfigHtml = "",
- oldconfig = extend( {}, config );
-
- QUnit.init();
- extend(config, oldconfig);
-
- config.blocking = false;
-
- len = config.urlConfig.length;
-
- for ( i = 0; i < len; i++ ) {
- val = config.urlConfig[i];
- if ( typeof val === "string" ) {
- val = {
- id: val,
- label: val,
- tooltip: "[no tooltip available]"
- };
- }
- config[ val.id ] = QUnit.urlParams[ val.id ];
- urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
- "' name='" + escapeText( val.id ) +
- "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
- " title='" + escapeText( val.tooltip ) +
- "'><label for='qunit-urlconfig-" + escapeText( val.id ) +
- "' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
- }
- for ( i in config.modules ) {
- if ( config.modules.hasOwnProperty( i ) ) {
- moduleNames.push(i);
- }
- }
- numModules = moduleNames.length;
- moduleNames.sort( function( a, b ) {
- return a.localeCompare( b );
- });
- moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
- ( config.module === undefined ? "selected='selected'" : "" ) +
- ">< All Modules ></option>";
-
-
- for ( i = 0; i < numModules; i++) {
- moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(moduleNames[i]) ) + "' " +
- ( config.module === moduleNames[i] ? "selected='selected'" : "" ) +
- ">" + escapeText(moduleNames[i]) + "</option>";
- }
- moduleFilterHtml += "</select>";
-
- // `userAgent` initialized at top of scope
- userAgent = id( "qunit-userAgent" );
- if ( userAgent ) {
- userAgent.innerHTML = navigator.userAgent;
- }
-
- // `banner` initialized at top of scope
- banner = id( "qunit-header" );
- if ( banner ) {
- banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
- }
-
- // `toolbar` initialized at top of scope
- toolbar = id( "qunit-testrunner-toolbar" );
- if ( toolbar ) {
- // `filter` initialized at top of scope
- filter = document.createElement( "input" );
- filter.type = "checkbox";
- filter.id = "qunit-filter-pass";
-
- addEvent( filter, "click", function() {
- var tmp,
- ol = document.getElementById( "qunit-tests" );
-
- if ( filter.checked ) {
- ol.className = ol.className + " hidepass";
- } else {
- tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
- ol.className = tmp.replace( / hidepass /, " " );
- }
- if ( defined.sessionStorage ) {
- if (filter.checked) {
- sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
- } else {
- sessionStorage.removeItem( "qunit-filter-passed-tests" );
- }
- }
- });
-
- if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
- filter.checked = true;
- // `ol` initialized at top of scope
- ol = document.getElementById( "qunit-tests" );
- ol.className = ol.className + " hidepass";
- }
- toolbar.appendChild( filter );
-
- // `label` initialized at top of scope
- label = document.createElement( "label" );
- label.setAttribute( "for", "qunit-filter-pass" );
- label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
- label.innerHTML = "Hide passed tests";
- toolbar.appendChild( label );
-
- urlConfigCheckboxesContainer = document.createElement("span");
- urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
- urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
- // For oldIE support:
- // * Add handlers to the individual elements instead of the container
- // * Use "click" instead of "change"
- // * Fallback from event.target to event.srcElement
- addEvents( urlConfigCheckboxes, "click", function( event ) {
- var params = {},
- target = event.target || event.srcElement;
- params[ target.name ] = target.checked ? true : undefined;
- window.location = QUnit.url( params );
- });
- toolbar.appendChild( urlConfigCheckboxesContainer );
-
- if (numModules > 1) {
- moduleFilter = document.createElement( "span" );
- moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
- moduleFilter.innerHTML = moduleFilterHtml;
- addEvent( moduleFilter.lastChild, "change", function() {
- var selectBox = moduleFilter.getElementsByTagName("select")[0],
- selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
-
- window.location = QUnit.url({
- module: ( selectedModule === "" ) ? undefined : selectedModule,
- // Remove any existing filters
- filter: undefined,
- testNumber: undefined
- });
- });
- toolbar.appendChild(moduleFilter);
- }
- }
-
- // `main` initialized at top of scope
- main = id( "qunit-fixture" );
- if ( main ) {
- config.fixture = main.innerHTML;
- }
-
- if ( config.autostart ) {
- QUnit.start();
- }
-};
-
-addEvent( window, "load", QUnit.load );
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function ( error, filePath, linerNr ) {
- var ret = false;
- if ( onErrorFnPrev ) {
- ret = onErrorFnPrev( error, filePath, linerNr );
- }
-
- // Treat return value as window.onerror itself does,
- // Only do our handling if not suppressed.
- if ( ret !== true ) {
- if ( QUnit.config.current ) {
- if ( QUnit.config.current.ignoreGlobalErrors ) {
- return true;
- }
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- } else {
- QUnit.test( "global failure", extend( function() {
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- }, { validTest: validTest } ) );
- }
- return false;
- }
-
- return ret;
-};
-
-function done() {
- config.autorun = true;
-
- // Log the last module results
- if ( config.currentModule ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.currentModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- delete config.previousModule;
-
- var i, key,
- banner = id( "qunit-banner" ),
- tests = id( "qunit-tests" ),
- runtime = +new Date() - config.started,
- passed = config.stats.all - config.stats.bad,
- html = [
- "Tests completed in ",
- runtime,
- " milliseconds.<br/>",
- "<span class='passed'>",
- passed,
- "</span> assertions of <span class='total'>",
- config.stats.all,
- "</span> passed, <span class='failed'>",
- config.stats.bad,
- "</span> failed."
- ].join( "" );
-
- if ( banner ) {
- banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
- }
-
- if ( tests ) {
- id( "qunit-testresult" ).innerHTML = html;
- }
-
- if ( config.altertitle && typeof document !== "undefined" && document.title ) {
- // show ✖ for good, ✔ for bad suite result in title
- // use escape sequences in case file gets loaded with non-utf-8-charset
- document.title = [
- ( config.stats.bad ? "\u2716" : "\u2714" ),
- document.title.replace( /^[\u2714\u2716] /i, "" )
- ].join( " " );
- }
-
- // clear own sessionStorage items if all tests passed
- if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
- // `key` & `i` initialized at top of scope
- for ( i = 0; i < sessionStorage.length; i++ ) {
- key = sessionStorage.key( i++ );
- if ( key.indexOf( "qunit-test-" ) === 0 ) {
- sessionStorage.removeItem( key );
- }
- }
- }
-
- // scroll back to top to show results
- if ( window.scrollTo ) {
- window.scrollTo(0, 0);
- }
-
- runLoggingCallbacks( "done", QUnit, {
- failed: config.stats.bad,
- passed: passed,
- total: config.stats.all,
- runtime: runtime
- });
-}
-
-/** @return Boolean: true if this test should be ran */
-function validTest( test ) {
- var include,
- filter = config.filter && config.filter.toLowerCase(),
- module = config.module && config.module.toLowerCase(),
- fullName = (test.module + ": " + test.testName).toLowerCase();
-
- // Internally-generated tests are always valid
- if ( test.callback && test.callback.validTest === validTest ) {
- delete test.callback.validTest;
- return true;
- }
-
- if ( config.testNumber ) {
- return test.testNumber === config.testNumber;
- }
-
- if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
- return false;
- }
-
- if ( !filter ) {
- return true;
- }
-
- include = filter.charAt( 0 ) !== "!";
- if ( !include ) {
- filter = filter.slice( 1 );
- }
-
- // If the filter matches, we need to honour include
- if ( fullName.indexOf( filter ) !== -1 ) {
- return include;
- }
-
- // Otherwise, do the opposite
- return !include;
-}
-
-// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
-// Later Safari and IE10 are supposed to support error.stack as well
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
- offset = offset === undefined ? 3 : offset;
-
- var stack, include, i;
-
- if ( e.stacktrace ) {
- // Opera
- return e.stacktrace.split( "\n" )[ offset + 3 ];
- } else if ( e.stack ) {
- // Firefox, Chrome
- stack = e.stack.split( "\n" );
- if (/^error$/i.test( stack[0] ) ) {
- stack.shift();
- }
- if ( fileName ) {
- include = [];
- for ( i = offset; i < stack.length; i++ ) {
- if ( stack[ i ].indexOf( fileName ) !== -1 ) {
- break;
- }
- include.push( stack[ i ] );
- }
- if ( include.length ) {
- return include.join( "\n" );
- }
- }
- return stack[ offset ];
- } else if ( e.sourceURL ) {
- // Safari, PhantomJS
- // hopefully one day Safari provides actual stacktraces
- // exclude useless self-reference for generated Error objects
- if ( /qunit.js$/.test( e.sourceURL ) ) {
- return;
- }
- // for actual exceptions, this is useful
- return e.sourceURL + ":" + e.line;
- }
-}
-function sourceFromStacktrace( offset ) {
- try {
- throw new Error();
- } catch ( e ) {
- return extractStacktrace( e, offset );
- }
-}
-
-/**
- * Escape text for attribute or text content.
- */
-function escapeText( s ) {
- if ( !s ) {
- return "";
- }
- s = s + "";
- // Both single quotes and double quotes (for attributes)
- return s.replace( /['"<>&]/g, function( s ) {
- switch( s ) {
- case "'":
- return "&#039;";
- case "\"":
- return "&quot;";
- case "<":
- return "&lt;";
- case ">":
- return "&gt;";
- case "&":
- return "&amp;";
- }
- });
-}
-
-function synchronize( callback, last ) {
- config.queue.push( callback );
-
- if ( config.autorun && !config.blocking ) {
- process( last );
- }
-}
-
-function process( last ) {
- function next() {
- process( last );
- }
- var start = new Date().getTime();
- config.depth = config.depth ? config.depth + 1 : 1;
-
- while ( config.queue.length && !config.blocking ) {
- if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
- config.queue.shift()();
- } else {
- setTimeout( next, 13 );
- break;
- }
- }
- config.depth--;
- if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
- done();
- }
-}
-
-function saveGlobal() {
- config.pollution = [];
-
- if ( config.noglobals ) {
- for ( var key in window ) {
- if ( hasOwn.call( window, key ) ) {
- // in Opera sometimes DOM element ids show up here, ignore them
- if ( /^qunit-test-output/.test( key ) ) {
- continue;
- }
- config.pollution.push( key );
- }
- }
- }
-}
-
-function checkPollution() {
- var newGlobals,
- deletedGlobals,
- old = config.pollution;
-
- saveGlobal();
-
- newGlobals = diff( config.pollution, old );
- if ( newGlobals.length > 0 ) {
- QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
- }
-
- deletedGlobals = diff( old, config.pollution );
- if ( deletedGlobals.length > 0 ) {
- QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
- }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
- var i, j,
- result = a.slice();
-
- for ( i = 0; i < result.length; i++ ) {
- for ( j = 0; j < b.length; j++ ) {
- if ( result[i] === b[j] ) {
- result.splice( i, 1 );
- i--;
- break;
- }
- }
- }
- return result;
-}
-
-function extend( a, b ) {
- for ( var prop in b ) {
- if ( hasOwn.call( b, prop ) ) {
- // Avoid "Member not found" error in IE8 caused by messing with window.constructor
- if ( !( prop === "constructor" && a === window ) ) {
- if ( b[ prop ] === undefined ) {
- delete a[ prop ];
- } else {
- a[ prop ] = b[ prop ];
- }
- }
- }
- }
-
- return a;
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
- // Standards-based browsers
- if ( elem.addEventListener ) {
- elem.addEventListener( type, fn, false );
- // IE
- } else {
- elem.attachEvent( "on" + type, fn );
- }
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
- var i = elems.length;
- while ( i-- ) {
- addEvent( elems[i], type, fn );
- }
-}
-
-function hasClass( elem, name ) {
- return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
-}
-
-function addClass( elem, name ) {
- if ( !hasClass( elem, name ) ) {
- elem.className += (elem.className ? " " : "") + name;
- }
-}
-
-function removeClass( elem, name ) {
- var set = " " + elem.className + " ";
- // Class name may appear multiple times
- while ( set.indexOf(" " + name + " ") > -1 ) {
- set = set.replace(" " + name + " " , " ");
- }
- // If possible, trim it for prettiness, but not necessarily
- elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
-}
-
-function id( name ) {
- return !!( typeof document !== "undefined" && document && document.getElementById ) &&
- document.getElementById( name );
-}
-
-function registerLoggingCallback( key ) {
- return function( callback ) {
- config[key].push( callback );
- };
-}
-
-// Supports deprecated method of completely overwriting logging callbacks
-function runLoggingCallbacks( key, scope, args ) {
- var i, callbacks;
- if ( QUnit.hasOwnProperty( key ) ) {
- QUnit[ key ].call(scope, args );
- } else {
- callbacks = config[ key ];
- for ( i = 0; i < callbacks.length; i++ ) {
- callbacks[ i ].call( scope, args );
- }
- }
-}
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = (function() {
-
- // Call the o related callback with the given arguments.
- function bindCallbacks( o, callbacks, args ) {
- var prop = QUnit.objectType( o );
- if ( prop ) {
- if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
- return callbacks[ prop ].apply( callbacks, args );
- } else {
- return callbacks[ prop ]; // or undefined
- }
- }
- }
-
- // the real equiv function
- var innerEquiv,
- // stack to decide between skip/abort functions
- callers = [],
- // stack to avoiding loops from circular referencing
- parents = [],
- parentsB = [],
-
- getProto = Object.getPrototypeOf || function ( obj ) {
- /*jshint camelcase:false */
- return obj.__proto__;
- },
- callbacks = (function () {
-
- // for string, boolean, number and null
- function useStrictEquality( b, a ) {
- /*jshint eqeqeq:false */
- if ( b instanceof a.constructor || a instanceof b.constructor ) {
- // to catch short annotation VS 'new' annotation of a
- // declaration
- // e.g. var i = 1;
- // var j = new Number(1);
- return a == b;
- } else {
- return a === b;
- }
- }
-
- return {
- "string": useStrictEquality,
- "boolean": useStrictEquality,
- "number": useStrictEquality,
- "null": useStrictEquality,
- "undefined": useStrictEquality,
-
- "nan": function( b ) {
- return isNaN( b );
- },
-
- "date": function( b, a ) {
- return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
- },
-
- "regexp": function( b, a ) {
- return QUnit.objectType( b ) === "regexp" &&
- // the regex itself
- a.source === b.source &&
- // and its modifiers
- a.global === b.global &&
- // (gmi) ...
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline &&
- a.sticky === b.sticky;
- },
-
- // - skip when the property is a method of an instance (OOP)
- // - abort otherwise,
- // initial === would have catch identical references anyway
- "function": function() {
- var caller = callers[callers.length - 1];
- return caller !== Object && typeof caller !== "undefined";
- },
-
- "array": function( b, a ) {
- var i, j, len, loop, aCircular, bCircular;
-
- // b could be an object literal here
- if ( QUnit.objectType( b ) !== "array" ) {
- return false;
- }
-
- len = a.length;
- if ( len !== b.length ) {
- // safe and faster
- return false;
- }
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
- for ( i = 0; i < len; i++ ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- }
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- parents.pop();
- parentsB.pop();
- return true;
- },
-
- "object": function( b, a ) {
- /*jshint forin:false */
- var i, j, loop, aCircular, bCircular,
- // Default to true
- eq = true,
- aProperties = [],
- bProperties = [];
-
- // comparing constructors is more strict than using
- // instanceof
- if ( a.constructor !== b.constructor ) {
- // Allow objects with no prototype to be equivalent to
- // objects with Object as their constructor.
- if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
- ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
- return false;
- }
- }
-
- // stack constructor before traversing properties
- callers.push( a.constructor );
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
-
- // be strict: don't ensure hasOwnProperty and go deep
- for ( i in a ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- eq = false;
- break;
- }
- }
- }
- aProperties.push(i);
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- eq = false;
- break;
- }
- }
-
- parents.pop();
- parentsB.pop();
- callers.pop(); // unstack, we are done
-
- for ( i in b ) {
- bProperties.push( i ); // collect b's properties
- }
-
- // Ensures identical properties name
- return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
- }
- };
- }());
-
- innerEquiv = function() { // can take multiple arguments
- var args = [].slice.apply( arguments );
- if ( args.length < 2 ) {
- return true; // end transition
- }
-
- return (function( a, b ) {
- if ( a === b ) {
- return true; // catch the most you can
- } else if ( a === null || b === null || typeof a === "undefined" ||
- typeof b === "undefined" ||
- QUnit.objectType(a) !== QUnit.objectType(b) ) {
- return false; // don't lose time with error prone cases
- } else {
- return bindCallbacks(a, callbacks, [ b, a ]);
- }
-
- // apply transition with (1..n) arguments
- }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) );
- };
-
- return innerEquiv;
-}());
-
-/**
- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
- * http://flesler.blogspot.com Licensed under BSD
- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
- *
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
- function quote( str ) {
- return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
- }
- function literal( o ) {
- return o + "";
- }
- function join( pre, arr, post ) {
- var s = jsDump.separator(),
- base = jsDump.indent(),
- inner = jsDump.indent(1);
- if ( arr.join ) {
- arr = arr.join( "," + s + inner );
- }
- if ( !arr ) {
- return pre + post;
- }
- return [ pre, inner + arr, base + post ].join(s);
- }
- function array( arr, stack ) {
- var i = arr.length, ret = new Array(i);
- this.up();
- while ( i-- ) {
- ret[i] = this.parse( arr[i] , undefined , stack);
- }
- this.down();
- return join( "[", ret, "]" );
- }
-
- var reName = /^function (\w+)/,
- jsDump = {
- // type is used mostly internally, you can fix a (custom)type in advance
- parse: function( obj, type, stack ) {
- stack = stack || [ ];
- var inStack, res,
- parser = this.parsers[ type || this.typeOf(obj) ];
-
- type = typeof parser;
- inStack = inArray( obj, stack );
-
- if ( inStack !== -1 ) {
- return "recursion(" + (inStack - stack.length) + ")";
- }
- if ( type === "function" ) {
- stack.push( obj );
- res = parser.call( this, obj, stack );
- stack.pop();
- return res;
- }
- return ( type === "string" ) ? parser : this.parsers.error;
- },
- typeOf: function( obj ) {
- var type;
- if ( obj === null ) {
- type = "null";
- } else if ( typeof obj === "undefined" ) {
- type = "undefined";
- } else if ( QUnit.is( "regexp", obj) ) {
- type = "regexp";
- } else if ( QUnit.is( "date", obj) ) {
- type = "date";
- } else if ( QUnit.is( "function", obj) ) {
- type = "function";
- } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
- type = "window";
- } else if ( obj.nodeType === 9 ) {
- type = "document";
- } else if ( obj.nodeType ) {
- type = "node";
- } else if (
- // native arrays
- toString.call( obj ) === "[object Array]" ||
- // NodeList objects
- ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
- ) {
- type = "array";
- } else if ( obj.constructor === Error.prototype.constructor ) {
- type = "error";
- } else {
- type = typeof obj;
- }
- return type;
- },
- separator: function() {
- return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
- },
- // extra can be a number, shortcut for increasing-calling-decreasing
- indent: function( extra ) {
- if ( !this.multiline ) {
- return "";
- }
- var chr = this.indentChar;
- if ( this.HTML ) {
- chr = chr.replace( /\t/g, " " ).replace( / /g, "&nbsp;" );
- }
- return new Array( this.depth + ( extra || 0 ) ).join(chr);
- },
- up: function( a ) {
- this.depth += a || 1;
- },
- down: function( a ) {
- this.depth -= a || 1;
- },
- setParser: function( name, parser ) {
- this.parsers[name] = parser;
- },
- // The next 3 are exposed so you can use them
- quote: quote,
- literal: literal,
- join: join,
- //
- depth: 1,
- // This is the list of parsers, to modify them, use jsDump.setParser
- parsers: {
- window: "[Window]",
- document: "[Document]",
- error: function(error) {
- return "Error(\"" + error.message + "\")";
- },
- unknown: "[Unknown]",
- "null": "null",
- "undefined": "undefined",
- "function": function( fn ) {
- var ret = "function",
- // functions never have name in IE
- name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
-
- if ( name ) {
- ret += " " + name;
- }
- ret += "( ";
-
- ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
- return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
- },
- array: array,
- nodelist: array,
- "arguments": array,
- object: function( map, stack ) {
- /*jshint forin:false */
- var ret = [ ], keys, key, val, i;
- QUnit.jsDump.up();
- keys = [];
- for ( key in map ) {
- keys.push( key );
- }
- keys.sort();
- for ( i = 0; i < keys.length; i++ ) {
- key = keys[ i ];
- val = map[ key ];
- ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
- }
- QUnit.jsDump.down();
- return join( "{", ret, "}" );
- },
- node: function( node ) {
- var len, i, val,
- open = QUnit.jsDump.HTML ? "&lt;" : "<",
- close = QUnit.jsDump.HTML ? "&gt;" : ">",
- tag = node.nodeName.toLowerCase(),
- ret = open + tag,
- attrs = node.attributes;
-
- if ( attrs ) {
- for ( i = 0, len = attrs.length; i < len; i++ ) {
- val = attrs[i].nodeValue;
- // IE6 includes all attributes in .attributes, even ones not explicitly set.
- // Those have values like undefined, null, 0, false, "" or "inherit".
- if ( val && val !== "inherit" ) {
- ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
- }
- }
- }
- ret += close;
-
- // Show content of TextNode or CDATASection
- if ( node.nodeType === 3 || node.nodeType === 4 ) {
- ret += node.nodeValue;
- }
-
- return ret + open + "/" + tag + close;
- },
- // function calls it internally, it's the arguments part of the function
- functionArgs: function( fn ) {
- var args,
- l = fn.length;
-
- if ( !l ) {
- return "";
- }
-
- args = new Array(l);
- while ( l-- ) {
- // 97 is 'a'
- args[l] = String.fromCharCode(97+l);
- }
- return " " + args.join( ", " ) + " ";
- },
- // object calls it internally, the key part of an item in a map
- key: quote,
- // function calls it internally, it's the content of the function
- functionCode: "[code]",
- // node calls it internally, it's an html attribute value
- attribute: quote,
- string: quote,
- date: quote,
- regexp: literal,
- number: literal,
- "boolean": literal
- },
- // if true, entities are escaped ( <, >, \t, space and \n )
- HTML: false,
- // indentation unit
- indentChar: " ",
- // if true, items in a collection, are separated by a \n, else just a space.
- multiline: true
- };
-
- return jsDump;
-}());
-
-// from jquery.js
-function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
-}
-
-/*
- * Javascript Diff Algorithm
- * By John Resig (http://ejohn.org/)
- * Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- * http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
- */
-QUnit.diff = (function() {
- /*jshint eqeqeq:false, eqnull:true */
- function diff( o, n ) {
- var i,
- ns = {},
- os = {};
-
- for ( i = 0; i < n.length; i++ ) {
- if ( !hasOwn.call( ns, n[i] ) ) {
- ns[ n[i] ] = {
- rows: [],
- o: null
- };
- }
- ns[ n[i] ].rows.push( i );
- }
-
- for ( i = 0; i < o.length; i++ ) {
- if ( !hasOwn.call( os, o[i] ) ) {
- os[ o[i] ] = {
- rows: [],
- n: null
- };
- }
- os[ o[i] ].rows.push( i );
- }
-
- for ( i in ns ) {
- if ( hasOwn.call( ns, i ) ) {
- if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
- n[ ns[i].rows[0] ] = {
- text: n[ ns[i].rows[0] ],
- row: os[i].rows[0]
- };
- o[ os[i].rows[0] ] = {
- text: o[ os[i].rows[0] ],
- row: ns[i].rows[0]
- };
- }
- }
- }
-
- for ( i = 0; i < n.length - 1; i++ ) {
- if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
- n[ i + 1 ] == o[ n[i].row + 1 ] ) {
-
- n[ i + 1 ] = {
- text: n[ i + 1 ],
- row: n[i].row + 1
- };
- o[ n[i].row + 1 ] = {
- text: o[ n[i].row + 1 ],
- row: i + 1
- };
- }
- }
-
- for ( i = n.length - 1; i > 0; i-- ) {
- if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
- n[ i - 1 ] == o[ n[i].row - 1 ]) {
-
- n[ i - 1 ] = {
- text: n[ i - 1 ],
- row: n[i].row - 1
- };
- o[ n[i].row - 1 ] = {
- text: o[ n[i].row - 1 ],
- row: i - 1
- };
- }
- }
-
- return {
- o: o,
- n: n
- };
- }
-
- return function( o, n ) {
- o = o.replace( /\s+$/, "" );
- n = n.replace( /\s+$/, "" );
-
- var i, pre,
- str = "",
- out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
- oSpace = o.match(/\s+/g),
- nSpace = n.match(/\s+/g);
-
- if ( oSpace == null ) {
- oSpace = [ " " ];
- }
- else {
- oSpace.push( " " );
- }
-
- if ( nSpace == null ) {
- nSpace = [ " " ];
- }
- else {
- nSpace.push( " " );
- }
-
- if ( out.n.length === 0 ) {
- for ( i = 0; i < out.o.length; i++ ) {
- str += "<del>" + out.o[i] + oSpace[i] + "</del>";
- }
- }
- else {
- if ( out.n[0].text == null ) {
- for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
- str += "<del>" + out.o[n] + oSpace[n] + "</del>";
- }
- }
-
- for ( i = 0; i < out.n.length; i++ ) {
- if (out.n[i].text == null) {
- str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
- }
- else {
- // `pre` initialized at top of scope
- pre = "";
-
- for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
- pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
- }
- str += " " + out.n[i].text + nSpace[i] + pre;
- }
- }
- }
-
- return str;
- };
-}());
-
-// for CommonJS environments, export everything
-if ( typeof exports !== "undefined" ) {
- extend( exports, QUnit.constructor.prototype );
-}
-
-// get at whatever the global object is, like window in browsers
-}( (function() {return this;}.call()) )); \ No newline at end of file
diff --git a/docs/com/test/test-markdown-element-attributes.html b/docs/com/test/test-markdown-element-attributes.html
deleted file mode 100755
index 6edf95eff..000000000
--- a/docs/com/test/test-markdown-element-attributes.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Test Markdown Element Attributes</title>
-
- <link rel="stylesheet" href="../css/reveal.css">
- <link rel="stylesheet" href="qunit-1.12.0.css">
- </head>
-
- <body style="overflow: auto;">
-
- <div id="qunit"></div>
- <div id="qunit-fixture"></div>
-
- <div class="reveal" style="display: none;">
-
- <div class="slides">
-
- <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
-
- <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->
- <section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$" data-element-attributes="{_\s*?([^}]+?)}">>
- <script type="text/template">
- ## Slide 1.1
- <!-- {_class="fragment fade-out" data-fragment-index="1"} -->
-
- --
-
- ## Slide 1.2
- <!-- {_class="fragment shrink"} -->
-
- Paragraph 1
- <!-- {_class="fragment grow"} -->
-
- Paragraph 2
- <!-- {_class="fragment grow"} -->
-
- - list item 1 <!-- {_class="fragment grow"} -->
- - list item 2 <!-- {_class="fragment grow"} -->
- - list item 3 <!-- {_class="fragment grow"} -->
-
-
- ---
-
- ## Slide 2
-
-
- Paragraph 1.2
- multi-line <!-- {_class="fragment highlight-red"} -->
-
- Paragraph 2.2 <!-- {_class="fragment highlight-red"} -->
-
- Paragraph 2.3 <!-- {_class="fragment highlight-red"} -->
-
- Paragraph 2.4 <!-- {_class="fragment highlight-red"} -->
-
- - list item 1 <!-- {_class="fragment highlight-green"} -->
- - list item 2<!-- {_class="fragment highlight-green"} -->
- - list item 3<!-- {_class="fragment highlight-green"} -->
- - list item 4
- <!-- {_class="fragment highlight-green"} -->
- - list item 5<!-- {_class="fragment highlight-green"} -->
-
- Test
-
- ![Example Picture](examples/assets/image2.png)
- <!-- {_class="reveal stretch"} -->
-
- </script>
- </section>
-
-
-
- <section data-markdown data-separator="^\n\n\n"
- data-separator-vertical="^\n\n"
- data-separator-notes="^Note:"
- data-charset="utf-8">
- <script type="text/template">
- # Test attributes in Markdown with default separator
- ## Slide 1 Def <!-- .element: class="fragment highlight-red" data-fragment-index="1" -->
-
-
- ## Slide 2 Def
- <!-- .element: class="fragment highlight-red" -->
-
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- ## Hello world
- A paragraph
- <!-- .element: class="fragment highlight-blue" -->
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- ## Hello world
-
- Multiple
- Line
- <!-- .element: class="fragment highlight-blue" -->
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- ## Hello world
-
- Test<!-- .element: class="fragment highlight-blue" -->
-
- More Test
- </script>
- </section>
-
-
- </div>
-
- </div>
-
- <script src="../lib/js/head.min.js"></script>
- <script src="../js/reveal.js"></script>
- <script src="../plugin/markdown/marked.js"></script>
- <script src="../plugin/markdown/markdown.js"></script>
- <script src="qunit-1.12.0.js"></script>
-
- <script src="test-markdown-element-attributes.js"></script>
-
- </body>
-</html>
diff --git a/docs/com/test/test-markdown-element-attributes.js b/docs/com/test/test-markdown-element-attributes.js
deleted file mode 100755
index 10a250375..000000000
--- a/docs/com/test/test-markdown-element-attributes.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-Reveal.addEventListener( 'ready', function() {
-
- QUnit.module( 'Markdown' );
-
- test( 'Vertical separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
- });
-
-
- test( 'Attributes on element header in vertical slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
- strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
- });
-
- test( 'Attributes on element paragraphs in vertical slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
- });
-
- test( 'Attributes on element list items in vertical slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
- });
-
- test( 'Attributes on element paragraphs in horizontal slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
- });
- test( 'Attributes on element list items in horizontal slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
- });
- test( 'Attributes on element list items in horizontal slides', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
- });
-
- test( 'Attributes on elements in vertical slides with default element attribute separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
- });
-
- test( 'Attributes on elements in single slides with default element attribute separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
- });
-
-} );
-
-Reveal.initialize();
-
diff --git a/docs/com/test/test-markdown-slide-attributes.html b/docs/com/test/test-markdown-slide-attributes.html
deleted file mode 100755
index ab6ece4ed..000000000
--- a/docs/com/test/test-markdown-slide-attributes.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Test Markdown Attributes</title>
-
- <link rel="stylesheet" href="../css/reveal.css">
- <link rel="stylesheet" href="qunit-1.12.0.css">
- </head>
-
- <body style="overflow: auto;">
-
- <div id="qunit"></div>
- <div id="qunit-fixture"></div>
-
- <div class="reveal" style="display: none;">
-
- <div class="slides">
-
- <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
-
- <!-- Slides are separated by three lines, vertical slides by two lines, attributes are one any line starting with (spaces and) two dashes -->
- <section data-markdown data-separator="^\n\n\n"
- data-separator-vertical="^\n\n"
- data-separator-notes="^Note:"
- data-attributes="--\s(.*?)$"
- data-charset="utf-8">
- <script type="text/template">
- # Test attributes in Markdown
- ## Slide 1
-
-
-
- ## Slide 2
- <!-- -- id="slide2" data-transition="zoom" data-background="#A0C66B" -->
-
-
- ## Slide 2.1
- <!-- -- data-background="#ff0000" data-transition="fade" -->
-
-
- ## Slide 2.2
- [Link to Slide2](#/slide2)
-
-
-
- ## Slide 3
- <!-- -- data-transition="zoom" data-background="#C6916B" -->
-
-
-
- ## Slide 4
- </script>
- </section>
-
- <section data-markdown data-separator="^\n\n\n"
- data-separator-vertical="^\n\n"
- data-separator-notes="^Note:"
- data-charset="utf-8">
- <script type="text/template">
- # Test attributes in Markdown with default separator
- ## Slide 1 Def
-
-
-
- ## Slide 2 Def
- <!-- .slide: id="slide2def" data-transition="concave" data-background="#A7C66B" -->
-
-
- ## Slide 2.1 Def
- <!-- .slide: data-background="#f70000" data-transition="page" -->
-
-
- ## Slide 2.2 Def
- [Link to Slide2](#/slide2def)
-
-
-
- ## Slide 3 Def
- <!-- .slide: data-transition="concave" data-background="#C7916B" -->
-
-
-
- ## Slide 4
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- <!-- .slide: data-background="#ff0000" -->
- ## Hello world
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- ## Hello world
- <!-- .slide: data-background="#ff0000" -->
- </script>
- </section>
-
- <section data-markdown>
- <script type="text/template">
- ## Hello world
-
- Test
- <!-- .slide: data-background="#ff0000" -->
-
- More Test
- </script>
- </section>
-
- </div>
-
- </div>
-
- <script src="../lib/js/head.min.js"></script>
- <script src="../js/reveal.js"></script>
- <script src="../plugin/markdown/marked.js"></script>
- <script src="../plugin/markdown/markdown.js"></script>
- <script src="qunit-1.12.0.js"></script>
-
- <script src="test-markdown-slide-attributes.js"></script>
-
- </body>
-</html>
diff --git a/docs/com/test/test-markdown-slide-attributes.js b/docs/com/test/test-markdown-slide-attributes.js
deleted file mode 100755
index 3817fd37c..000000000
--- a/docs/com/test/test-markdown-slide-attributes.js
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-Reveal.addEventListener( 'ready', function() {
-
- QUnit.module( 'Markdown' );
-
- test( 'Vertical separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
- });
-
- test( 'Id on slide', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
- });
-
- test( 'data-background attributes', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
- });
-
- test( 'data-transition attributes', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
- strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
- });
-
- test( 'data-background attributes with default separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
- });
-
- test( 'data-transition attributes with default separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
- strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
- });
-
- test( 'data-transition attributes with inline content', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
- });
-
-} );
-
-Reveal.initialize();
-
diff --git a/docs/com/test/test-markdown.html b/docs/com/test/test-markdown.html
deleted file mode 100755
index 7ff0efe8a..000000000
--- a/docs/com/test/test-markdown.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Test Markdown</title>
-
- <link rel="stylesheet" href="../css/reveal.css">
- <link rel="stylesheet" href="qunit-1.12.0.css">
- </head>
-
- <body style="overflow: auto;">
-
- <div id="qunit"></div>
- <div id="qunit-fixture"></div>
-
- <div class="reveal" style="display: none;">
-
- <div class="slides">
-
- <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
-
- <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->
- <section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$">
- <script type="text/template">
- ## Slide 1.1
-
- --
-
- ## Slide 1.2
-
- ---
-
- ## Slide 2
- </script>
- </section>
-
- </div>
-
- </div>
-
- <script src="../lib/js/head.min.js"></script>
- <script src="../js/reveal.js"></script>
- <script src="../plugin/markdown/marked.js"></script>
- <script src="../plugin/markdown/markdown.js"></script>
- <script src="qunit-1.12.0.js"></script>
-
- <script src="test-markdown.js"></script>
-
- </body>
-</html>
diff --git a/docs/com/test/test-markdown.js b/docs/com/test/test-markdown.js
deleted file mode 100755
index d2bbba867..000000000
--- a/docs/com/test/test-markdown.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-Reveal.addEventListener( 'ready', function() {
-
- QUnit.module( 'Markdown' );
-
- test( 'Vertical separator', function() {
- strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
- });
-
-
-} );
-
-Reveal.initialize();
-
diff --git a/docs/com/test/test-pdf.html b/docs/com/test/test-pdf.html
deleted file mode 100755
index 751ed26ea..000000000
--- a/docs/com/test/test-pdf.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Test PDF exports</title>
-
- <link rel="stylesheet" href="../css/reveal.css">
- <link rel="stylesheet" href="../css/print/pdf.css">
- <link rel="stylesheet" href="qunit-1.12.0.css">
- </head>
-
- <body style="overflow: auto;">
-
- <div id="qunit"></div>
- <div id="qunit-fixture"></div>
-
- <div class="reveal" style="display: none;">
-
- <div class="slides">
-
- <section>
- <h1>1</h1>
- <img data-src="fake-url.png">
- </section>
-
- <section>
- <section>
- <h1>2.1</h1>
- </section>
- <section>
- <h1>2.2</h1>
- </section>
- <section>
- <h1>2.3</h1>
- </section>
- </section>
-
- <section id="fragment-slides">
- <section>
- <h1>3.1</h1>
- <ul>
- <li class="fragment">4.1</li>
- <li class="fragment">4.2</li>
- <li class="fragment">4.3</li>
- </ul>
- </section>
-
- <section>
- <h1>3.2</h1>
- <ul>
- <li class="fragment" data-fragment-index="0">4.1</li>
- <li class="fragment" data-fragment-index="0">4.2</li>
- </ul>
- </section>
-
- <section>
- <h1>3.3</h1>
- <ul>
- <li class="fragment" data-fragment-index="1">3.3.1</li>
- <li class="fragment" data-fragment-index="4">3.3.2</li>
- <li class="fragment" data-fragment-index="4">3.3.3</li>
- </ul>
- </section>
- </section>
-
- <section>
- <h1>4</h1>
- </section>
-
- </div>
-
- </div>
-
- <script src="../lib/js/head.min.js"></script>
- <script src="../js/reveal.js"></script>
- <script src="qunit-1.12.0.js"></script>
-
- <script src="test-pdf.js"></script>
-
- </body>
-</html>
diff --git a/docs/com/test/test-pdf.js b/docs/com/test/test-pdf.js
deleted file mode 100755
index 8ec34fd46..000000000
--- a/docs/com/test/test-pdf.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-Reveal.addEventListener( 'ready', function() {
-
- // Only one test for now, we're mainly ensuring that there
- // are no execution errors when running PDF mode
-
- test( 'Reveal.isReady', function() {
- strictEqual( Reveal.isReady(), true, 'returns true' );
- });
-
-
-} );
-
-Reveal.initialize({ pdf: true });
-
diff --git a/docs/com/test/test.html b/docs/com/test/test.html
deleted file mode 100755
index d08e4f000..000000000
--- a/docs/com/test/test.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!doctype html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
-
- <title>reveal.js - Tests</title>
-
- <link rel="stylesheet" href="../css/reveal.css">
- <link rel="stylesheet" href="qunit-1.12.0.css">
- </head>
-
- <body style="overflow: auto;">
-
- <div id="qunit"></div>
- <div id="qunit-fixture"></div>
-
- <div class="reveal" style="display: none;">
-
- <div class="slides">
-
- <section data-background-image="examples/assets/image1.png">
- <h1>1</h1>
- <img data-src="fake-url.png">
- <video data-src="fake-url.mp4"></video>
- <audio data-src="fake-url.mp3"></audio>
- <aside class="notes">speaker notes 1</aside>
- </section>
-
- <section>
- <section data-background="examples/assets/image2.png" data-notes="speaker notes 2">
- <h1>2.1</h1>
- </section>
- <section>
- <h1>2.2</h1>
- </section>
- <section>
- <h1>2.3</h1>
- </section>
- </section>
-
- <section id="fragment-slides">
- <section>
- <h1>3.1</h1>
- <ul>
- <li class="fragment">4.1</li>
- <li class="fragment">4.2</li>
- <li class="fragment">4.3</li>
- </ul>
- </section>
-
- <section>
- <h1>3.2</h1>
- <ul>
- <li class="fragment" data-fragment-index="0">4.1</li>
- <li class="fragment" data-fragment-index="0">4.2</li>
- </ul>
- <iframe data-src="http://example.com"></iframe>
- </section>
-
- <section>
- <h1>3.3</h1>
- <ul>
- <li class="fragment" data-fragment-index="1">3.3.1</li>
- <li class="fragment" data-fragment-index="4">3.3.2</li>
- <li class="fragment" data-fragment-index="4">3.3.3</li>
- </ul>
- </section>
- </section>
-
- <section>
- <h1>4</h1>
- </section>
-
- </div>
-
- </div>
-
- <script src="../lib/js/head.min.js"></script>
- <script src="../js/reveal.js"></script>
- <script src="qunit-1.12.0.js"></script>
-
- <script src="test.js"></script>
-
- </body>
-</html>
diff --git a/docs/com/test/test.js b/docs/com/test/test.js
deleted file mode 100755
index a96b70b3d..000000000
--- a/docs/com/test/test.js
+++ /dev/null
@@ -1,597 +0,0 @@
-
-// These tests expect the DOM to contain a presentation
-// with the following slide structure:
-//
-// 1
-// 2 - Three sub-slides
-// 3 - Three fragment elements
-// 3 - Two fragments with same data-fragment-index
-// 4
-
-
-Reveal.addEventListener( 'ready', function() {
-
- // ---------------------------------------------------------------
- // DOM TESTS
-
- QUnit.module( 'DOM' );
-
- test( 'Initial slides classes', function() {
- var horizontalSlides = document.querySelectorAll( '.reveal .slides>section' )
-
- strictEqual( document.querySelectorAll( '.reveal .slides section.past' ).length, 0, 'no .past slides' );
- strictEqual( document.querySelectorAll( '.reveal .slides section.present' ).length, 1, 'one .present slide' );
- strictEqual( document.querySelectorAll( '.reveal .slides>section.future' ).length, horizontalSlides.length - 1, 'remaining horizontal slides are .future' );
-
- strictEqual( document.querySelectorAll( '.reveal .slides section.stack' ).length, 2, 'two .stacks' );
-
- ok( document.querySelectorAll( '.reveal .slides section.stack' )[0].querySelectorAll( '.future' ).length > 0, 'vertical slides are given .future' );
- });
-
- // ---------------------------------------------------------------
- // API TESTS
-
- QUnit.module( 'API' );
-
- test( 'Reveal.isReady', function() {
- strictEqual( Reveal.isReady(), true, 'returns true' );
- });
-
- test( 'Reveal.isOverview', function() {
- strictEqual( Reveal.isOverview(), false, 'false by default' );
-
- Reveal.toggleOverview();
- strictEqual( Reveal.isOverview(), true, 'true after toggling on' );
-
- Reveal.toggleOverview();
- strictEqual( Reveal.isOverview(), false, 'false after toggling off' );
- });
-
- test( 'Reveal.isPaused', function() {
- strictEqual( Reveal.isPaused(), false, 'false by default' );
-
- Reveal.togglePause();
- strictEqual( Reveal.isPaused(), true, 'true after pausing' );
-
- Reveal.togglePause();
- strictEqual( Reveal.isPaused(), false, 'false after resuming' );
- });
-
- test( 'Reveal.isFirstSlide', function() {
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
-
- Reveal.slide( 1, 0 );
- strictEqual( Reveal.isFirstSlide(), false, 'false after Reveal.slide( 1, 0 )' );
-
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
- });
-
- test( 'Reveal.isFirstSlide after vertical slide', function() {
- Reveal.slide( 1, 1 );
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( 0, 0 )' );
- });
-
- test( 'Reveal.isLastSlide', function() {
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
-
- var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
-
- Reveal.slide( lastSlideIndex, 0 );
- strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( '+ lastSlideIndex +', 0 )' );
-
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
- });
-
- test( 'Reveal.isLastSlide after vertical slide', function() {
- var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
-
- Reveal.slide( 1, 1 );
- Reveal.slide( lastSlideIndex );
- strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( '+ lastSlideIndex +', 0 )' );
- });
-
- test( 'Reveal.getTotalSlides', function() {
- strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' );
- });
-
- test( 'Reveal.getIndices', function() {
- var indices = Reveal.getIndices();
-
- ok( indices.hasOwnProperty( 'h' ), 'h exists' );
- ok( indices.hasOwnProperty( 'v' ), 'v exists' );
- ok( indices.hasOwnProperty( 'f' ), 'f exists' );
-
- Reveal.slide( 1, 0 );
- strictEqual( Reveal.getIndices().h, 1, 'h 1' );
- strictEqual( Reveal.getIndices().v, 0, 'v 0' );
-
- Reveal.slide( 1, 2 );
- strictEqual( Reveal.getIndices().h, 1, 'h 1' );
- strictEqual( Reveal.getIndices().v, 2, 'v 2' );
-
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.getIndices().h, 0, 'h 0' );
- strictEqual( Reveal.getIndices().v, 0, 'v 0' );
- });
-
- test( 'Reveal.getSlide', function() {
- equal( Reveal.getSlide( 0 ), document.querySelector( '.reveal .slides>section:first-child' ), 'gets correct first slide' );
- equal( Reveal.getSlide( 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)' ), 'no v index returns stack' );
- equal( Reveal.getSlide( 1, 0 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(1)' ), 'v index 0 returns first vertical child' );
- equal( Reveal.getSlide( 1, 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(2)' ), 'v index 1 returns second vertical child' );
-
- strictEqual( Reveal.getSlide( 100 ), undefined, 'undefined when out of horizontal bounds' );
- strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
- });
-
- test( 'Reveal.getSlideBackground', function() {
- equal( Reveal.getSlideBackground( 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ), 'gets correct first background' );
- equal( Reveal.getSlideBackground( 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2)' ), 'no v index returns stack' );
- equal( Reveal.getSlideBackground( 1, 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(1)' ), 'v index 0 returns first vertical child' );
- equal( Reveal.getSlideBackground( 1, 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(2)' ), 'v index 1 returns second vertical child' );
-
- strictEqual( Reveal.getSlideBackground( 100 ), undefined, 'undefined when out of horizontal bounds' );
- strictEqual( Reveal.getSlideBackground( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
- });
-
- test( 'Reveal.getSlideNotes', function() {
- Reveal.slide( 0, 0 );
- ok( Reveal.getSlideNotes() === 'speaker notes 1', 'works with <aside class="notes">' );
-
- Reveal.slide( 1, 0 );
- ok( Reveal.getSlideNotes() === 'speaker notes 2', 'works with <section data-notes="">' );
- });
-
- test( 'Reveal.getPreviousSlide/getCurrentSlide', function() {
- Reveal.slide( 0, 0 );
- Reveal.slide( 1, 0 );
-
- var firstSlide = document.querySelector( '.reveal .slides>section:first-child' );
- var secondSlide = document.querySelector( '.reveal .slides>section:nth-child(2)>section' );
-
- equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' );
- equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' );
- });
-
- test( 'Reveal.getProgress', function() {
- Reveal.slide( 0, 0 );
- strictEqual( Reveal.getProgress(), 0, 'progress is 0 on first slide' );
-
- var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
-
- Reveal.slide( lastSlideIndex, 0 );
- strictEqual( Reveal.getProgress(), 1, 'progress is 1 on last slide' );
- });
-
- test( 'Reveal.getScale', function() {
- ok( typeof Reveal.getScale() === 'number', 'has scale' );
- });
-
- test( 'Reveal.getConfig', function() {
- ok( typeof Reveal.getConfig() === 'object', 'has config' );
- });
-
- test( 'Reveal.configure', function() {
- strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' );
-
- Reveal.configure({ loop: true });
- strictEqual( Reveal.getConfig().loop, true, '"loop" has changed to true' );
-
- Reveal.configure({ loop: false, customTestValue: 1 });
- strictEqual( Reveal.getConfig().customTestValue, 1, 'supports custom values' );
- });
-
- test( 'Reveal.availableRoutes', function() {
- Reveal.slide( 0, 0 );
- deepEqual( Reveal.availableRoutes(), { left: false, up: false, down: false, right: true }, 'correct for first slide' );
-
- Reveal.slide( 1, 0 );
- deepEqual( Reveal.availableRoutes(), { left: true, up: false, down: true, right: true }, 'correct for vertical slide' );
- });
-
- test( 'Reveal.next', function() {
- Reveal.slide( 0, 0 );
-
- // Step through vertical child slides
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } );
-
- // Step through fragments
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 } );
- });
-
- test( 'Reveal.next at end', function() {
- Reveal.slide( 3 );
-
- // We're at the end, this should have no effect
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
- });
-
-
- // ---------------------------------------------------------------
- // FRAGMENT TESTS
-
- QUnit.module( 'Fragments' );
-
- test( 'Sliding to fragments', function() {
- Reveal.slide( 2, 0, -1 );
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 }, 'Reveal.slide( 2, 0, -1 )' );
-
- Reveal.slide( 2, 0, 0 );
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'Reveal.slide( 2, 0, 0 )' );
-
- Reveal.slide( 2, 0, 2 );
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'Reveal.slide( 2, 0, 2 )' );
-
- Reveal.slide( 2, 0, 1 );
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'Reveal.slide( 2, 0, 1 )' );
- });
-
- test( 'Hiding all fragments', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
-
- Reveal.slide( 2, 0, 0 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 1, 'one fragment visible when index is 0' );
-
- Reveal.slide( 2, 0, -1 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when index is -1' );
- });
-
- test( 'Current fragment', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
-
- Reveal.slide( 2, 0 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment at index -1' );
-
- Reveal.slide( 2, 0, 0 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 1, 'one current fragment at index 0' );
-
- Reveal.slide( 1, 0, 0 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to previous slide' );
-
- Reveal.slide( 3, 0, 0 );
- strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to next slide' );
- });
-
- test( 'Stepping through fragments', function() {
- Reveal.slide( 2, 0, -1 );
-
- // forwards:
-
- Reveal.next();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'next() goes to next fragment' );
-
- Reveal.right();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'right() goes to next fragment' );
-
- Reveal.down();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'down() goes to next fragment' );
-
- Reveal.down(); // moves to f #3
-
- // backwards:
-
- Reveal.prev();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'prev() goes to prev fragment' );
-
- Reveal.left();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'left() goes to prev fragment' );
-
- Reveal.up();
- deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'up() goes to prev fragment' );
- });
-
- test( 'Stepping past fragments', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
-
- Reveal.slide( 0, 0, 0 );
- equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when on previous slide' );
-
- Reveal.slide( 3, 0, 0 );
- equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 3, 'all fragments visible when on future slide' );
- });
-
- test( 'Fragment indices', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(2)' );
-
- Reveal.slide( 3, 0, 0 );
- equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 2, 'both fragments of same index are shown' );
-
- // This slide has three fragments, first one is index 0, second and third have index 1
- Reveal.slide( 2, 2, 0 );
- equal( Reveal.getIndices().f, 0, 'returns correct index for first fragment' );
-
- Reveal.slide( 2, 2, 1 );
- equal( Reveal.getIndices().f, 1, 'returns correct index for two fragments with same index' );
- });
-
- test( 'Index generation', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
-
- // These have no indices defined to start with
- equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
- equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
- equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '2' );
- });
-
- test( 'Index normalization', function() {
- var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(3)' );
-
- // These start out as 1-4-4 and should normalize to 0-1-1
- equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
- equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
- equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' );
- });
-
- asyncTest( 'fragmentshown event', function() {
- expect( 2 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'fragmentshown', _onEvent );
-
- Reveal.slide( 2, 0 );
- Reveal.slide( 2, 0 ); // should do nothing
- Reveal.slide( 2, 0, 0 ); // should do nothing
- Reveal.next();
- Reveal.next();
- Reveal.prev(); // shouldn't fire fragmentshown
-
- start();
-
- Reveal.removeEventListener( 'fragmentshown', _onEvent );
- });
-
- asyncTest( 'fragmenthidden event', function() {
- expect( 2 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'fragmenthidden', _onEvent );
-
- Reveal.slide( 2, 0, 2 );
- Reveal.slide( 2, 0, 2 ); // should do nothing
- Reveal.prev();
- Reveal.prev();
- Reveal.next(); // shouldn't fire fragmenthidden
-
- start();
-
- Reveal.removeEventListener( 'fragmenthidden', _onEvent );
- });
-
-
- // ---------------------------------------------------------------
- // AUTO-SLIDE TESTS
-
- QUnit.module( 'Auto Sliding' );
-
- test( 'Reveal.isAutoSliding', function() {
- strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
-
- Reveal.configure({ autoSlide: 10000 });
- strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
-
- Reveal.configure({ autoSlide: 0 });
- strictEqual( Reveal.isAutoSliding(), false, 'false after setting to 0' );
- });
-
- test( 'Reveal.toggleAutoSlide', function() {
- Reveal.configure({ autoSlide: 10000 });
-
- Reveal.toggleAutoSlide();
- strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
- Reveal.toggleAutoSlide();
- strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
-
- Reveal.configure({ autoSlide: 0 });
- });
-
- asyncTest( 'autoslidepaused', function() {
- expect( 1 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'autoslidepaused', _onEvent );
- Reveal.configure({ autoSlide: 10000 });
- Reveal.toggleAutoSlide();
-
- start();
-
- // cleanup
- Reveal.configure({ autoSlide: 0 });
- Reveal.removeEventListener( 'autoslidepaused', _onEvent );
- });
-
- asyncTest( 'autoslideresumed', function() {
- expect( 1 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'autoslideresumed', _onEvent );
- Reveal.configure({ autoSlide: 10000 });
- Reveal.toggleAutoSlide();
- Reveal.toggleAutoSlide();
-
- start();
-
- // cleanup
- Reveal.configure({ autoSlide: 0 });
- Reveal.removeEventListener( 'autoslideresumed', _onEvent );
- });
-
-
- // ---------------------------------------------------------------
- // CONFIGURATION VALUES
-
- QUnit.module( 'Configuration' );
-
- test( 'Controls', function() {
- var controlsElement = document.querySelector( '.reveal>.controls' );
-
- Reveal.configure({ controls: false });
- equal( controlsElement.style.display, 'none', 'controls are hidden' );
-
- Reveal.configure({ controls: true });
- equal( controlsElement.style.display, 'block', 'controls are visible' );
- });
-
- test( 'Progress', function() {
- var progressElement = document.querySelector( '.reveal>.progress' );
-
- Reveal.configure({ progress: false });
- equal( progressElement.style.display, 'none', 'progress are hidden' );
-
- Reveal.configure({ progress: true });
- equal( progressElement.style.display, 'block', 'progress are visible' );
- });
-
- test( 'Loop', function() {
- Reveal.configure({ loop: true });
-
- Reveal.slide( 0, 0 );
-
- Reveal.left();
- notEqual( Reveal.getIndices().h, 0, 'looped from start to end' );
-
- Reveal.right();
- equal( Reveal.getIndices().h, 0, 'looped from end to start' );
-
- Reveal.configure({ loop: false });
- });
-
-
- // ---------------------------------------------------------------
- // LAZY-LOADING TESTS
-
- QUnit.module( 'Lazy-Loading' );
-
- test( 'img with data-src', function() {
- strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
- });
-
- test( 'video with data-src', function() {
- strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
- });
-
- test( 'audio with data-src', function() {
- strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' );
- });
-
- test( 'iframe with data-src', function() {
- Reveal.slide( 0, 0 );
- strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
- Reveal.slide( 2, 1 );
- strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 1, 'Iframe source is set' );
- Reveal.slide( 2, 2 );
- strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
- });
-
- test( 'background images', function() {
- var imageSource1 = Reveal.getSlide( 0 ).getAttribute( 'data-background-image' );
- var imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' );
-
- // check that the images are applied to the background elements
- ok( Reveal.getSlideBackground( 0 ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' );
- ok( Reveal.getSlideBackground( 1, 0 ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' );
- });
-
-
- // ---------------------------------------------------------------
- // EVENT TESTS
-
- QUnit.module( 'Events' );
-
- asyncTest( 'slidechanged', function() {
- expect( 3 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'slidechanged', _onEvent );
-
- Reveal.slide( 1, 0 ); // should trigger
- Reveal.slide( 1, 0 ); // should do nothing
- Reveal.next(); // should trigger
- Reveal.slide( 3, 0 ); // should trigger
- Reveal.next(); // should do nothing
-
- start();
-
- Reveal.removeEventListener( 'slidechanged', _onEvent );
-
- });
-
- asyncTest( 'paused', function() {
- expect( 1 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'paused', _onEvent );
-
- Reveal.togglePause();
- Reveal.togglePause();
-
- start();
-
- Reveal.removeEventListener( 'paused', _onEvent );
- });
-
- asyncTest( 'resumed', function() {
- expect( 1 );
-
- var _onEvent = function( event ) {
- ok( true, 'event fired' );
- }
-
- Reveal.addEventListener( 'resumed', _onEvent );
-
- Reveal.togglePause();
- Reveal.togglePause();
-
- start();
-
- Reveal.removeEventListener( 'resumed', _onEvent );
- });
-
-
-} );
-
-Reveal.initialize();
-