// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This whole test runs as a separate browser_test because it depends on a
// static initialization inside third_party/icu (gDecimal in digitlst.cpp).
//
// That initialization depends on the current locale, and on certain locales
// will lead to wrong behavior. To make sure that the locale is set before
// icu is used, and that the "wrong" static value doesn't affect other tests,
// this test is executed on its own process.

#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_locale.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "ui/base/l10n/time_format.h"

using base::TimeDelta;

class TimeFormatBrowserTest : public InProcessBrowserTest {
 public:
  TimeFormatBrowserTest() : scoped_locale_("fr_FR.utf-8") {
  }

 private:
  base::ScopedLocale scoped_locale_;
};

IN_PROC_BROWSER_TEST_F(TimeFormatBrowserTest, DecimalPointNotDot) {
  // Some locales use a comma ',' instead of a dot '.' as the separator for
  // decimal digits. The icu library wasn't handling this, leading to "1"
  // being internally converted to "+1,0e00" and ultimately leading to "NaN".
  // This showed up on the browser on estimated download time, for example.
  // http://crbug.com/60476

  base::string16 one_min =
      ui::TimeFormat::Simple(ui::TimeFormat::FORMAT_DURATION,
                             ui::TimeFormat::LENGTH_SHORT,
                             TimeDelta::FromMinutes(1));
  EXPECT_EQ(base::ASCIIToUTF16("1 min"), one_min);
}
