cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agri...@apache.org
Subject [3/3] spec commit: CB-8131 Rewrote non plugin auto tests for Jasmine 2.0 (close #113)
Date Sun, 18 Jan 2015 02:15:00 GMT
CB-8131 Rewrote non plugin auto tests for Jasmine 2.0 (close #113)


Project: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/commit/16019c59
Tree: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/tree/16019c59
Diff: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/diff/16019c59

Branch: refs/heads/master
Commit: 16019c59b6e3c8ed291d08010473bda1b8f88cf4
Parents: 5ef8927
Author: maria.bukharina <maria.bukharina@akvelon.com>
Authored: Fri Dec 5 18:31:20 2014 +0300
Committer: Andrew Grieve <agrieve@chromium.org>
Committed: Sat Jan 17 21:14:40 2015 -0500

----------------------------------------------------------------------
 cordova-plugin-mobilespec-tests/plugin.xml      |   46 +
 .../tests/bridge.tests.js                       |   39 +
 .../tests/datauri.tests.js                      |   95 +
 .../tests/localXHR.tests.js                     |  215 ++
 .../tests/platform.tests.js                     |   33 +
 .../tests/storage.tests.js                      |  229 ++
 .../tests/whitelist.tests.js                    |  206 ++
 dependencies-plugin/plugin.xml                  |    1 +
 www/autotest/html/HtmlReporter.js               |  101 -
 www/autotest/html/HtmlReporterHelpers.js        |   60 -
 www/autotest/html/ReporterView.js               |  164 --
 www/autotest/html/SpecView.js                   |   79 -
 www/autotest/html/SuiteView.js                  |   22 -
 www/autotest/html/TrivialReporter.js            |  192 --
 www/autotest/index.js                           |    4 -
 www/autotest/jasmine.css                        |   81 -
 www/autotest/jasmine.js                         | 2530 ------------------
 www/autotest/pages/all.js                       |   46 -
 www/autotest/pages/run-tests.js                 |   18 -
 www/autotest/test-runner.js                     |   66 -
 www/autotest/tests/bridge.tests.js              |   44 -
 www/autotest/tests/datauri.tests.js             |   60 -
 www/autotest/tests/localXHR.tests.js            |  189 --
 www/autotest/tests/platform.tests.js            |   31 -
 www/autotest/tests/storage.tests.js             |  201 --
 www/autotest/tests/whitelist.tests.js           |  169 --
 www/index.html                                  |    1 -
 27 files changed, 864 insertions(+), 4058 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/plugin.xml b/cordova-plugin-mobilespec-tests/plugin.xml
new file mode 100644
index 0000000..fa62cd4
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/plugin.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you 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.
+-->
+
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:rim="http://www.blackberry.com/ns/widgets"
+    id="org.apache.cordova.mobilespec.tests"
+    version="1.0.0">
+    <name>Cordova Non Plugin Auto Tests</name>
+    <license>Apache 2.0</license>
+
+    <js-module src="tests/bridge.tests.js" name="bridge.tests">
+    </js-module>
+    
+    <js-module src="tests/datauri.tests.js" name="datauri.tests">
+    </js-module>
+    
+    <js-module src="tests/localXHR.tests.js" name="localXHR.tests">
+    </js-module>
+    
+    <js-module src="tests/platform.tests.js" name="platform.tests">
+    </js-module>
+    
+    <js-module src="tests/storage.tests.js" name="storage.tests">
+    </js-module>
+    
+    <js-module src="tests/whitelist.tests.js" name="whitelist.tests">
+    </js-module>
+</plugin>

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/bridge.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/bridge.tests.js b/cordova-plugin-mobilespec-tests/tests/bridge.tests.js
new file mode 100644
index 0000000..9bf40f1
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/bridge.tests.js
@@ -0,0 +1,39 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ *
+ */
+exports.defineAutoTests = function () {
+    describe('Bridge', function (done) {
+        it("bridge.spec.1 should reject bridge from iframe with data: URL", function (done) {
+            if (cordova.platformId != 'android') {
+                pending();
+            }
+            var ifr = document.createElement('iframe');
+
+            ifr.src = 'data:text/html,';
+            ifr.onload = function () {
+                var stolenSecret = ifr.contentWindow.prompt('', 'gap_init:');
+                expect(!!stolenSecret).toBe(false);
+                done();
+            };
+            document.body.appendChild(ifr);
+        });
+
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/datauri.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/datauri.tests.js b/cordova-plugin-mobilespec-tests/tests/datauri.tests.js
new file mode 100644
index 0000000..bda89c8
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/datauri.tests.js
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+exports.defineAutoTests = function () {
+    var isWindowsPhone = cordova.platformId == 'windowsphone';
+    var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8");
+
+    describe('data uris', function () {
+        var gotFoo = false,
+            onMessageBind,
+            originalTimeout;
+
+        function onMessage (done, msg) {
+            gotFoo = gotFoo || msg.data == 'foo';
+            if (gotFoo) {
+                expect(gotFoo).toBe(true);
+                if (typeof(done) === 'function') {
+                    done();
+                }
+            }
+        };
+
+        beforeEach(function () {
+            originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+            jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
+        });
+
+        afterEach(function () {
+            if (this.frame) {
+                document.body.removeChild(this.frame);
+                window.removeEventListener('message', onMessageBind, false);
+            }
+            jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
+        });
+
+        it("datauri.spec.1 should work with iframes", function (done) {
+            // IE on WP7/8 considers 'data:' in frame.src string as protocol type
+            // so asks user to look for appropriating application in the market;
+            // temporary skipped since requires user interaction
+            // data:text/html is not supported by IE so pended for windows platform for now
+            if (isWindowsPhone || isWindows) {
+                pending();
+            }
+
+            this.frame = document.createElement('iframe');
+
+            onMessageBind = onMessage.bind(null, done);
+            window.addEventListener('message', onMessageBind, false);
+            this.frame.src = 'data:text/html;charset=utf-8,%3Chtml%3E%3Cscript%3Eparent.postMessage%28%27foo%27%2C%27%2A%27%29%3C%2Fscript%3E%3C%2Fhtml%3E';
+            document.body.appendChild(this.frame);
+        }, 'iframe did not load.');
+    });
+
+    describe('data uris', function () {
+        var errorHandler = {
+            onError: function (done) {
+                if (typeof (done) === "function") {
+                    done();
+                }
+            }
+        };
+
+        beforeEach(function () {
+            spyOn(errorHandler, 'onError').and.callThrough();
+        });
+
+        afterEach(function () {
+            expect(errorHandler.onError).not.toHaveBeenCalled();
+        });
+
+        it("datauri.spec.2 should work with images Jasmine 2", function (done) {
+            var img = new Image();
+            img.onload = done;
+            img.onerror = errorHandler.onError.bind(null, done);
+
+            img.src = 'data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7';
+        });
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/localXHR.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/localXHR.tests.js b/cordova-plugin-mobilespec-tests/tests/localXHR.tests.js
new file mode 100644
index 0000000..d579ea0
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/localXHR.tests.js
@@ -0,0 +1,215 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ *
+ */
+
+exports.defineAutoTests = function () {
+    describe("XMLHttpRequest", function () {
+        var errorHandler = {
+            onError: function (done) {
+                if (typeof done === "function") {
+                    done();
+                }
+            }
+        };
+
+        beforeEach(function () {
+            spyOn(errorHandler, 'onError').and.callThrough();
+        });
+
+        afterEach(function () {
+            expect(errorHandler.onError).not.toHaveBeenCalled();
+        });
+
+        var createXHR = function (url, bAsync, win, lose) {
+            var xhr = new XMLHttpRequest();
+            xhr.open("GET", url, bAsync);
+            xhr.onload = win;
+            xhr.onerror = lose;
+            xhr.send();
+            return xhr;
+        }
+
+        it("XMLHttpRequest.spec.1 should exist", function () {
+            expect(window.XMLHttpRequest).toBeDefined();
+            expect(window.XMLHttpRequest.UNSENT).toBe(0);
+            expect(window.XMLHttpRequest.OPENED).toBe(1);
+            expect(window.XMLHttpRequest.HEADERS_RECEIVED).toBe(2);
+            expect(window.XMLHttpRequest.LOADING).toBe(3);
+            expect(window.XMLHttpRequest.DONE).toBe(4);
+        });
+
+        it("XMLHttpRequest.spec.2 should be able to create new XHR", function () {
+
+            var xhr = new XMLHttpRequest();
+            expect(xhr).toBeDefined();
+
+            // abort
+            expect(xhr.abort).toBeDefined();
+            expect(typeof xhr.abort == 'function').toBe(true);
+
+            // getResponseHeader
+            expect(xhr.getResponseHeader).toBeDefined();
+            expect(typeof xhr.getResponseHeader == 'function').toBe(true);
+
+            // getAllResponseHeaders
+            expect(xhr.getAllResponseHeaders).toBeDefined();
+            expect(typeof xhr.getAllResponseHeaders == 'function').toBe(true);
+
+            // overrideMimeType
+            //  IE10 does not support overrideMimeType
+            if (cordova.platformId != 'windows8' && cordova.platformId != 'windowsphone') {
+                expect(xhr.overrideMimeType).toBeDefined();
+                expect(typeof xhr.overrideMimeType == 'function').toBe(true);
+            }
+
+            // open
+            expect(xhr.open).toBeDefined();
+            expect(typeof xhr.open == 'function').toBe(true);
+            // send
+            expect(xhr.send).toBeDefined();
+            expect(typeof xhr.send == 'function').toBe(true);
+            // setRequestHeader
+            expect(xhr.setRequestHeader).toBeDefined();
+            expect(typeof xhr.setRequestHeader == 'function').toBe(true);
+        });
+
+        it("XMLHttpRequest.spec.2 should be able to load the current page", function (done) {
+            createXHR("index.html", true, done, errorHandler.onError.bind(null, done));
+        });
+
+        it("XMLHttpRequest.spec.9 calls onload from successful http get", function (done) {
+            createXHR("http://cordova-filetransfer.jitsu.com", true, done, errorHandler.onError.bind(null, done));
+        });
+
+        it("XMLHttpRequest.spec.3 should be able to load the current page", function (done) {
+            createXHR(window.location.href, true, done, errorHandler.onError.bind(null, done));
+        });
+
+        it("XMLHttpRequest.spec.4 should be able to load the parent folder page ../index.html", function (done) {
+            createXHR("../index.html", true, done, errorHandler.onError.bind(null, done));
+        });
+
+        it("XMLHttpRequest.spec.5 should be able to load the current page ./???.html", function (done) {
+            var fileName = window.location.href.split('#')[0].split('/').pop();
+            createXHR("./" + fileName, true, done, errorHandler.onError.bind(null, done));
+        });
+
+        it("XMLHttpRequest.spec.6 adds hash-path and loads file okay", function (done) {
+            window.location = window.location.href + "#asd/asd/asdasd";
+            createXHR(window.location.href, true, done, errorHandler.onError.bind(null, done));
+        });
+
+        describe("XMLHttpRequest", function () {
+            var order = "",
+                originalTimeout;
+
+            var createXHR = function (url, bAsync, win, lose) {
+                var xhr = new XMLHttpRequest();
+                xhr.open("GET", url, bAsync);
+                xhr.onload = win;
+                xhr.onerror = lose;
+                xhr.send();
+                return xhr;
+            }
+
+            beforeEach(function (done) {
+                var isAcalled = false;
+                var isBCalled = false;
+
+                originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+                jasmine.DEFAULT_TIMEOUT_INTERVAL = 7500;
+
+                winA = jasmine.createSpy("spyWinA").and.callFake(function () {
+                    order += "A";
+                    isAcalled = true;
+                    if (isBCalled)
+                        done();
+                });
+                winB = jasmine.createSpy("spyWinB").and.callFake(function () {
+                    order += "B";
+                    isBCalled = true;
+                    if (isAcalled)
+                        done();
+                });
+
+                var fileName = window.location.href.split('#')[0].split('/').pop();
+                createXHR(fileName, true, winA, errorHandler.onError);
+                createXHR(fileName, false, winB, errorHandler.onError);
+            });
+
+            afterEach(function () {
+                expect(errorHandler.onError).not.toHaveBeenCalled();
+                jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
+            });
+
+            it("XMLHttpRequest.spec.10 overlapping async calls are not muxed", function (done) {
+                expect(winA).toHaveBeenCalled();
+                expect(winB).toHaveBeenCalled();
+                console.log("order = " + order);
+                done();
+            }, "Expecting both callbacks to be called.");
+        });
+    });
+
+
+    // only add these tests if we are testing on windows phone
+
+    if (/Windows Phone/.exec(navigator.userAgent)) {
+        describe("XMLHttpRequest Windows Phone", function () {
+
+            var errorHandler = { onError: function () { } };
+
+            beforeEach(function () {
+                spyOn(errorHandler, 'onError');
+            });
+
+            afterEach(function () {
+                expect(errorHandler.onError).not.toHaveBeenCalled();
+            });
+
+            var createXHR = function (url, bAsync, win, lose) {
+                var xhr = new XMLHttpRequest();
+                xhr.open("GET", url, bAsync);
+                xhr.onload = win;
+                xhr.onerror = lose;
+                xhr.send();
+                return xhr;
+            };
+
+            console.log("running special windows tests");
+            it("XMLHttpRequest.spec.7 should be able to load the (WP8 backwards compatability) root page www/index.html", function (done) {
+                expect(function () {
+                    createXHR("www/index.html", true, done, errorHandler.onError)
+                }).not.toThrow();
+            });
+
+            it("XMLHttpRequest.spec.8 should be able to load the (WP7 backwards compatability) root page app/www/index.html", function (done) {
+                expect(function () {
+                    createXHR("app/www/index.html", true, done, errorHandler.onError)
+                }).not.toThrow();
+            });
+
+            it("XMLHttpRequest.spec.11 should be able to load the current page using window.location with extra / [CB-6299]", function (done) {
+                var path = window.location.protocol + "/" + window.location.toString().substr(window.location.protocol.length);
+                createXHR(path, true, done, errorHandler.onError);
+            });
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/platform.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/platform.tests.js b/cordova-plugin-mobilespec-tests/tests/platform.tests.js
new file mode 100644
index 0000000..0ecc396
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/platform.tests.js
@@ -0,0 +1,33 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ *
+*/
+
+exports.defineAutoTests = function () {
+    describe('Platform (cordova)', function () {
+        it("platform.spec.1 should exist", function () {
+            expect(cordova).toBeDefined();
+        });
+
+        it("platform.spec.2 exec method should exist", function () {
+            expect(cordova.exec).toBeDefined();
+            expect(typeof cordova.exec).toBe('function');
+        });
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/storage.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/storage.tests.js b/cordova-plugin-mobilespec-tests/tests/storage.tests.js
new file mode 100644
index 0000000..2a344be
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/storage.tests.js
@@ -0,0 +1,229 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you 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.
+*
+*/
+exports.defineAutoTests = function () {
+
+    var isWindowsPhone = cordova.platformId == 'windowsphone';
+    var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8")
+
+    describe("Session Storage", function () {
+        it("storage.spec.1 should exist", function () {
+            expect(window.sessionStorage).toBeDefined();
+            expect(typeof window.sessionStorage.length).not.toBe('undefined');
+            expect(typeof (window.sessionStorage.key)).toBe('function');
+            expect(typeof (window.sessionStorage.getItem)).toBe('function');
+            expect(typeof (window.sessionStorage.setItem)).toBe('function');
+            expect(typeof (window.sessionStorage.removeItem)).toBe('function');
+            expect(typeof (window.sessionStorage.clear)).toBe('function');
+        });
+
+        it("storage.spec.2 check length", function () {
+            expect(window.sessionStorage.length).toBe(0);
+            window.sessionStorage.setItem("key", "value");
+            expect(window.sessionStorage.length).toBe(1);
+            window.sessionStorage.removeItem("key");
+            expect(window.sessionStorage.length).toBe(0);
+        });
+
+        it("storage.spec.3 check key", function () {
+            expect(window.sessionStorage.key(0)).toBe(null);
+            window.sessionStorage.setItem("test", "value");
+            expect(window.sessionStorage.key(0)).toBe("test");
+            window.sessionStorage.removeItem("test");
+            expect(window.sessionStorage.key(0)).toBe(null);
+        });
+
+        it("storage.spec.4 check getItem", function () {
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+            window.sessionStorage.setItem("item", "value");
+            expect(window.sessionStorage.getItem("item")).toBe("value");
+            window.sessionStorage.removeItem("item");
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+        });
+
+        it("storage.spec.5 check setItem", function () {
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+            window.sessionStorage.setItem("item", "value");
+            expect(window.sessionStorage.getItem("item")).toBe("value");
+            window.sessionStorage.setItem("item", "newval");
+            expect(window.sessionStorage.getItem("item")).toBe("newval");
+            window.sessionStorage.removeItem("item");
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+        });
+
+        it("storage.spec.6 can remove an item", function () {
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+            window.sessionStorage.setItem("item", "value");
+            expect(window.sessionStorage.getItem("item")).toBe("value");
+            window.sessionStorage.removeItem("item");
+            expect(window.sessionStorage.getItem("item")).toBe(null);
+        });
+
+        it("storage.spec.7 check clear", function () {
+            window.sessionStorage.setItem("item1", "value");
+            window.sessionStorage.setItem("item2", "value");
+            window.sessionStorage.setItem("item3", "value");
+            expect(window.sessionStorage.length).toBe(3);
+            window.sessionStorage.clear();
+            expect(window.sessionStorage.length).toBe(0);
+        });
+
+        it("storage.spec.8 check dot notation", function () {
+            expect(window.sessionStorage.item).not.toBeDefined();
+            window.sessionStorage.item = "value";
+            expect(window.sessionStorage.item).toBe("value");
+            window.sessionStorage.removeItem("item");
+            expect(window.sessionStorage.item).not.toBeDefined();
+        });
+
+        describe("Local Storage", function () {
+            it("storage.spec.9 should exist", function () {
+                expect(window.localStorage).toBeDefined();
+                expect(window.localStorage.length).toBeDefined();
+                expect(typeof window.localStorage.key).toBe("function");
+                expect(typeof window.localStorage.getItem).toBe("function");
+                expect(typeof window.localStorage.setItem).toBe("function");
+                expect(typeof window.localStorage.removeItem).toBe("function");
+                expect(typeof window.localStorage.clear).toBe("function");
+                window.localStorage.clear();
+            });
+
+            it("storage.spec.10 check length", function () {
+                expect(window.localStorage.length).toBe(0);
+                window.localStorage.setItem("key", "value");
+                expect(window.localStorage.length).toBe(1);
+                window.localStorage.removeItem("key");
+                expect(window.localStorage.length).toBe(0);
+            });
+
+            it("storage.spec.11 check key", function () {
+                expect(window.localStorage.key(0)).toBe(null);
+                window.localStorage.setItem("test", "value");
+                expect(window.localStorage.key(0)).toBe("test");
+                window.localStorage.removeItem("test");
+                expect(window.localStorage.key(0)).toBe(null);
+            });
+
+            it("storage.spec.4 check getItem", function () {
+                expect(window.localStorage.getItem("item")).toBe(null);
+                window.localStorage.setItem("item", "value");
+                expect(window.localStorage.getItem("item")).toBe("value");
+                window.localStorage.removeItem("item");
+                expect(window.localStorage.getItem("item")).toBe(null);
+            });
+
+            it("storage.spec.5 check setItem", function () {
+                expect(window.localStorage.getItem("item")).toBe(null);
+                window.localStorage.setItem("item", "value");
+                expect(window.localStorage.getItem("item")).toBe("value");
+                window.localStorage.setItem("item", "newval");
+                expect(window.localStorage.getItem("item")).toBe("newval");
+                window.localStorage.removeItem("item");
+                expect(window.localStorage.getItem("item")).toBe(null);
+            });
+
+            it("storage.spec.14 check removeItem", function () {
+                expect(window.localStorage.getItem("item")).toBe(null);
+                window.localStorage.setItem("item", "value");
+                expect(window.localStorage.getItem("item")).toBe("value");
+                window.localStorage.removeItem("item");
+                expect(window.localStorage.getItem("item")).toBe(null);
+            });
+
+            it("storage.spec.7 check clear", function () {
+                expect(window.localStorage.getItem("item1")).toBe(null);
+                expect(window.localStorage.getItem("item2")).toBe(null);
+                expect(window.localStorage.getItem("item3")).toBe(null);
+                window.localStorage.setItem("item1", "value");
+                window.localStorage.setItem("item2", "value");
+                window.localStorage.setItem("item3", "value");
+                expect(window.localStorage.getItem("item1")).toBe("value");
+                expect(window.localStorage.getItem("item2")).toBe("value");
+                expect(window.localStorage.getItem("item3")).toBe("value");
+                expect(window.localStorage.length).toBe(3);
+                window.localStorage.clear();
+                expect(window.localStorage.length).toBe(0);
+                expect(window.localStorage.getItem("item1")).toBe(null);
+                expect(window.localStorage.getItem("item2")).toBe(null);
+                expect(window.localStorage.getItem("item3")).toBe(null);
+            });
+
+            it("storage.spec.8 check dot notation", function () {
+                expect(window.localStorage.item).not.toBeDefined();
+                window.localStorage.item = "value";
+                expect(window.localStorage.item).toBe("value");
+                window.localStorage.removeItem("item");
+                expect(window.localStorage.item).not.toBeDefined();
+            });
+        });
+
+        describe("HTML 5 Storage", function () {
+            it("storage.spec.9 should exist", function () {
+                expect(window.openDatabase);
+            });
+
+            it("storage.spec.17 should contain an openDatabase function", function () {
+                //IE doesn't support openDatabase method
+                if (isWindows || isWindowsPhone) {
+                    pending();
+                }
+                expect(window.openDatabase).toBeDefined();
+                if (window.openDatabase) {
+                    expect(typeof window.openDatabase).toBe('function');
+                }
+            });
+
+            describe("HTML 5 Storage", function () {
+                var errorHandler = {
+                    onError: function (done) {
+                        if (typeof done === 'function') {
+                            done();
+                        }
+                    }
+                };
+
+                beforeEach(function () {
+                    spyOn(errorHandler, 'onError').and.callThrough();
+                });
+
+                afterEach(function () {
+                    expect(errorHandler.onError).not.toHaveBeenCalled();
+                });
+
+                it("storage.spec.18 Should be able to create and drop tables", function (done) {
+                    if (!window.openDatabase) {
+                        pending();
+                    }
+
+                    var db = openDatabase("Database", "1.0", "HTML5 Database API example", 5 * 1024 * 1024);
+                    db.transaction(function (t) {
+                        t.executeSql('CREATE TABLE IF NOT EXISTS foo(id int, name varchar(255));');
+                        t.executeSql('CREATE TABLE IF NOT EXISTS foo2(id int, name varchar(255));');
+                    }, errorHandler.onError.bind(null, done), function () {
+                        db.transaction(function (t) {
+                            t.executeSql('DROP TABLE foo;');
+                            t.executeSql('DROP TABLE foo2');
+                        }, errorHandler.onError.bind(null, done), done);
+                    });
+                });
+            });
+        });
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/cordova-plugin-mobilespec-tests/tests/whitelist.tests.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-mobilespec-tests/tests/whitelist.tests.js b/cordova-plugin-mobilespec-tests/tests/whitelist.tests.js
new file mode 100644
index 0000000..0440a08
--- /dev/null
+++ b/cordova-plugin-mobilespec-tests/tests/whitelist.tests.js
@@ -0,0 +1,206 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ *
+ */
+
+exports.defineAutoTests = function () {
+
+    var isWindowsPhone = cordova.platformId == 'windowsphone';
+    var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8")
+
+    describe('Whitelist API (cordova.whitelist)', function () {
+
+        it("should exist", function () {
+            expect(cordova.whitelist).toBeDefined();
+        });
+
+        describe("Match function", function () {
+            function expectMatchWithResult(result) {
+                return (function (url, patterns, description) {
+                    description = description || ((result ? "should accept " : "should reject ") + url + " for " + JSON.stringify(patterns));
+                    this.result = result;
+
+                    describe("Match function", function () {
+                        // Timeout is 7.5 seconds to allow physical devices enough
+                        // time to query the response. This is important for some
+                        // Android devices.
+                        var originalTimeout,
+                            cb;
+
+                        if (isWindows || isWindowsPhone) {
+                            pending();
+                        }
+
+                        beforeEach(function (done) {
+                            originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+                            jasmine.DEFAULT_TIMEOUT_INTERVAL = 7500;
+                            cb = jasmine.createSpy('spy').and.callFake(function () {
+                                done();
+                            });
+                            cordova.whitelist.match(url, patterns, cb);
+                        });
+
+                        afterEach(function () {
+                            jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
+                        });
+
+                        it(description, function () {
+                            expect(cb).toHaveBeenCalledWith(result);
+                        });
+                    });
+                });
+            }
+
+            var itShouldMatch = expectMatchWithResult(true);
+            var itShouldNotMatch = expectMatchWithResult(false);
+
+            itShouldMatch('http://www.apache.org/', ['*'], "should accept any domain for *");
+            itShouldNotMatch('http://www.apache.org/', [], "should not accept any domain for []");
+
+            itShouldMatch('http://apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://www.apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://www.apache.org/some/path', ['http://*.apache.org']);
+            itShouldMatch('http://some.domain.under.apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://user:pass@apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://user:pass@www.apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://www.apache.org/?some=params', ['http://*.apache.org']);
+            itShouldNotMatch('http://apache.com/', ['http://*.apache.org']);
+            itShouldNotMatch('http://www.evil.com/?url=www.apache.org', ['http://*.apache.org']);
+            itShouldNotMatch('http://www.evil.com/?url=http://www.apache.org', ['http://*.apache.org']);
+            itShouldNotMatch('http://www.evil.com/?url=http%3A%2F%2Fwww%2Eapache%2Eorg', ['http://*.apache.org']);
+            itShouldNotMatch('https://apache.org/', ['http://*.apache.org']);
+            itShouldNotMatch('http://www.apache.org:pass@evil.com/', ['http://*.apache.org']);
+            itShouldNotMatch('http://www.apache.org.evil.com/', ['http://*.apache.org']);
+
+            itShouldMatch('http://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']);
+            itShouldMatch('https://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']);
+            itShouldNotMatch('ftp://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']);
+            itShouldNotMatch('http://www.apache.com/', ['http://*.apache.org', 'https://*.apache.org']);
+
+            itShouldMatch('http://www.apache.org/', ['http://www.apache.org']);
+            itShouldNotMatch('http://build.apache.org/', ['http://www.apache.org']);
+            itShouldNotMatch('http://apache.org/', ['http://www.apache.org']);
+
+            itShouldMatch('http://www.apache.org/', ['http://*/*']);
+            itShouldMatch('http://www.apache.org/foo/bar.html', ['http://*/*']);
+
+            itShouldMatch('http://www.apache.org/foo', ['http://*/foo*']);
+            itShouldMatch('http://www.apache.org/foo/bar.html', ['http://*/foo*']);
+            itShouldNotMatch('http://www.apache.org/', ['http://*/foo*']);
+
+            itShouldMatch('file:///foo', ['file:///*']);
+
+            itShouldMatch('file:///foo', ['file:///foo*']);
+            itShouldMatch('file:///foo/bar.html', ['file:///foo*']);
+            itShouldNotMatch('file:///foo.html', []);
+            itShouldNotMatch('http://www.apache.org/etc/foo', ['http://www.apache.org/foo*']);
+            itShouldNotMatch('http://www.apache.org/foo', ['file:///foo*']);
+
+            itShouldMatch('http://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldMatch('https://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldMatch('ftp://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldMatch('file://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldMatch('content://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldMatch('foo://www.apache.org/', ['*://www.apache.org/*']);
+            itShouldNotMatch('http://www.apache.com/', ['*://www.apache.org/*']);
+
+            itShouldMatch('http://www.apache.org/', ['*.apache.org']);
+            itShouldMatch('https://www.apache.org/', ['*.apache.org']);
+            itShouldNotMatch('ftp://www.apache.org/', ['*.apache.org']);
+
+            itShouldMatch('http://www.apache.org:81/', ['http://www.apache.org:81/*']);
+            itShouldMatch('http://user:pass@www.apache.org:81/foo/bar.html', ['http://www.apache.org:81/*']);
+            itShouldNotMatch('http://www.apache.org:80/', ['http://www.apache.org:81/*']);
+            itShouldNotMatch('http://www.apache.org/', ['http://www.apache.org:81/*']);
+            itShouldNotMatch('http://www.apache.org:foo/', ['http://www.apache.org:81/*']);
+            itShouldNotMatch('http://www.apache.org:81@www.apache.org/', ['http://www.apache.org:81/*']);
+            itShouldNotMatch('http://www.apache.org:81@www.evil.com/', ['http://www.apache.org:81/*']);
+
+            itShouldMatch('http://www.APAche.org/', ['*.apache.org']);
+            itShouldMatch('http://WWw.apache.org/', ['*.apache.org']);
+            itShouldMatch('http://www.apache.org/', ['*.APACHE.ORG']);
+            itShouldMatch('HTTP://www.apache.org/', ['*.apache.org']);
+            itShouldMatch('HTTP://www.apache.org/', ['http://*.apache.org']);
+            itShouldMatch('http://www.apache.org/', ['HTTP://*.apache.org']);
+
+            itShouldMatch('http://www.apache.org/foo/', ['*://*.apache.org/foo/*']);
+            itShouldMatch('http://www.apache.org/foo/bar', ['*://*.apache.org/foo/*']);
+            itShouldNotMatch('http://www.apache.org/bar/foo/', ['*://*.apache.org/foo/*']);
+            itShouldNotMatch('http://www.apache.org/Foo/', ['*://*.apache.org/foo/*']);
+            itShouldNotMatch('http://www.apache.org/Foo/bar', ['*://*.apache.org/foo/*']);
+        });
+
+        describe("Test function", function () {
+            function expectTestWithResult(result) {
+                return (function (url, description) {
+                    description = description || ((result ? "should accept " : "should reject ") + url);
+
+                    describe("Test function", function () {
+                        if (isWindows || isWindowsPhone) {
+                            pending();
+                        }
+
+                        var cb,
+                            originalTimeout;
+
+                        beforeEach(function (done) {
+                            originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+                            jasmine.DEFAULT_TIMEOUT_INTERVAL = 7500;
+                            cb = jasmine.createSpy('spy').and.callFake(function (){
+                                done();
+                            });
+                            cordova.whitelist.test(url, cb);
+                        });
+
+                        afterEach(function () {
+                            jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
+                        });
+
+                        it(description, function () {
+                            expect(cb).toHaveBeenCalledWith(result);
+                        });
+                    });
+                });
+            }
+
+            var itShouldAccept = expectTestWithResult(true);
+            var itShouldReject = expectTestWithResult(false);
+
+            it("should exist", function () {
+                expect(cordova.whitelist.test).toBeDefined();
+                expect(typeof cordova.whitelist.test).toBe("function");
+            });
+
+            itShouldAccept('http://apache.org');
+            itShouldAccept('http://apache.org/');
+            itShouldAccept('http://www.apache.org/');
+            itShouldAccept('http://www.apache.org/some/path');
+            itShouldAccept('http://some.domain.under.apache.org/');
+            itShouldAccept('http://user:pass@apache.org/');
+            itShouldAccept('http://user:pass@www.apache.org/');
+            itShouldAccept('https://www.apache.org/');
+            itShouldReject('ftp://www.apache.org/');
+            itShouldReject('http://www.apache.com/');
+            itShouldReject('http://www.apache.org:pass@evil.com/');
+            itShouldReject('http://www.apache.org.evil.com/');
+            itShouldAccept('file:///foo');
+            itShouldAccept('content:///foo');
+        });
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/dependencies-plugin/plugin.xml
----------------------------------------------------------------------
diff --git a/dependencies-plugin/plugin.xml b/dependencies-plugin/plugin.xml
index f3754a4..4f0b23e 100644
--- a/dependencies-plugin/plugin.xml
+++ b/dependencies-plugin/plugin.xml
@@ -49,4 +49,5 @@
   <dependency id="org.apache.cordova.test-framework"/>
   <dependency id="org.apache.cordova.test.whitelist" url="." subdir="cordova-plugin-whitelist" />
   <dependency id="org.apache.cordova.test.echo" url="." subdir="cordova-plugin-echo" />
+  <dependency id="org.apache.cordova.mobilespec.tests" url="." subdir="cordova-plugin-mobilespec-tests" />
 </plugin>

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/HtmlReporter.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/HtmlReporter.js b/www/autotest/html/HtmlReporter.js
deleted file mode 100644
index 7d9d924..0000000
--- a/www/autotest/html/HtmlReporter.js
+++ /dev/null
@@ -1,101 +0,0 @@
-jasmine.HtmlReporter = function(_doc) {
-  var self = this;
-  var doc = _doc || window.document;
-
-  var reporterView;
-
-  var dom = {};
-
-  // Jasmine Reporter Public Interface
-  self.logRunningSpecs = false;
-
-  self.reportRunnerStarting = function(runner) {
-    var specs = runner.specs() || [];
-
-    if (specs.length == 0) {
-      return;
-    }
-
-    createReporterDom(runner.env.versionString());
-    doc.body.appendChild(dom.reporter);
-
-    reporterView = new jasmine.HtmlReporter.ReporterView(dom);
-    reporterView.addSpecs(specs, self.specFilter);
-  };
-
-  self.reportRunnerResults = function(runner) {
-    reporterView && reporterView.complete();
-  };
-
-  self.reportSuiteResults = function(suite) {
-    reporterView.suiteComplete(suite);
-  };
-
-  self.reportSpecStarting = function(spec) {
-    if (self.logRunningSpecs) {
-      self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
-    }
-  };
-
-  self.reportSpecResults = function(spec) {
-    reporterView.specComplete(spec);
-  };
-
-  self.log = function() {
-    var console = jasmine.getGlobal().console;
-    if (console && console.log) {
-      if (console.log.apply) {
-        console.log.apply(console, arguments);
-      } else {
-        console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
-      }
-    }
-  };
-
-  self.specFilter = function(spec) {
-    if (!focusedSpecName()) {
-      return true;
-    }
-
-    return spec.getFullName().indexOf(focusedSpecName()) === 0;
-  };
-
-  return self;
-
-  function focusedSpecName() {
-    var specName;
-
-    (function memoizeFocusedSpec() {
-      if (specName) {
-        return;
-      }
-
-      var paramMap = [];
-      var params = doc.location.search.substring(1).split('&');
-
-      for (var i = 0; i < params.length; i++) {
-        var p = params[i].split('=');
-        paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
-      }
-
-      specName = paramMap.spec;
-    })();
-
-    return specName;
-  }
-
-  function createReporterDom(version) {
-    dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
-      dom.banner = self.createDom('div', { className: 'banner' },
-        self.createDom('span', { className: 'title' }, "Jasmine "),
-        self.createDom('span', { className: 'version' }, version)),
-
-      dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
-      dom.alert = self.createDom('div', {className: 'alert'}),
-      dom.results = self.createDom('div', {className: 'results'},
-        dom.summary = self.createDom('div', { className: 'summary' }),
-        dom.details = self.createDom('div', { id: 'details' }))
-    );
-  }
-};
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/HtmlReporterHelpers.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/HtmlReporterHelpers.js b/www/autotest/html/HtmlReporterHelpers.js
deleted file mode 100644
index 745e1e0..0000000
--- a/www/autotest/html/HtmlReporterHelpers.js
+++ /dev/null
@@ -1,60 +0,0 @@
-jasmine.HtmlReporterHelpers = {};
-
-jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
-  var el = document.createElement(type);
-
-  for (var i = 2; i < arguments.length; i++) {
-    var child = arguments[i];
-
-    if (typeof child === 'string') {
-      el.appendChild(document.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;
-};
-
-jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
-  var results = child.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.skipped) {
-    status = 'skipped';
-  }
-
-  return status;
-};
-
-jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
-  var parentDiv = this.dom.summary;
-  var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
-  var parent = child[parentSuite];
-
-  if (parent) {
-    if (typeof this.views.suites[parent.id] == 'undefined') {
-      this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
-    }
-    parentDiv = this.views.suites[parent.id].element;
-  }
-
-  parentDiv.appendChild(childElement);
-};
-
-
-jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
-  for(var fn in jasmine.HtmlReporterHelpers) {
-    ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
-  }
-};
-

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/ReporterView.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/ReporterView.js b/www/autotest/html/ReporterView.js
deleted file mode 100644
index 6a6d005..0000000
--- a/www/autotest/html/ReporterView.js
+++ /dev/null
@@ -1,164 +0,0 @@
-jasmine.HtmlReporter.ReporterView = function(dom) {
-  this.startedAt = new Date();
-  this.runningSpecCount = 0;
-  this.completeSpecCount = 0;
-  this.passedCount = 0;
-  this.failedCount = 0;
-  this.skippedCount = 0;
-
-  this.createResultsMenu = function() {
-    this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
-      this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
-      ' | ',
-      this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
-
-    this.summaryMenuItem.onclick = function() {
-      dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
-    };
-
-    this.detailsMenuItem.onclick = function() {
-      showDetails();
-    };
-  };
-
-  this.addSpecs = function(specs, specFilter) {
-    this.totalSpecCount = specs.length;
-
-    this.views = {
-      specs: {},
-      suites: {}
-    };
-
-    for (var i = 0; i < specs.length; i++) {
-      var spec = specs[i];
-      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
-      if (specFilter(spec)) {
-        this.runningSpecCount++;
-      }
-    }
-  };
-
-  this.specComplete = function(spec) {
-    this.completeSpecCount++;
-
-    if (isUndefined(this.views.specs[spec.id])) {
-      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
-    }
-
-    var specView = this.views.specs[spec.id];
-
-    switch (specView.status()) {
-      case 'passed':
-        this.passedCount++;
-        break;
-
-      case 'failed':
-        this.failedCount++;
-        break;
-
-      case 'skipped':
-        this.skippedCount++;
-        break;
-    }
-
-    specView.refresh();
-    this.refresh();
-  };
-
-  this.suiteComplete = function(suite) {
-    var suiteView = this.views.suites[suite.id];
-    if (isUndefined(suiteView)) {
-      return;
-    }
-    suiteView.refresh();
-  };
-
-  this.refresh = function() {
-
-    if (isUndefined(this.resultsMenu)) {
-      this.createResultsMenu();
-    }
-
-    // currently running UI
-    if (isUndefined(this.runningAlert)) {
-      this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
-      dom.alert.appendChild(this.runningAlert);
-    }
-    this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
-
-    // skipped specs UI
-    if (isUndefined(this.skippedAlert)) {
-      this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
-    }
-
-    this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
-    if (this.skippedCount === 1 && isDefined(dom.alert)) {
-      dom.alert.appendChild(this.skippedAlert);
-    }
-
-    // passing specs UI
-    if (isUndefined(this.passedAlert)) {
-      this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
-    }
-    this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
-
-    // failing specs UI
-    if (isUndefined(this.failedAlert)) {
-      this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
-    }
-    this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
-
-    if (this.failedCount === 1 && isDefined(dom.alert)) {
-      dom.alert.appendChild(this.failedAlert);
-      dom.alert.appendChild(this.resultsMenu);
-    }
-
-    // summary info
-    this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
-    this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
-  };
-
-  this.complete = function() {
-    dom.alert.removeChild(this.runningAlert);
-
-    this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
-    if (this.failedCount === 0) {
-      dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
-    } else {
-      showDetails();
-    }
-
-    dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
-  };
-
-  return this;
-
-  function showDetails() {
-    if (dom.reporter.className.search(/showDetails/) === -1) {
-      dom.reporter.className += " showDetails";
-    }
-  }
-
-  function isUndefined(obj) {
-    return typeof obj === 'undefined';
-  }
-
-  function isDefined(obj) {
-    return !isUndefined(obj);
-  }
-
-  function specPluralizedFor(count) {
-    var str = count + " spec";
-    if (count > 1) {
-      str += "s"
-    }
-    return str;
-  }
-
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
-
-

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/SpecView.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/SpecView.js b/www/autotest/html/SpecView.js
deleted file mode 100644
index e8a3c23..0000000
--- a/www/autotest/html/SpecView.js
+++ /dev/null
@@ -1,79 +0,0 @@
-jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
-  this.spec = spec;
-  this.dom = dom;
-  this.views = views;
-
-  this.symbol = this.createDom('li', { className: 'pending' });
-  this.dom.symbolSummary.appendChild(this.symbol);
-
-  this.summary = this.createDom('div', { className: 'specSummary' },
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
-        title: this.spec.getFullName()
-      }, this.spec.description)
-  );
-
-  this.detail = this.createDom('div', { className: 'specDetail' },
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
-        title: this.spec.getFullName()
-      }, this.spec.getFullName())
-  );
-};
-
-jasmine.HtmlReporter.SpecView.prototype.status = function() {
-  return this.getSpecStatus(this.spec);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
-  this.symbol.className = this.status();
-
-  switch (this.status()) {
-    case 'skipped':
-      break;
-
-    case 'passed':
-      this.appendSummaryToSuiteDiv();
-      break;
-
-    case 'failed':
-      this.appendSummaryToSuiteDiv();
-      this.appendFailureDetail();
-      break;
-  }
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
-  this.summary.className += ' ' + this.status();
-  this.appendToSummary(this.spec, this.summary);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
-  this.detail.className += ' ' + this.status();
-
-  var resultItems = this.spec.results().getItems();
-  var messagesDiv = this.createDom('div', { className: 'messages' });
-
-  for (var i = 0; i < resultItems.length; i++) {
-    var result = resultItems[i];
-
-    if (result.type == 'log') {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
-    } else if (result.type == 'expect' && result.passed && !result.passed()) {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
-      if (result.trace.stack) {
-        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
-      }
-    }
-  }
-
-  if (messagesDiv.childNodes.length > 0) {
-    this.detail.appendChild(messagesDiv);
-    this.dom.details.appendChild(this.detail);
-  }
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/SuiteView.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/SuiteView.js b/www/autotest/html/SuiteView.js
deleted file mode 100644
index 19a1efa..0000000
--- a/www/autotest/html/SuiteView.js
+++ /dev/null
@@ -1,22 +0,0 @@
-jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
-  this.suite = suite;
-  this.dom = dom;
-  this.views = views;
-
-  this.element = this.createDom('div', { className: 'suite' },
-      this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
-  );
-
-  this.appendToSummary(this.suite, this.element);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.status = function() {
-  return this.getSpecStatus(this.suite);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
-  this.element.className += " " + this.status();
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
-

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/html/TrivialReporter.js
----------------------------------------------------------------------
diff --git a/www/autotest/html/TrivialReporter.js b/www/autotest/html/TrivialReporter.js
deleted file mode 100644
index 167ac50..0000000
--- a/www/autotest/html/TrivialReporter.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/* @deprecated Use jasmine.HtmlReporter instead
- */
-jasmine.TrivialReporter = function(doc) {
-  this.document = doc || document;
-  this.suiteDivs = {};
-  this.logRunningSpecs = false;
-};
-
-jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
-  var el = document.createElement(type);
-
-  for (var i = 2; i < arguments.length; i++) {
-    var child = arguments[i];
-
-    if (typeof child === 'string') {
-      el.appendChild(document.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;
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
-  var showPassed, showSkipped;
-
-  this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
-      this.createDom('div', { className: 'banner' },
-        this.createDom('div', { className: 'logo' },
-            this.createDom('span', { className: 'title' }, "Jasmine"),
-            this.createDom('span', { className: 'version' }, runner.env.versionString())),
-        this.createDom('div', { className: 'options' },
-            "Show ",
-            showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
-            showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
-            )
-          ),
-
-      this.runnerDiv = this.createDom('div', { className: 'runner running' },
-          this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
-          this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
-          this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
-      );
-
-  this.document.body.appendChild(this.outerDiv);
-
-  var suites = runner.suites();
-  for (var i = 0; i < suites.length; i++) {
-    var suite = suites[i];
-    var suiteDiv = this.createDom('div', { className: 'suite' },
-        this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
-        this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
-    this.suiteDivs[suite.id] = suiteDiv;
-    var parentDiv = this.outerDiv;
-    if (suite.parentSuite) {
-      parentDiv = this.suiteDivs[suite.parentSuite.id];
-    }
-    parentDiv.appendChild(suiteDiv);
-  }
-
-  this.startedAt = new Date();
-
-  var self = this;
-  showPassed.onclick = function(evt) {
-    if (showPassed.checked) {
-      self.outerDiv.className += ' show-passed';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
-    }
-  };
-
-  showSkipped.onclick = function(evt) {
-    if (showSkipped.checked) {
-      self.outerDiv.className += ' show-skipped';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
-    }
-  };
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
-  var results = runner.results();
-  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
-  this.runnerDiv.setAttribute("class", className);
-  //do it twice for IE
-  this.runnerDiv.setAttribute("className", className);
-  var specs = runner.specs();
-  var specCount = 0;
-  for (var i = 0; i < specs.length; i++) {
-    if (this.specFilter(specs[i])) {
-      specCount++;
-    }
-  }
-  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
-  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
-  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
-
-  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
-};
-
-jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
-  var results = suite.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.totalCount === 0) { // todo: change this to check results.skipped
-    status = 'skipped';
-  }
-  this.suiteDivs[suite.id].className += " " + status;
-};
-
-jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
-  if (this.logRunningSpecs) {
-    this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
-  }
-};
-
-jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
-  var results = spec.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.skipped) {
-    status = 'skipped';
-  }
-  var specDiv = this.createDom('div', { className: 'spec '  + status },
-      this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(spec.getFullName()),
-        title: spec.getFullName()
-      }, spec.description));
-
-
-  var resultItems = results.getItems();
-  var messagesDiv = this.createDom('div', { className: 'messages' });
-  for (var i = 0; i < resultItems.length; i++) {
-    var result = resultItems[i];
-
-    if (result.type == 'log') {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
-    } else if (result.type == 'expect' && result.passed && !result.passed()) {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
-      if (result.trace.stack) {
-        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
-      }
-    }
-  }
-
-  if (messagesDiv.childNodes.length > 0) {
-    specDiv.appendChild(messagesDiv);
-  }
-
-  this.suiteDivs[spec.suite.id].appendChild(specDiv);
-};
-
-jasmine.TrivialReporter.prototype.log = function() {
-  var console = jasmine.getGlobal().console;
-  if (console && console.log) {
-    if (console.log.apply) {
-      console.log.apply(console, arguments);
-    } else {
-      console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
-    }
-  }
-};
-
-jasmine.TrivialReporter.prototype.getLocation = function() {
-  return this.document.location;
-};
-
-jasmine.TrivialReporter.prototype.specFilter = function(spec) {
-  var paramMap = {};
-  var params = this.getLocation().search.substring(1).split('&');
-  for (var i = 0; i < params.length; i++) {
-    var p = params[i].split('=');
-    paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
-  }
-
-  if (!paramMap.spec) {
-    return true;
-  }
-  return spec.getFullName().indexOf(paramMap.spec) === 0;
-};

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/index.js
----------------------------------------------------------------------
diff --git a/www/autotest/index.js b/www/autotest/index.js
deleted file mode 100644
index aec19b4..0000000
--- a/www/autotest/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-window.onload = function() {
-  addListenerToClass('backBtn', backHome);
-}
-

http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/16019c59/www/autotest/jasmine.css
----------------------------------------------------------------------
diff --git a/www/autotest/jasmine.css b/www/autotest/jasmine.css
deleted file mode 100644
index 826e575..0000000
--- a/www/autotest/jasmine.css
+++ /dev/null
@@ -1,81 +0,0 @@
-body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
-
-#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
-#HTMLReporter a { text-decoration: none; }
-#HTMLReporter a:hover { text-decoration: underline; }
-#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
-#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
-#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
-#HTMLReporter .version { color: #aaaaaa; }
-#HTMLReporter .banner { margin-top: 14px; }
-#HTMLReporter .duration { color: #aaaaaa; float: right; }
-#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
-#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
-#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
-#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
-#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
-#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
-#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
-#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
-#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
-#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
-#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
-#HTMLReporter .runningAlert { background-color: #666666; }
-#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
-#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
-#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
-#HTMLReporter .passingAlert { background-color: #a6b779; }
-#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
-#HTMLReporter .failingAlert { background-color: #cf867e; }
-#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
-#HTMLReporter .results { margin-top: 14px; }
-#HTMLReporter #details { display: none; }
-#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
-#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
-#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
-#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter.showDetails .summary { display: none; }
-#HTMLReporter.showDetails #details { display: block; }
-#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter .summary { margin-top: 14px; }
-#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
-#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
-#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
-#HTMLReporter .description + .suite { margin-top: 0; }
-#HTMLReporter .suite { margin-top: 14px; }
-#HTMLReporter .suite a { color: #333333; }
-#HTMLReporter #details .specDetail { margin-bottom: 28px; }
-#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
-#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
-#HTMLReporter .resultMessage span.result { display: block; }
-#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
-
-#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
-#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
-#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
-#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
-#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
-#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
-#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
-#TrivialReporter .runner.running { background-color: yellow; }
-#TrivialReporter .options { text-align: right; font-size: .8em; }
-#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
-#TrivialReporter .suite .suite { margin: 5px; }
-#TrivialReporter .suite.passed { background-color: #dfd; }
-#TrivialReporter .suite.failed { background-color: #fdd; }
-#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
-#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
-#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
-#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
-#TrivialReporter .spec.skipped { background-color: #bbb; }
-#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
-#TrivialReporter .passed { background-color: #cfc; display: none; }
-#TrivialReporter .failed { background-color: #fbb; }
-#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
-#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
-#TrivialReporter .resultMessage .mismatch { color: black; }
-#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
-#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
-#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
-#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
-#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message