UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

224 lines (178 loc) 5.59 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) ************************************************************************ */ qx.Class.define("qx.test.util.NumberFormat", { extend: qx.dev.unit.TestCase, members: { __nf: null, __oldLocale: null, setUp() { this.assertNotUndefined(qx.util.format.NumberFormat); this.__oldLocale = qx.locale.Manager.getInstance().getLocale(); qx.locale.Manager.getInstance().setLocale("de_DE"); this.__nf = new qx.util.format.NumberFormat(); }, tearDown() { this.__nf.dispose(); qx.locale.Manager.getInstance().setLocale(this.__oldLocale); }, testNumberFormatConstructor() { var wrongArgs = [null, undefined, NaN, Infinity, 1, {}, [], true], correctArgs = ["de_DE"], nf, i, len; try { nf = new qx.util.format.NumberFormat(); } catch (e) { this.fail("Failed on an empty arguments list"); } try { nf.dispose(); } catch (e) {} try { nf = new qx.util.format.NumberFormat("de_DE", true); this.fail("Did not fail on wrong arguments number"); } catch (e) {} try { nf.dispose(); } catch (e) {} for (i = 0, len = wrongArgs.length; i < len; i += 1) { try { nf = new qx.util.format.NumberFormat(wrongArgs[i]); this.fail("A wrong argument did not raise an error: " + wrongArgs[i]); } catch (e) {} try { nf.dispose(); } catch (e) {} } for (i = 0, len = correctArgs.length; i < len; i += 1) { try { nf = new qx.util.format.NumberFormat(correctArgs[i]); } catch (e) { this.fail("A correct argument did raise an error: " + correctArgs[i]); } try { nf.dispose(); } catch (e) {} } }, testNumberFormat() { var nf = this.__nf; // this failed due to a rounding error this.assertEquals("1.000.000", nf.format(1000000)); this.assertEquals("-1.000.000", nf.format(-1000000)); this.assertEquals("-1.000.000", nf.format(-1000000)); this.assertEquals("0", nf.format(0)); this.assertEquals("0", nf.format(-0)); this.assertEquals("12,12", nf.format(12.12)); var ninfinity = -1 / 0; this.assertEquals("-Infinity", nf.format(ninfinity)); var infinity = 1 / 0; this.assertEquals("Infinity", nf.format(infinity)); var nan = Math.sqrt(-1); this.assertEquals("NaN", nf.format(nan)); }, testNumberParse() { var nf = this.__nf; var goodNumbers = { 1000: 1000, "-0,02": -0.02, "0,02": 0.02, ",02": 0.02, "-,02": -0.02, "+,02": 0.02, "-1.111.111,2": -1111111.2, "-1.000.000": -1000000, "+1.000,12": 1000.12 }; for (var number in goodNumbers) { this.assertEquals(nf.parse(number), goodNumbers[number]); } var badNumberStrings = [ "2hastalavista", "2.3.4.5.6", "12.10,10", "10,1,12" ]; var badNumberStr; for (var i = 0; i < badNumberStrings.length; i++) { badNumberStr = badNumberStrings[i]; this.assertException( function () { nf.format(nf.parse(badNumberStr)); }, Error, "does not match the number format", "testing if parsing fails on string '" + badNumberStr + "'" ); } }, testLocaleSwitch() { var nf = this.__nf; nf.setMinimumFractionDigits(0); nf.setMaximumFractionDigits(2); var numberStr = "0.5"; this.assertException( function () { nf.parse(numberStr); }, Error, "does not match the number format", "testing if parsing fails on string '" + numberStr + "'" ); qx.locale.Manager.getInstance().setLocale("en_US"); this.assertEquals( 0.5, nf.parse("0.5"), "parsing failed after locale change" ); }, testNumberFormatChange() { var nf = this.__nf; nf.setPostfix(" %"); var numberStr = "5 Percent"; this.assertException( function () { nf.parse(numberStr); }, Error, "does not match the number format", "testing if parsing fails on string '" + numberStr + "'" ); nf.setPostfix(" Percent"); this.assertEquals( 5, nf.parse(numberStr), "parsing failed after number format change" ); }, testParseWithPrefixOrPostfix() { var spinner = new qx.ui.form.Spinner(); var prefix = "$ "; var postfix = " €"; var numberFormat = new qx.util.format.NumberFormat("de").set({ maximumFractionDigits: 2, minimumFractionDigits: 2, prefix: prefix, postfix: postfix }); spinner.setNumberFormat(numberFormat); spinner.getChildControl("textfield").setValue("$ 1,23 €"); this.assertEquals( prefix + "1,23" + postfix, spinner.getChildControl("textfield").getValue() ); spinner.destroy(); numberFormat.dispose(); } } });