You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by mm...@apache.org on 2013/10/29 15:35:56 UTC

[26/26] git commit: Adds an oppinionated plugin testing method

Adds an oppinionated plugin testing method


Project: http://git-wip-us.apache.org/repos/asf/cordova-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-labs/commit/6984ce60
Tree: http://git-wip-us.apache.org/repos/asf/cordova-labs/tree/6984ce60
Diff: http://git-wip-us.apache.org/repos/asf/cordova-labs/diff/6984ce60

Branch: refs/heads/cdvtest
Commit: 6984ce603dfcf1bccfbe4e5b8c22ba4b995355db
Parents: 7a089f4
Author: Michal Mocny <mm...@gmail.com>
Authored: Tue Oct 29 10:20:32 2013 -0400
Committer: Michal Mocny <mm...@gmail.com>
Committed: Tue Oct 29 10:31:09 2013 -0400

----------------------------------------------------------------------
 cordova-app-test-harness/LICENSE                |  191 +
 cordova-app-test-harness/README.md              |    0
 .../www/assets/jasmine-2.0.0-rc3/boot.js        |  105 +
 .../assets/jasmine-2.0.0-rc3/jasmine-html.js    |  356 ++
 .../www/assets/jasmine-2.0.0-rc3/jasmine.css    |   55 +
 .../www/assets/jasmine-2.0.0-rc3/jasmine.js     | 2391 +++++++++++
 .../jasmine-2.0.0-rc3/jasmine_favicon.png       |  Bin 0 -> 905 bytes
 .../www/assets/topcoat-0.7.5/.gitignore         |    6 +
 .../www/assets/topcoat-0.7.5/Gruntfile.js       |  277 ++
 .../www/assets/topcoat-0.7.5/LICENSE            |  203 +
 .../www/assets/topcoat-0.7.5/NOTICE             |  193 +
 .../www/assets/topcoat-0.7.5/README.md          |   89 +
 .../www/assets/topcoat-0.7.5/contributors.txt   |    7 +
 .../topcoat-0.7.5/css/topcoat-desktop-dark.css  | 3450 ++++++++++++++++
 .../css/topcoat-desktop-dark.min.css            |    1 +
 .../topcoat-0.7.5/css/topcoat-desktop-light.css | 3450 ++++++++++++++++
 .../css/topcoat-desktop-light.min.css           |    1 +
 .../topcoat-0.7.5/css/topcoat-mobile-dark.css   | 3700 ++++++++++++++++++
 .../css/topcoat-mobile-dark.min.css             |    1 +
 .../topcoat-0.7.5/css/topcoat-mobile-light.css  | 3700 ++++++++++++++++++
 .../css/topcoat-mobile-light.min.css            |    1 +
 .../assets/topcoat-0.7.5/demo/css/brackets.css  |   69 +
 .../www/assets/topcoat-0.7.5/demo/css/main.css  |  508 +++
 .../www/assets/topcoat-0.7.5/demo/css/theme.css |   28 +
 .../fonts/sourcecodepro-regular-webfont.eot     |  Bin 0 -> 23949 bytes
 .../fonts/sourcecodepro-regular-webfont.svg     |  242 ++
 .../fonts/sourcecodepro-regular-webfont.ttf     |  Bin 0 -> 52660 bytes
 .../fonts/sourcecodepro-regular-webfont.woff    |  Bin 0 -> 27068 bytes
 .../demo/fonts/sourcesanspro-light-webfont.eot  |  Bin 0 -> 23716 bytes
 .../demo/fonts/sourcesanspro-light-webfont.svg  |  243 ++
 .../demo/fonts/sourcesanspro-light-webfont.ttf  |  Bin 0 -> 51876 bytes
 .../demo/fonts/sourcesanspro-light-webfont.woff |  Bin 0 -> 26716 bytes
 .../fonts/sourcesanspro-regular-webfont.eot     |  Bin 0 -> 23970 bytes
 .../fonts/sourcesanspro-regular-webfont.svg     |  243 ++
 .../fonts/sourcesanspro-regular-webfont.ttf     |  Bin 0 -> 52456 bytes
 .../fonts/sourcesanspro-regular-webfont.woff    |  Bin 0 -> 27076 bytes
 .../fonts/sourcesanspro-semibold-webfont.eot    |  Bin 0 -> 23974 bytes
 .../fonts/sourcesanspro-semibold-webfont.svg    |  243 ++
 .../fonts/sourcesanspro-semibold-webfont.ttf    |  Bin 0 -> 51960 bytes
 .../fonts/sourcesanspro-semibold-webfont.woff   |  Bin 0 -> 27048 bytes
 .../topcoat-0.7.5/demo/fonts/stylesheet.css     |   57 +
 .../www/assets/topcoat-0.7.5/demo/index.html    | 3167 +++++++++++++++
 .../www/assets/topcoat-0.7.5/demo/js/main.js    |   44 +
 .../topcoat-0.7.5/demo/js/rainbow-custom.min.js |   11 +
 .../demo/js/rainbow.linenumbers.min.js          |    2 +
 .../demo/topcoat-desktop-light.html             | 3167 +++++++++++++++
 .../topcoat-0.7.5/demo/topcoat-mobile-dark.html | 3417 ++++++++++++++++
 .../demo/topcoat-mobile-light.html              | 3417 ++++++++++++++++
 .../topcoat-0.7.5/dev/build/styleguide.css      |  495 +++
 .../topcoat-0.7.5/dev/build/styleguide.js       |   10 +
 .../topcoat-0.7.5/dev/tasks/checkchromiumsrc.js |   13 +
 .../topcoat-0.7.5/dev/tasks/telemetrygentest.js |   98 +
 .../topcoat-0.7.5/dev/tasks/telemetrysubmit.js  |  101 +
 .../dev/test/perf/telemetry/README.md           |   79 +
 .../dev/test/perf/telemetry/bin/runAll.py       |  200 +
 .../dev/test/perf/telemetry/bin/runAll.sh       |  105 +
 .../dev/test/perf/telemetry/lib/csvToJSON.js    |   56 +
 .../test/perf/telemetry/lib/extractFileName.js  |   12 +
 .../dev/test/perf/telemetry/lib/settings.js     |   31 +
 .../dev/test/perf/telemetry/lib/submitData.js   |   61 +
 .../page_sets/topcoat/topcoat_telemetry.jade    |   17 +
 .../www/assets/topcoat-0.7.5/font/LICENSE.txt   |   93 +
 .../topcoat-0.7.5/font/SourceCodePro-Black.otf  |  Bin 0 -> 88472 bytes
 .../topcoat-0.7.5/font/SourceCodePro-Bold.otf   |  Bin 0 -> 92248 bytes
 .../font/SourceCodePro-ExtraLight.otf           |  Bin 0 -> 84636 bytes
 .../topcoat-0.7.5/font/SourceCodePro-Light.otf  |  Bin 0 -> 88152 bytes
 .../font/SourceCodePro-Regular.otf              |  Bin 0 -> 89600 bytes
 .../font/SourceCodePro-Semibold.otf             |  Bin 0 -> 89576 bytes
 .../topcoat-0.7.5/font/SourceSansPro-Black.otf  |  Bin 0 -> 98472 bytes
 .../font/SourceSansPro-BlackIt.otf              |  Bin 0 -> 96536 bytes
 .../topcoat-0.7.5/font/SourceSansPro-Bold.otf   |  Bin 0 -> 104072 bytes
 .../topcoat-0.7.5/font/SourceSansPro-BoldIt.otf |  Bin 0 -> 101848 bytes
 .../font/SourceSansPro-ExtraLight.otf           |  Bin 0 -> 94560 bytes
 .../font/SourceSansPro-ExtraLightIt.otf         |  Bin 0 -> 92880 bytes
 .../topcoat-0.7.5/font/SourceSansPro-It.otf     |  Bin 0 -> 100556 bytes
 .../topcoat-0.7.5/font/SourceSansPro-Light.otf  |  Bin 0 -> 98972 bytes
 .../font/SourceSansPro-LightIt.otf              |  Bin 0 -> 97352 bytes
 .../font/SourceSansPro-Regular.otf              |  Bin 0 -> 101820 bytes
 .../font/SourceSansPro-Semibold.otf             |  Bin 0 -> 101772 bytes
 .../font/SourceSansPro-SemiboldIt.otf           |  Bin 0 -> 100000 bytes
 .../www/assets/topcoat-0.7.5/img/avatar.png     |  Bin 0 -> 11926 bytes
 .../www/assets/topcoat-0.7.5/img/bg_dark.png    |  Bin 0 -> 85839 bytes
 .../www/assets/topcoat-0.7.5/img/breadcrumb.png |  Bin 0 -> 202 bytes
 .../topcoat-0.7.5/img/checkbox_checked.png      |  Bin 0 -> 1424 bytes
 .../topcoat-0.7.5/img/checkbox_checked_dark.png |  Bin 0 -> 1437 bytes
 .../topcoat-0.7.5/img/checkbox_unchecked.png    |  Bin 0 -> 1216 bytes
 .../img/checkbox_unchecked_dark.png             |  Bin 0 -> 1199 bytes
 .../assets/topcoat-0.7.5/img/checkmark_bw.svg   |   15 +
 .../topcoat-0.7.5/img/dark-combo-box-bg.png     |  Bin 0 -> 1023 bytes
 .../topcoat-0.7.5/img/dark-combo-box-bg2x.png   |  Bin 0 -> 1124 bytes
 .../www/assets/topcoat-0.7.5/img/dark-grips.png |  Bin 0 -> 220 bytes
 .../assets/topcoat-0.7.5/img/dark-sprites2x.png |  Bin 0 -> 5066 bytes
 .../assets/topcoat-0.7.5/img/dialog-zone-bg.png |  Bin 0 -> 600868 bytes
 .../img/drop-down-triangle-dark.png             |  Bin 0 -> 1091 bytes
 .../topcoat-0.7.5/img/drop-down-triangle.png    |  Bin 0 -> 2892 bytes
 .../assets/topcoat-0.7.5/img/hamburger_bw.svg   | 1912 +++++++++
 .../assets/topcoat-0.7.5/img/hamburger_dark.svg | 1935 +++++++++
 .../topcoat-0.7.5/img/hamburger_light.svg       | 1936 +++++++++
 .../topcoat-0.7.5/img/light-combo-box-bg.png    |  Bin 0 -> 1023 bytes
 .../topcoat-0.7.5/img/light-combo-box-bg2x.png  |  Bin 0 -> 1124 bytes
 .../assets/topcoat-0.7.5/img/light-grips.png    |  Bin 0 -> 248 bytes
 .../topcoat-0.7.5/img/light-sprites2x.png       |  Bin 0 -> 5351 bytes
 .../topcoat-0.7.5/img/pop-up-triangle-dark.png  |  Bin 0 -> 1153 bytes
 .../topcoat-0.7.5/img/pop-up-triangle.png       |  Bin 0 -> 2958 bytes
 .../www/assets/topcoat-0.7.5/img/search-bg.png  |  Bin 0 -> 1390 bytes
 .../assets/topcoat-0.7.5/img/search-bg2x.png    |  Bin 0 -> 1800 bytes
 .../www/assets/topcoat-0.7.5/img/search.svg     |   11 +
 .../www/assets/topcoat-0.7.5/img/search_bw.svg  |   16 +
 .../assets/topcoat-0.7.5/img/search_dark.svg    |   16 +
 .../assets/topcoat-0.7.5/img/search_light.svg   |   11 +
 .../www/assets/topcoat-0.7.5/img/spinner.png    |  Bin 0 -> 2707 bytes
 .../www/assets/topcoat-0.7.5/img/spinner2x.png  |  Bin 0 -> 5201 bytes
 .../www/assets/topcoat-0.7.5/package.json       |   85 +
 cordova-app-test-harness/www/config.xml         |   15 +
 cordova-app-test-harness/www/index.html         |   19 +
 cordova-app-test-harness/www/main.css           |   17 +
 cordova-app-test-harness/www/main.js            |  148 +
 cordova-plugin-test-framework/LICENSE           |  191 +
 cordova-plugin-test-framework/README.md         |    0
 cordova-plugin-test-framework/plugin.xml        |   15 +
 cordova-plugin-test-framework/www/test.js       |  151 +
 121 files changed, 40899 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-labs/blob/6984ce60/cordova-app-test-harness/LICENSE
