Index: net/base/filename_util_unittest.cc |
diff --git a/net/base/filename_util_unittest.cc b/net/base/filename_util_unittest.cc |
index 391baeb331247204d6ff74653dbdbf372fdf02ee..0e7d5046ddf16910c0efcee7e7aa7cd002e01318 100644 |
--- a/net/base/filename_util_unittest.cc |
+++ b/net/base/filename_util_unittest.cc |
@@ -48,6 +48,25 @@ base::FilePath WStringAsFilePath(const std::wstring& str) { |
#endif |
} |
+std::string GetLocaleWarningString() { |
+#if defined(OS_POSIX) && !defined(OS_ANDROID) |
+ // The generate filename tests can fail on certain OS_POSIX platforms when |
+ // LC_CTYPE is not "utf8" or "utf-8" because some of the string conversions |
+ // fail. |
+ // This warning text is appended to any test failures to save people time if |
+ // this happens to be the cause of failure :) |
+ // Note: some platforms (MACOSX, Chromecast) don't have this problem: |
+ // setlocale returns "c" but it functions as utf8. And Android doesn't |
+ // have setlocale at all. |
+ std::string locale = setlocale(LC_CTYPE, NULL); |
+ return " this test may have failed because the current LC_CTYPE locale is " |
+ "not utf8 (currently set to " + |
+ locale + ")"; |
+#else |
+ return ""; |
+#endif |
+} |
+ |
void RunGenerateFileNameTestCase(const GenerateFilenameCase* test_case) { |
std::string default_filename(base::WideToUTF8(test_case->default_filename)); |
base::FilePath file_path = GenerateFileName( |
@@ -55,7 +74,8 @@ void RunGenerateFileNameTestCase(const GenerateFilenameCase* test_case) { |
test_case->referrer_charset, test_case->suggested_filename, |
test_case->mime_type, default_filename); |
EXPECT_EQ(test_case->expected_filename, FilePathAsWString(file_path)) |
- << "test case at line number: " << test_case->lineno; |
+ << "test case at line number: " << test_case->lineno << "; " |
+ << GetLocaleWarningString(); |
} |
} // namespace |
@@ -418,18 +438,6 @@ TEST(FilenameUtilTest, GenerateSafeFileName) { |
} |
TEST(FilenameUtilTest, GenerateFileName) { |
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) |
- // This test doesn't run when the locale is not UTF-8 because some of the |
- // string conversions fail. This is OK (we have the default value) but they |
- // don't match our expectations. |
- std::string locale = setlocale(LC_CTYPE, NULL); |
- base::StringToLowerASCII(&locale); |
- EXPECT_TRUE(locale.find("utf-8") != std::string::npos || |
- locale.find("utf8") != std::string::npos) |
- << "Your locale (" << locale << ") must be set to UTF-8 " |
- << "for this test to pass!"; |
-#endif |
- |
// Tests whether the correct filename is selected from the the given |
// parameters and that Content-Disposition headers are properly |
// handled including failovers when the header is malformed. |