You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by mw...@apache.org on 2013/05/15 22:35:46 UTC
[07/37] Add WP7 and WP8 platform files.
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/filetransfer.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/filetransfer.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/filetransfer.tests.js
new file mode 100644
index 0000000..8c1cd35
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/filetransfer.tests.js
@@ -0,0 +1,513 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+describe('FileTransfer', function() {
+ // https://github.com/don/cordova-filetransfer
+ var server = "http://cordova-filetransfer.jitsu.com";
+
+ // deletes and re-creates the specified content
+ var writeFile = function(fileName, fileContent, success, error) {
+ deleteFile(fileName, function() {
+ root.getFile(fileName, {create: true}, function(fileEntry) {
+ fileEntry.createWriter(function (writer) {
+
+ writer.onwrite = function(evt) {
+ success(fileEntry);
+ };
+
+ writer.onabort = function(evt) {
+ error(evt);
+ };
+
+ writer.error = function(evt) {
+ error(evt);
+ };
+
+ writer.write(fileContent + "\n");
+ }, error);
+ }, error);
+ });
+ };
+
+ var readFileEntry = function(entry, success, error) {
+ entry.file(function(file) {
+ var reader = new FileReader();
+ reader.onerror = error;
+ reader.onload = function(e) {
+ success(reader.result);
+ };
+ reader.readAsText(file);
+ }, error);
+ };
+
+ var getMalformedUrl = function() {
+ if (device.platform.match(/Android/i)) {
+ // bad protocol causes a MalformedUrlException on Android
+ return "httpssss://example.com";
+ } else {
+ // iOS doesn't care about protocol, space in hostname causes error
+ return "httpssss://exa mple.com";
+ }
+ };
+
+ // deletes file, if it exists, then invokes callback
+ var deleteFile = function(fileName, callback) {
+ callback = callback || function() {};
+ var spy = jasmine.createSpy().andCallFake(callback);
+ root.getFile(fileName, null,
+ // remove file system entry
+ function(entry) {
+ entry.remove(spy, spy);
+ },
+ // doesn't exist
+ spy);
+ waitsFor(function() { return spy.wasCalled; }, Tests.TEST_TIMEOUT);
+ };
+
+ it("should exist and be constructable", function() {
+ var ft = new FileTransfer();
+ expect(ft).toBeDefined();
+ });
+ it("should contain proper functions", function() {
+ var ft = new FileTransfer();
+ expect(typeof ft.upload).toBe('function');
+ expect(typeof ft.download).toBe('function');
+ });
+ describe('FileTransferError', function() {
+ it("FileTransferError constants should be defined", function() {
+ expect(FileTransferError.FILE_NOT_FOUND_ERR).toBe(1);
+ expect(FileTransferError.INVALID_URL_ERR).toBe(2);
+ expect(FileTransferError.CONNECTION_ERR).toBe(3);
+ });
+ });
+
+ describe('download method', function() {
+
+ // NOTE: if download tests are failing, check the white list
+ // Android
+ // <access origin="httpssss://example.com"/>
+ // <access origin="apache.org" subdomains="true" />
+ // <access origin="cordova-filetransfer.jitsu.com"/>
+ // iOS
+ // # Cordova.plist
+ // ExternalHosts
+ // - Item 1 String cordova-filetransfer.jitsu.com
+ // - Item 2 String *.apache.org
+
+ it("should be able to download a file using http", function() {
+ var fail = createDoNotCallSpy('downloadFail');
+ var remoteFile = server + "/robots.txt"
+ var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
+ var lastProgressEvent = null;
+
+ var downloadWin = jasmine.createSpy().andCallFake(function(entry) {
+ expect(entry.name).toBe(localFileName);
+ expect(lastProgressEvent.loaded).toBeGreaterThan(1);
+ });
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.onprogress = function(e) {
+ lastProgressEvent = e;
+ };
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, fail);
+ });
+
+ waitsForAny(downloadWin, fail);
+ });
+ it("should be able to download a file using https", function() {
+ var remoteFile = "https://www.apache.org/licenses/";
+ var localFileName = 'httpstest.html';
+ var downloadFail = createDoNotCallSpy('downloadFail', 'Ensure ' + remoteFile + ' is in the white-list');
+ var fileFail = createDoNotCallSpy('fileFail');
+ var downloadWin = function(entry) {
+ readFileEntry(entry, fileWin, fileFail);
+ };
+ var fileWin = jasmine.createSpy().andCallFake(function(content) {
+ expect(content).toMatch(/The Apache Software Foundation/);
+ });
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, downloadFail);
+ });
+
+ waitsForAny(fileWin, downloadFail, fileFail);
+ });
+ it("should be stopped by abort() right away", function() {
+ var downloadWin = createDoNotCallSpy('downloadWin');
+ var remoteFile = 'http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3';
+ var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
+ var startTime = +new Date();
+
+ var downloadFail = jasmine.createSpy().andCallFake(function(e) {
+ expect(e.code).toBe(FileTransferError.ABORT_ERR);
+ expect(new Date() - startTime).toBeLessThan(300);
+ });
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.abort(); // should be a no-op.
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, downloadFail);
+ ft.abort();
+ ft.abort(); // should be a no-op.
+ });
+
+ waitsForAny(downloadWin, downloadFail);
+ });
+ it("should get http status on failure", function() {
+ var downloadWin = createDoNotCallSpy('downloadWin');
+
+ var remoteFile = server + "/404";
+ var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
+ var downloadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.http_status).toBe(404);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, downloadFail);
+ });
+
+ waitsForAny(downloadWin, downloadFail);
+ });
+ it("should handle malformed urls", function() {
+ var downloadWin = createDoNotCallSpy('downloadWin');
+
+ var remoteFile = getMalformedUrl();
+ var localFileName = "download_malformed_url.txt";
+ var downloadFail = jasmine.createSpy().andCallFake(function(error) {
+ // Note: Android needs the bad protocol to be added to the access list
+ // <access origin=".*"/> won't match because ^https?:// is prepended to the regex
+ // The bad protocol must begin with http to avoid automatic prefix
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ expect(error.code).toBe(FileTransferError.INVALID_URL_ERR);
+ });
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, downloadFail);
+ });
+
+ waitsForAny(downloadWin, downloadFail);
+ });
+ it("should handle unknown host", function() {
+ var downloadWin = createDoNotCallSpy('downloadWin');
+
+ var remoteFile = "http://foobar.apache.org/index.html";
+ var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
+ var downloadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.CONNECTION_ERR);
+ });
+
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.download(remoteFile, root.fullPath + "/" + localFileName, downloadWin, downloadFail);
+ });
+
+ waitsForAny(downloadWin, downloadFail);
+ });
+ it("should handle bad file path", function() {
+ var downloadWin = createDoNotCallSpy('downloadWin');
+
+ var remoteFile = server;
+ var badFilePath = "c:\\54321";
+ var downloadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.FILE_NOT_FOUND_ERR);
+ });
+
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.download(remoteFile, badFilePath, downloadWin, downloadFail);
+ });
+
+ waitsForAny(downloadWin, downloadFail);
+ });
+ });
+ describe('upload method', function() {
+
+ it("should be able to upload a file", function() {
+ var remoteFile = server + "/upload";
+ var localFileName = "upload.txt";
+ var fileContents = 'This file should upload';
+
+ var fileFail = createDoNotCallSpy('fileFail');
+ var uploadFail = createDoNotCallSpy('uploadFail', "Ensure " + remoteFile + " is in the white list");
+ var lastProgressEvent = null;
+
+ var uploadWin = jasmine.createSpy().andCallFake(function(uploadResult) {
+ expect(uploadResult.bytesSent).toBeGreaterThan(0);
+ expect(uploadResult.responseCode).toBe(200);
+ expect(uploadResult.response).toMatch(/fields:\s*{\s*value1.*/);
+ });
+
+ var fileWin = function(fileEntry) {
+ ft = new FileTransfer();
+
+ var options = new FileUploadOptions();
+ options.fileKey = "file";
+ options.fileName = localFileName;
+ options.mimeType = "text/plain";
+
+ var params = new Object();
+ params.value1 = "test";
+ params.value2 = "param";
+ options.params = params;
+
+ ft.onprogress = function(e) {
+ expect(e.lengthComputable).toBe(true);
+ expect(e.total).toBeGreaterThan(0);
+ expect(e.loaded).toBeGreaterThan(0);
+ lastProgressEvent = e;
+ };
+
+ // removing options cause Android to timeout
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, options);
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, fileContents, fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail, fileFail);
+ runs(function() {
+ expect(lastProgressEvent).not.toBeNull('expected progress events');
+ });
+ });
+ it("should be stopped by abort() right away.", function() {
+ var remoteFile = server + "/upload";
+ var localFileName = "upload.txt";
+
+ var fileFail = createDoNotCallSpy('fileFail');
+ var uploadWin = createDoNotCallSpy('uploadWin', 'Should have been aborted');
+ var startTime;
+
+ var uploadFail = jasmine.createSpy().andCallFake(function(e) {
+ expect(e.code).toBe(FileTransferError.ABORT_ERR);
+ expect(new Date() - startTime).toBeLessThan(300);
+ });
+
+ var fileWin = function(fileEntry) {
+ ft = new FileTransfer();
+
+ var options = new FileUploadOptions();
+ options.fileKey = "file";
+ options.fileName = localFileName;
+ options.mimeType = "text/plain";
+
+ startTime = +new Date();
+ // removing options cause Android to timeout
+ ft.abort(); // should be a no-op.
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, options);
+ ft.abort();
+ ft.abort(); // should be a no-op.
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, new Array(10000).join('aborttest!'), fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail, fileFail);
+ });
+ it("should get http status on failure", function() {
+ var fileFail = createDoNotCallSpy('fileFail');
+ var uploadWin = createDoNotCallSpy('uploadWin');
+
+ var remoteFile = server + "/403";
+ var localFileName = "upload_expect_fail.txt";
+ var uploadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.http_status).toBe(403);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+
+ var fileWin = function(fileEntry) {
+ var ft = new FileTransfer();
+
+ var options = new FileUploadOptions();
+ options.fileKey="file";
+ options.fileName=fileEntry.name;
+ options.mimeType="text/plain";
+
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, options);
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, "this file should fail to upload", fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail, fileFail);
+ });
+ it("should handle malformed urls", function() {
+ var fileFail = createDoNotCallSpy('fileFail');
+ var uploadWin = createDoNotCallSpy('uploadWin');
+
+ var remoteFile = getMalformedUrl();
+ var localFileName = "malformed_url.txt";
+ var uploadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.INVALID_URL_ERR);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+ var fileWin = function(fileEntry) {
+ var ft = new FileTransfer();
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, {});
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, "Some content", fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail, fileFail);
+ });
+ it("should handle unknown host", function() {
+ var fileFail = createDoNotCallSpy('fileFail');
+ var uploadWin = createDoNotCallSpy('uploadWin');
+
+ var remoteFile = "http://foobar.apache.org/robots.txt";
+ var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
+ var uploadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.CONNECTION_ERR);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+ var fileWin = function(fileEntry) {
+ var ft = new FileTransfer();
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, {});
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, "# allow all", fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail, fileFail);
+ });
+ it("should handle missing file", function() {
+ var uploadWin = createDoNotCallSpy('uploadWin');
+
+ var remoteFile = server + "/upload";
+ var localFileName = "does_not_exist.txt";
+
+ var uploadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.FILE_NOT_FOUND_ERR);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.upload(root.fullPath + "/" + localFileName, remoteFile, uploadWin, uploadFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail);
+ });
+ it("should handle bad file path", function() {
+ var uploadWin = createDoNotCallSpy('uploadWin');
+
+ var remoteFile = server + "/upload";
+
+ var uploadFail = jasmine.createSpy().andCallFake(function(error) {
+ expect(error.code).toBe(FileTransferError.FILE_NOT_FOUND_ERR);
+ expect(error.http_status).not.toBe(401, "Ensure " + remoteFile + " is in the white list");
+ });
+
+ runs(function() {
+ var ft = new FileTransfer();
+ ft.upload("/usr/local/bad/file/path.txt", remoteFile, uploadWin, uploadFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail);
+ });
+ it("should be able to set custom headers", function() {
+ var remoteFile = "http://whatheaders.com";
+ var localFileName = "upload.txt";
+
+ var fileFail = function() {};
+ var uploadFail = createDoNotCallSpy('uploadFail', "Ensure " + remoteFile + " is in the white list and that Content-Length header is being set.");
+
+ var uploadWin = jasmine.createSpy().andCallFake(function(uploadResult) {
+ expect(uploadResult.bytesSent).toBeGreaterThan(0);
+ expect(uploadResult.responseCode).toBe(200);
+ expect(uploadResult.response).toBeDefined();
+ var responseHtml = decodeURIComponent(uploadResult.response);
+ expect(responseHtml).toMatch(/CustomHeader1[\s\S]*CustomValue1/i);
+ expect(responseHtml).toMatch(/CustomHeader2[\s\S]*CustomValue2[\s\S]*CustomValue3/i, "Should allow array values");
+ });
+
+ var fileWin = function(fileEntry) {
+ ft = new FileTransfer();
+
+ var options = new FileUploadOptions();
+ options.fileKey = "file";
+ options.fileName = localFileName;
+ options.mimeType = "text/plain";
+
+ var params = new Object();
+ params.value1 = "test";
+ params.value2 = "param";
+ options.params = params;
+ options.headers = {
+ "CustomHeader1": "CustomValue1",
+ "CustomHeader2": ["CustomValue2", "CustomValue3"],
+ };
+
+ // removing options cause Android to timeout
+ ft.upload(fileEntry.fullPath, remoteFile, uploadWin, uploadFail, options);
+ };
+
+ this.after(function() {
+ deleteFile(localFileName);
+ });
+ runs(function() {
+ writeFile(localFileName, "this file should upload", fileWin, fileFail);
+ });
+
+ waitsForAny(uploadWin, uploadFail);
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/geolocation.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/geolocation.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/geolocation.tests.js
new file mode 100644
index 0000000..7d1d6ce
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/geolocation.tests.js
@@ -0,0 +1,119 @@
+describe('Geolocation (navigator.geolocation)', function () {
+ it("should exist", function() {
+ expect(navigator.geolocation).toBeDefined();
+ });
+
+ it("should contain a getCurrentPosition function", function() {
+ expect(typeof navigator.geolocation.getCurrentPosition).toBeDefined();
+ expect(typeof navigator.geolocation.getCurrentPosition == 'function').toBe(true);
+ });
+
+ it("should contain a watchPosition function", function() {
+ expect(typeof navigator.geolocation.watchPosition).toBeDefined();
+ expect(typeof navigator.geolocation.watchPosition == 'function').toBe(true);
+ });
+
+ it("should contain a clearWatch function", function() {
+ expect(typeof navigator.geolocation.clearWatch).toBeDefined();
+ expect(typeof navigator.geolocation.clearWatch == 'function').toBe(true);
+ });
+
+ describe('getCurrentPosition method', function() {
+ describe('error callback', function() {
+ it("should be called if we set timeout to 0 and maximumAge to a very small number", function() {
+ console.log("Here I am");
+ var win = jasmine.createSpy(),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.geolocation.getCurrentPosition(win, fail, {
+ maximumAge: 0,
+ timeout: 0
+ });
+ });
+
+ waitsFor(function () { return fail.wasCalled; }, "fail never called", 250); //small timeout as this should fire very fast
+
+ runs(function () {
+ expect(win).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe('success callback', function() {
+ it("should be called with a Position object", function() {
+ var win = jasmine.createSpy().andCallFake(function(p) {
+ expect(p.coords).toBeDefined();
+ expect(p.timestamp).toBeDefined();
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.geolocation.getCurrentPosition(win, fail, {
+ maximumAge:300000 // 5 minutes maximum age of cached position
+ });
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", 20000);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+ });
+
+ describe('watchPosition method', function() {
+ describe('error callback', function() {
+ var errorWatch = null;
+
+ afterEach(function() {
+ navigator.geolocation.clearWatch(errorWatch);
+ });
+ it("should be called if we set timeout to 0 and maximumAge to a very small number", function() {
+ var win = jasmine.createSpy(),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ errorWatch = navigator.geolocation.watchPosition(win, fail, {
+ maximumAge: 0,
+ timeout: 0
+ });
+ });
+
+ waitsFor(function () { return fail.wasCalled; }, "fail never called", 250); // small timeout as this hsould fire very quickly
+
+ runs(function () {
+ expect(win).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe('success callback', function() {
+ var successWatch = null;
+
+ afterEach(function() {
+ navigator.geolocation.clearWatch(successWatch);
+ });
+ it("should be called with a Position object", function() {
+ var win = jasmine.createSpy().andCallFake(function(p) {
+ expect(p.coords).toBeDefined();
+ expect(p.timestamp).toBeDefined();
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ successWatch = navigator.geolocation.watchPosition(win, fail, {
+ maximumAge:(5 * 60 * 1000) // 5 minutes maximum age of cached position
+ });
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", 20000);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/globalization.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/globalization.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/globalization.tests.js
new file mode 100644
index 0000000..6903aee
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/globalization.tests.js
@@ -0,0 +1,808 @@
+describe('Globalization (navigator.globalization)', function () {
+ it("should exist", function() {
+ expect(navigator.globalization).toBeDefined();
+ });
+
+ describe("getLocaleName", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getLocaleName).toBeDefined();
+ expect(typeof navigator.globalization.getLocaleName == 'function').toBe(true);
+ });
+ it("getLocaleName success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getLocaleName(win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("dateToString", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.dateToString).toBeDefined();
+ expect(typeof navigator.globalization.dateToString == 'function').toBe(true);
+ });
+ it("dateToString using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("dateToString using formatLength=short and selector=date options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail, {formatLength: 'short', selector: 'date'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("dateToString using formatLength=full and selector=date options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail, {formatLength: 'full', selector: 'date'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("dateToString using formatLength=medium and selector=date and time(default) options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail, {formatLength: 'medium'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("dateToString using formatLength=long and selector=date and time(default) options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail, {formatLength: 'long'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("dateToString using formatLength=full and selector=date and time(default) options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win, fail, {formatLength: 'full'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("stringToDate", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.stringToDate).toBeDefined();
+ expect(typeof navigator.globalization.stringToDate == 'function').toBe(true);
+ });
+ it("stringToDate using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.year).toBeDefined();
+ expect(typeof a.year).toBe('number');
+ expect(a.year >= 0 && a.year <=9999).toBe(true);
+ expect(a.month).toBeDefined();
+ expect(typeof a.month).toBe('number');
+ expect(a.month >= 0 && a.month <=11).toBe(true);
+ expect(a.day).toBeDefined();
+ expect(typeof a.day).toBe('number');
+ expect(a.day >= 1 && a.day <=31).toBe(true);
+ expect(a.hour).toBeDefined();
+ expect(typeof a.hour).toBe('number');
+ expect(a.hour >= 0 && a.hour <=23).toBe(true);
+ expect(a.minute).toBeDefined();
+ expect(typeof a.minute).toBe('number');
+ expect(a.minute >= 0 && a.minute <=59).toBe(true);
+ expect(a.second).toBeDefined();
+ expect(typeof a.second).toBe('number');
+ expect(a.second >= 0 && a.second <=59).toBe(true);
+ expect(a.millisecond).toBeDefined();
+ expect(typeof a.millisecond).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ var win2 = function(a) {
+ navigator.globalization.stringToDate(a.value, win, fail);
+ };
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win2, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("stringToDate using formatLength=short and selector=date options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.year).toBeDefined();
+ expect(typeof a.year).toBe('number');
+ expect(a.year >= 0 && a.year <=9999).toBe(true);
+ expect(a.month).toBeDefined();
+ expect(typeof a.month).toBe('number');
+ expect(a.month >= 0 && a.month <=11).toBe(true);
+ expect(a.day).toBeDefined();
+ expect(typeof a.day).toBe('number');
+ expect(a.day >= 1 && a.day <=31).toBe(true);
+ expect(a.hour).toBeDefined();
+ expect(typeof a.hour).toBe('number');
+ expect(a.hour >= 0 && a.hour <=23).toBe(true);
+ expect(a.minute).toBeDefined();
+ expect(typeof a.minute).toBe('number');
+ expect(a.minute >= 0 && a.minute <=59).toBe(true);
+ expect(a.second).toBeDefined();
+ expect(typeof a.second).toBe('number');
+ expect(a.second >= 0 && a.second <=59).toBe(true);
+ expect(a.millisecond).toBeDefined();
+ expect(typeof a.millisecond).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ var win2 = function(a) {
+ navigator.globalization.stringToDate(a.value, win, fail, {formatLength: 'short', selector: 'date'});
+ };
+
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win2, fail, {formatLength: 'short', selector: 'date'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("stringToDate using formatLength=full and selector=date options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.year).toBeDefined();
+ expect(typeof a.year).toBe('number');
+ expect(a.year >= 0 && a.year <=9999).toBe(true);
+ expect(a.month).toBeDefined();
+ expect(typeof a.month).toBe('number');
+ expect(a.month >= 0 && a.month <=11).toBe(true);
+ expect(a.day).toBeDefined();
+ expect(typeof a.day).toBe('number');
+ expect(a.day >= 1 && a.day <=31).toBe(true);
+ expect(a.hour).toBeDefined();
+ expect(typeof a.hour).toBe('number');
+ expect(a.hour >= 0 && a.hour <=23).toBe(true);
+ expect(a.minute).toBeDefined();
+ expect(typeof a.minute).toBe('number');
+ expect(a.minute >= 0 && a.minute <=59).toBe(true);
+ expect(a.second).toBeDefined();
+ expect(typeof a.second).toBe('number');
+ expect(a.second >= 0 && a.second <=59).toBe(true);
+ expect(a.millisecond).toBeDefined();
+ expect(typeof a.millisecond).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ var win2 = function(a) {
+ navigator.globalization.stringToDate(a.value, win, fail, {formatLength: 'full', selector: 'date'});
+ };
+ runs(function () {
+ navigator.globalization.dateToString(new Date(), win2, fail, {formatLength: 'full', selector: 'date'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("stringToDate using invalid date, error callback should be called with a GlobalizationError object", function() {
+ var win = jasmine.createSpy(),
+ fail = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.code).toBeDefined();
+ expect(typeof a.code).toBe('number');
+ expect(a.code === GlobalizationError.PARSING_ERROR).toBe(true);
+ expect(a.message).toBeDefined();
+ expect(typeof a.message).toBe('string');
+ expect(a.message !== "").toBe(true);
+ });
+
+ runs(function () {
+ navigator.globalization.stringToDate('notADate', win, fail, {selector:'foobar'});
+ });
+
+ waitsFor(function () { return fail.wasCalled; }, "fail never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(win).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("getDatePattern", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getDatePattern).toBeDefined();
+ expect(typeof navigator.globalization.getDatePattern == 'function').toBe(true);
+ });
+ it("getDatePattern using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(a.timezone).toBeDefined();
+ expect(typeof a.timezone).toBe('string');
+ expect(a.timezone.length > 0).toBe(true);
+ expect(a.utc_offset).toBeDefined();
+ expect(typeof a.utc_offset).toBe('number');
+ expect(a.dst_offset).toBeDefined();
+ expect(typeof a.dst_offset).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDatePattern(win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getDatePattern using formatLength=medium and selector=date options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(a.timezone).toBeDefined();
+ expect(typeof a.timezone).toBe('string');
+ expect(a.timezone.length > 0).toBe(true);
+ expect(a.utc_offset).toBeDefined();
+ expect(typeof a.utc_offset).toBe('number');
+ expect(a.dst_offset).toBeDefined();
+ expect(typeof a.dst_offset).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDatePattern(win, fail, {formatLength: 'medium', selector: 'date'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("getDateNames", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getDateNames).toBeDefined();
+ expect(typeof navigator.globalization.getDateNames == 'function').toBe(true);
+ });
+ it("getDateNames using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(a.value instanceof Array).toBe(true);
+ expect(a.value.length > 0).toBe(true);
+ expect(typeof a.value[0]).toBe('string');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDateNames(win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getDateNames using type=narrow and item=days options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(a.value instanceof Array).toBe(true);
+ expect(a.value.length > 0).toBe(true);
+ expect(typeof a.value[0]).toBe('string');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDateNames(win, fail, {type: 'narrow', item: 'days'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getDateNames using type=narrow and item=months options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(a.value instanceof Array).toBe(true);
+ expect(a.value.length > 0).toBe(true);
+ expect(typeof a.value[0]).toBe('string');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDateNames(win, fail, {type: 'narrow', item: 'months'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getDateNames using type=wide and item=days options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(a.value instanceof Array).toBe(true);
+ expect(a.value.length > 0).toBe(true);
+ expect(typeof a.value[0]).toBe('string');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDateNames(win, fail, {item: 'days'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getDateNames using type=wide and item=months options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(a.value instanceof Array).toBe(true);
+ expect(a.value.length > 0).toBe(true);
+ expect(typeof a.value[0]).toBe('string');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getDateNames(win, fail, {item: 'months'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("isDayLightSavingsTime", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.isDayLightSavingsTime).toBeDefined();
+ expect(typeof navigator.globalization.isDayLightSavingsTime == 'function').toBe(true);
+ });
+ it("isDayLightSavingsTime using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.dst).toBeDefined();
+ expect(typeof a.dst).toBe('boolean');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.isDayLightSavingsTime(new Date(), win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("getFirstDayOfWeek", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getFirstDayOfWeek).toBeDefined();
+ expect(typeof navigator.globalization.getFirstDayOfWeek == 'function').toBe(true);
+ });
+ it("getFirstDayOfWeek success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('number');
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getFirstDayOfWeek(win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("numberToString", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.numberToString).toBeDefined();
+ expect(typeof navigator.globalization.numberToString == 'function').toBe(true);
+ });
+ it("numberToString using default options, should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.numberToString(3.25, win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("numberToString using type=percent options, should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.numberToString(.25, win, fail, {type: 'percent'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("numberToString using type=currency options, should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('string');
+ expect(a.value.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.numberToString(5.20, win, fail, {type: 'currency'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("stringToNumber", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.stringToNumber).toBeDefined();
+ expect(typeof navigator.globalization.stringToNumber == 'function').toBe(true);
+ });
+ it("stringToNumber using default options, should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('number');
+ expect(a.value > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ var win2 = function(a) {
+ navigator.globalization.stringToNumber(a.value, win, fail);
+ };
+
+ runs(function () {
+ navigator.globalization.numberToString(3.25, win2, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("stringToNumber using type=percent options, should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.value).toBeDefined();
+ expect(typeof a.value).toBe('number');
+ expect(a.value > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ var win2 = function(a) {
+ navigator.globalization.stringToNumber(a.value, win, fail, {type: 'percent'});
+ };
+
+ runs(function () {
+ navigator.globalization.numberToString(.25, win2, fail, {type: 'percent'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("getNumberPattern", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getNumberPattern).toBeDefined();
+ expect(typeof navigator.globalization.getNumberPattern == 'function').toBe(true);
+ });
+ it("getNumberPattern using default options, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(typeof a.symbol).toBe('string');
+ expect(typeof a.fraction).toBe('number');
+ expect(typeof a.rounding).toBe('number');
+ expect(a.positive).toBeDefined();
+ expect(typeof a.positive).toBe('string');
+ expect(a.positive.length >= 0).toBe(true);
+ expect(a.negative).toBeDefined();
+ expect(typeof a.negative).toBe('string');
+ expect(a.negative.length >= 0).toBe(true);
+ expect(a.decimal).toBeDefined();
+ expect(typeof a.decimal).toBe('string');
+ expect(a.decimal.length > 0).toBe(true);
+ expect(a.grouping).toBeDefined();
+ expect(typeof a.grouping).toBe('string');
+ expect(a.grouping.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getNumberPattern(win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getNumberPattern using type=percent, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(typeof a.symbol).toBe('string');
+ expect(typeof a.fraction).toBe('number');
+ expect(typeof a.rounding).toBe('number');
+ expect(a.positive).toBeDefined();
+ expect(typeof a.positive).toBe('string');
+ expect(a.positive.length >= 0).toBe(true);
+ expect(a.negative).toBeDefined();
+ expect(typeof a.negative).toBe('string');
+ expect(a.negative.length >= 0).toBe(true);
+ expect(a.decimal).toBeDefined();
+ expect(typeof a.decimal).toBe('string');
+ expect(a.decimal.length > 0).toBe(true);
+ expect(a.grouping).toBeDefined();
+ expect(typeof a.grouping).toBe('string');
+ expect(a.grouping.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getNumberPattern(win, fail, {type: 'percent'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ it("getNumberPattern using type=currency, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(typeof a.symbol).toBe('string');
+ expect(typeof a.fraction).toBe('number');
+ expect(typeof a.rounding).toBe('number');
+ expect(a.positive).toBeDefined();
+ expect(typeof a.positive).toBe('string');
+ expect(a.positive.length >= 0).toBe(true);
+ expect(a.negative).toBeDefined();
+ expect(typeof a.negative).toBe('string');
+ expect(a.negative.length >= 0).toBe(true);
+ expect(a.decimal).toBeDefined();
+ expect(typeof a.decimal).toBe('string');
+ expect(a.decimal.length > 0).toBe(true);
+ expect(a.grouping).toBeDefined();
+ expect(typeof a.grouping).toBe('string');
+ expect(a.grouping.length > 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getNumberPattern(win, fail, {type: 'currency'});
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("getCurrencyPattern", function() {
+ it("should exist", function() {
+ expect(typeof navigator.globalization.getCurrencyPattern).toBeDefined();
+ expect(typeof navigator.globalization.getCurrencyPattern == 'function').toBe(true);
+ });
+ it("getCurrencyPattern using EUR for currency, success callback should be called with a Properties object", function() {
+ var win = jasmine.createSpy().andCallFake(function(a) {
+ expect(a).toBeDefined();
+ expect(typeof a).toBe('object');
+ expect(a.pattern).toBeDefined();
+ expect(typeof a.pattern).toBe('string');
+ expect(a.pattern.length > 0).toBe(true);
+ expect(a.code).toBeDefined();
+ expect(typeof a.code).toBe('string');
+ expect(a.code.length > 0).toBe(true);
+ expect(typeof a.fraction).toBe('number');
+ expect(typeof a.rounding).toBe('number');
+ expect(a.decimal).toBeDefined();
+ expect(typeof a.decimal).toBe('string');
+ expect(a.decimal.length >= 0).toBe(true);
+ expect(a.grouping).toBeDefined();
+ expect(typeof a.grouping).toBe('string');
+ expect(a.grouping.length >= 0).toBe(true);
+ }),
+ fail = jasmine.createSpy();
+
+ runs(function () {
+ navigator.globalization.getCurrencyPattern("EUR", win, fail);
+ });
+
+ waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(fail).not.toHaveBeenCalled();
+ });
+ });
+ });
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/media.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/media.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/media.tests.js
new file mode 100644
index 0000000..d0e6c4f
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/media.tests.js
@@ -0,0 +1,144 @@
+describe('Media', function () {
+ it("should exist", function() {
+ expect(Media).toBeDefined();
+ expect(typeof Media).toBe("function");
+ });
+
+ it("should have the following properties", function() {
+ var media1 = new Media("dummy");
+ expect(media1.id).toBeDefined();
+ expect(media1.src).toBeDefined();
+ expect(media1._duration).toBeDefined();
+ expect(media1._position).toBeDefined();
+ media1.release();
+ });
+
+ it("should define constants for Media errors", function() {
+ expect(MediaError).toBeDefined();
+ expect(MediaError.MEDIA_ERR_NONE_ACTIVE).toBe(0);
+ expect(MediaError.MEDIA_ERR_ABORTED).toBe(1);
+ expect(MediaError.MEDIA_ERR_NETWORK).toBe(2);
+ expect(MediaError.MEDIA_ERR_DECODE).toBe(3);
+ expect(MediaError.MEDIA_ERR_NONE_SUPPORTED).toBe(4);
+ });
+
+ it("should contain a play function", function() {
+ var media1 = new Media();
+ expect(media1.play).toBeDefined();
+ expect(typeof media1.play).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a stop function", function() {
+ var media1 = new Media();
+ expect(media1.stop).toBeDefined();
+ expect(typeof media1.stop).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a seekTo function", function() {
+ var media1 = new Media();
+ expect(media1.seekTo).toBeDefined();
+ expect(typeof media1.seekTo).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a pause function", function() {
+ var media1 = new Media();
+ expect(media1.pause).toBeDefined();
+ expect(typeof media1.pause).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a getDuration function", function() {
+ var media1 = new Media();
+ expect(media1.getDuration).toBeDefined();
+ expect(typeof media1.getDuration).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a getCurrentPosition function", function() {
+ var media1 = new Media();
+ expect(media1.getCurrentPosition).toBeDefined();
+ expect(typeof media1.getCurrentPosition).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a startRecord function", function() {
+ var media1 = new Media();
+ expect(media1.startRecord).toBeDefined();
+ expect(typeof media1.startRecord).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a stopRecord function", function() {
+ var media1 = new Media();
+ expect(media1.stopRecord).toBeDefined();
+ expect(typeof media1.stopRecord).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a release function", function() {
+ var media1 = new Media();
+ expect(media1.release).toBeDefined();
+ expect(typeof media1.release).toBe('function');
+ media1.release();
+ });
+
+ it("should contain a setVolume function", function() {
+ var media1 = new Media();
+ expect(media1.setVolume).toBeDefined();
+ expect(typeof media1.setVolume).toBe('function');
+ media1.release();
+ });
+
+ it("should return MediaError for bad filename", function() {
+ var badMedia = null,
+ win = jasmine.createSpy(),
+ fail = jasmine.createSpy().andCallFake(function (result) {
+ expect(result).toBeDefined();
+ expect(result.code).toBe(MediaError.MEDIA_ERR_ABORTED);
+ });
+
+ runs(function () {
+ badMedia = new Media("invalid.file.name", win,fail);
+ badMedia.play();
+ });
+
+ waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT);
+
+ runs(function () {
+ expect(win).not.toHaveBeenCalled();
+ badMedia.release();
+ });
+ });
+
+ it("position should be set properly", function() {
+ var media1 = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3"),
+ test = jasmine.createSpy().andCallFake(function(position) {
+ console.log("position = " + position);
+ expect(position).toBeGreaterThan(0.0);
+ media1.stop()
+ media1.release();
+ });
+
+ media1.play();
+
+ waits(5000);
+
+ runs(function () {
+ media1.getCurrentPosition(test, function () {});
+ });
+
+ waitsFor(function () { return test.wasCalled; }, Tests.TEST_TIMEOUT);
+ });
+
+ it("duration should be set properly", function() {
+ var media1 = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3");
+ media1.play();
+ waits(5000);
+ runs(function () {
+ expect(media1.getDuration()).toBeGreaterThan(0.0);
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/network.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/network.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/network.tests.js
new file mode 100644
index 0000000..780097f
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/network.tests.js
@@ -0,0 +1,25 @@
+describe('Network (navigator.network)', function () {
+ it("should exist", function() {
+ expect(navigator.network).toBeDefined();
+ });
+
+ describe('Network Information API', function () {
+ it("connection should exist", function() {
+ expect(navigator.network.connection).toBeDefined();
+ });
+
+ it("should contain connection properties", function() {
+ expect(navigator.network.connection.type).toBeDefined();
+ });
+
+ it("should define constants for connection status", function() {
+ expect(Connection.UNKNOWN).toBe("unknown");
+ expect(Connection.ETHERNET).toBe("ethernet");
+ expect(Connection.WIFI).toBe("wifi");
+ expect(Connection.CELL_2G).toBe("2g");
+ expect(Connection.CELL_3G).toBe("3g");
+ expect(Connection.CELL_4G).toBe("4g");
+ expect(Connection.NONE).toBe("none");
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/notification.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/notification.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/notification.tests.js
new file mode 100644
index 0000000..61c795d
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/notification.tests.js
@@ -0,0 +1,20 @@
+describe('Notification (navigator.notification)', function () {
+ it("should exist", function() {
+ expect(navigator.notification).toBeDefined();
+ });
+
+ it("should contain a vibrate function", function() {
+ expect(typeof navigator.notification.vibrate).toBeDefined();
+ expect(typeof navigator.notification.vibrate).toBe("function");
+ });
+
+ it("should contain a beep function", function() {
+ expect(typeof navigator.notification.beep).toBeDefined();
+ expect(typeof navigator.notification.beep).toBe("function");
+ });
+
+ it("should contain a alert function", function() {
+ expect(typeof navigator.notification.alert).toBeDefined();
+ expect(typeof navigator.notification.alert).toBe("function");
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/platform.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/platform.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/platform.tests.js
new file mode 100644
index 0000000..f44fcb3
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/platform.tests.js
@@ -0,0 +1,10 @@
+describe('Platform (cordova)', function () {
+ it("should exist", function() {
+ expect(cordova).toBeDefined();
+ });
+
+ it("exec method should exist", function() {
+ expect(cordova.exec).toBeDefined();
+ expect(typeof cordova.exec).toBe('function');
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/storage.tests.js
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/storage.tests.js b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/storage.tests.js
new file mode 100644
index 0000000..08ea608
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/autotest/tests/storage.tests.js
@@ -0,0 +1,174 @@
+describe("Session Storage", function () {
+ it("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("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("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("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("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("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("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("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("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");
+ });
+
+ it("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("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("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("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("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("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("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("should exist", function() {
+ expect(window.openDatabase).toBeDefined();
+ });
+
+ it("Should be able to create and drop tables", function() {
+ var win = jasmine.createSpy('win');
+ var fail1 = createDoNotCallSpy('fail1');
+ var fail2 = createDoNotCallSpy('fail2');
+ 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));');
+ }, fail1, step2);
+ function step2() {
+ db.transaction(function(t) {
+ t.executeSql('DROP TABLE foo;');
+ t.executeSql('DROP TABLE foo2');
+ }, fail2, win);
+ }
+ waitsForAny(win, fail1, fail2);
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f59ddbbd/lib/cordova-wp8/tests/MobileSpecUnitTests/www/battery/index.html
----------------------------------------------------------------------
diff --git a/lib/cordova-wp8/tests/MobileSpecUnitTests/www/battery/index.html b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/battery/index.html
new file mode 100644
index 0000000..394988c
--- /dev/null
+++ b/lib/cordova-wp8/tests/MobileSpecUnitTests/www/battery/index.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
+ <title>Cordova Mobile Spec</title>
+ <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
+ <script type="text/javascript" charset="utf-8" src="../cordova.js"></script>
+
+
+<script type="text/javascript" charset="utf-8">
+
+ var deviceReady = false;
+
+ /**
+ * Function called when page has finished loading.
+ */
+ function init() {
+ document.addEventListener("deviceready", function() {
+ deviceReady = true;
+ console.log("Device="+device.platform+" "+device.version);
+ }, false);
+ window.setTimeout(function() {
+ if (!deviceReady) {
+ alert("Error: PhoneGap did not initialize. Demo will not run correctly.");
+ }
+ },1000);
+ }
+
+ /* Battery */
+ function updateInfo(info) {
+ document.getElementById('level').innerText = info.level;
+ document.getElementById('isPlugged').innerText = info.isPlugged;
+ if (info.level > 5) {
+ document.getElementById('crit').innerText = "false";
+ }
+ if (info.level > 20) {
+ document.getElementById('low').innerText = "false";
+ }
+ }
+
+ function batteryLow(info) {
+ document.getElementById('low').innerText = "true";
+ }
+
+ function batteryCritical(info) {
+ document.getElementById('crit').innerText = "true";
+ }
+
+ function addBattery() {
+ window.addEventListener("batterystatus", updateInfo, false);
+ }
+
+ function removeBattery() {
+ window.removeEventListener("batterystatus", updateInfo, false);
+ }
+
+ function addLow() {
+ window.addEventListener("batterylow", batteryLow, false);
+ }
+
+ function removeLow() {
+ window.removeEventListener("batterylow", batteryLow, false);
+ }
+
+ function addCritical() {
+ window.addEventListener("batterycritical", batteryCritical, false);
+ }
+
+ function removeCritical() {
+ window.removeEventListener("batterycritical", batteryCritical, false);
+ }
+
+</script>
+
+ </head>
+ <body onload="init();" id="stage" class="theme">
+
+ <h1>Battery</h1>
+ <div id="info">
+ <b>Status:</b> <span id="battery_status"></span><br>
+ Level: <span id="level"></span><br/>
+ Plugged: <span id="isPlugged"></span><br/>
+ Low: <span id="low"></span><br/>
+ Critical: <span id="crit"></span><br/>
+ </div>
+ <h2>Action</h2>
+ <div class="btn large" onclick="addBattery();">Add "batterystatus" listener</div>
+ <div class="btn large" onclick="removeBattery();">Remove "batterystatus" listener</div>
+ <div class="btn large" onclick="addLow();">Add "batterylow" listener</div>
+ <div class="btn large" onclick="removeLow();">Remove "batterylow" listener</div>
+ <div class="btn large" onclick="addCritical();">Add "batterycritical" listener</div>
+ <div class="btn large" onclick="removeCritical();">Remove "batterycritical" listener</div>
+ <h2> </h2><div class="backBtn" onclick="backHome();">Back</div>
+ </body>
+</html>