Updated Branches: refs/heads/master 46f5670be -> fe58a0074
http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/e38a0960/test/autotest/tests/globalization.tests.js ---------------------------------------------------------------------- diff --git a/test/autotest/tests/globalization.tests.js b/test/autotest/tests/globalization.tests.js new file mode 100644 index 0000000..01596ae --- /dev/null +++ b/test/autotest/tests/globalization.tests.js @@ -0,0 +1,826 @@ +/* + * 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('Globalization (navigator.globalization)', function () { + it("globalization.spec.1 should exist", function() { + expect(navigator.globalization).toBeDefined(); + }); + + describe("getLocaleName", function() { + it("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getLocaleName).toBeDefined(); + expect(typeof navigator.globalization.getLocaleName == 'function').toBe(true); + }); + it("globalization.spec.3 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.dateToString).toBeDefined(); + expect(typeof navigator.globalization.dateToString == 'function').toBe(true); + }); + it("globalization.spec.5 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("globalization.spec.6 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("globalization.spec.7 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("globalization.spec.8 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("globalization.spec.9 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("globalization.spec.10 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.stringToDate).toBeDefined(); + expect(typeof navigator.globalization.stringToDate == 'function').toBe(true); + }); + it("globalization.spec.12 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("globalization.spec.13 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("globalization.spec.14 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("globalization.spec.15 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getDatePattern).toBeDefined(); + expect(typeof navigator.globalization.getDatePattern == 'function').toBe(true); + }); + it("globalization.spec.17 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("globalization.spec.18 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getDateNames).toBeDefined(); + expect(typeof navigator.globalization.getDateNames == 'function').toBe(true); + }); + it("globalization.spec.20 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("globalization.spec.21 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("globalization.spec.22 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("globalization.spec.23 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("globalization.spec.24 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.isDayLightSavingsTime).toBeDefined(); + expect(typeof navigator.globalization.isDayLightSavingsTime == 'function').toBe(true); + }); + it("globalization.spec.26 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getFirstDayOfWeek).toBeDefined(); + expect(typeof navigator.globalization.getFirstDayOfWeek == 'function').toBe(true); + }); + it("globalization.spec.28 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.numberToString).toBeDefined(); + expect(typeof navigator.globalization.numberToString == 'function').toBe(true); + }); + it("globalization.spec.30 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("globalization.spec.31 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("globalization.spec.32 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.stringToNumber).toBeDefined(); + expect(typeof navigator.globalization.stringToNumber == 'function').toBe(true); + }); + it("globalization.spec.34 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("globalization.spec.35 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getNumberPattern).toBeDefined(); + expect(typeof navigator.globalization.getNumberPattern == 'function').toBe(true); + }); + it("globalization.spec.37 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("globalization.spec.38 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("globalization.spec.39 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("globalization.spec.1 should exist", function() { + expect(typeof navigator.globalization.getCurrencyPattern).toBeDefined(); + expect(typeof navigator.globalization.getCurrencyPattern == 'function').toBe(true); + }); + it("globalization.spec.41 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(); + }); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/e38a0960/test/cordova-incl.js ---------------------------------------------------------------------- diff --git a/test/cordova-incl.js b/test/cordova-incl.js new file mode 100644 index 0000000..a82c590 --- /dev/null +++ b/test/cordova-incl.js @@ -0,0 +1,85 @@ +/* + * + * 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. + * +*/ + +var PLAT; +(function getPlatform() { + var platforms = { + android: /Android/, + ios: /(iPad)|(iPhone)|(iPod)/, + blackberry10: /(BB10)/, + blackberry: /(PlayBook)|(BlackBerry)/, + windows8: /MSAppHost/, + windowsphone: /Windows Phone/ + }; + for (var key in platforms) { + if (platforms[key].exec(navigator.userAgent)) { + PLAT = key; + break; + } + } +})(); + +var scripts = document.getElementsByTagName('script'); +var currentPath = scripts[scripts.length - 1].src; +var platformCordovaPath = currentPath.replace("cordova-incl.js", "cordova." + PLAT + ".js"); +var normalCordovaPath = currentPath.replace("cordova-incl.js", "cordova.js"); +var cordovaPath = normalCordovaPath; + +if (PLAT) { + // XHR to local file is an error on some platforms, windowsphone for one + try { + var xhr = new XMLHttpRequest(); + xhr.open("GET", platformCordovaPath, false); + xhr.onreadystatechange = function() { + + if (this.readyState == this.DONE && this.responseText.length > 0) { + if(parseInt(this.status) >= 400){ + cordovaPath = normalCordovaPath; + }else{ + cordovaPath = platformCordovaPath; + } + } + }; + xhr.send(null); + } + catch(e){ + cordovaPath = normalCordovaPath; + } // access denied! +} + +if (!window._doNotWriteCordovaScript) { + if (PLAT != "windows8") { + document.write('<script type="text/javascript" charset="utf-8" src="' + cordovaPath + '"></script>'); + } else { + var s = document.createElement('script'); + s.src = cordovaPath; + document.head.appendChild(s); + } +} + +function backHome() { + if (window.device && device.platform && device.platform.toLowerCase() == 'android') { + navigator.app.backHistory(); + } + else { + window.history.go(-1); + } +} http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/e38a0960/test/index.html ---------------------------------------------------------------------- diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..727c504 --- /dev/null +++ b/test/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<!-- + + 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. + +--> + + +<html> + <head> + <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0" /> + <meta http-equiv="Content-type" content="text/html; charset=utf-8"> + <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-incl.js"></script> + <script type="text/javascript" charset="utf-8" src="main.js"></script> + + </head> + <body onload="init();" id="stage" class="theme"> + <h1>Apache Cordova Tests</h1> + <div id="info"> + <h4>Platform: <span id="platform"> </span></h4> + <h4>Version: <span id="version"> </span></h4> + <h4>UUID: <span id="uuid"> </span></h4> + <h4>Model: <span id="model"> </span></h4> + <h4>Width: <span id="width"> </span>, Height: <span id="height"> + </span>, Color Depth: <span id="colorDepth"></span></h4> + <h4>User-Agent: <span id="user-agent"> </span></h4> + </div> + <a href="autotest/index.html" class="btn large">Automatic Test</a> + <a href="accelerometer/index.html" class="btn large">Accelerometer</a> + <a href="audio/index.html" class="btn large">Audio Play/Record</a> + <a href="battery/index.html" class="btn large">Battery</a> + <a href="camera/index.html" class="btn large">Camera</a> + <a href="compass/index.html" class="btn large">Compass</a> + <a href="contacts/index.html" class="btn large">Contacts</a> + <a href="events/index.html" class="btn large">Events</a> + <a href="location/index.html" class="btn large">Location</a> + <a href="lazyloadjs/index.html" class="btn large">Lazy Loading of cordova-incl.js</a> + <a href="misc/index.html" class="btn large">Misc Content</a> + <a href="network/index.html" class="btn large">Network</a> + <a href="notification/index.html" class="btn large">Notification</a> + <a href="splashscreen/index.html" class="btn large">Splashscreen</a> + <a href="sql/index.html" class="btn large">Web SQL</a> + <a href="storage/index.html" class="btn large">Local Storage</a> + <a href="benchmarks/index.html" class="btn large">Benchmarks</a> + <a href="inappbrowser/index.html" class="btn large">In App Browser</a> + </body> +</html> http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/e38a0960/test/main.js ---------------------------------------------------------------------- diff --git a/test/main.js b/test/main.js new file mode 100644 index 0000000..5f071c4 --- /dev/null +++ b/test/main.js @@ -0,0 +1,162 @@ +/* + * + * 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. + * +*/ + +var deviceInfo = function() { + document.getElementById("platform").innerHTML = device.platform; + document.getElementById("version").innerHTML = device.version; + document.getElementById("uuid").innerHTML = device.uuid; + document.getElementById("model").innerHTML = device.model; + document.getElementById("width").innerHTML = screen.width; + document.getElementById("height").innerHTML = screen.height; + document.getElementById("colorDepth").innerHTML = screen.colorDepth; +}; + +var getLocation = function() { + var suc = function(p) { + alert(p.coords.latitude + " " + p.coords.longitude); + }; + var locFail = function() { + }; + navigator.geolocation.getCurrentPosition(suc, locFail); +}; + +var beep = function() { + navigator.notification.beep(2); +}; + +var vibrate = function() { + navigator.notification.vibrate(0); +}; + +function roundNumber(num) { + var dec = 3; + var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); + return result; +} + +var accelerationWatch = null; + +function updateAcceleration(a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); +} + +var toggleAccel = function() { + if (accelerationWatch !== null) { + navigator.accelerometer.clearWatch(accelerationWatch); + updateAcceleration({ + x : "", + y : "", + z : "" + }); + accelerationWatch = null; + } else { + var options = {}; + options.frequency = 1000; + accelerationWatch = navigator.accelerometer.watchAcceleration( + updateAcceleration, function(ex) { + alert("accel fail (" + ex.name + ": " + ex.message + ")"); + }, options); + } +}; + +var preventBehavior = function(e) { + e.preventDefault(); +}; + +function dump_pic(data) { + var viewport = document.getElementById('viewport'); + console.log(data); + viewport.style.display = ""; + viewport.style.position = "absolute"; + viewport.style.top = "10px"; + viewport.style.left = "10px"; + document.getElementById("test_img").src = "data:image/jpeg;base64," + data; +} + +function fail(msg) { + alert(msg); +} + +function show_pic() { + navigator.camera.getPicture(dump_pic, fail, { + quality : 50 + }); +} + +function close() { + var viewport = document.getElementById('viewport'); + viewport.style.position = "relative"; + viewport.style.display = "none"; +} + +// This is just to do this. +function readFile() { + navigator.file.read('/sdcard/cordova.txt', fail, fail); +} + +function writeFile() { + navigator.file.write('foo.txt', "This is a test of writing to a file", + fail, fail); +} + +function contacts_success(contacts) { + alert(contacts.length + + ' contacts returned.' + + (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted) + : '')); +} + +function get_contacts() { + var obj = new ContactFindOptions(); + obj.filter = ""; + obj.multiple = true; + obj.limit = 5; + navigator.service.contacts.find( + [ "displayName", "name" ], contacts_success, + fail, obj); +} + +var networkReachableCallback = function(reachability) { + // There is no consistency on the format of reachability + var networkState = reachability.code || reachability; + + var currentState = {}; + currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection'; + currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection'; + currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection'; + + confirm("Connection type:\n" + currentState[networkState]); +}; + +function check_network() { + navigator.network.isReachable("www.mobiledevelopersolutions.com", + networkReachableCallback, {}); +} + +function init() { + // the next line makes it impossible to see Contacts on the HTC Evo since it + // doesn't have a scroll button + // document.addEventListener("touchmove", preventBehavior, false); + document.addEventListener("deviceready", deviceInfo, true); + document.getElementById("user-agent").textContent = navigator.userAgent; +} http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/e38a0960/test/master.css ---------------------------------------------------------------------- diff --git a/test/master.css b/test/master.css new file mode 100644 index 0000000..e93c937 --- /dev/null +++ b/test/master.css @@ -0,0 +1,164 @@ +/* + * + * 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. + * +*/ + + body { + background:#222 none repeat scroll 0 0; + color:#666; + font-family:Helvetica; + font-size:72%; + line-height:1.5em; + margin:0; + border-top:1px solid #393939; + } + + #info{ + background:#ffa; + border: 1px solid #ffd324; + -webkit-border-radius: 5px; + border-radius: 5px; + clear:both; + margin:15px 6px 0; + min-width:295px; + max-width:97%; + padding:4px 0px 2px 10px; + word-wrap:break-word; + margin-bottom:10px; + display:inline-block; + min-height: 160px; + max-height: 300px; + overflow: auto; + -webkit-overflow-scrolling: touch; + } + + #info > h4{ + font-size:.95em; + margin:5px 0; + } + + #stage.theme{ + padding-top:3px; + } + + /* Definition List */ + #stage.theme > dl{ + padding-top:10px; + clear:both; + margin:0; + list-style-type:none; + padding-left:10px; + overflow:auto; + } + + #stage.theme > dl > dt{ + font-weight:bold; + float:left; + margin-left:5px; + } + + #stage.theme > dl > dd{ + width:45px; + float:left; + color:#a87; + font-weight:bold; + } + + /* Content Styling */ + #stage.theme > h1, #stage.theme > h2, #stage.theme > p{ + margin:1em 0 .5em 13px; + } + + #stage.theme > h1{ + color:#eee; + font-size:1.6em; + text-align:center; + margin:0; + margin-top:15px; + padding:0; + } + + #stage.theme > h2{ + clear:both; + margin:0; + padding:3px; + font-size:1em; + text-align:center; + } + + /* Stage Buttons */ + #stage.theme .btn{ + border: 1px solid #555; + -webkit-border-radius: 5px; + border-radius: 5px; + text-align:center; + display:inline-block; + background:#444; + width:150px; + color:#9ab; + font-size:1.1em; + text-decoration:none; + padding:1.2em 0; + margin:3px 0px 3px 5px; + } + + #stage.theme .large{ + width:308px; + padding:1.2em 0; + } + + #stage.theme .wide{ + width:100%; + padding:1.2em 0; + } + + #stage.theme .backBtn{ + border: 1px solid #555; + -webkit-border-radius: 5px; + border-radius: 5px; + text-align:center; + display:block; + float:right; + background:#666; + width:75px; + color:#9ab; + font-size:1.1em; + text-decoration:none; + padding:1.2em 0; + margin:3px 5px 3px 5px; + } + + #stage.theme .input{ + border: 1px solid #555; + -webkit-border-radius: 5px; + border-radius: 5px; + text-align:center; + display:block; + float:light; + background:#888; + color:#9cd; + font-size:1.1em; + text-decoration:none; + padding:1.2em 0; + margin:3px 0px 3px 5px; + } + + #stage.theme .numeric{ + width:100%; + }
