sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
580 lines (494 loc) • 17.3 kB
HTML
<html>
<!--
Copyright 2006 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by an Apache 2.0 License.
See the COPYING file for details.
-->
<head>
<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.testing.jsunit');
</script>
</head>
<body>
<script>
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);
}
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);
}
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 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\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);
assertEquals('789.1235E-9', str);
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 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;
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);
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en;
}
function testFrenchParse() {
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr;
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 \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);
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en;
}
function testFailParseShouldThrow() {
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en;
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);
}
</script>
</body>
</html>