----------------------------------------------------------------------
diff --git a/cordova-app-test-harness/LICENSE b/cordova-app-test-harness/LICENSE
new file mode 100644
index 0000000..37ec93a
--- /dev/null
+++ b/cordova-app-test-harness/LICENSE
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/cordova-labs/blob/6984ce60/cordova-app-test-harness/README.md
----------------------------------------------------------------------
diff --git a/cordova-app-test-harness/README.md b/cordova-app-test-harness/README.md
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-labs/blob/6984ce60/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/boot.js
----------------------------------------------------------------------
diff --git a/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/boot.js b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/boot.js
new file mode 100644
index 0000000..0839157
--- /dev/null
+++ b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/boot.js
@@ -0,0 +1,105 @@
+// Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it.
+(function() {
+  window.jasmine = jasmineRequire.core(jasmineRequire);
+  jasmineRequire.html(jasmine);
+
+  var env = jasmine.getEnv();
+
+  var jasmineInterface = {
+    describe: function(description, specDefinitions) {
+      return env.describe(description, specDefinitions);
+    },
+
+    xdescribe: function(description, specDefinitions) {
+      return env.xdescribe(description, specDefinitions);
+    },
+
+    it: function(desc, func) {
+      return env.it(desc, func);
+    },
+
+    xit: function(desc, func) {
+      return env.xit(desc, func);
+    },
+
+    beforeEach: function(beforeEachFunction) {
+      return env.beforeEach(beforeEachFunction);
+    },
+
+    afterEach: function(afterEachFunction) {
+      return env.afterEach(afterEachFunction);
+    },
+
+    expect: function(actual) {
+      return env.expect(actual);
+    },
+
+    pending: function() {
+      return env.pending();
+    },
+
+    addMatchers: function(matchers) {
+      return env.addMatchers(matchers);
+    },
+
+    spyOn: function(obj, methodName) {
+      return env.spyOn(obj, methodName);
+    },
+
+    clock: env.clock,
+    jsApiReporter: new jasmine.JsApiReporter({
+      timer: new jasmine.Timer()
+    })
+  };
+
+  if (typeof window == "undefined" && typeof exports == "object") {
+    extend(exports, jasmineInterface);
+  } else {
+    extend(window, jasmineInterface);
+  }
+
+  var queryString = new jasmine.QueryString({
+    getWindowLocation: function() { return window.location; }
+  });
+
+  // TODO: move all of catching to raise so we don't break our brains
+  var catchingExceptions = queryString.getParam("catch");
+  env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
+
+  var htmlReporter = new jasmine.HtmlReporter({
+    env: env,
+    queryString: queryString,
+    onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); },
+    getContainer: function() { return document.body; },
+    createElement: function() { return document.createElement.apply(document, arguments); },
+    createTextNode: function() { return document.createTextNode.apply(document, arguments); },
+    timer: new jasmine.Timer()
+  });
+
+  env.addReporter(jasmineInterface.jsApiReporter);
+  env.addReporter(htmlReporter);
+
+  var specFilter = new jasmine.HtmlSpecFilter({
+    filterString: function() { return queryString.getParam("spec"); }
+  });
+
+  env.specFilter = function(spec) {
+    return specFilter.matches(spec.getFullName());
+  };
+
+  var currentWindowOnload = window.onload;
+
+  window.onload = function() {
+    if (currentWindowOnload) {
+      currentWindowOnload();
+    }
+    htmlReporter.initialize();
+    env.execute();
+  };
+
+  function extend(destination, source) {
+    for (var property in source) destination[property] = source[property];
+    return destination;
+  }
+
+}());

