Return-Path: X-Original-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 910BADB31 for ; Wed, 17 Oct 2012 23:27:05 +0000 (UTC) Received: (qmail 5796 invoked by uid 500); 17 Oct 2012 23:27:02 -0000 Delivered-To: apmail-incubator-callback-commits-archive@incubator.apache.org Received: (qmail 5695 invoked by uid 500); 17 Oct 2012 23:27:02 -0000 Mailing-List: contact callback-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@incubator.apache.org Delivered-To: mailing list callback-commits@incubator.apache.org Received: (qmail 5025 invoked by uid 99); 17 Oct 2012 23:27:01 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Oct 2012 23:27:01 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 4731B9473; Wed, 17 Oct 2012 23:27:01 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: purplecabbage@apache.org To: callback-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [28/50] [abbrv] be movin tings rond yo Message-Id: <20121017232701.4731B9473@tyr.zones.apache.org> Date: Wed, 17 Oct 2012 23:27:01 +0000 (UTC) http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/battery.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/battery.html b/windows8/MetroTestApp/autotest/pages/battery.html new file mode 100644 index 0000000..24f3af8 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/battery.html @@ -0,0 +1,44 @@ + + + + Cordova: Battery API Specs + + + + + + + + + + + + + + + + + + + + + + + Back + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/camera.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/camera.html b/windows8/MetroTestApp/autotest/pages/camera.html new file mode 100644 index 0000000..ce8f6cf --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/camera.html @@ -0,0 +1,49 @@ + + + + + Cordova: Camera API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/capture.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/capture.html b/windows8/MetroTestApp/autotest/pages/capture.html new file mode 100644 index 0000000..8ce0307 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/capture.html @@ -0,0 +1,50 @@ + + + + + Cordova: Capture API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/compass.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/compass.html b/windows8/MetroTestApp/autotest/pages/compass.html new file mode 100644 index 0000000..571f7d2 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/compass.html @@ -0,0 +1,49 @@ + + + + + Cordova: Compass API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/contacts.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/contacts.html b/windows8/MetroTestApp/autotest/pages/contacts.html new file mode 100644 index 0000000..3fd001f --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/contacts.html @@ -0,0 +1,49 @@ + + + + + Cordova: Contacts API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/device.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/device.html b/windows8/MetroTestApp/autotest/pages/device.html new file mode 100644 index 0000000..004a6e4 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/device.html @@ -0,0 +1,49 @@ + + + + + Cordova: Device API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/file.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/file.html b/windows8/MetroTestApp/autotest/pages/file.html new file mode 100644 index 0000000..55a2f24 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/file.html @@ -0,0 +1,68 @@ + + + + Cordova: File API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/filetransfer.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/filetransfer.html b/windows8/MetroTestApp/autotest/pages/filetransfer.html new file mode 100644 index 0000000..fdbcf9e --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/filetransfer.html @@ -0,0 +1,69 @@ + + + + Cordova: File API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/geolocation.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/geolocation.html b/windows8/MetroTestApp/autotest/pages/geolocation.html new file mode 100644 index 0000000..b0f56dc --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/geolocation.html @@ -0,0 +1,49 @@ + + + + + Cordova: Geolocation API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/media.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/media.html b/windows8/MetroTestApp/autotest/pages/media.html new file mode 100644 index 0000000..85f2170 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/media.html @@ -0,0 +1,49 @@ + + + + + Cordova: Media API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/network.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/network.html b/windows8/MetroTestApp/autotest/pages/network.html new file mode 100644 index 0000000..3740a0c --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/network.html @@ -0,0 +1,49 @@ + + + + + Cordova: Network API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/notification.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/notification.html b/windows8/MetroTestApp/autotest/pages/notification.html new file mode 100644 index 0000000..0f59a4e --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/notification.html @@ -0,0 +1,49 @@ + + + + + Cordova: Notification API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/platform.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/platform.html b/windows8/MetroTestApp/autotest/pages/platform.html new file mode 100644 index 0000000..be03b8b --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/platform.html @@ -0,0 +1,49 @@ + + + + + Cordova: Platform API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/pages/storage.html ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/pages/storage.html b/windows8/MetroTestApp/autotest/pages/storage.html new file mode 100644 index 0000000..65e3d11 --- /dev/null +++ b/windows8/MetroTestApp/autotest/pages/storage.html @@ -0,0 +1,49 @@ + + + + + Cordova: Storage API Specs + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/test-runner.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/test-runner.js b/windows8/MetroTestApp/autotest/test-runner.js new file mode 100644 index 0000000..b8a9417 --- /dev/null +++ b/windows8/MetroTestApp/autotest/test-runner.js @@ -0,0 +1,9 @@ +if (window.sessionStorage != null) { + window.sessionStorage.clear(); +} + +// Timeout is 2 seconds to allow physical devices enough +// time to query the response. This is important for some +// Android devices. +var Tests = function() {}; +Tests.TEST_TIMEOUT = 7500; http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/accelerometer.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/accelerometer.tests.js b/windows8/MetroTestApp/autotest/tests/accelerometer.tests.js new file mode 100644 index 0000000..0b61ac3 --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/accelerometer.tests.js @@ -0,0 +1,193 @@ +describe('Accelerometer (navigator.accelerometer)', function () { + it("should exist", function () { + expect(navigator.accelerometer).toBeDefined(); + }); + + describe("getCurrentAcceleration", function() { + it("should exist", function() { + expect(typeof navigator.accelerometer.getCurrentAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.getCurrentAcceleration == 'function').toBe(true); + }); + + it("success callback should be called with an Acceleration object", function() { + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + }), + fail = jasmine.createSpy(); + + runs(function () { + navigator.accelerometer.getCurrentAcceleration(win, fail); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + + it("success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function() { + var reasonableThreshold = 15; + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + }), + fail = jasmine.createSpy(); + + runs(function () { + navigator.accelerometer.getCurrentAcceleration(win, fail); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + + it("success callback Acceleration object should return a recent timestamp", function() { + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + }), + fail = jasmine.createSpy(); + + runs(function () { + navigator.accelerometer.getCurrentAcceleration(win, fail); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + }); + + describe("watchAcceleration", function() { + var id; + + afterEach(function() { + navigator.accelerometer.clearWatch(id); + }); + + it("should exist", function() { + expect(navigator.accelerometer.watchAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.watchAcceleration == 'function').toBe(true); + }); + it("success callback should be called with an Acceleration object", function() { + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + }), + fail = jasmine.createSpy(); + + runs(function () { + id = navigator.accelerometer.watchAcceleration(win, fail, {frequency:500}); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + + it("success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function() { + var reasonableThreshold = 15; + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + }), + fail = jasmine.createSpy(); + + runs(function () { + id = navigator.accelerometer.watchAcceleration(win, fail, {frequency:500}); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + + it("success callback Acceleration object should return a recent timestamp", function() { + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + }), + fail = jasmine.createSpy(); + + runs(function () { + id = navigator.accelerometer.watchAcceleration(win, fail, {frequency:500}); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + }); + + describe("clearWatch", function() { + it("should exist", function() { + expect(navigator.accelerometer.clearWatch).toBeDefined(); + expect(typeof navigator.accelerometer.clearWatch == 'function').toBe(true); + }); + + it("should clear an existing watch", function() { + var id, + win = jasmine.createSpy(); + + runs(function() { + id = navigator.accelerometer.watchAcceleration(win, function() {}, {frequency:100}); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function() { + win.reset(); + navigator.accelerometer.clearWatch(id); + }); + + waits(201); + + runs(function() { + expect(win).not.toHaveBeenCalled(); + }); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/battery.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/battery.tests.js b/windows8/MetroTestApp/autotest/tests/battery.tests.js new file mode 100644 index 0000000..7bb25af --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/battery.tests.js @@ -0,0 +1,5 @@ +describe('Battery (navigator.battery)', function () {; + it("should exist", function() { + expect(navigator.battery).toBeDefined(); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/camera.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/camera.tests.js b/windows8/MetroTestApp/autotest/tests/camera.tests.js new file mode 100644 index 0000000..9b6b04c --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/camera.tests.js @@ -0,0 +1,47 @@ +describe('Camera (navigator.camera)', function () { + it("should exist", function() { + expect(navigator.camera).toBeDefined(); + }); + + it("should contain a getPicture function", function() { + expect(navigator.camera.getPicture).toBeDefined(); + expect(typeof navigator.camera.getPicture == 'function').toBe(true); + }); +}); + +describe('Camera Constants (window.Camera + navigator.camera)', function () { + it("window.Camera should exist", function() { + expect(window.Camera).toBeDefined(); + }); + + it("should contain two DestinationType constants", function() { + expect(Camera.DestinationType.DATA_URL).toBe(0); + expect(Camera.DestinationType.FILE_URI).toBe(1); + expect(navigator.camera.DestinationType.DATA_URL).toBe(0); + expect(navigator.camera.DestinationType.FILE_URI).toBe(1); + }); + + it("should contain two EncodingType constants", function() { + expect(Camera.EncodingType.JPEG).toBe(0); + expect(Camera.EncodingType.PNG).toBe(1); + expect(navigator.camera.EncodingType.JPEG).toBe(0); + expect(navigator.camera.EncodingType.PNG).toBe(1); + }); + + it("should contain three MediaType constants", function() { + expect(Camera.MediaType.PICTURE).toBe(0); + expect(Camera.MediaType.VIDEO).toBe(1); + expect(Camera.MediaType.ALLMEDIA).toBe(2); + expect(navigator.camera.MediaType.PICTURE).toBe(0); + expect(navigator.camera.MediaType.VIDEO).toBe(1); + expect(navigator.camera.MediaType.ALLMEDIA).toBe(2); + }); + it("should contain three PictureSourceType constants", function() { + expect(Camera.PictureSourceType.PHOTOLIBRARY).toBe(0); + expect(Camera.PictureSourceType.CAMERA).toBe(1); + expect(Camera.PictureSourceType.SAVEDPHOTOALBUM).toBe(2); + expect(navigator.camera.PictureSourceType.PHOTOLIBRARY).toBe(0); + expect(navigator.camera.PictureSourceType.CAMERA).toBe(1); + expect(navigator.camera.PictureSourceType.SAVEDPHOTOALBUM).toBe(2); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/capture.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/capture.tests.js b/windows8/MetroTestApp/autotest/tests/capture.tests.js new file mode 100644 index 0000000..bffced8 --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/capture.tests.js @@ -0,0 +1,95 @@ +describe('Capture (navigator.device.capture)', function () { + it("should exist", function() { + expect(navigator.device).toBeDefined(); + expect(navigator.device.capture).toBeDefined(); + }); + + it("should have the correct properties ", function() { + expect(navigator.device.capture.supportedAudioModes).toBeDefined(); + expect(navigator.device.capture.supportedImageModes).toBeDefined(); + expect(navigator.device.capture.supportedVideoModes).toBeDefined(); + }); + + it("should contain a captureAudio function", function() { + expect(navigator.device.capture.captureAudio).toBeDefined(); + expect(typeof navigator.device.capture.captureAudio == 'function').toBe(true); + }); + + it("should contain a captureImage function", function() { + expect(navigator.device.capture.captureImage).toBeDefined(); + expect(typeof navigator.device.capture.captureImage == 'function').toBe(true); + }); + + it("should contain a captureVideo function", function() { + expect(navigator.device.capture.captureVideo).toBeDefined(); + expect(typeof navigator.device.capture.captureVideo == 'function').toBe(true); + }); + + describe('CaptureAudioOptions', function () { + it("CaptureAudioOptions constructor should exist", function() { + var options = new CaptureAudioOptions(); + expect(options).toBeDefined(); + expect(options.limit).toBeDefined(); + expect(options.duration).toBeDefined(); + expect(options.mode).toBeDefined(); + }); + }); + + describe('CaptureImageOptions', function () { + it("CaptureImageOptions constructor should exist", function() { + var options = new CaptureImageOptions(); + expect(options).toBeDefined(); + expect(options.limit).toBeDefined(); + expect(options.mode).toBeDefined(); + }); + }); + + describe('CaptureVideoOptions', function () { + it("CaptureVideoOptions constructor should exist", function() { + var options = new CaptureVideoOptions(); + expect(options).toBeDefined(); + expect(options.limit).toBeDefined(); + expect(options.duration).toBeDefined(); + expect(options.mode).toBeDefined(); + }); + }); + + describe('CaptureError interface', function () { + it("CaptureError constants should be defined", function() { + expect(CaptureError.CAPTURE_INTERNAL_ERR).toBe(0); + expect(CaptureError.CAPTURE_APPLICATION_BUSY).toBe(1); + expect(CaptureError.CAPTURE_INVALID_ARGUMENT).toBe(2); + expect(CaptureError.CAPTURE_NO_MEDIA_FILES).toBe(3); + }); + + it("CaptureError properties should exist", function() { + var error = new CaptureError(); + expect(error).toBeDefined(); + expect(error.code).toBeDefined(); + }); + }); + + describe('MediaFileData', function () { + it("MediaFileData constructor should exist", function() { + var fileData = new MediaFileData(); + expect(fileData).toBeDefined(); + expect(fileData.bitrate).toBeDefined(); + expect(fileData.codecs).toBeDefined(); + expect(fileData.duration).toBeDefined(); + expect(fileData.height).toBeDefined(); + expect(fileData.width).toBeDefined(); + }); + }); + + describe('MediaFile', function () { + it("MediaFile constructor should exist", function() { + var fileData = new MediaFile(); + expect(fileData).toBeDefined(); + expect(fileData.name).toBeDefined(); + expect(fileData.fullPath).toBeDefined(); + expect(fileData.type).toBeDefined(); + expect(fileData.lastModifiedDate).toBeDefined(); + expect(fileData.size).toBeDefined(); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/compass.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/compass.tests.js b/windows8/MetroTestApp/autotest/tests/compass.tests.js new file mode 100644 index 0000000..a16ec0e --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/compass.tests.js @@ -0,0 +1,76 @@ +describe('Compass (navigator.compass)', function () { + it("should exist", function() { + expect(navigator.compass).toBeDefined(); + }); + + it("should contain a getCurrentHeading function", function() { + expect(navigator.compass.getCurrentHeading).toBeDefined(); + expect(typeof navigator.compass.getCurrentHeading == 'function').toBe(true); + }); + + it("getCurrentHeading success callback should be called with a Heading object", function() { + var win = jasmine.createSpy().andCallFake(function(a) { + expect(a instanceof CompassHeading).toBe(true); + expect(a.magneticHeading).toBeDefined(); + expect(typeof a.magneticHeading == 'number').toBe(true); + expect(a.trueHeading).not.toBe(undefined); + expect(typeof a.trueHeading == 'number' || a.trueHeading === null).toBe(true); + expect(a.headingAccuracy).not.toBe(undefined); + expect(typeof a.headingAccuracy == 'number' || a.headingAccuracy === null).toBe(true); + expect(typeof a.timestamp == 'number').toBe(true); + }), + fail = jasmine.createSpy(); + + runs(function () { + navigator.compass.getCurrentHeading(win, fail); + }); + + waitsFor(function () { return win.wasCalled; }, "success callback never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + expect(win).toHaveBeenCalled(); + }); + }); + + it("should contain a watchHeading function", function() { + expect(navigator.compass.watchHeading).toBeDefined(); + expect(typeof navigator.compass.watchHeading == 'function').toBe(true); + }); + + it("should contain a clearWatch function", function() { + expect(navigator.compass.clearWatch).toBeDefined(); + expect(typeof navigator.compass.clearWatch == 'function').toBe(true); + }); + + describe('Compass Constants (window.CompassError)', function () { + it("should exist", function() { + expect(window.CompassError).toBeDefined(); + expect(window.CompassError.COMPASS_INTERNAL_ERR).toBe(0); + expect(window.CompassError.COMPASS_NOT_SUPPORTED).toBe(20); + }); + }); + + describe('Compass Heading model (CompassHeading)', function () { + it("should exist", function() { + expect(CompassHeading).toBeDefined(); + }); + + it("should be able to create a new CompassHeading instance with no parameters", function() { + var h = new CompassHeading(); + expect(h.magneticHeading).toBeDefined(); + expect(h.trueHeading).toBeDefined(); + expect(h.headingAccuracy).toBeDefined(); + expect(typeof h.timestamp == 'number').toBe(true); + }); + + it("should be able to creat a new CompassHeading instance with parameters", function() { + var h = new CompassHeading(1,2,3,4); + expect(h.magneticHeading).toBe(1); + expect(h.trueHeading).toBe(2); + expect(h.headingAccuracy).toBe(3); + expect(h.timestamp.valueOf()).toBe(4); + expect(typeof h.timestamp == 'number').toBe(true); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/contacts.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/contacts.tests.js b/windows8/MetroTestApp/autotest/tests/contacts.tests.js new file mode 100644 index 0000000..a5f41a5 --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/contacts.tests.js @@ -0,0 +1,451 @@ +// global to store a contact so it doesn't have to be created or retrieved multiple times +// all of the setup/teardown test methods can reference the following variables to make sure to do the right cleanup +var gContactObj = null; +var gContactId = null; + +var removeContact = function(){ + if (gContactObj) { + gContactObj.remove(function(){},function(){ + console.log("[CONTACTS ERROR]: removeContact cleanup method failed to clean up test artifacts."); + }); + gContactObj = null; + } +}; + +describe("Contacts (navigator.contacts)", function () { + it("should exist", function() { + expect(navigator.contacts).toBeDefined(); + }); + + it("should contain a find function", function() { + expect(navigator.contacts.find).toBeDefined(); + expect(typeof navigator.contacts.find).toBe('function'); + }); + + describe("find method", function() { + it("success callback should be called with an array", function() { + var win = jasmine.createSpy().andCallFake(function(result) { + expect(result).toBeDefined(); + expect(result instanceof Array).toBe(true); + }), + fail = jasmine.createSpy(), + obj = new ContactFindOptions(); + + runs(function () { + obj.filter=""; + obj.multiple=true; + navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], win, fail, obj); + }); + + waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + + it("should throw an exception if success callback is empty", function() { + var fail = function() {}; + var obj = new ContactFindOptions(); + obj.filter=""; + obj.multiple=true; + + expect(function () { + navigator.contacts.find(["displayName", "name", "emails", "phoneNumbers"], null, fail, obj); + }).toThrow(); + }); + + it("error callback should be called when no fields are specified", function() { + var win = jasmine.createSpy(), + fail = jasmine.createSpy(function(result) { + expect(result).toBeDefined(); + expect(result.code).toBe(ContactError.INVALID_ARGUMENT_ERROR); + }), + obj = new ContactFindOptions(); + + runs(function () { + obj.filter=""; + obj.multiple=true; + navigator.contacts.find([], win, fail, obj); + }); + + waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT); + + runs(function () { + expect(win).not.toHaveBeenCalled(); + expect(fail).toHaveBeenCalled(); + }); + }); + + describe("with newly-created contact", function () { + + afterEach(removeContact); + + it("should be able to find a contact by name", function() { + var foundName = jasmine.createSpy().andCallFake(function(result) { + var bFound = false; + try { + for (var i=0; i < result.length; i++) { + if (result[i].name.familyName == "Delete") { + bFound = true; + break; + } + } + } catch(e) { + return false; + } + return bFound; + }), + fail = jasmine.createSpy(), + test = jasmine.createSpy().andCallFake(function(savedContact) { + console.log('in test'); + // update so contact will get removed + gContactObj = savedContact; + // ---- + // Find asserts + // --- + var findWin = jasmine.createSpy().andCallFake(function(object) { + console.log('in findwin'); + expect(object instanceof Array).toBe(true); + expect(object.length >= 1).toBe(true); + expect(foundName(object)).toBe(true); + }), + findFail = jasmine.createSpy(), + obj = new ContactFindOptions(); + + obj.filter="Delete"; + obj.multiple=true; + + runs(function () { + navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWin, findFail, obj); + }); + + waitsFor(function () { return foundName.wasCalled; }, "foundName not done", Tests.TEST_TIMEOUT); + + runs(function () { + expect(findFail).not.toHaveBeenCalled(); + expect(fail).not.toHaveBeenCalled(); + }); + }); + + runs(function () { + gContactObj = new Contact(); + gContactObj.name = new ContactName(); + gContactObj.name.familyName = "Delete"; + gContactObj.save(test, fail); + }); + + waitsFor(function () { return test.wasCalled; }, "test not done", Tests.TEST_TIMEOUT); + }); + }); + }); + + describe('create method', function() { + + it("should exist", function() { + expect(navigator.contacts.create).toBeDefined(); + expect(typeof navigator.contacts.create).toBe('function'); + }); + + it("should return a Contact object", function() { + var bDay = new Date(1976, 7,4); + var obj = navigator.contacts.create({"displayName": "test name", "gender": "male", "note": "my note", "name": {"formatted": "Mr. Test Name"}, "emails": [{"value": "here@there.com"}, {"value": "there@here.com"}], "birthday": bDay}); + + expect(obj).toBeDefined(); + expect(obj.displayName).toBe('test name'); + expect(obj.note).toBe('my note'); + expect(obj.name.formatted).toBe('Mr. Test Name'); + expect(obj.emails.length).toBe(2); + expect(obj.emails[0].value).toBe('here@there.com'); + expect(obj.emails[1].value).toBe('there@here.com'); + expect(obj.nickname).toBe(null); + expect(obj.birthday).toBe(bDay); + }); + }); + + describe("Contact object", function () { + it("should be able to create instance", function() { + var contact = new Contact("a", "b", new ContactName("a", "b", "c", "d", "e", "f"), "c", [], [], [], [], [], "f", "i", + [], [], []); + expect(contact).toBeDefined(); + expect(contact.id).toBe("a"); + expect(contact.displayName).toBe("b"); + expect(contact.name.formatted).toBe("a"); + expect(contact.nickname).toBe("c"); + expect(contact.phoneNumbers).toBeDefined(); + expect(contact.emails).toBeDefined(); + expect(contact.addresses).toBeDefined(); + expect(contact.ims).toBeDefined(); + expect(contact.organizations).toBeDefined(); + expect(contact.birthday).toBe("f"); + expect(contact.note).toBe("i"); + expect(contact.photos).toBeDefined(); + expect(contact.categories).toBeDefined(); + expect(contact.urls).toBeDefined(); + }); + + it("should be able to define a ContactName object", function() { + var contactName = new ContactName("Dr. First Last Jr.", "Last", "First", "Middle", "Dr.", "Jr."); + expect(contactName).toBeDefined(); + expect(contactName.formatted).toBe("Dr. First Last Jr."); + expect(contactName.familyName).toBe("Last"); + expect(contactName.givenName).toBe("First"); + expect(contactName.middleName).toBe("Middle"); + expect(contactName.honorificPrefix).toBe("Dr."); + expect(contactName.honorificSuffix).toBe("Jr."); + }); + + it("should be able to define a ContactField object", function() { + var contactField = new ContactField("home", "8005551212", true); + expect(contactField).toBeDefined(); + expect(contactField.type).toBe("home"); + expect(contactField.value).toBe("8005551212"); + expect(contactField.pref).toBe(true); + }); + + it("ContactField object should coerce type and value properties to strings", function() { + var contactField = new ContactField(12345678, 12345678, true); + expect(contactField.type).toBe("12345678"); + expect(contactField.value).toBe("12345678"); + }); + + it("should be able to define a ContactAddress object", function() { + var contactAddress = new ContactAddress(true, "home", "a","b","c","d","e","f"); + expect(contactAddress).toBeDefined(); + expect(contactAddress.pref).toBe(true); + expect(contactAddress.type).toBe("home"); + expect(contactAddress.formatted).toBe("a"); + expect(contactAddress.streetAddress).toBe("b"); + expect(contactAddress.locality).toBe("c"); + expect(contactAddress.region).toBe("d"); + expect(contactAddress.postalCode).toBe("e"); + expect(contactAddress.country).toBe("f"); + }); + + it("should be able to define a ContactOrganization object", function() { + var contactOrg = new ContactOrganization(true, "home", "a","b","c","d","e","f","g"); + expect(contactOrg).toBeDefined(); + expect(contactOrg.pref).toBe(true); + expect(contactOrg.type).toBe("home"); + expect(contactOrg.name).toBe("a"); + expect(contactOrg.department).toBe("b"); + expect(contactOrg.title).toBe("c"); + }); + + it("should be able to define a ContactFindOptions object", function() { + var contactFindOptions = new ContactFindOptions("a", true, "b"); + expect(contactFindOptions).toBeDefined(); + expect(contactFindOptions.filter).toBe("a"); + expect(contactFindOptions.multiple).toBe(true); + }); + + it("should contain a clone function", function() { + var contact = new Contact(); + expect(contact.clone).toBeDefined(); + expect(typeof contact.clone).toBe('function'); + }); + + it("clone function should make deep copy of Contact Object", function() { + var contact = new Contact(); + contact.id=1; + contact.displayName="Test Name"; + contact.nickname="Testy"; + contact.gender="male"; + contact.note="note to be cloned"; + contact.name = new ContactName("Mr. Test Name"); + + var clonedContact = contact.clone(); + + expect(contact.id).toBe(1); + expect(clonedContact.id).toBe(null); + expect(clonedContact.displayName).toBe(contact.displayName); + expect(clonedContact.nickname).toBe(contact.nickname); + expect(clonedContact.gender).toBe(contact.gender); + expect(clonedContact.note).toBe(contact.note); + expect(clonedContact.name.formatted).toBe(contact.name.formatted); + expect(clonedContact.connected).toBe(contact.connected); + }); + + it("should contain a save function", function() { + var contact = new Contact(); + expect(contact.save).toBeDefined(); + expect(typeof contact.save).toBe('function'); + }); + + it("should contain a remove function", function() { + var contact = new Contact(); + expect(contact.remove).toBeDefined(); + expect(typeof contact.remove).toBe('function'); + }); + }); + + describe('save method', function () { + it("should be able to save a contact", function() { + var bDay = new Date(1976, 6,4); + gContactObj = navigator.contacts.create({"gender": "male", "note": "my note", "name": {"familyName": "Delete", "givenName": "Test"}, "emails": [{"value": "here@there.com"}, {"value": "there@here.com"}], "birthday": bDay}); + + var saveSuccess = jasmine.createSpy().andCallFake(function(obj) { + expect(obj).toBeDefined(); + expect(obj.note).toBe('my note'); + expect(obj.name.familyName).toBe('Delete'); + expect(obj.name.givenName).toBe('Test'); + expect(obj.emails.length).toBe(2); + expect(obj.emails[0].value).toBe('here@there.com'); + expect(obj.emails[1].value).toBe('there@here.com'); + expect(obj.birthday.toDateString()).toBe(bDay.toDateString()); + expect(obj.addresses).toBe(null); + // must store returned object in order to have id for update test below + gContactObj = obj; + }), + saveFail = jasmine.createSpy(); + + runs(function () { + gContactObj.save(saveSuccess, saveFail); + }); + + waitsFor(function () { return saveSuccess.wasCalled; }, "saveSuccess never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(saveFail).not.toHaveBeenCalled(); + }); + }); + // HACK: there is a reliance between the previous and next test. This is bad form. + it("update a contact", function() { + expect(gContactObj).toBeDefined(); + + var bDay = new Date(1975, 5,4); + var noteText = "an UPDATED note"; + + var win = jasmine.createSpy().andCallFake(function(obj) { + expect(obj).toBeDefined(); + expect(obj.id).toBe(gContactObj.id); + expect(obj.note).toBe(noteText); + expect(obj.birthday.toDateString()).toBe(bDay.toDateString()); + expect(obj.emails.length).toBe(1); + expect(obj.emails[0].value).toBe('here@there.com'); + removeContact(); // Clean up contact object + }), fail = jasmine.createSpy().andCallFake(removeContact); + + runs(function () { + // remove an email + gContactObj.emails[1].value = ""; + // change birthday + gContactObj.birthday = bDay; + // update note + gContactObj.note = noteText; + gContactObj.save(win, fail); + }); + + waitsFor(function () { return win.wasCalled; }, "saveSuccess never called", Tests.TEST_TIMEOUT); + + runs(function () { + expect(fail).not.toHaveBeenCalled(); + }); + }); + }); + + describe('Contact.remove method', function () { + afterEach(removeContact); + + it("calling remove on a contact has an id of null should return ContactError.UNKNOWN_ERROR", function() { + var win = jasmine.createSpy(); + var fail = jasmine.createSpy().andCallFake(function(result) { + expect(result.code).toBe(ContactError.UNKNOWN_ERROR); + }); + + runs(function () { + var rmContact = new Contact(); + rmContact.remove(win, fail); + }); + + waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT); + + runs(function () { + expect(win).not.toHaveBeenCalled(); + }); + }); + + it("calling remove on a contact that does not exist should return ContactError.UNKNOWN_ERROR", function() { + var win = jasmine.createSpy(); + var fail = jasmine.createSpy().andCallFake(function(result) { + expect(result.code).toBe(ContactError.UNKNOWN_ERROR); + }); + + runs(function () { + var rmContact = new Contact(); + // this is a bit risky as some devices may have contact ids that large + var contact = new Contact("this string is supposed to be a unique identifier that will never show up on a device"); + contact.remove(win, fail); + }); + + waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT); + + runs(function () { + expect(win).not.toHaveBeenCalled(); + }); + }); + }); + + describe("Round trip Contact tests (creating + save + delete + find).", function () { + afterEach(removeContact); + + it("Creating, saving, finding a contact should work, removing it should work, after which we should not be able to find it, and we should not be able to delete it again.", function() { + var done = false; + runs(function () { + gContactObj = new Contact(); + gContactObj.name = new ContactName(); + gContactObj.name.familyName = "DeleteMe"; + gContactObj.save(function(c_obj) { + var findWin = function(cs) { + expect(cs.length).toBe(1); + // update to have proper saved id + gContactObj = cs[0]; + gContactObj.remove(function() { + var findWinAgain = function(seas) { + expect(seas.length).toBe(0); + gContactObj.remove(function() { + throw("success callback called after non-existent Contact object called remove(). Test failed."); + }, function(e) { + expect(e.code).toBe(ContactError.UNKNOWN_ERROR); + done = true; + }); + }; + var findFailAgain = function(e) { + throw("find error callback invoked after delete, test failed."); + }; + var obj = new ContactFindOptions(); + obj.filter="DeleteMe"; + obj.multiple=true; + navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWinAgain, findFailAgain, obj); + }, function(e) { + throw("Newly created contact's remove function invoked error callback. Test failed."); + }); + }; + var findFail = function(e) { + throw("Failure callback invoked in navigator.contacts.find call, test failed."); + }; + var obj = new ContactFindOptions(); + obj.filter="DeleteMe"; + obj.multiple=true; + navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWin, findFail, obj); + }, function(e) { + throw("Contact creation failed, error callback was invoked."); + }); + }); + + waitsFor(function () { return done; }, Tests.TEST_TIMEOUT); + }); + }); + + describe('ContactError interface', function () { + it("ContactError constants should be defined", function() { + expect(ContactError.UNKNOWN_ERROR).toBe(0); + expect(ContactError.INVALID_ARGUMENT_ERROR).toBe(1); + expect(ContactError.TIMEOUT_ERROR).toBe(2); + expect(ContactError.PENDING_OPERATION_ERROR).toBe(3); + expect(ContactError.IO_ERROR).toBe(4); + expect(ContactError.NOT_SUPPORTED_ERROR).toBe(5); + expect(ContactError.PERMISSION_DENIED_ERROR).toBe(20); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/9e7e8549/windows8/MetroTestApp/autotest/tests/device.tests.js ---------------------------------------------------------------------- diff --git a/windows8/MetroTestApp/autotest/tests/device.tests.js b/windows8/MetroTestApp/autotest/tests/device.tests.js new file mode 100644 index 0000000..cc322d6 --- /dev/null +++ b/windows8/MetroTestApp/autotest/tests/device.tests.js @@ -0,0 +1,34 @@ +describe('Device Information (window.device)', function () { + it("should exist", function() { + expect(window.device).toBeDefined(); + }); + + it("should contain a platform specification that is a string", function() { + expect(window.device.platform).toBeDefined(); + expect((new String(window.device.platform)).length > 0).toBe(true); + }); + + it("should contain a version specification that is a string", function() { + expect(window.device.version).toBeDefined(); + expect((new String(window.device.version)).length > 0).toBe(true); + }); + + it("should contain a name specification that is a string", function() { + expect(window.device.name).toBeDefined(); + expect((new String(window.device.name)).length > 0).toBe(true); + }); + + it("should contain a UUID specification that is a string or a number", function() { + expect(window.device.uuid).toBeDefined(); + if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') { + expect((new String(window.device.uuid)).length > 0).toBe(true); + } else { + expect(window.device.uuid > 0).toBe(true); + } + }); + + it("should contain a cordova specification that is a string", function() { + expect(window.device.cordova).toBeDefined(); + expect((new String(window.device.cordova)).length > 0).toBe(true); + }); +});