UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

986 lines (822 loc) 31 kB
<!DOCTYPE html> <html> <!-- Copyright 2006 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.i18n.NumberFormat</title> <meta charset="utf-8"/> <script src="../base.js"></script> <script> goog.require('goog.i18n.NumberFormat'); goog.require('goog.i18n.NumberFormatSymbols'); goog.require('goog.i18n.NumberFormatSymbols_fr'); goog.require('goog.i18n.CompactNumberFormatSymbols'); goog.require('goog.i18n.CompactNumberFormatSymbols_fr'); goog.require('goog.i18n.CompactNumberFormatSymbols_de'); goog.require('goog.testing.ExpectedFailures'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.PropertyReplacer'); goog.require('goog.userAgent'); goog.require('goog.userAgent.product'); goog.require('goog.userAgent.product.isVersion'); </script> </head> <body> <script> var expectedFailures = new goog.testing.ExpectedFailures(); var stubs = new goog.testing.PropertyReplacer(); function setUp() { // Always switch back to English on startup. goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en; goog.i18n.CompactNumberFormatSymbols = goog.i18n.CompactNumberFormatSymbols_en; } function tearDown() { expectedFailures.handleTearDown(); stubs.reset(); } function veryBigNumberCompare(str1, str2) { return str1.length == str2.length && str1.substring(0, 8) == str2.substring(0, 8); } function testVeryBigNumber() { var str; var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.CURRENCY); str = fmt.format(1785599999999999888888888888888); // when comparing big number, various platform have small different in // precision. We have to tolerate that using veryBigNumberCompare. var expected = '$1,785,599,999,999,999,400,000,000,000,000.00'; assertTrue(veryBigNumberCompare( '$1,785,599,999,999,999,400,000,000,000,000.00', str)); str = fmt.format(1.7856E30); assertTrue(veryBigNumberCompare( '$1,785,599,999,999,999,400,000,000,000,000.00', str)); str = fmt.format(1.3456E20); assertTrue(veryBigNumberCompare('$134,560,000,000,000,000,000.00', str)); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); str = fmt.format(1.3456E20); assertTrue(veryBigNumberCompare('134,559,999,999,999,980,000', str)); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.PERCENT); str = fmt.format(1.3456E20); assertTrue(veryBigNumberCompare('13,456,000,000,000,000,000,000%', str)); fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.SCIENTIFIC); str = fmt.format(1.3456E20); assertEquals('1E20', str); fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.DECIMAL); str = fmt.format(-1.234567890123456e306); assertEquals(1 + 1 + 306 + 306 / 3, str.length); assertEquals('-1,234,567,890,123,45', str.substr(0, 21)); str = fmt.format(Infinity); assertEquals('\u221e', str); str = fmt.format(-Infinity); assertEquals('-\u221e', str); } function testStandardFormat() { var str; var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.CURRENCY); str = fmt.format(1234.579); assertEquals('$1,234.58', str); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); str = fmt.format(1234.579); assertEquals('1,234.579', str); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.PERCENT); str = fmt.format(1234.579); assertEquals('123,458%', str); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.SCIENTIFIC); str = fmt.format(1234.579); assertEquals('1E3', str); // Math.log(1000000)/Math.LN10 is strictly less than 6. Make sure it gets // formatted correctly. str = fmt.format(1000000); assertEquals('1E6', str); } function testNegativePercentage() { var str; var fmt = new goog.i18n.NumberFormat('#,##0.00%'); str = fmt.format(-1234.56); assertEquals('-123,456.00%', str); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.PERCENT); str = fmt.format(-1234.579); assertEquals('-123,458%', str); } function testCustomPercentage() { var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.PERCENT); fmt.setMaximumFractionDigits(1); fmt.setMinimumFractionDigits(1); var str = fmt.format(0.1291); assertEquals('12.9%', str); fmt.setMaximumFractionDigits(2); fmt.setMinimumFractionDigits(1); str = fmt.format(0.129); assertEquals('12.9%', str); fmt.setMaximumFractionDigits(2); fmt.setMinimumFractionDigits(1); str = fmt.format(0.12); assertEquals('12.0%', str); fmt.setMaximumFractionDigits(2); fmt.setMinimumFractionDigits(1); str = fmt.format(0.12911); assertEquals('12.91%', str); } function testBasicParse() { var value; var fmt = new goog.i18n.NumberFormat('0.0000'); value = fmt.parse('123.4579'); assertEquals(123.4579, value); value = fmt.parse('+123.4579'); assertEquals(123.4579, value); value = fmt.parse('-123.4579'); assertEquals(-123.4579, value); } function testPrefixParse() { var value; var fmt = new goog.i18n.NumberFormat('0.0;(0.0)'); value = fmt.parse('123.4579'); assertEquals(123.4579, value); value = fmt.parse('(123.4579)'); assertEquals(-123.4579, value); } function testPrecentParse() { var value; var fmt = new goog.i18n.NumberFormat('0.0;(0.0)'); value = fmt.parse('123.4579%'); assertEquals((123.4579/100), value); value = fmt.parse('(%123.4579)'); assertEquals((-123.4579/100), value); value = fmt.parse('123.4579\u2030'); assertEquals((123.4579/1000), value); value = fmt.parse('(\u2030123.4579)'); assertEquals((-123.4579/1000), value); } function testPercentAndPerMillAdvance() { var value; var pos = [0]; var fmt = new goog.i18n.NumberFormat('0'); value = fmt.parse('120%', pos); assertEquals(1.2, value); assertEquals(4, pos[0]); pos[0] = 0; value = fmt.parse('120\u2030', pos); assertEquals(0.12, value); assertEquals(4, pos[0]); } function testInfinityParse() { var value; var fmt = new goog.i18n.NumberFormat('0.0;(0.0)'); // gwt need to add those symbols first value = fmt.parse('\u221e'); assertEquals(Number.POSITIVE_INFINITY, value); value = fmt.parse('(\u221e)'); assertEquals(Number.NEGATIVE_INFINITY, value); } function testExponentParse() { var value; var fmt; fmt = new goog.i18n.NumberFormat('#E0'); value = fmt.parse('1.234E3'); assertEquals(1.234E+3, value); fmt = new goog.i18n.NumberFormat('0.###E0'); value = fmt.parse('1.234E3'); assertEquals(1.234E+3, value); fmt = new goog.i18n.NumberFormat('#E0'); value = fmt.parse('1.2345E4'); assertEquals(12345.0, value); value = fmt.parse('1.2345E4'); assertEquals(12345.0, value); value = fmt.parse('1.2345E+4'); assertEquals(12345.0, value); } function testGroupingParse() { var value; var fmt = new goog.i18n.NumberFormat('#,###'); value = fmt.parse('1,234,567,890'); assertEquals(1234567890, value); value = fmt.parse('12,3456,7890'); assertEquals(1234567890, value); fmt = new goog.i18n.NumberFormat('#'); value = fmt.parse('1234567890'); assertEquals(1234567890, value); } function testBasicFormat() { var fmt = new goog.i18n.NumberFormat('0.0000'); var str = fmt.format(123.45789179565757); assertEquals('123.4579', str); } function testGrouping() { var str; var fmt = new goog.i18n.NumberFormat('#,###'); str = fmt.format(1234567890); assertEquals('1,234,567,890', str); fmt = new goog.i18n.NumberFormat('#,####'); str = fmt.format(1234567890); assertEquals('12,3456,7890', str); fmt = new goog.i18n.NumberFormat('#'); str = fmt.format(1234567890); assertEquals('1234567890', str); } function testPerMill() { var str; var fmt = new goog.i18n.NumberFormat('###.###\u2030'); str = fmt.format(0.4857); assertEquals('485.7\u2030', str); } function testCurrency() { var str; var fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00'); str = fmt.format(1234.56); assertEquals('$1,234.56', str); str = fmt.format(-1234.56); assertEquals('-$1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'USD', goog.i18n.NumberFormat.CurrencyStyle.LOCAL); str = fmt.format(1234.56); assertEquals('$1,234.56', str); str = fmt.format(-1234.56); assertEquals('-$1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'USD', goog.i18n.NumberFormat.CurrencyStyle.PORTABLE); str = fmt.format(1234.56); assertEquals('US$1,234.56', str); str = fmt.format(-1234.56); assertEquals('-US$1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'USD', goog.i18n.NumberFormat.CurrencyStyle.GLOBAL); str = fmt.format(1234.56); assertEquals('USD $1,234.56', str); str = fmt.format(-1234.56); assertEquals('-USD $1,234.56', str); fmt = new goog.i18n.NumberFormat( '\u00a4\u00a4 #,##0.00;-\u00a4\u00a4 #,##0.00'); str = fmt.format(1234.56); assertEquals('USD 1,234.56', str); fmt = new goog.i18n.NumberFormat( '\u00a4\u00a4 #,##0.00;\u00a4\u00a4 -#,##0.00'); str = fmt.format(-1234.56); assertEquals('USD -1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'BRL'); str = fmt.format(1234.56); assertEquals('R$1,234.56', str); str = fmt.format(-1234.56); assertEquals('-R$1,234.56', str); fmt = new goog.i18n.NumberFormat( '\u00a4\u00a4 #,##0.00;(\u00a4\u00a4 #,##0.00)', 'BRL'); str = fmt.format(1234.56); assertEquals('BRL 1,234.56', str); str = fmt.format(-1234.56); assertEquals('(BRL 1,234.56)', str); } function testQuotes() { var str; var fmt = new goog.i18n.NumberFormat('a\'fo\'\'o\'b#'); str = fmt.format(123); assertEquals('afo\'ob123', str); fmt = new goog.i18n.NumberFormat('a\'\'b#'); str = fmt.format(123); assertEquals('a\'b123', str); fmt = new goog.i18n.NumberFormat('a\'fo\'\'o\'b#'); str = fmt.format(-123); assertEquals('afo\'ob-123', str); fmt = new goog.i18n.NumberFormat('a\'\'b#'); str = fmt.format(-123); assertEquals('a\'b-123', str); } function testZeros() { var str; var fmt; fmt = new goog.i18n.NumberFormat('#.#'); str = fmt.format(0); assertEquals('0', str); fmt = new goog.i18n.NumberFormat('#.'); str = fmt.format(0); assertEquals('0.', str); fmt = new goog.i18n.NumberFormat('.#'); str = fmt.format(0); assertEquals('.0', str); fmt = new goog.i18n.NumberFormat('#'); str = fmt.format(0); assertEquals('0', str); fmt = new goog.i18n.NumberFormat('#0.#'); str = fmt.format(0); assertEquals('0', str); fmt = new goog.i18n.NumberFormat('#0.'); str = fmt.format(0); assertEquals('0.', str); fmt = new goog.i18n.NumberFormat('#.0'); str = fmt.format(0); assertEquals('.0', str); fmt = new goog.i18n.NumberFormat('#'); str = fmt.format(0); assertEquals('0', str); fmt = new goog.i18n.NumberFormat('000'); str = fmt.format(0); assertEquals('000', str); } function testExponential() { var str; var fmt; fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(0.01234); assertEquals('1.234E-2', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(0.01234); assertEquals('12.340E-03', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(0.01234); assertEquals('12.34E-003', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(0.01234); assertEquals('1.234E-2', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(123456789); assertEquals('1.2346E8', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(123456789); assertEquals('12.346E07', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(123456789); assertEquals('123.456789E006', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(123456789); assertEquals('1.235E8', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(1.23e300); assertEquals('1.23E300', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(1.23e300); assertEquals('12.300E299', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(1.23e300); assertEquals('1.23E300', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(1.23e300); assertEquals('1.23E300', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(-3.141592653e-271); assertEquals('-3.1416E-271', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(-3.141592653e-271); assertEquals('-31.416E-272', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(-3.141592653e-271); assertEquals('-314.159265E-273', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(-3.141592653e-271); assertEquals('[3.142E-271]', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(0); assertEquals('0E0', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(0); assertEquals('00.000E00', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(0); assertEquals('0E000', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(0); assertEquals('0E0', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(-1); assertEquals('-1E0', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(-1); assertEquals('-10.000E-01', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(-1); assertEquals('-1E000', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(-1); assertEquals('[1E0]', str); fmt = new goog.i18n.NumberFormat('0.####E0'); str = fmt.format(1); assertEquals('1E0', str); fmt = new goog.i18n.NumberFormat('00.000E00'); str = fmt.format(1); assertEquals('10.000E-01', str); fmt = new goog.i18n.NumberFormat('##0.######E000'); str = fmt.format(1); assertEquals('1E000', str); fmt = new goog.i18n.NumberFormat('0.###E0;[0.###E0]'); str = fmt.format(1); assertEquals('1E0', str); fmt = new goog.i18n.NumberFormat('#E0'); str = fmt.format(12345.0); assertEquals('1E4', str); fmt = new goog.i18n.NumberFormat('0E0'); str = fmt.format(12345.0); assertEquals('1E4', str); fmt = new goog.i18n.NumberFormat('##0.###E0'); str = fmt.format(12345.0); assertEquals('12.345E3', str); fmt = new goog.i18n.NumberFormat('##0.###E0'); str = fmt.format(12345.00001); assertEquals('12.345E3', str); fmt = new goog.i18n.NumberFormat('##0.###E0'); str = fmt.format(12345); assertEquals('12.345E3', str); fmt = new goog.i18n.NumberFormat('##0.####E0'); str = fmt.format(789.12345e-9); // Firefox 3.6.3 Linux is known to fail here with a rounding error. // fmt.format will return '789.1234E-9'. expectedFailures.expectFailureFor(isFirefox363Linux()); try { assertEquals('789.1235E-9', str); } catch (e) { expectedFailures.handleException(e); } fmt = new goog.i18n.NumberFormat('##0.####E0'); str = fmt.format(780.e-9); assertEquals('780E-9', str); fmt = new goog.i18n.NumberFormat('.###E0'); str = fmt.format(45678.0); assertEquals('.457E5', str); fmt = new goog.i18n.NumberFormat('.###E0'); str = fmt.format(0); assertEquals('.0E0', str); fmt = new goog.i18n.NumberFormat('#E0'); str = fmt.format(45678000); assertEquals('5E7', str); fmt = new goog.i18n.NumberFormat('##E0'); str = fmt.format(45678000); assertEquals('46E6', str); fmt = new goog.i18n.NumberFormat('####E0'); str = fmt.format(45678000); assertEquals('4568E4', str); fmt = new goog.i18n.NumberFormat('0E0'); str = fmt.format(45678000); assertEquals('5E7', str); fmt = new goog.i18n.NumberFormat('00E0'); str = fmt.format(45678000); assertEquals('46E6', str); fmt = new goog.i18n.NumberFormat('000E0'); str = fmt.format(45678000); assertEquals('457E5', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(0.0000123); assertEquals('12E-6', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(0.000123); assertEquals('123E-6', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(0.00123); assertEquals('1E-3', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(0.0123); assertEquals('12E-3', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(0.123); assertEquals('123E-3', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(1.23); assertEquals('1E0', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(12.3); assertEquals('12E0', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(123.0); assertEquals('123E0', str); fmt = new goog.i18n.NumberFormat('###E0'); str = fmt.format(1230.0); assertEquals('1E3', str); } function testPlusSignInExponentPart() { var fmt; fmt = new goog.i18n.NumberFormat('0E+0'); str = fmt.format(45678000); assertEquals('5E+7', str); } function testGroupingParse2() { var value; var fmt; fmt = new goog.i18n.NumberFormat('#,###'); value = fmt.parse('1,234,567,890'); assertEquals(1234567890, value); fmt = new goog.i18n.NumberFormat('#,###'); value = fmt.parse('12,3456,7890'); assertEquals(1234567890, value); fmt = new goog.i18n.NumberFormat('#'); value = fmt.parse('1234567890'); assertEquals(1234567890, value); } function testApis() { var fmt; var str; fmt = new goog.i18n.NumberFormat('#,###'); str = fmt.format(1234567890); assertEquals('1,234,567,890', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00'); str = fmt.format(1234.56); assertEquals('$1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;(\u00a4#,##0.00)'); str = fmt.format(-1234.56); assertEquals('($1,234.56)', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'SEK'); str = fmt.format(1234.56); assertEquals('kr1,234.56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;(\u00a4#,##0.00)', 'SEK'); str = fmt.format(-1234.56); assertEquals('(kr1,234.56)', str); } function testLocaleSwitch() { goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr; // When this test is performed in test cluster, 2 out of 60 machines have // problem getting the symbol. It is likely to be caused by size of uncompiled // symbol file. There will not be an issue after it is compiled. if (goog.i18n.NumberFormatSymbols.DECIMAL_SEP == goog.i18n.NumberFormatSymbols_en.DECIMAL_SEP) { // fails to load French symbols, skip the test. return; } var fmt = new goog.i18n.NumberFormat('#,###'); var str = fmt.format(1234567890); assertEquals('1\u00a0234\u00a0567\u00a0890', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00'); str = fmt.format(1234.56); assertEquals('\u20AC1\u00a0234,56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;(\u00a4#,##0.00)'); str = fmt.format(-1234.56); assertEquals('(\u20AC1\u00a0234,56)', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;-\u00a4#,##0.00', 'SEK'); str = fmt.format(1234.56); assertEquals('kr1\u00a0234,56', str); fmt = new goog.i18n.NumberFormat('\u00a4#,##0.00;(\u00a4#,##0.00)', 'SEK'); str = fmt.format(-1234.56); assertEquals('(kr1\u00a0234,56)', str); } function testFrenchParse() { goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr; // When this test is performed in test cluster, 2 out of 60 machines have // problem getting the symbol. It is likely to be caused by size of uncompiled // symbol file. There will not be an issue after it is compiled. if (goog.i18n.NumberFormatSymbols.DECIMAL_SEP == goog.i18n.NumberFormatSymbols_en.DECIMAL_SEP) { // fails to load French symbols, skip the test. return; } var fmt = new goog.i18n.NumberFormat('0.0000'); var value = fmt.parse('0,30'); assertEquals(0.30, value); fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.CURRENCY); value = fmt.parse('0,30\u00A0\u20AC'); assertEquals(0.30, value); fmt = new goog.i18n.NumberFormat('#,##0.00'); value = fmt.parse('123 456,99'); assertEquals(123456.99, value); fmt = new goog.i18n.NumberFormat('#,##0.00'); value = fmt.parse('123\u00a0456,99'); assertEquals(123456.99, value); fmt = new goog.i18n.NumberFormat('#,##0.00'); value = fmt.parse('8 123\u00a0456,99'); assertEquals(8123456.99, value); } function testFailParseShouldThrow() { var fmt = new goog.i18n.NumberFormat('0.0000'); var value = fmt.parse('x'); assertNaN(value); fmt = new goog.i18n.NumberFormat('0.000x'); value = fmt.parse('3y'); assertNaN(value); fmt = new goog.i18n.NumberFormat('x0.000'); value = fmt.parse('y3'); assertNaN(value); } /** * @return {boolean} Whether we're on Linux Firefox 3.6.3. */ function isFirefox363Linux() { return goog.userAgent.product.FIREFOX && goog.userAgent.LINUX && goog.userAgent.product.isVersion('3.6.3') && !goog.userAgent.product.isVersion('3.6.4'); } function testEnforceAscii() { try { goog.i18n.NumberFormatSymbols.ZERO_DIGIT = 'A'; var fmt = new goog.i18n.NumberFormat('0.0000'); var str = fmt.format(123.45789179565757); assertEquals('BCD.EFHJ', str); goog.i18n.NumberFormat.setEnforceAsciiDigits(true); str = fmt.format(123.45789179565757); assertEquals('123.4579', str); goog.i18n.NumberFormat.setEnforceAsciiDigits(false); str = fmt.format(123.45789179565757); assertEquals('BCD.EFHJ', str); } finally { goog.i18n.NumberFormatSymbols.ZERO_DIGIT = '0'; } } function testSignificantDigitsEqualToMax() { var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); fmt.setMinimumFractionDigits(0); fmt.setMaximumFractionDigits(2); fmt.setSignificantDigits(2); assertEquals('123', fmt.format(123.4)); assertEquals('12', fmt.format(12.34)); assertEquals('1.2', fmt.format(1.234)); assertEquals('0.12', fmt.format(0.1234)); } function testSignificantDigitsLessThanMax() { var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); fmt.setMinimumFractionDigits(0); fmt.setMaximumFractionDigits(4); fmt.setSignificantDigits(1); assertEquals('123', fmt.format(123.4)); assertEquals('12', fmt.format(12.34)); assertEquals('1', fmt.format(1.234)); assertEquals('0.1', fmt.format(0.1234)); } function testSignificantDigitsMoreThanMax() { // Max fractional digits should be absolute var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); fmt.setMinimumFractionDigits(0); fmt.setMaximumFractionDigits(2); fmt.setSignificantDigits(3); assertEquals('123', fmt.format(123.4)); assertEquals('12.3', fmt.format(12.34)); assertEquals('1.23', fmt.format(1.234)); assertEquals('0.12', fmt.format(0.1234)); } function testSimpleCompactFrench() { // Switch to French. goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr; goog.i18n.CompactNumberFormatSymbols = goog.i18n.CompactNumberFormatSymbols_fr; var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(123400000); assertEquals('123\u00A0M', str); } function testSimpleCompactGerman() { // Switch to German. goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_de; goog.i18n.CompactNumberFormatSymbols = goog.i18n.CompactNumberFormatSymbols_de; var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); // The german short compact decimal has a simple '0' for 1000's, which is // supposed to be interpreted as 'leave the number as-is'. // (The number itself will still be formatted with the '.', but no rounding) var str = fmt.format(1234); assertEquals('1.234', str); } function testSimpleCompact1() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(1234); assertEquals('1.2K', str); } function testSimpleCompact2() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(12345); assertEquals('12K', str); } function testRoundingCompact() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(999999); assertEquals('1M', str); //as opposed to 1000k } function testRoundingCompactNegative() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(-999999); assertEquals('-1M', str); } function testCompactSmall() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); var str = fmt.format(0.1234); assertEquals('0.12', str); } function testCompactLong() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_LONG); var str = fmt.format(12345); assertEquals('12 thousand', str); } function testCompactWithoutSignificant() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); fmt.setSignificantDigits(0); fmt.setMinimumFractionDigits(2); fmt.setMaximumFractionDigits(2); assertEquals('1.23K', fmt.format(1234)); assertEquals('1.00K', fmt.format(1000)); assertEquals('123.46K', fmt.format(123456.7)); assertEquals('999.99K', fmt.format(999994)); assertEquals('1.00M', fmt.format(999995)); } function testCompactWithoutSignificant2() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); fmt.setSignificantDigits(0); fmt.setMinimumFractionDigits(0); fmt.setMaximumFractionDigits(2); assertEquals('1.23K', fmt.format(1234)); assertEquals('1K', fmt.format(1000)); assertEquals('123.46K', fmt.format(123456.7)); assertEquals('999.99K', fmt.format(999994)); assertEquals('1M', fmt.format(999995)); } function testShowTrailingZerosWithSignificantDigits() { var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL); fmt.setSignificantDigits(2); fmt.setShowTrailingZeros(true); assertEquals('2.0', fmt.format(2)); assertEquals('2,000', fmt.format(2000)); assertEquals('0.20', fmt.format(0.2)); assertEquals('0.02', fmt.format(0.02)); assertEquals('0.002', fmt.format(0.002)); assertEquals('0.00', fmt.format(0)); fmt.setShowTrailingZeros(false); assertEquals('2', fmt.format(2)); assertEquals('0.2', fmt.format(0.2)); } function testShowTrailingZerosWithSignificantDigitsCompactShort() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); fmt.setSignificantDigits(2); fmt.setShowTrailingZeros(true); assertEquals('2.0', fmt.format(2)); assertEquals('2.0K', fmt.format(2000)); assertEquals('20', fmt.format(20)); } function testCurrencyCodeOrder() { goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr; goog.i18n.CompactNumberFormatSymbols = goog.i18n.CompactNumberFormatSymbols_fr; var fmt = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.CURRENCY); assertFalse(fmt.isCurrencyCodeBeforeValue()); goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en; goog.i18n.CompactNumberFormatSymbols = goog.i18n.CompactNumberFormatSymbols_en; var fmt1 = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.CURRENCY); assertTrue(fmt1.isCurrencyCodeBeforeValue()); // Check that we really have different formatters with different patterns assertFalse(fmt.isCurrencyCodeBeforeValue()); // Using custom patterns instead of standard locale ones fmt = new goog.i18n.NumberFormat("\u00A4 #0"); assertTrue(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("\u00A4 0 and #"); assertTrue(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("#0 \u00A4"); assertFalse(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("0 and # \u00A4"); assertFalse(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("\u00A4 0"); assertTrue(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("0 \u00A4"); assertFalse(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("\u00A4 #"); assertTrue(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("# \u00A4"); assertFalse(fmt.isCurrencyCodeBeforeValue()); // Edge cases, should never happen (like #0 separated by currency symbol, // or missing currency symbol, or missing both # and 0, or missing all) // We still make sure we get reasonable results (as much as possible) fmt = new goog.i18n.NumberFormat("0 \u00A4 #"); assertFalse(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("# \u00A4 0"); assertFalse(fmt.isCurrencyCodeBeforeValue()); fmt = new goog.i18n.NumberFormat("\u00A4"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style fmt = new goog.i18n.NumberFormat("0"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style fmt = new goog.i18n.NumberFormat("#"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style fmt = new goog.i18n.NumberFormat("#0"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style fmt = new goog.i18n.NumberFormat("0 and #"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style fmt = new goog.i18n.NumberFormat("nothing"); assertTrue(fmt.isCurrencyCodeBeforeValue()); // currency first, en_US style } function testCompactWithBaseFormattingNumber() { var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); fmt.setBaseFormatting(1000); assertEquals('0.8K', fmt.format(800, 1000)); fmt.setBaseFormatting(null); assertEquals('800', fmt.format(800, 1000)); fmt.setBaseFormatting(1000); assertEquals('1,200K', fmt.format(1200000, 1000)); assertEquals('0.01K', fmt.format(10, 1000)); fmt.setSignificantDigits(0); fmt.setMinimumFractionDigits(2); assertEquals('0.00K', fmt.format(1, 1000)); } function testCompactWithBaseFormattingFrench() { // Switch to French. stubs.set(goog.i18n, 'NumberFormatSymbols', goog.i18n.NumberFormatSymbols_fr); stubs.set(goog.i18n, 'CompactNumberFormatSymbols', goog.i18n.CompactNumberFormatSymbols_fr); var fmt = new goog.i18n.NumberFormat( goog.i18n.NumberFormat.Format.COMPACT_SHORT); assertEquals('123\u00A0M', fmt.format(123400000)); fmt.setBaseFormatting(1000); assertEquals('123\u00A0400\u00A0K', fmt.format(123400000)); } </script> </body> </html>