Index: chrome/common/time_format_unittest.cc |
diff --git a/chrome/common/time_format_unittest.cc b/chrome/common/time_format_unittest.cc |
index 31976e3bd40838f24bf9f31e7429f12b64f3b351..3a2004891783f4c0581aacb29faba63d08670722 100644 |
--- a/chrome/common/time_format_unittest.cc |
+++ b/chrome/common/time_format_unittest.cc |
@@ -2,9 +2,11 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <locale.h> |
#include <time.h> |
#include "base/basictypes.h" |
+#include "base/logging.h" |
#include "base/string16.h" |
#include "base/time.h" |
#include "base/utf_string_conversions.h" |
@@ -14,6 +16,27 @@ |
using base::Time; |
using base::TimeDelta; |
+namespace { |
+ |
+// A helper class that gets the current locale on construction, and restores |
+// it on destruction. |
+class ScopedChangeLocale { |
Paweł Hajdan Jr.
2011/05/11 19:10:44
Sorry for not finding it earlier (I tried, but fai
|
+ public: |
+ ScopedChangeLocale() { |
+ stored_locale_ = setlocale(LC_ALL, NULL); |
+ } |
+ virtual ~ScopedChangeLocale() { |
+ setlocale(LC_ALL, stored_locale_); |
+ } |
+ |
+ private: |
+ const char *stored_locale_; |
Paweł Hajdan Jr.
2011/05/11 19:10:44
nit: Star on the wrong side, should be const char*
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(ScopedChangeLocale); |
+}; |
+ |
+} // namespace |
Paweł Hajdan Jr.
2011/05/11 19:10:44
nit: Two spaces between "}" and "// namespace".
|
+ |
TEST(TimeFormat, RelativeDate) { |
Time now = Time::Now(); |
string16 today_str = TimeFormat::RelativeDate(now, NULL); |
@@ -69,3 +92,31 @@ TEST(TimeFormat, FormatTime) { |
TestTimeFormats(three_days, "3 days"); |
TestTimeFormats(three_days + four_hours, "3 days"); |
} |
+ |
+TEST(TimeFormat, FAILS_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 |
+ |
+ ScopedChangeLocale scoped_locale; |
+ |
+ const char *locales[] = { "fr_FR", "fr_FR.utf8", "fr_FR.UTF-8" }; |
+ const char *locale; |
+ for (uint32 i = 0; i < arraysize(locales); ++i) { |
+ locale = setlocale(LC_ALL, locales[i]); |
+ if (locale != NULL) |
+ break; |
+ } |
+ |
+ if (locale == NULL) { |
+ LOG(WARNING) << "Skipping test because machine doesn't have the fr_FR " |
+ << "locale installed."; |
+ return; |
+ } |
+ |
+ string16 one_min = TimeFormat::TimeRemainingShort(TimeDelta::FromMinutes(1)); |
+ EXPECT_EQ(ASCIIToUTF16("1 min"), one_min) << "fr_FR locale generates " |
+ << one_min; |
+} |