http://git-wip-us.apache.org/repos/asf/cordova-labs/blob/6984ce60/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine-html.js
----------------------------------------------------------------------
diff --git a/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine-html.js b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine-html.js
new file mode 100644
index 0000000..4a5849b
--- /dev/null
+++ b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine-html.js
@@ -0,0 +1,356 @@
+/*
+Copyright (c) 2008-2013 Pivotal Labs
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+jasmineRequire.html = function(j$) {
+  j$.ResultsNode = jasmineRequire.ResultsNode();
+  j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
+  j$.QueryString = jasmineRequire.QueryString();
+  j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
+};
+jasmineRequire.HtmlReporter = function(j$) {
+
+  var noopTimer = {
+    start: function(){},
+    elapsed: function(){ return 0; }
+  };
+
+  function HtmlReporter(options) {
+    var env = options.env || {},
+      getContainer = options.getContainer,
+      createElement = options.createElement,
+      createTextNode = options.createTextNode,
+      onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
+      timer = options.timer || noopTimer,
+      results = [],
+      specsExecuted = 0,
+      failureCount = 0,
+      pendingSpecCount = 0,
+      htmlReporterMain,
+      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)
+        ),
+        createDom("ul", {className: "symbol-summary"}),
+        createDom("div", {className: "alert"}),
+        createDom("div", {className: "results"},
+          createDom("div", {className: "failures"})
+        )
+      );
+      getContainer().appendChild(htmlReporterMain);
+
+      symbols = find(".symbol-summary");
+    };
+
+    var totalSpecsDefined;
+    this.jasmineStarted = function(options) {
+      totalSpecsDefined = options.totalSpecsDefined || 0;
+      timer.start();
+    };
+
+    var summary = createDom("div", {className: "summary"});
+
+    var topResults = new j$.ResultsNode({}, "", null),
+      currentParent = topResults;
+
+    this.suiteStarted = function(result) {
+      currentParent.addChild(result, "suite");
+      currentParent = currentParent.last();
+    };
+
+    this.suiteDone = function(result) {
+      if (currentParent == topResults) {
+        return;
+      }
+
+      currentParent = currentParent.parent;
+    };
+
+    this.specStarted = function(result) {
+      currentParent.addChild(result, "spec");
+    };
+
+    var failures = [];
+    this.specDone = function(result) {
+      if (result.status != "disabled") {
+        specsExecuted++;
+      }
+
+      symbols.appendChild(createDom("li", {
+          className: result.status,
+          id: "spec_" + result.id,
+          title: result.fullName}
+      ));
+
+      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: "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));
+        }
+
+        failures.push(failure);
+      }
+
+      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 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"
+        })
+      ));
+      var checkbox = find("input");
+
+      checkbox.checked = !env.catchingExceptions();
+      checkbox.onclick = onRaiseExceptionsClick;
+
+      if (specsExecuted < totalSpecsDefined) {
+        var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
+        alert.appendChild(
+          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 statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed");
+      alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage));
+
+      var results = find(".results");
+      results.appendChild(summary);
+
+      summaryList(topResults, summary);
+
+      function summaryList(resultsTree, domParent) {
+        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)
+              )
+            );
+
+            summaryList(resultNode, suiteListNode);
+            domParent.appendChild(suiteListNode);
+          }
+          if (resultNode.type == "spec") {
+            if (domParent.getAttribute("class") != "specs") {
+              specListNode = createDom("ul", {className: "specs"});
+              domParent.appendChild(specListNode);
+            }
+            specListNode.appendChild(
+              createDom("li", {
+                  className: resultNode.result.status,
+                  id: "spec-" + resultNode.result.id
+                },
+                createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
+              )
+            );
+          }
+        }
+      }
+
+      if (failures.length) {
+        alert.appendChild(
+          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 ")));
+
+        find(".failures-menu").onclick = function() {
+          setMenuModeTo('failure-list');
+        };
+        find(".spec-list-menu").onclick = function() {
+          setMenuModeTo('spec-list');
+        };
+
+        setMenuModeTo('failure-list');
+
+        var failureNode = find(".failures");
+        for (var i = 0; i < failures.length; i++) {
+          failureNode.appendChild(failures[i]);
+        }
+      }
+    };
+
+    return this;
+
+    function find(selector) {
+      return getContainer().querySelector(selector);
+    }
+
+    function createDom(type, attrs, childrenVarArgs) {
+      var el = createElement(type);
+
+      for (var i = 2; i < arguments.length; i++) {
+        var child = arguments[i];
+
+        if (typeof child === 'string') {
+          el.appendChild(createTextNode(child));
+        } else {
+          if (child) {
+            el.appendChild(child);
+          }
+        }
+      }
+
+      for (var attr in attrs) {
+        if (attr == "className") {
+          el[attr] = attrs[attr];
+        } else {
+          el.setAttribute(attr, attrs[attr]);
+        }
+      }
+
+      return el;
+    }
+
+    function pluralize(singular, count) {
+      var word = (count == 1 ? singular : singular + "s");
+
+      return "" + count + " " + word;
+    }
+
+    function specHref(result) {
+      return "?spec=" + encodeURIComponent(result.fullName);
+    }
+
+    function setMenuModeTo(mode) {
+      htmlReporterMain.setAttribute("class", "html-reporter " + mode);
+    }
+  }
+
+  return HtmlReporter;
+};
+
+jasmineRequire.HtmlSpecFilter = function() {
+  function HtmlSpecFilter(options) {
+    var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+    var filterPattern = new RegExp(filterString);
+
+    this.matches = function(specName) {
+      return filterPattern.test(specName);
+    };
+  }
+
+  return HtmlSpecFilter;
+};
+
+jasmineRequire.ResultsNode = function() {
+  function ResultsNode(result, type, parent) {
+    this.result = result;
+    this.type = type;
+    this.parent = parent;
+
+    this.children = [];
+
+    this.addChild = function(result, type) {
+      this.children.push(new ResultsNode(result, type, this));
+    };
+
+    this.last = function() {
+      return this.children[this.children.length - 1];
+    };
+  }
+
+  return ResultsNode;
+};
+jasmineRequire.QueryString = function() {
+  function QueryString(options) {
+
+    this.setParam = function(key, value) {
+      var paramMap = queryStringToParamMap();
+      paramMap[key] = value;
+      options.getWindowLocation().search = toQueryString(paramMap);
+    };
+
+    this.getParam = function(key) {
+      return queryStringToParamMap()[key];
+    };
+
+    return this;
+
+    function toQueryString(paramMap) {
+      var qStrPairs = [];
+      for (var prop in paramMap) {
+        qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
+      }
+      return "?" + qStrPairs.join('&');
+    }
+
+    function queryStringToParamMap() {
+      var paramStr = options.getWindowLocation().search.substring(1),
+        params = [],
+        paramMap = {};
+
+      if (paramStr.length > 0) {
+        params = paramStr.split('&');
+        for (var i = 0; i < params.length; i++) {
+          var p = params[i].split('=');
+          var value = decodeURIComponent(p[1]);
+          if (value === "true" || value === "false") {
+            value = JSON.parse(value);
+          }
+          paramMap[decodeURIComponent(p[0])] = value;
+        }
+      }
+
+      return paramMap;
+    }
+
+  }
+
+  return QueryString;
+};

http://git-wip-us.apache.org/repos/asf/cordova-labs/blob/6984ce60/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine.css
----------------------------------------------------------------------
diff --git a/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine.css b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine.css
new file mode 100644
index 0000000..f4d35b6
--- /dev/null
+++ b/cordova-app-test-harness/www/assets/jasmine-2.0.0-rc3/jasmine.css
@@ -0,0 +1,55 @@
+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; }