[jscover] 54/69: Upgrade to Jasmine 2.0.1

Sylvestre Ledru sylvestre at moszumanska.debian.org
Fri Aug 22 05:54:08 UTC 2014


This is an automated email from the git hooks/post-receive script.

sylvestre pushed a commit to branch master
in repository jscover.

commit 365a25be01d116c982817dbc2083af880a6d2ffa
Author: tntim96 <tntim96 at gmail.com>
Date:   Sun Jul 27 08:14:30 2014 +1000

    Upgrade to Jasmine 2.0.1
---
 History.md                                         |   1 +
 src/test/javascript/lib/jasmine-2.0.0/jasmine.css  |  55 --
 .../lib/jasmine-2.0.0/jasmine_favicon.png          | Bin 2057 -> 0 bytes
 .../lib/{jasmine-2.0.0 => jasmine-2.0.1}/boot.js   |   0
 .../{jasmine-2.0.0 => jasmine-2.0.1}/console.js    |  49 +-
 .../jasmine-html.js                                | 177 +++---
 src/test/javascript/lib/jasmine-2.0.1/jasmine.css  |  59 ++
 .../{jasmine-2.0.0 => jasmine-2.0.1}/jasmine.js    | 622 ++++++++++++---------
 .../lib/jasmine-2.0.1/jasmine_favicon.png          | Bin 0 -> 1486 bytes
 src/test/javascript/spec/suite.html                |  12 +-
 10 files changed, 565 insertions(+), 410 deletions(-)

diff --git a/History.md b/History.md
index 5e5fb52..93bcf0b 100644
--- a/History.md
+++ b/History.md
@@ -1,6 +1,7 @@
 1.0.14 / 2014-??-??
 ==================
   * Decode URI in proxy mode
+  * Internal: Upgrade to Jasmine 2.0.1
 
 1.0.13 / 2014-07-08
 ==================
