// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// Tests based on the closure number formatting tests.
library number_closure_test;

import 'dart:async';
import "package:intl/intl.dart";
import "package:unittest/unittest.dart";

main() {
  test("testVeryBigNumber", testVeryBigNumber);
  test("testStandardFormat", testStandardFormat);
  test("testNegativePercentage", testNegativePercentage);
  test("testCustomPercentage", testCustomPercentage);
  test("testBasicFormat", testBasicFormat);
  test("testGrouping", testGrouping);
  test("testPerMill", testPerMill);
  test("testQuotes", testQuotes);
  test("testZeros", testZeros);
  test("testExponential", testExponential);
  test("testPlusSignInExponentPart", testPlusSignInExponentPart);
  test("testApis", testApis);
  test("testLocaleSwitch", testLocaleSwitch);
  test("testLocaleSwitchAsync", testLocaleSwitchAsync);
}

/// Test two large numbers for equality, assuming that there may be some
/// loss of precision in the less significant digits.
veryBigNumberCompare(str1, str2) {
  return str1.length == str2.length &&
      str1.substring(0, 8) == str2.substring(0, 8);
}

testVeryBigNumber() {
  var str;
  var fmt;

  fmt = new NumberFormat.decimalPattern();
  str = fmt.format(1.3456E20);
  expect(veryBigNumberCompare('134,560,000,000,000,000,000', str), isTrue);

  fmt = new NumberFormat.percentPattern();
  str = fmt.format(1.3456E20);
  expect(veryBigNumberCompare('13,456,000,000,000,000,000,000%', str), isTrue);

  // TODO(alanknight): Note that this disagrees with what ICU would print
  // for this. We need significant digit support to do this properly.
  fmt = new NumberFormat.scientificPattern();
  str = fmt.format(1.3456E20);
  expect('1E20', str);

  fmt = new NumberFormat.decimalPattern();
  str = fmt.format(-1.234567890123456e306);
  expect(1 + 1 + 306 + 306 / 3, str.length);
  expect('-1,234,567,890,123,45', str.substring(0, 21));

  str = fmt.format(1 / 0);
  expect('∞', str);
  str = fmt.format(-1 / 0);
  expect('-∞', str);
}

void testStandardFormat() {
  var str;
  var fmt;
  fmt = new NumberFormat.decimalPattern();
  str = fmt.format(1234.579);
  expect('1,234.579', str);
  fmt = new NumberFormat.percentPattern();
  str = fmt.format(1234.579);
  expect('123,458%', str);
  fmt = new NumberFormat.scientificPattern();
  str = fmt.format(1234.579);
  expect('1E3', str);
}

void testNegativePercentage() {
  var str;
  var fmt = new NumberFormat('#,##0.00%');
  str = fmt.format(-1234.56);
  expect('-123,456.00%', str);

  fmt = new NumberFormat.percentPattern();
  str = fmt.format(-1234.579);
  expect('-123,458%', str);
}

void testCustomPercentage() {
  var fmt = new NumberFormat.percentPattern();
  fmt.maximumFractionDigits = 1;
  fmt.minimumFractionDigits = 1;
  var str = fmt.format(0.1291);
  expect('12.9%', str);
  fmt.maximumFractionDigits = 2;
  fmt.minimumFractionDigits = 1;
  str = fmt.format(0.129);
  expect('12.9%', str);
  fmt.maximumFractionDigits = 2;
  fmt.minimumFractionDigits = 1;
  str = fmt.format(0.12);
  expect('12.0%', str);
  fmt.maximumFractionDigits = 2;
  fmt.minimumFractionDigits = 1;
  str = fmt.format(0.12911);
  expect('12.91%', str);
}

void testBasicFormat() {
  var fmt = new NumberFormat('0.0000');
  var str = fmt.format(123.45789179565757);
  expect('123.4579', str);
}

void testGrouping() {
  var str;

  var fmt = new NumberFormat('#,###');
  str = fmt.format(1234567890);
  expect('1,234,567,890', str);
  fmt = new NumberFormat('#,####');
  str = fmt.format(1234567890);
  expect('12,3456,7890', str);

  fmt = new NumberFormat('#');
  str = fmt.format(1234567890);
  expect('1234567890', str);
}

void testPerMill() {
  var str;

  var fmt = new NumberFormat('###.###\u2030');
  str = fmt.format(0.4857);
  expect('485.7\u2030', str);
}

void testQuotes() {
  var str;

  var fmt = new NumberFormat('a\'fo\'\'o\'b#');
  str = fmt.format(123);
  expect('afo\'ob123', str);

  fmt = new NumberFormat('a\'\'b#');
  str = fmt.format(123);
  expect('a\'b123', str);

  fmt = new NumberFormat('a\'fo\'\'o\'b#');
  str = fmt.format(-123);
  expect('-afo\'ob123', str);

  fmt = new NumberFormat('a\'\'b#');
  str = fmt.format(-123);
  expect('-a\'b123', str);
}