diff --git a/src/test/javascript/lib/jasmine-2.0.0/jasmine.css b/src/test/javascript/lib/jasmine-2.0.0/jasmine.css
deleted file mode 100644
index f4d35b6..0000000
--- a/src/test/javascript/lib/jasmine-2.0.0/jasmine.css
+++ /dev/null
@@ -1,55 +0,0 @@
-body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
-
-.html-reporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
-.html-reporter a { text-decoration: none; }
-.html-reporter a:hover { text-decoration: underline; }
-.html-reporter p, .html-reporter h1, .html-reporter h2, .html-reporter h3, .html-reporter h4, .html-reporter h5, .html-reporter h6 { margin: 0; line-height: 14px; }
-.html-reporter .banner, .html-reporter .symbol-summary, .html-reporter .summary, .html-reporter .result-message, .html-reporter .spec .description, .html-reporter .spec-detail .description, .html-reporter .alert .bar, .html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
-.html-reporter .banner .version { margin-left: 14px; }
-.html-reporter #jasmine_content { position: fixed; right: 100%; }
-.html-reporter .version { color: #aaaaaa; }
-.html-reporter .banner { margin-top: 14px; }
-.html-reporter .duration { color: #aaaaaa; float: right; }
-.html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
-.html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
-.html-reporter .symbol-summary li.passed { font-size: 14px; }
-.html-reporter .symbol-summary li.passed:before { color: #5e7d00; content: "\02022"; }
-.html-reporter .symbol-summary li.failed { line-height: 9px; }
-.html-reporter .symbol-summary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
-.html-reporter .symbol-summary li.disabled { font-size: 14px; }
-.html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
-.html-reporter .symbol-summary li.pending { line-height: 17px; }
-.html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
-.html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
-.html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
-.html-reporter .bar.failed { background-color: #b03911; }
-.html-reporter .bar.passed { background-color: #a6b779; }
-.html-reporter .bar.skipped { background-color: #bababa; }
-.html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
-.html-reporter .bar.menu a { color: #333333; }
-.html-reporter .bar a { color: white; }
-.html-reporter.spec-list .bar.menu.failure-list, .html-reporter.spec-list .results .failures { display: none; }
-.html-reporter.failure-list .bar.menu.spec-list, .html-reporter.failure-list .summary { display: none; }
-.html-reporter .running-alert { background-color: #666666; }
-.html-reporter .results { margin-top: 14px; }
-.html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
-.html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
-.html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
-.html-reporter.showDetails .summary { display: none; }
-.html-reporter.showDetails #details { display: block; }
-.html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
-.html-reporter .summary { margin-top: 14px; }
-.html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
-.html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
-.html-reporter .summary li.passed a { color: #5e7d00; }
-.html-reporter .summary li.failed a { color: #b03911; }
-.html-reporter .summary li.pending a { color: #ba9d37; }
-.html-reporter .description + .suite { margin-top: 0; }
-.html-reporter .suite { margin-top: 14px; }
-.html-reporter .suite a { color: #333333; }
-.html-reporter .failures .spec-detail { margin-bottom: 28px; }
-.html-reporter .failures .spec-detail .description { background-color: #b03911; }
-.html-reporter .failures .spec-detail .description a { color: white; }
-.html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }
-.html-reporter .result-message span.result { display: block; }
-.html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
diff --git a/src/test/javascript/lib/jasmine-2.0.0/jasmine_favicon.png b/src/test/javascript/lib/jasmine-2.0.0/jasmine_favicon.png
deleted file mode 100644
index 3562e27..0000000
Binary files a/src/test/javascript/lib/jasmine-2.0.0/jasmine_favicon.png and /dev/null differ
diff --git a/src/test/javascript/lib/jasmine-2.0.0/boot.js b/src/test/javascript/lib/jasmine-2.0.1/boot.js
similarity index 100%
rename from src/test/javascript/lib/jasmine-2.0.0/boot.js
rename to src/test/javascript/lib/jasmine-2.0.1/boot.js
diff --git a/src/test/javascript/lib/jasmine-2.0.0/console.js b/src/test/javascript/lib/jasmine-2.0.1/console.js
similarity index 77%
rename from src/test/javascript/lib/jasmine-2.0.0/console.js
rename to src/test/javascript/lib/jasmine-2.0.1/console.js
index 33c1698..c54f72d 100644
--- a/src/test/javascript/lib/jasmine-2.0.0/console.js
+++ b/src/test/javascript/lib/jasmine-2.0.1/console.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2008-2013 Pivotal Labs
+Copyright (c) 2008-2014 Pivotal Labs
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
@@ -21,7 +21,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 function getJasmineRequireObj() {
-  if (typeof module !== "undefined" && module.exports) {
+  if (typeof module !== 'undefined' && module.exports) {
     return exports;
   } else {
     window.jasmineRequire = window.jasmineRequire || {};
@@ -60,7 +60,7 @@ getJasmineRequireObj().ConsoleReporter = function() {
       specCount = 0;
       failureCount = 0;
       pendingCount = 0;
-      print("Started");
+      print('Started');
       printNewline();
       timer.start();
     };
@@ -71,19 +71,24 @@ getJasmineRequireObj().ConsoleReporter = function() {
         specFailureDetails(failedSpecs[i]);
       }
 
-      printNewline();
-      var specCounts = specCount + " " + plural("spec", specCount) + ", " +
-        failureCount + " " + plural("failure", failureCount);
+      if(specCount > 0) {
+        printNewline();
 
-      if (pendingCount) {
-        specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount);
-      }
+        var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' +
+          failureCount + ' ' + plural('failure', failureCount);
 
-      print(specCounts);
+        if (pendingCount) {
+          specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount);
+        }
+
+        print(specCounts);
+      } else {
+        print('No specs found');
+      }
 
       printNewline();
       var seconds = timer.elapsed() / 1000;
-      print("Finished in " + seconds + " " + plural("second", seconds));
+      print('Finished in ' + seconds + ' ' + plural('second', seconds));
 
       printNewline();
 
@@ -93,28 +98,28 @@ getJasmineRequireObj().ConsoleReporter = function() {
     this.specDone = function(result) {
       specCount++;
 
-      if (result.status == "pending") {
+      if (result.status == 'pending') {
         pendingCount++;
-        print(colored("yellow", "*"));
+        print(colored('yellow', '*'));
         return;
       }
 
-      if (result.status == "passed") {
-        print(colored("green", '.'));
+      if (result.status == 'passed') {
+        print(colored('green', '.'));
         return;
       }
 
-      if (result.status == "failed") {
+      if (result.status == 'failed') {
         failureCount++;
         failedSpecs.push(result);
-        print(colored("red", 'F'));
+        print(colored('red', 'F'));
       }
     };
 
     return this;
 
     function printNewline() {
-      print("\n");
+      print('\n');
     }
 
     function colored(color, str) {
@@ -122,7 +127,7 @@ getJasmineRequireObj().ConsoleReporter = function() {
     }
 
     function plural(str, count) {
-      return count == 1 ? str : str + "s";
+      return count == 1 ? str : str + 's';
     }
 
     function repeat(thing, times) {
@@ -134,12 +139,12 @@ getJasmineRequireObj().ConsoleReporter = function() {
     }
 
     function indent(str, spaces) {
-      var lines = (str || '').split("\n");
+      var lines = (str || '').split('\n');
       var newArr = [];
       for (var i = 0; i < lines.length; i++) {
-        newArr.push(repeat(" ", spaces).join("") + lines[i]);
+        newArr.push(repeat(' ', spaces).join('') + lines[i]);
       }
-      return newArr.join("\n");
+      return newArr.join('\n');
     }
 
     function specFailureDetails(result) {
diff --git a/src/test/javascript/lib/jasmine-2.0.0/jasmine-html.js b/src/test/javascript/lib/jasmine-2.0.1/jasmine-html.js
similarity index 56%
rename from src/test/javascript/lib/jasmine-2.0.0/jasmine-html.js
rename to src/test/javascript/lib/jasmine-2.0.1/jasmine-html.js
index 985d0d1..9d95903 100644
--- a/src/test/javascript/lib/jasmine-2.0.0/jasmine-html.js
+++ b/src/test/javascript/lib/jasmine-2.0.1/jasmine-html.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2008-2013 Pivotal Labs
+Copyright (c) 2008-2014 Pivotal Labs
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
@@ -49,20 +49,21 @@ jasmineRequire.HtmlReporter = function(j$) {
       symbols;
 
     this.initialize = function() {
-      htmlReporterMain = createDom("div", {className: "html-reporter"},
-        createDom("div", {className: "banner"},
-          createDom("span", {className: "title"}, "Jasmine"),
-          createDom("span", {className: "version"}, j$.version)
+      clearPrior();
+      htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'},
+        createDom('div', {className: 'banner'},
+          createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}),
+          createDom('span', {className: 'version'}, j$.version)
         ),
-        createDom("ul", {className: "symbol-summary"}),
-        createDom("div", {className: "alert"}),
-        createDom("div", {className: "results"},
-          createDom("div", {className: "failures"})
+        createDom('ul', {className: 'symbol-summary'}),
+        createDom('div', {className: 'alert'}),
+        createDom('div', {className: 'results'},
+          createDom('div', {className: 'failures'})
         )
       );
       getContainer().appendChild(htmlReporterMain);
 
-      symbols = find(".symbol-summary");
+      symbols = find('.symbol-summary');
     };
 
     var totalSpecsDefined;
@@ -71,13 +72,13 @@ jasmineRequire.HtmlReporter = function(j$) {
       timer.start();
     };
 
-    var summary = createDom("div", {className: "summary"});
+    var summary = createDom('div', {className: 'summary'});
 
-    var topResults = new j$.ResultsNode({}, "", null),
+    var topResults = new j$.ResultsNode({}, '', null),
       currentParent = topResults;
 
     this.suiteStarted = function(result) {
-      currentParent.addChild(result, "suite");
+      currentParent.addChild(result, 'suite');
       currentParent = currentParent.last();
     };
 
@@ -90,82 +91,94 @@ jasmineRequire.HtmlReporter = function(j$) {
     };
 
     this.specStarted = function(result) {
-      currentParent.addChild(result, "spec");
+      currentParent.addChild(result, 'spec');
     };
 
     var failures = [];
     this.specDone = function(result) {
-      if (result.status != "disabled") {
+      if(noExpectations(result) && console && console.error) {
+        console.error('Spec \'' + result.fullName + '\' has no expectations.');
+      }
+
+      if (result.status != 'disabled') {
         specsExecuted++;
       }
 
-      symbols.appendChild(createDom("li", {
-          className: result.status,
-          id: "spec_" + result.id,
+      symbols.appendChild(createDom('li', {
+          className: noExpectations(result) ? 'empty' : result.status,
+          id: 'spec_' + result.id,
           title: result.fullName
         }
       ));
 
-      if (result.status == "failed") {
+      if (result.status == 'failed') {
         failureCount++;
 
         var failure =
-          createDom("div", {className: "spec-detail failed"},
-            createDom("div", {className: "description"},
-              createDom("a", {title: result.fullName, href: specHref(result)}, result.fullName)
+          createDom('div', {className: 'spec-detail failed'},
+            createDom('div', {className: 'description'},
+              createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName)
             ),
-            createDom("div", {className: "messages"})
+            createDom('div', {className: 'messages'})
           );
         var messages = failure.childNodes[1];
 
         for (var i = 0; i < result.failedExpectations.length; i++) {
           var expectation = result.failedExpectations[i];
-          messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
-          messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
+          messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message));
+          messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack));
         }
 
         failures.push(failure);
       }
 
-      if (result.status == "pending") {
+      if (result.status == 'pending') {
         pendingSpecCount++;
       }
     };
 
     this.jasmineDone = function() {
-      var banner = find(".banner");
-      banner.appendChild(createDom("span", {className: "duration"}, "finished in " + timer.elapsed() / 1000 + "s"));
+      var banner = find('.banner');
+      banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));
 
-      var alert = find(".alert");
+      var alert = find('.alert');
 
-      alert.appendChild(createDom("span", { className: "exceptions" },
-        createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
-        createDom("input", {
-          className: "raise",
-          id: "raise-exceptions",
-          type: "checkbox"
+      alert.appendChild(createDom('span', { className: 'exceptions' },
+        createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'),
+        createDom('input', {
+          className: 'raise',
+          id: 'raise-exceptions',
+          type: 'checkbox'
         })
       ));
-      var checkbox = find("input");
+      var checkbox = find('#raise-exceptions');
 
       checkbox.checked = !env.catchingExceptions();
       checkbox.onclick = onRaiseExceptionsClick;
 
       if (specsExecuted < totalSpecsDefined) {
-        var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
+        var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
         alert.appendChild(
-          createDom("span", {className: "bar skipped"},
-            createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
+          createDom('span', {className: 'bar skipped'},
+            createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage)
           )
         );
       }
-      var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
-      if (pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
+      var statusBarMessage = '';
+      var statusBarClassName = 'bar ';
+
+      if (totalSpecsDefined > 0) {
+        statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount);
+        if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); }
+        statusBarClassName += (failureCount > 0) ? 'failed' : 'passed';
+      } else {
+        statusBarClassName += 'skipped';
+        statusBarMessage += 'No specs found';
+      }
 
-      var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed");
-      alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage));
+      alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));
 
-      var results = find(".results");
+      var results = find('.results');
       results.appendChild(summary);
 
       summaryList(topResults, summary);
@@ -174,27 +187,31 @@ jasmineRequire.HtmlReporter = function(j$) {
         var specListNode;
         for (var i = 0; i < resultsTree.children.length; i++) {
           var resultNode = resultsTree.children[i];
-          if (resultNode.type == "suite") {
-            var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id},
-              createDom("li", {className: "suite-detail"},
-                createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
+          if (resultNode.type == 'suite') {
+            var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id},
+              createDom('li', {className: 'suite-detail'},
+                createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)
               )
             );
 
             summaryList(resultNode, suiteListNode);
             domParent.appendChild(suiteListNode);
           }
-          if (resultNode.type == "spec") {
-            if (domParent.getAttribute("class") != "specs") {
-              specListNode = createDom("ul", {className: "specs"});
+          if (resultNode.type == 'spec') {
+            if (domParent.getAttribute('class') != 'specs') {
+              specListNode = createDom('ul', {className: 'specs'});
               domParent.appendChild(specListNode);
             }
+            var specDescription = resultNode.result.description;
+            if(noExpectations(resultNode.result)) {
+              specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;
+            }
             specListNode.appendChild(
-              createDom("li", {
+              createDom('li', {
                   className: resultNode.result.status,
-                  id: "spec-" + resultNode.result.id
+                  id: 'spec-' + resultNode.result.id
                 },
-                createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
+                createDom('a', {href: specHref(resultNode.result)}, specDescription)
               )
             );
           }
@@ -203,24 +220,24 @@ jasmineRequire.HtmlReporter = function(j$) {
 
       if (failures.length) {
         alert.appendChild(
-          createDom('span', {className: "menu bar spec-list"},
-            createDom("span", {}, "Spec List | "),
-            createDom('a', {className: "failures-menu", href: "#"}, "Failures")));
+          createDom('span', {className: 'menu bar spec-list'},
+            createDom('span', {}, 'Spec List | '),
+            createDom('a', {className: 'failures-menu', href: '#'}, 'Failures')));
         alert.appendChild(
-          createDom('span', {className: "menu bar failure-list"},
-            createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"),
-            createDom("span", {}, " | Failures ")));
+          createDom('span', {className: 'menu bar failure-list'},
+            createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'),
+            createDom('span', {}, ' | Failures ')));
 
-        find(".failures-menu").onclick = function() {
+        find('.failures-menu').onclick = function() {
           setMenuModeTo('failure-list');
         };
-        find(".spec-list-menu").onclick = function() {
+        find('.spec-list-menu').onclick = function() {
           setMenuModeTo('spec-list');
         };
 
         setMenuModeTo('failure-list');
 
-        var failureNode = find(".failures");
+        var failureNode = find('.failures');
         for (var i = 0; i < failures.length; i++) {
           failureNode.appendChild(failures[i]);
         }
@@ -230,7 +247,16 @@ jasmineRequire.HtmlReporter = function(j$) {
     return this;
 
     function find(selector) {
-      return getContainer().querySelector(selector);
+      return getContainer().querySelector('.jasmine_html-reporter ' + selector);
+    }
+
+    function clearPrior() {
+      // return the reporter
+      var oldReporter = find('');
+      
+      if(oldReporter) {
+        getContainer().removeChild(oldReporter);
+      }
     }
 
     function createDom(type, attrs, childrenVarArgs) {
@@ -249,7 +275,7 @@ jasmineRequire.HtmlReporter = function(j$) {
       }
 
       for (var attr in attrs) {
-        if (attr == "className") {
+        if (attr == 'className') {
           el[attr] = attrs[attr];
         } else {
           el.setAttribute(attr, attrs[attr]);
@@ -260,17 +286,22 @@ jasmineRequire.HtmlReporter = function(j$) {
     }
 
     function pluralize(singular, count) {
-      var word = (count == 1 ? singular : singular + "s");
+      var word = (count == 1 ? singular : singular + 's');
 
-      return "" + count + " " + word;
+      return '' + count + ' ' + word;
     }
 
     function specHref(result) {
-      return "?spec=" + encodeURIComponent(result.fullName);
+      return '?spec=' + encodeURIComponent(result.fullName);
     }
 
     function setMenuModeTo(mode) {
-      htmlReporterMain.setAttribute("class", "html-reporter " + mode);
+      htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode);
+    }
+
+    function noExpectations(result) {
+      return (result.failedExpectations.length + result.passedExpectations.length) === 0 &&
+        result.status === 'passed';
     }
   }
 
@@ -279,7 +310,7 @@ jasmineRequire.HtmlReporter = function(j$) {
 
 jasmineRequire.HtmlSpecFilter = function() {
   function HtmlSpecFilter(options) {
-    var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+    var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
     var filterPattern = new RegExp(filterString);
 
     this.matches = function(specName) {
@@ -328,9 +359,9 @@ jasmineRequire.QueryString = function() {
     function toQueryString(paramMap) {
       var qStrPairs = [];
       for (var prop in paramMap) {
-        qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
+        qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop]));
       }
-      return "?" + qStrPairs.join('&');
+      return '?' + qStrPairs.join('&');
     }
 
     function queryStringToParamMap() {
@@ -343,7 +374,7 @@ jasmineRequire.QueryString = function() {
         for (var i = 0; i < params.length; i++) {
           var p = params[i].split('=');
           var value = decodeURIComponent(p[1]);
-          if (value === "true" || value === "false") {
+          if (value === 'true' || value === 'false') {
             value = JSON.parse(value);
           }
           paramMap[decodeURIComponent(p[0])] = value;
diff --git a/src/test/javascript/lib/jasmine-2.0.1/jasmine.css b/src/test/javascript/lib/jasmine-2.0.1/jasmine.css
new file mode 100644
index 0000000..c54ff30
--- /dev/null
+++ b/src/test/javascript/lib/jasmine-2.0.1/jasmine.css
@@ -0,0 +1,59 @@
+body { overflow-y: scroll; }
+
+.jasmine_html-reporter { background-color: #eeeeee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
+.jasmine_html-reporter a { text-decoration: none; }
+.jasmine_html-reporter a:hover { text-decoration: underline; }
+.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; }
+.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
+.jasmine_html-reporter .banner { position: relative; }
+.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQ [...]
+.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; }
+.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; }
+.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }
+.jasmine_html-reporter .version { color: #aaaaaa; }
+.jasmine_html-reporter .banner { margin-top: 14px; }
+.jasmine_html-reporter .duration { color: #aaaaaa; float: right; }
+.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
+.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
+.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; }
+.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; }
+.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; }
+.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; }
+.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; }
+.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
+.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; }
+.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
+.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
+.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
+.jasmine_html-reporter .bar.failed { background-color: #ca3a11; }
+.jasmine_html-reporter .bar.passed { background-color: #007069; }
+.jasmine_html-reporter .bar.skipped { background-color: #bababa; }
+.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
+.jasmine_html-reporter .bar.menu a { color: #333333; }
+.jasmine_html-reporter .bar a { color: white; }
+.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; }
+.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; }
+.jasmine_html-reporter .running-alert { background-color: #666666; }
+.jasmine_html-reporter .results { margin-top: 14px; }
+.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
+.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
+.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
+.jasmine_html-reporter.showDetails .summary { display: none; }
+.jasmine_html-reporter.showDetails #details { display: block; }
+.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
+.jasmine_html-reporter .summary { margin-top: 14px; }
+.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
+.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
+.jasmine_html-reporter .summary li.passed a { color: #007069; }
+.jasmine_html-reporter .summary li.failed a { color: #ca3a11; }
+.jasmine_html-reporter .summary li.empty a { color: #ba9d37; }
+.jasmine_html-reporter .summary li.pending a { color: #ba9d37; }
+.jasmine_html-reporter .description + .suite { margin-top: 0; }
+.jasmine_html-reporter .suite { margin-top: 14px; }
+.jasmine_html-reporter .suite a { color: #333333; }
+.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; }
+.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; }
+.jasmine_html-reporter .failures .spec-detail .description a { color: white; }
+.jasmine_html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }
+.jasmine_html-reporter .result-message span.result { display: block; }
+.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
diff --git a/src/test/javascript/lib/jasmine-2.0.0/jasmine.js b/src/test/javascript/lib/jasmine-2.0.1/jasmine.js
similarity index 77%
rename from src/test/javascript/lib/jasmine-2.0.0/jasmine.js
rename to src/test/javascript/lib/jasmine-2.0.1/jasmine.js
index 24463ec..c943db1 100644
--- a/src/test/javascript/lib/jasmine-2.0.0/jasmine.js
+++ b/src/test/javascript/lib/jasmine-2.0.1/jasmine.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2008-2013 Pivotal Labs
+Copyright (c) 2008-2014 Pivotal Labs
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
@@ -21,7 +21,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 function getJasmineRequireObj() {
-  if (typeof module !== "undefined" && module.exports) {
+  if (typeof module !== 'undefined' && module.exports) {
     return exports;
   } else {
     window.jasmineRequire = window.jasmineRequire || {};
@@ -36,6 +36,7 @@ getJasmineRequireObj().core = function(jRequire) {
   j$.util = jRequire.util();
   j$.Any = jRequire.Any();
   j$.CallTracker = jRequire.CallTracker();
+  j$.MockDate = jRequire.MockDate();
   j$.Clock = jRequire.Clock();
   j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
   j$.Env = jRequire.Env(j$);
@@ -46,7 +47,7 @@ getJasmineRequireObj().core = function(jRequire) {
   j$.matchersUtil = jRequire.matchersUtil(j$);
   j$.ObjectContaining = jRequire.ObjectContaining(j$);
   j$.pp = jRequire.pp(j$);
-  j$.QueueRunner = jRequire.QueueRunner();
+  j$.QueueRunner = jRequire.QueueRunner(j$);
   j$.ReportDispatcher = jRequire.ReportDispatcher();
   j$.Spec = jRequire.Spec(j$);
   j$.SpyStrategy = jRequire.SpyStrategy();
@@ -61,23 +62,23 @@ getJasmineRequireObj().core = function(jRequire) {
 
 getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
   var availableMatchers = [
-      "toBe",
-      "toBeCloseTo",
-      "toBeDefined",
-      "toBeFalsy",
-      "toBeGreaterThan",
-      "toBeLessThan",
-      "toBeNaN",
-      "toBeNull",
-      "toBeTruthy",
-      "toBeUndefined",
-      "toContain",
-      "toEqual",
-      "toHaveBeenCalled",
-      "toHaveBeenCalledWith",
-      "toMatch",
-      "toThrow",
-      "toThrowError"
+      'toBe',
+      'toBeCloseTo',
+      'toBeDefined',
+      'toBeFalsy',
+      'toBeGreaterThan',
+      'toBeLessThan',
+      'toBeNaN',
+      'toBeNull',
+      'toBeTruthy',
+      'toBeUndefined',
+      'toContain',
+      'toEqual',
+      'toHaveBeenCalled',
+      'toHaveBeenCalledWith',
+      'toMatch',
+      'toThrow',
+      'toThrowError'
     ],
     matchers = {};
 
@@ -89,104 +90,108 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
   return matchers;
 };
 
-getJasmineRequireObj().base = function(j$) {
-  j$.unimplementedMethod_ = function() {
-    throw new Error("unimplemented method");
-  };
+getJasmineRequireObj().base = (function (jasmineGlobal) {
+  if (typeof module !== 'undefined' && module.exports) {
+    jasmineGlobal = global;
+  }
 
-  j$.MAX_PRETTY_PRINT_DEPTH = 40;
-  j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
+  return function(j$) {
+    j$.unimplementedMethod_ = function() {
+      throw new Error('unimplemented method');
+    };
 
-  j$.getGlobal = (function() {
-    var jasmineGlobal = eval.call(null, "this");
-    return function() {
+    j$.MAX_PRETTY_PRINT_DEPTH = 40;
+    j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100;
+    j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
+
+    j$.getGlobal = function() {
       return jasmineGlobal;
     };
-  })();
 
-  j$.getEnv = function(options) {
-    var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
-    //jasmine. singletons in here (setTimeout blah blah).
-    return env;
-  };
+    j$.getEnv = function(options) {
+      var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
+      //jasmine. singletons in here (setTimeout blah blah).
+      return env;
+    };
 
-  j$.isArray_ = function(value) {
-    return j$.isA_("Array", value);
-  };
+    j$.isArray_ = function(value) {
+      return j$.isA_('Array', value);
+    };
 
-  j$.isString_ = function(value) {
-    return j$.isA_("String", value);
-  };
+    j$.isString_ = function(value) {
+      return j$.isA_('String', value);
+    };
 
-  j$.isNumber_ = function(value) {
-    return j$.isA_("Number", value);
-  };
+    j$.isNumber_ = function(value) {
+      return j$.isA_('Number', value);
+    };
 
-  j$.isA_ = function(typeName, value) {
-    return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
-  };
+    j$.isA_ = function(typeName, value) {
+      return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
+    };
 
-  j$.isDomNode = function(obj) {
-    return obj.nodeType > 0;
-  };
+    j$.isDomNode = function(obj) {
+      return obj.nodeType > 0;
+    };
 
-  j$.any = function(clazz) {
-    return new j$.Any(clazz);
-  };
+    j$.any = function(clazz) {
+      return new j$.Any(clazz);
+    };
 
-  j$.objectContaining = function(sample) {
-    return new j$.ObjectContaining(sample);
-  };
+    j$.objectContaining = function(sample) {
+      return new j$.ObjectContaining(sample);
+    };
 
-  j$.createSpy = function(name, originalFn) {
-
-    var spyStrategy = new j$.SpyStrategy({
-        name: name,
-        fn: originalFn,
-        getSpy: function() { return spy; }
-      }),
-      callTracker = new j$.CallTracker(),
-      spy = function() {
-        callTracker.track({
-          object: this,
-          args: Array.prototype.slice.apply(arguments)
-        });
-        return spyStrategy.exec.apply(this, arguments);
-      };
+    j$.createSpy = function(name, originalFn) {
 
-    for (var prop in originalFn) {
-      if (prop === 'and' || prop === 'calls') {
-        throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon");
-      }
+      var spyStrategy = new j$.SpyStrategy({
+          name: name,
+          fn: originalFn,
+          getSpy: function() { return spy; }
+        }),
+        callTracker = new j$.CallTracker(),
+        spy = function() {
+          callTracker.track({
+            object: this,
+            args: Array.prototype.slice.apply(arguments)
+          });
+          return spyStrategy.exec.apply(this, arguments);
+        };
 
-      spy[prop] = originalFn[prop];
-    }
+      for (var prop in originalFn) {
+        if (prop === 'and' || prop === 'calls') {
+          throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon');
+        }
 
-    spy.and = spyStrategy;
-    spy.calls = callTracker;
+        spy[prop] = originalFn[prop];
+      }
 
-    return spy;
-  };
+      spy.and = spyStrategy;
+      spy.calls = callTracker;
 
-  j$.isSpy = function(putativeSpy) {
-    if (!putativeSpy) {
-      return false;
-    }
-    return putativeSpy.and instanceof j$.SpyStrategy &&
-      putativeSpy.calls instanceof j$.CallTracker;
-  };
+      return spy;
+    };
 
-  j$.createSpyObj = function(baseName, methodNames) {
-    if (!j$.isArray_(methodNames) || methodNames.length === 0) {
-      throw "createSpyObj requires a non-empty array of method names to create spies for";
-    }
-    var obj = {};
-    for (var i = 0; i < methodNames.length; i++) {
-      obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
-    }
-    return obj;
+    j$.isSpy = function(putativeSpy) {
+      if (!putativeSpy) {
+        return false;
+      }
+      return putativeSpy.and instanceof j$.SpyStrategy &&
+        putativeSpy.calls instanceof j$.CallTracker;
+    };
+
+    j$.createSpyObj = function(baseName, methodNames) {
+      if (!j$.isArray_(methodNames) || methodNames.length === 0) {
+        throw 'createSpyObj requires a non-empty array of method names to create spies for';
+      }
+      var obj = {};
+      for (var i = 0; i < methodNames.length; i++) {
+        obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
+      }
+      return obj;
+    };
   };
-};
+})(this);
 
 getJasmineRequireObj().util = function() {
 
@@ -220,6 +225,16 @@ getJasmineRequireObj().util = function() {
     return obj === void 0;
   };
 
+  util.arrayContains = function(array, search) {
+    var i = array.length;
+    while (i--) {
+      if (array[i] == search) {
+        return true;
+      }
+    }
+    return false;
+  };
+
   return util;
 };
 
@@ -239,8 +254,6 @@ getJasmineRequireObj().Spec = function(j$) {
     this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};
     this.catchingExceptions = attrs.catchingExceptions || function() { return true; };
 
-    this.timer = attrs.timer || {setTimeout: setTimeout, clearTimeout: clearTimeout};
-
     if (!this.fn) {
       this.pend();
     }
@@ -249,15 +262,18 @@ getJasmineRequireObj().Spec = function(j$) {
       id: this.id,
       description: this.description,
       fullName: this.getFullName(),
-      failedExpectations: []
+      failedExpectations: [],
+      passedExpectations: []
     };
   }
 
   Spec.prototype.addExpectationResult = function(passed, data) {
+    var expectationResult = this.expectationResultFactory(data);
     if (passed) {
-      return;
+      this.result.passedExpectations.push(expectationResult);
+    } else {
+      this.result.failedExpectations.push(expectationResult);
     }
-    this.result.failedExpectations.push(this.expectationResultFactory(data));
   };
 
   Spec.prototype.expect = function(actual) {
@@ -265,8 +281,7 @@ getJasmineRequireObj().Spec = function(j$) {
   };
 
   Spec.prototype.execute = function(onComplete) {
-    var self = this,
-        timeout;
+    var self = this;
 
     this.onStart(this);
 
@@ -275,52 +290,26 @@ getJasmineRequireObj().Spec = function(j$) {
       return;
     }
 
-    function timeoutable(fn) {
-      return function(done) {
-        timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
-          onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
-          done();
-        }, j$.DEFAULT_TIMEOUT_INTERVAL]]);
-
-        var callDone = function() {
-          clearTimeoutable();
-          done();
-        };
-
-        fn.call(this, callDone); //TODO: do we care about more than 1 arg?
-      };
-    }
-
-    function clearTimeoutable() {
-      Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeout]]);
-      timeout = void 0;
-    }
-
-    var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()),
-      allTimeoutableFns = [];
-    for (var i = 0; i < allFns.length; i++) {
-      var fn = allFns[i];
-      allTimeoutableFns.push(fn.length > 0 ? timeoutable(fn) : fn);
-    }
+    var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns());
 
     this.queueRunnerFactory({
-      fns: allTimeoutableFns,
+      fns: allFns,
       onException: onException,
-      onComplete: complete
+      onComplete: complete,
+      enforceTimeout: function() { return true; }
     });
 
     function onException(e) {
-      clearTimeoutable();
       if (Spec.isPendingSpecException(e)) {
         self.pend();
         return;
       }
 
       self.addExpectationResult(false, {
-        matcherName: "",
+        matcherName: '',
         passed: false,
-        expected: "",
-        actual: "",
+        expected: '',
+        actual: '',
         error: e
       });
     }
@@ -363,16 +352,16 @@ getJasmineRequireObj().Spec = function(j$) {
     return this.getSpecName(this);
   };
 
-  Spec.pendingSpecExceptionMessage = "=> marked Pending";
+  Spec.pendingSpecExceptionMessage = '=> marked Pending';
 
   Spec.isPendingSpecException = function(e) {
-    return e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1;
+    return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1);
   };
 
   return Spec;
 };
 
-if (typeof window == void 0 && typeof exports == "object") {
+if (typeof window == void 0 && typeof exports == 'object') {
   exports.Spec = jasmineRequire.Spec;
 }
 
@@ -389,7 +378,7 @@ getJasmineRequireObj().Env = function(j$) {
 
     var realSetTimeout = j$.getGlobal().setTimeout;
     var realClearTimeout = j$.getGlobal().clearTimeout;
-    this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler());
+    this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global));
 
     var runnableLookupTable = {};
 
@@ -399,12 +388,12 @@ getJasmineRequireObj().Env = function(j$) {
     var currentSuite = null;
 
     var reporter = new j$.ReportDispatcher([
-      "jasmineStarted",
-      "jasmineDone",
-      "suiteStarted",
-      "suiteDone",
-      "specStarted",
-      "specDone"
+      'jasmineStarted',
+      'jasmineDone',
+      'suiteStarted',
+      'suiteDone',
+      'specStarted',
+      'specDone'
     ]);
 
     this.specFilter = function() {
@@ -514,6 +503,7 @@ getJasmineRequireObj().Env = function(j$) {
     var queueRunnerFactory = function(options) {
       options.catchException = catchException;
       options.clearStack = options.clearStack || clearStack;
+      options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout};
 
       new j$.QueueRunner(options).execute();
     };
@@ -558,7 +548,7 @@ getJasmineRequireObj().Env = function(j$) {
 
     this.spyOn = function(obj, methodName) {
       if (j$.util.isUndefined(obj)) {
-        throw new Error("spyOn could not find an object to spy upon for " + methodName + "()");
+        throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
       }
 
       if (j$.util.isUndefined(obj[methodName])) {
@@ -616,7 +606,7 @@ getJasmineRequireObj().Env = function(j$) {
       }
 
       if (declarationError) {
-        this.it("encountered a declaration exception", function() {
+        this.it('encountered a declaration exception', function() {
           throw declarationError;
         });
       }
@@ -649,8 +639,7 @@ getJasmineRequireObj().Env = function(j$) {
         description: description,
         expectationResultFactory: expectationResultFactory,
         queueRunnerFactory: queueRunnerFactory,
-        fn: fn,
-        timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}
+        fn: fn
       });
 
       runnableLookupTable[spec.id] = spec;
@@ -695,6 +684,10 @@ getJasmineRequireObj().Env = function(j$) {
     };
 
     this.expect = function(actual) {
+      if (!currentSpec) {
+        throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out');
+      }
+
       return currentSpec.expect(actual);
     };
 
@@ -723,7 +716,7 @@ getJasmineRequireObj().JsApiReporter = function() {
 
   function JsApiReporter(options) {
     var timer = options.timer || noopTimer,
-        status = "loaded";
+        status = 'loaded';
 
     this.started = false;
     this.finished = false;
@@ -819,7 +812,7 @@ getJasmineRequireObj().Any = function() {
   };
 
   Any.prototype.jasmineToString = function() {
-    return '<jasmine.any(' + this.expectedClass + ')>';
+    return '<jasmine.any(' + this.expectedObject + ')>';
   };
 
   return Any;
@@ -877,7 +870,7 @@ getJasmineRequireObj().CallTracker = function() {
 };
 
 getJasmineRequireObj().Clock = function() {
-  function Clock(global, delayedFunctionScheduler) {
+  function Clock(global, delayedFunctionScheduler, mockDate) {
     var self = this,
       realTimingFunctions = {
         setTimeout: global.setTimeout,
@@ -894,23 +887,32 @@ getJasmineRequireObj().Clock = function() {
       installed = false,
       timer;
 
+
     self.install = function() {
       replace(global, fakeTimingFunctions);
       timer = fakeTimingFunctions;
       installed = true;
+
+      return self;
     };
 
     self.uninstall = function() {
       delayedFunctionScheduler.reset();
+      mockDate.uninstall();
       replace(global, realTimingFunctions);
+
       timer = realTimingFunctions;
       installed = false;
     };
 
+    self.mockDate = function(initialDate) {
+      mockDate.install(initialDate);
+    };
+
     self.setTimeout = function(fn, delay, params) {
       if (legacyIE()) {
         if (arguments.length > 2) {
-          throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill");
+          throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill');
         }
         return timer.setTimeout(fn, delay);
       }
@@ -920,7 +922,7 @@ getJasmineRequireObj().Clock = function() {
     self.setInterval = function(fn, delay, params) {
       if (legacyIE()) {
         if (arguments.length > 2) {
-          throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill");
+          throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill');
         }
         return timer.setInterval(fn, delay);
       }
@@ -937,9 +939,10 @@ getJasmineRequireObj().Clock = function() {
 
     self.tick = function(millis) {
       if (installed) {
+        mockDate.tick(millis);
         delayedFunctionScheduler.tick(millis);
       } else {
-        throw new Error("Mock clock is not installed, use jasmine.clock().install()");
+        throw new Error('Mock clock is not installed, use jasmine.clock().install()');
       }
     };
 
@@ -973,7 +976,7 @@ getJasmineRequireObj().Clock = function() {
     }
 
     function argSlice(argsObj, n) {
-      return Array.prototype.slice.call(argsObj, 2);
+      return Array.prototype.slice.call(argsObj, n);
     }
   }
 
@@ -1129,16 +1132,20 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
 getJasmineRequireObj().ExceptionFormatter = function() {
   function ExceptionFormatter() {
     this.message = function(error) {
-      var message = error.name +
-        ': ' +
-        error.message;
+      var message = '';
+
+      if (error.name && error.message) {
+        message += error.name + ': ' + error.message;
+      } else {
+        message += error.toString() + ' thrown';
+      }
 
       if (error.fileName || error.sourceURL) {
-        message += " in " + (error.fileName || error.sourceURL);
+        message += ' in ' + (error.fileName || error.sourceURL);
       }
 
       if (error.line || error.lineNumber) {
-        message += " (line " + (error.line || error.lineNumber) + ")";
+        message += ' (line ' + (error.line || error.lineNumber) + ')';
       }
 
       return message;
@@ -1172,7 +1179,7 @@ getJasmineRequireObj().Expectation = function() {
     return function() {
       var args = Array.prototype.slice.call(arguments, 0),
         expected = args.slice(0),
-        message = "";
+        message = '';
 
       args.unshift(this.actual);
 
@@ -1197,7 +1204,11 @@ getJasmineRequireObj().Expectation = function() {
           args.unshift(name);
           message = this.util.buildFailureMessage.apply(null, args);
         } else {
-          message = result.message;
+          if (Object.prototype.toString.apply(result.message) === '[object Function]') {
+            message = result.message();
+          } else {
+            message = result.message;
+          }
         }
       }
 
@@ -1273,18 +1284,18 @@ getJasmineRequireObj().buildExpectationResult = function() {
 
     function message() {
       if (options.passed) {
-        return "Passed.";
+        return 'Passed.';
       } else if (options.message) {
         return options.message;
       } else if (options.error) {
         return messageFormatter(options.error);
       }
-      return "";
+      return '';
     }
 
     function stack() {
       if (options.passed) {
-        return "";
+        return '';
       }
 
       var error = options.error;
@@ -1302,6 +1313,73 @@ getJasmineRequireObj().buildExpectationResult = function() {
   return buildExpectationResult;
 };
 
+getJasmineRequireObj().MockDate = function() {
+  function MockDate(global) {
+    var self = this;
+    var currentTime = 0;
+
+    if (!global || !global.Date) {
+      self.install = function() {};
+      self.tick = function() {};
+      self.uninstall = function() {};
+      return self;
+    }
+
+    var GlobalDate = global.Date;
+
+    self.install = function(mockDate) {
+      if (mockDate instanceof GlobalDate) {
+        currentTime = mockDate.getTime();
+      } else {
+        currentTime = new GlobalDate().getTime();
+      }
+
+      global.Date = FakeDate;
+    };
+
+    self.tick = function(millis) {
+      millis = millis || 0;
+      currentTime = currentTime + millis;
+    };
+
+    self.uninstall = function() {
+      currentTime = 0;
+      global.Date = GlobalDate;
+    };
+
+    createDateProperties();
+
+    return self;
+
+    function FakeDate() {
+      if (arguments.length === 0) {
+        return new GlobalDate(currentTime);
+      } else {
+        return new GlobalDate(arguments[0], arguments[1], arguments[2],
+          arguments[3], arguments[4], arguments[5], arguments[6]);
+      }
+    }
+
+    function createDateProperties() {
+
+      FakeDate.now = function() {
+        if (GlobalDate.now) {
+          return currentTime;
+        } else {
+          throw new Error('Browser does not support Date.now()');
+        }
+      };
+
+      FakeDate.toSource = GlobalDate.toSource;
+      FakeDate.toString = GlobalDate.toString;
+      FakeDate.parse = GlobalDate.parse;
+      FakeDate.UTC = GlobalDate.UTC;
+    }
+	}
+
+  return MockDate;
+};
+
 getJasmineRequireObj().ObjectContaining = function(j$) {
 
   function ObjectContaining(sample) {
@@ -1309,7 +1387,7 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
   }
 
   ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
-    if (typeof(this.sample) !== "object") { throw new Error("You must provide an object to objectContaining, not '"+this.sample+"'."); }
+    if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); }
 
     mismatchKeys = mismatchKeys || [];
     mismatchValues = mismatchValues || [];
@@ -1320,10 +1398,10 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
 
     for (var property in this.sample) {
       if (!hasKey(other, property) && hasKey(this.sample, property)) {
-        mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
+        mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.');
       }
-      else if (!j$.matchersUtil.equals(this.sample[property], other[property])) {
-        mismatchValues.push("'" + property + "' was '" + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + "' in actual, but was '" + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in expected.");
+      else if (!j$.matchersUtil.equals(other[property], this.sample[property])) {
+        mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.');
       }
     }
 
@@ -1331,7 +1409,7 @@ getJasmineRequireObj().ObjectContaining = function(j$) {
   };
 
   ObjectContaining.prototype.jasmineToString = function() {
-    return "<jasmine.objectContaining(" + j$.pp(this.sample) + ")>";
+    return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';
   };
 
   return ObjectContaining;
@@ -1341,6 +1419,7 @@ getJasmineRequireObj().pp = function(j$) {
 
   function PrettyPrinter() {
     this.ppNestLevel_ = 0;
+    this.seen = [];
   }
 
   PrettyPrinter.prototype.format = function(value) {
@@ -1350,6 +1429,8 @@ getJasmineRequireObj().pp = function(j$) {
         this.emitScalar('undefined');
       } else if (value === null) {
         this.emitScalar('null');
+      } else if (value === 0 && 1/value === -Infinity) {
+        this.emitScalar('-0');
       } else if (value === j$.getGlobal()) {
         this.emitScalar('<global>');
       } else if (value.jasmineToString) {
@@ -1357,7 +1438,7 @@ getJasmineRequireObj().pp = function(j$) {
       } else if (typeof value === 'string') {
         this.emitString(value);
       } else if (j$.isSpy(value)) {
-        this.emitScalar("spy on " + value.and.identity());
+        this.emitScalar('spy on ' + value.and.identity());
       } else if (value instanceof RegExp) {
         this.emitScalar(value.toString());
       } else if (typeof value === 'function') {
@@ -1366,16 +1447,16 @@ getJasmineRequireObj().pp = function(j$) {
         this.emitScalar('HTMLNode');
       } else if (value instanceof Date) {
         this.emitScalar('Date(' + value + ')');
-      } else if (value.__Jasmine_been_here_before__) {
+      } else if (j$.util.arrayContains(this.seen, value)) {
         this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
       } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
-        value.__Jasmine_been_here_before__ = true;
+        this.seen.push(value);
         if (j$.isArray_(value)) {
           this.emitArray(value);
         } else {
           this.emitObject(value);
         }
-        delete value.__Jasmine_been_here_before__;
+        this.seen.pop();
       } else {
         this.emitScalar(value.toString());
       }
@@ -1386,8 +1467,7 @@ getJasmineRequireObj().pp = function(j$) {
 
   PrettyPrinter.prototype.iterateObject = function(obj, fn) {
     for (var property in obj) {
-      if (!obj.hasOwnProperty(property)) { continue; }
-      if (property == '__Jasmine_been_here_before__') { continue; }
+      if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; }
       fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
           obj.__lookupGetter__(property) !== null) : false);
     }
@@ -1411,28 +1491,31 @@ getJasmineRequireObj().pp = function(j$) {
   };
 
   StringPrettyPrinter.prototype.emitString = function(value) {
-    this.append("'" + value + "'");
+    this.append('\'' + value + '\'');
   };
 
   StringPrettyPrinter.prototype.emitArray = function(array) {
     if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
-      this.append("Array");
+      this.append('Array');
       return;
     }
-
+    var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);
     this.append('[ ');
-    for (var i = 0; i < array.length; i++) {
+    for (var i = 0; i < length; i++) {
       if (i > 0) {
         this.append(', ');
       }
       this.format(array[i]);
     }
+    if(array.length > length){
+      this.append(', ...');
+    }
     this.append(' ]');
   };
 
   StringPrettyPrinter.prototype.emitObject = function(obj) {
     if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
-      this.append("Object");
+      this.append('Object');
       return;
     }
 
@@ -1448,7 +1531,7 @@ getJasmineRequireObj().pp = function(j$) {
       }
 
       self.append(property);
-      self.append(' : ');
+      self.append(': ');
       if (isGetter) {
         self.append('<getter>');
       } else {
@@ -1470,7 +1553,17 @@ getJasmineRequireObj().pp = function(j$) {
   };
 };
 
-getJasmineRequireObj().QueueRunner = function() {
+getJasmineRequireObj().QueueRunner = function(j$) {
+
+  function once(fn) {
+    var called = false;
+    return function() {
+      if (!called) {
+        called = true;
+        fn();
+      }
+    };
+  }
 
   function QueueRunner(attrs) {
     this.fns = attrs.fns || [];
@@ -1478,7 +1571,9 @@ getJasmineRequireObj().QueueRunner = function() {
     this.clearStack = attrs.clearStack || function(fn) {fn();};
     this.onException = attrs.onException || function() {};
     this.catchException = attrs.catchException || function() { return true; };
+    this.enforceTimeout = attrs.enforceTimeout || function() { return false; };
     this.userContext = {};
+    this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
   }
 
   QueueRunner.prototype.execute = function() {
@@ -1514,7 +1609,21 @@ getJasmineRequireObj().QueueRunner = function() {
     }
 
     function attemptAsync(fn) {
-      var next = function () { self.run(fns, iterativeIndex + 1); };
+      var clearTimeout = function () {
+          Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]);
+        },
+        next = once(function () {
+          clearTimeout(timeoutId);
+          self.run(fns, iterativeIndex + 1);
+        }),
+        timeoutId;
+
+      if (self.enforceTimeout()) {
+        timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
+          self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
+          next();
+        }, j$.DEFAULT_TIMEOUT_INTERVAL]]);
+      }
 
       try {
         fn.call(self.userContext, next);
@@ -1578,7 +1687,7 @@ getJasmineRequireObj().SpyStrategy = function() {
   function SpyStrategy(options) {
     options = options || {};
 
-    var identity = options.name || "unknown",
+    var identity = options.name || 'unknown',
         originalFn = options.fn || function() {},
         getSpy = options.getSpy || function() {},
         plan = function() {};
@@ -1712,16 +1821,20 @@ getJasmineRequireObj().Suite = function() {
   return Suite;
 };
 
-if (typeof window == void 0 && typeof exports == "object") {
+if (typeof window == void 0 && typeof exports == 'object') {
   exports.Suite = jasmineRequire.Suite;
 }
 
 getJasmineRequireObj().Timer = function() {
+  var defaultNow = (function(Date) {
+    return function() { return new Date().getTime(); };
+  })(Date);
+
   function Timer(options) {
     options = options || {};
 
-    var now = options.now || function() { return new Date().getTime(); },
-        startTime;
+    var now = options.now || defaultNow,
+      startTime;
 
     this.start = function() {
       startTime = now();
@@ -1748,7 +1861,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
     contains: function(haystack, needle, customTesters) {
       customTesters = customTesters || [];
 
-      if (Object.prototype.toString.apply(haystack) === "[object Array]") {
+      if (Object.prototype.toString.apply(haystack) === '[object Array]') {
         for (var i = 0; i < haystack.length; i++) {
           if (eq(haystack[i], needle, [], [], customTesters)) {
             return true;
@@ -1756,7 +1869,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
         }
         return false;
       }
-      return haystack.indexOf(needle) >= 0;
+      return !!haystack && haystack.indexOf(needle) >= 0;
     },
 
     buildFailureMessage: function() {
@@ -1767,21 +1880,21 @@ getJasmineRequireObj().matchersUtil = function(j$) {
         expected = args.slice(3),
         englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
 
-      var message = "Expected " +
+      var message = 'Expected ' +
         j$.pp(actual) +
-        (isNot ? " not " : " ") +
+        (isNot ? ' not ' : ' ') +
         englishyPredicate;
 
       if (expected.length > 0) {
         for (var i = 0; i < expected.length; i++) {
           if (i > 0) {
-            message += ",";
+            message += ',';
           }
-          message += " " + j$.pp(expected[i]);
+          message += ' ' + j$.pp(expected[i]);
         }
       }
 
-      return message + ".";
+      return message + '.';
     }
   };
 
@@ -2018,9 +2131,9 @@ getJasmineRequireObj().toBeNaN = function(j$) {
         };
 
         if (result.pass) {
-          result.message = "Expected actual not to be NaN.";
+          result.message = 'Expected actual not to be NaN.';
         } else {
-          result.message = "Expected " + j$.pp(actual) + " to be NaN.";
+          result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; };
         }
 
         return result;
@@ -2132,8 +2245,8 @@ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
         result.pass = actual.calls.any();
 
         result.message = result.pass ?
-          "Expected spy " + actual.and.identity() + " not to have been called." :
-          "Expected spy " + actual.and.identity() + " to have been called.";
+          'Expected spy ' + actual.and.identity() + ' not to have been called.' :
+          'Expected spy ' + actual.and.identity() + ' to have been called.';
 
         return result;
       }
@@ -2145,7 +2258,7 @@ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
 
 getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
 
-  function toHaveBeenCalledWith(util) {
+  function toHaveBeenCalledWith(util, customEqualityTesters) {
     return {
       compare: function() {
         var args = Array.prototype.slice.call(arguments, 0),
@@ -2158,15 +2271,15 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
         }
 
         if (!actual.calls.any()) {
-          result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
+          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; };
           return result;
         }
 
-        if (util.contains(actual.calls.allArgs(), expectedArgs)) {
+        if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) {
           result.pass = true;
-          result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
+          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; };
         } else {
-          result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + ".";
+          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; };
         }
 
         return result;
@@ -2203,8 +2316,8 @@ getJasmineRequireObj().toThrow = function(j$) {
           threw = false,
           thrown;
 
-        if (typeof actual != "function") {
-          throw new Error("Actual is not a Function");
+        if (typeof actual != 'function') {
+          throw new Error('Actual is not a Function');
         }
 
         try {
@@ -2215,22 +2328,22 @@ getJasmineRequireObj().toThrow = function(j$) {
         }
 
         if (!threw) {
-          result.message = "Expected function to throw an exception.";
+          result.message = 'Expected function to throw an exception.';
           return result;
         }
 
         if (arguments.length == 1) {
           result.pass = true;
-          result.message = "Expected function not to throw, but it threw " + j$.pp(thrown) + ".";
+          result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; };
 
           return result;
         }
 
         if (util.equals(thrown, expected)) {
           result.pass = true;
-          result.message = "Expected function not to throw " + j$.pp(expected) + ".";
+          result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; };
         } else {
-          result.message = "Expected function to throw " + j$.pp(expected) + ", but it threw " +  j$.pp(thrown) + ".";
+          result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' +  j$.pp(thrown) + '.'; };
         }
 
         return result;
@@ -2246,6 +2359,8 @@ getJasmineRequireObj().toThrowError = function(j$) {
     return {
       compare: function(actual) {
         var threw = false,
+          pass = {pass: true},
+          fail = {pass: false},
           thrown,
           errorType,
           message,
@@ -2253,8 +2368,8 @@ getJasmineRequireObj().toThrowError = function(j$) {
           name,
           constructorName;
 
-        if (typeof actual != "function") {
-          throw new Error("Actual is not a Function");
+        if (typeof actual != 'function') {
+          throw new Error('Actual is not a Function');
         }
 
         extractExpectedParams.apply(null, arguments);
@@ -2267,15 +2382,18 @@ getJasmineRequireObj().toThrowError = function(j$) {
         }
 
         if (!threw) {
-          return fail("Expected function to throw an Error.");
+          fail.message = 'Expected function to throw an Error.';
+          return fail;
         }
 
         if (!(thrown instanceof Error)) {
-          return fail("Expected function to throw an Error, but it threw " + thrown + ".");
+          fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; };
+          return fail;
         }
 
         if (arguments.length == 1) {
-          return pass("Expected function not to throw an Error, but it threw " + fnNameFor(thrown) + ".");
+          pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.';
+          return pass;
         }
 
         if (errorType) {
@@ -2285,45 +2403,55 @@ getJasmineRequireObj().toThrowError = function(j$) {
 
         if (errorType && message) {
           if (thrown.constructor == errorType && util.equals(thrown.message, message)) {
-            return pass("Expected function not to throw " + name + " with message \"" + message + "\".");
+            pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; };
+            return pass;
           } else {
-            return fail("Expected function to throw " + name + " with message \"" + message +
-                        "\", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
+            fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) +
+              ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };
+            return fail;
           }
         }
 
         if (errorType && regexp) {
           if (thrown.constructor == errorType && regexp.test(thrown.message)) {
-            return pass("Expected function not to throw " + name + " with message matching " + regexp + ".");
+            pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; };
+            return pass;
           } else {
-            return fail("Expected function to throw " + name + " with message matching " + regexp +
-                        ", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
+            fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) +
+              ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };
+            return fail;
           }
         }
 
         if (errorType) {
           if (thrown.constructor == errorType) {
-            return pass("Expected function not to throw " + name + ".");
+            pass.message = 'Expected function not to throw ' + name + '.';
+            return pass;
           } else {
-            return fail("Expected function to throw " + name + ", but it threw " + constructorName + ".");
+            fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.';
+            return fail;
           }
         }
 
         if (message) {
           if (thrown.message == message) {
-            return pass("Expected function not to throw an exception with message " + j$.pp(message) + ".");
+            pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; };
+            return pass;
           } else {
-            return fail("Expected function to throw an exception with message " + j$.pp(message) +
-                        ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
+            fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) +
+              ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };
+            return fail;
           }
         }
 
         if (regexp) {
           if (regexp.test(thrown.message)) {
-            return pass("Expected function not to throw an exception with a message matching " + j$.pp(regexp) + ".");
+            pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; };
+            return pass;
           } else {
-            return fail("Expected function to throw an exception with a message matching " + j$.pp(regexp) +
-                        ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
+            fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) +
+              ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };
+            return fail;
           }
         }
 
@@ -2331,20 +2459,6 @@ getJasmineRequireObj().toThrowError = function(j$) {
             return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
         }
 
-        function pass(notMessage) {
-          return {
-            pass: true,
-            message: notMessage
-          };
-        }
-
-        function fail(message) {
-          return {
-            pass: false,
-            message: message
-          };
-        }
-
         function extractExpectedParams() {
           if (arguments.length == 1) {
             return;
@@ -2355,34 +2469,34 @@ getJasmineRequireObj().toThrowError = function(j$) {
 
             if (expected instanceof RegExp) {
               regexp = expected;
-            } else if (typeof expected == "string") {
+            } else if (typeof expected == 'string') {
               message = expected;
             } else if (checkForAnErrorType(expected)) {
               errorType = expected;
             }
 
             if (!(errorType || message || regexp)) {
-              throw new Error("Expected is not an Error, string, or RegExp.");
+              throw new Error('Expected is not an Error, string, or RegExp.');
             }
           } else {
             if (checkForAnErrorType(arguments[1])) {
               errorType = arguments[1];
             } else {
-              throw new Error("Expected error type is not an Error.");
+              throw new Error('Expected error type is not an Error.');
             }
 
             if (arguments[2] instanceof RegExp) {
               regexp = arguments[2];
-            } else if (typeof arguments[2] == "string") {
+            } else if (typeof arguments[2] == 'string') {
               message = arguments[2];
             } else {
-              throw new Error("Expected error message is not a string or RegExp.");
+              throw new Error('Expected error message is not a string or RegExp.');
             }
           }
         }
 
         function checkForAnErrorType(type) {
-          if (typeof type !== "function") {
+          if (typeof type !== 'function') {
             return false;
           }
 
@@ -2398,5 +2512,5 @@ getJasmineRequireObj().toThrowError = function(j$) {
 };
 
 getJasmineRequireObj().version = function() {
-  return "2.0.0";
+  return '2.0.1';
 };
diff --git a/src/test/javascript/lib/jasmine-2.0.1/jasmine_favicon.png b/src/test/javascript/lib/jasmine-2.0.1/jasmine_favicon.png
new file mode 100644
index 0000000..3b84583
Binary files /dev/null and b/src/test/javascript/lib/jasmine-2.0.1/jasmine_favicon.png differ
diff --git a/src/test/javascript/spec/suite.html b/src/test/javascript/spec/suite.html
index d48c520..9151b94 100644
--- a/src/test/javascript/spec/suite.html
+++ b/src/test/javascript/spec/suite.html
@@ -2,14 +2,14 @@
 <html>
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <title>Jasmine Spec Runner v2.0.0</title>
+    <title>Jasmine Spec Runner v2.0.1</title>
 
-    <link rel="shortcut icon" type="image/png" href="../lib/jasmine-2.0.0/jasmine_favicon.png">
-    <link rel="stylesheet" type="text/css" href="../lib/jasmine-2.0.0/jasmine.css">
+    <link rel="shortcut icon" type="image/png" href="../lib/jasmine-2.0.1/jasmine_favicon.png">
+    <link rel="stylesheet" type="text/css" href="../lib/jasmine-2.0.1/jasmine.css">
 
-    <script type="text/javascript" src="../lib/jasmine-2.0.0/jasmine.js"></script>
-    <script type="text/javascript" src="../lib/jasmine-2.0.0/jasmine-html.js"></script>
-    <script type="text/javascript" src="../lib/jasmine-2.0.0/boot.js"></script>
+    <script type="text/javascript" src="../lib/jasmine-2.0.1/jasmine.js"></script>
+    <script type="text/javascript" src="../lib/jasmine-2.0.1/jasmine-html.js"></script>
+    <script type="text/javascript" src="../lib/jasmine-2.0.1/boot.js"></script>
 
     <!-- include source files here... -->
     <script type="text/javascript" src="../../../main/resources/jscoverage-common.js"></script>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jscover.git



More information about the pkg-java-commits mailing list