void testZeros() {
  var str;
  var fmt;

  fmt = new NumberFormat('#.#');
  str = fmt.format(0);
  expect('0', str);
  fmt = new NumberFormat('#.');
  str = fmt.format(0);
  expect('0.', str);
  fmt = new NumberFormat('.#');
  str = fmt.format(0);
  expect('.0', str);
  fmt = new NumberFormat('#');
  str = fmt.format(0);
  expect('0', str);

  fmt = new NumberFormat('#0.#');
  str = fmt.format(0);
  expect('0', str);
  fmt = new NumberFormat('#0.');
  str = fmt.format(0);
  expect('0.', str);
  fmt = new NumberFormat('#.0');
  str = fmt.format(0);
  expect('.0', str);
  fmt = new NumberFormat('#');
  str = fmt.format(0);
  expect('0', str);
  fmt = new NumberFormat('000');
  str = fmt.format(0);
  expect('000', str);
}

void testExponential() {
  var str;
  var fmt;

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(0.01234);
  expect('1.234E-2', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(0.01234);
  expect('12.340E-03', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(0.01234);
  expect('12.34E-003', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(0.01234);
  expect('1.234E-2', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(123456789);
  expect('1.2346E8', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(123456789);
  expect('12.346E07', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(123456789);
  expect('123.456789E006', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(123456789);
  expect('1.235E8', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(1.23e300);
  expect('1.23E300', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(1.23e300);
  expect('12.300E299', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(1.23e300);
  expect('1.23E300', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(1.23e300);
  expect('1.23E300', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(-3.141592653e-271);
  expect('-3.1416E-271', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(-3.141592653e-271);
  expect('-31.416E-272', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(-3.141592653e-271);
  expect('-314.159265E-273', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(-3.141592653e-271);
  expect('[3.142E-271]', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(0);
  expect('0E0', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(0);
  expect('00.000E00', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(0);
  expect('0E000', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(0);
  expect('0E0', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(-1);
  expect('-1E0', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(-1);
  expect('-10.000E-01', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(-1);
  expect('-1E000', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(-1);
  expect('[1E0]', str);

  fmt = new NumberFormat('0.####E0');
  str = fmt.format(1);
  expect('1E0', str);
  fmt = new NumberFormat('00.000E00');
  str = fmt.format(1);
  expect('10.000E-01', str);
  fmt = new NumberFormat('##0.######E000');
  str = fmt.format(1);
  expect('1E000', str);
  fmt = new NumberFormat('0.###E0;[0.###E0]');
  str = fmt.format(1);
  expect('1E0', str);

  fmt = new NumberFormat('#E0');
  str = fmt.format(12345.0);
  expect('1E4', str);
  fmt = new NumberFormat('0E0');
  str = fmt.format(12345.0);
  expect('1E4', str);
  fmt = new NumberFormat('##0.###E0');
  str = fmt.format(12345.0);
  expect('12.345E3', str);
  fmt = new NumberFormat('##0.###E0');
  str = fmt.format(12345.00001);
  expect('12.345E3', str);
  fmt = new NumberFormat('##0.###E0');
  str = fmt.format(12345);
  expect('12.345E3', str);

  fmt = new NumberFormat('##0.####E0');
  str = fmt.format(789.12345e-9);
  fmt = new NumberFormat('##0.####E0');
  str = fmt.format(780e-9);
  expect('780E-9', str);
  fmt = new NumberFormat('.###E0');
  str = fmt.format(45678.0);
  expect('.457E5', str);
  fmt = new NumberFormat('.###E0');
  str = fmt.format(0);
  expect('.0E0', str);

  fmt = new NumberFormat('#E0');
  str = fmt.format(45678000);
  expect('5E7', str);
  fmt = new NumberFormat('##E0');
  str = fmt.format(45678000);
  expect('46E6', str);
  fmt = new NumberFormat('####E0');
  str = fmt.format(45678000);
  expect('4568E4', str);
  fmt = new NumberFormat('0E0');
  str = fmt.format(45678000);
  expect('5E7', str);
  fmt = new NumberFormat('00E0');
  str = fmt.format(45678000);
  expect('46E6', str);
  fmt = new NumberFormat('000E0');
  str = fmt.format(45678000);
  expect('457E5', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(0.0000123);
  expect('12E-6', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(0.000123);
  expect('123E-6', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(0.00123);
  expect('1E-3', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(0.0123);
  expect('12E-3', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(0.123);
  expect('123E-3', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(1.23);
  expect('1E0', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(12.3);
  expect('12E0', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(123.0);
  expect('123E0', str);
  fmt = new NumberFormat('###E0');
  str = fmt.format(1230.0);
  expect('1E3', str);
}

void testPlusSignInExponentPart() {
  var fmt;
  fmt = new NumberFormat('0E+0');
  var str = fmt.format(45678000);
  expect('5E+7', str);
}

void testApis() {
  var fmt;
  var str;

  fmt = new NumberFormat('#,###');
  str = fmt.format(1234567890);
  expect('1,234,567,890', str);
}

testLocaleSwitch() {
  Intl.withLocale("fr", verifyFrenchLocale);
}

typedef void TimerArgument();
testLocaleSwitchAsync() {
  Intl.withLocale("fr", () {
    new Timer(new Duration(milliseconds: 10),
        expectAsync(verifyFrenchLocale) as TimerArgument);
  });
  // Verify that things running outside the zone still get en_US.
  testStandardFormat();
}

void verifyFrenchLocale() {
  var fmt = new NumberFormat('#,###');
  var str = fmt.format(1234567890);
  expect(str, '1\u00a0234\u00a0567\u00a0890');
}
