Index: chrome/browser/browser_encoding_uitest.cc |
=================================================================== |
--- chrome/browser/browser_encoding_uitest.cc (revision 0) |
+++ chrome/browser/browser_encoding_uitest.cc (revision 0) |
@@ -0,0 +1,306 @@ |
+// Copyright (c) 2006-2008 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. |
+ |
+#include "base/file_util.h" |
+#include "base/path_service.h" |
+#include "base/string_util.h" |
+#include "chrome/browser/automation/url_request_mock_http_job.h" |
+#include "chrome/browser/download/save_package.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "chrome/test/automation/automation_messages.h" |
+#include "chrome/test/automation/automation_proxy.h" |
+#include "chrome/test/automation/browser_proxy.h" |
+#include "chrome/test/automation/tab_proxy.h" |
+#include "chrome/test/ui/ui_test.h" |
+#include "net/url_request/url_request_unittest.h" |
+#include "chrome/common/pref_names.h" |
+ |
+const std::wstring kTestDir = L"encoding_tests"; |
+ |
+class BrowserEncodingTest : public UITest { |
+ protected: |
+ BrowserEncodingTest() : UITest() {} |
+ |
+ // Make sure the content of the page are expected |
+ // after override or auto-detect |
+ void CheckFile(const std::wstring& generated_file, |
Johnny(Jianning) Ding
2009/03/09 12:31:46
would please move this function to UITest with add
|
+ const std::wstring& expect_result_file, |
+ bool check_equal) { |
+ std::wstring expect_result_filepath = |
+ UITest::GetTestFilePath(kTestDir, expect_result_file); |
+ |
+ ASSERT_TRUE(file_util::PathExists(expect_result_filepath)); |
+ WaitForGeneratedFileAndCheck(generated_file, |
+ expect_result_filepath, |
+ check_equal, true); |
+ } |
+ |
+ virtual void SetUp() { |
+ UITest::SetUp(); |
+ EXPECT_TRUE(file_util::CreateNewTempDirectory(L"", &save_dir_)); |
+ save_dir_ += FilePath::kSeparators[0]; |
+ } |
+ |
+ std::wstring save_dir_; |
+ std::wstring encoding_; |
+ GURL url; |
+}; |
+ |
+// Below encodings are ignored because I don't have an editor to |
+// create corresponding encoded test file for now : |
+// GBK |
+// Big5-HKSCS |
+// ISO-2022-JP |
+// ISO-8859-2 |
+// ISO-8859-3 |
+// ISO-8859-10 |
+// ISO-8859-14 |
+// ISO-8859-16 |
Johnny(Jianning) Ding
2009/03/09 12:31:46
would you please file a bug for those encoding, th
|
+TEST_F(BrowserEncodingTest, TestEncodingAliasMapping) { |
+ struct EncodingTestData { |
Johnny(Jianning) Ding
2009/03/09 12:31:46
you can move the definition to class BrowserEncodi
|
+ const wchar_t* file_name; |
+ const wchar_t* encoding_name; |
+ }; |
+ |
+ EncodingTestData encoding_test_data[] = { |
+ { L"encoding-UTF-8.htm", L"UTF-8" }, |
+ { L"encoding-UTF-16LE.htm", L"UTF-16LE" }, |
+ { L"encoding-iso-8859-1.htm", L"ISO-8859-1" }, |
+ { L"encoding-windows-1252.htm", L"windows-1252" }, |
+ { L"encoding-gb18030.htm", L"gb18030" }, |
+ { L"encoding-Big5.htm", L"Big5" }, |
+ { L"encoding-windows-949.htm", L"windows-949" }, |
+ { L"encoding-Shift-JIS.htm", L"Shift_JIS" }, |
+ { L"encoding-EUC-JP.htm", L"EUC-JP" }, |
+ { L"encoding-windows-874.htm", L"windows-874" }, |
+ { L"encoding-ISO-8859-15.htm", L"ISO-8859-15" }, |
+ { L"encoding-macintosh.htm", L"macintosh" }, |
+ { L"encoding-ISO-8859-2.htm", L"ISO-8859-2" }, |
+ { L"encoding-windows-1250.htm", L"windows-1250" }, |
+ { L"encoding-ISO-8859-5.htm", L"ISO-8859-5" }, |
+ { L"encoding-windows-1251.htm", L"windows-1251" }, |
+ { L"encoding-KOI8-R.htm", L"KOI8-R" }, |
+ { L"encoding-KOI8-U.htm", L"KOI8-U" }, |
+ { L"encoding-ISO-8859-7.htm", L"ISO-8859-7" }, |
+ { L"encoding-windows-1253.htm", L"windows-1253" }, |
+ { L"encoding-windows-1254.htm", L"windows-1254" }, |
+ { L"encoding-ISO-8859-6.htm", L"ISO-8859-6" }, |
+ { L"encoding-windows-1256.htm", L"windows-1256" }, |
+ { L"encoding-ISO-8859-8.htm", L"ISO-8859-8" }, |
+ { L"encoding-windows-1255.htm", L"windows-1255" }, |
+ { L"encoding-windows-1258.htm", L"windows-1258" }, |
+ { L"encoding-ISO-8859-4.htm", L"ISO-8859-4" }, |
+ { L"encoding-ISO-8859-13.htm", L"ISO-8859-13" }, |
+ { L"encoding-windows-1257.htm", L"windows-1257" }, |
+ }; |
+ |
+ for (int i = 0;i < arraysize (encoding_test_data); i++) { |
+ url = URLRequestMockHTTPJob::GetMockUrl( |
+ kTestDir + L"/encoding_alias_mapping/" + encoding_test_data[i].file_name); |
Johnny(Jianning) Ding
2009/03/09 12:31:46
needs 4 spaces indent, you can write it like
url =
|
+ |
+ scoped_ptr<TabProxy> tab(GetActiveTab()); |
+ ASSERT_TRUE(tab->NavigateToURL(url)); |
+ WaitUntilTabCount(1); |
+ |
+ EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding_)); |
+ EXPECT_EQ(encoding_, encoding_test_data[i].encoding_name); |
+ } |
+} |
+ |
+TEST_F(BrowserEncodingTest, TestOverrideEncoding) { |
+ std::wstring file_name = L"gb18030_content_with_encoding_iso88591.htm"; |
+ std::wstring expect_file_name = |
+ L"encoding_user_override\\expect_gb18030_content_save_from_iso88591.htm"; |
+ |
+ url = URLRequestMockHTTPJob::GetMockUrl( |
+ kTestDir + L"/encoding_user_override/" + file_name); |
Johnny(Jianning) Ding
2009/03/09 12:31:46
4 spaces indent
|
+ scoped_ptr<TabProxy> tab(GetActiveTab()); |
+ ASSERT_TRUE(tab->NavigateToURL(url)); |
+ WaitUntilTabCount(1); |
+ |
+ // Get the original defined encoding in the page |
+ // std::wstring encoding; |
+ EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding_)); |
+ EXPECT_EQ(encoding_, L"ISO-8859-1"); |
+ |
+ // Override the encoding to "gb18030". |
+ int64 last_nav_time = 0; |
+ EXPECT_TRUE(tab->GetLastNavigationTime(&last_nav_time)); |
+ EXPECT_TRUE(tab->OverrideEncoding(L"gb18030")); |
+ EXPECT_TRUE(tab->WaitForNavigation(last_nav_time)); |
+ |
+ // Re-get the encoding of page. It should be gb18030. |
+ EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding_)); |
+ EXPECT_EQ(encoding_, L"gb18030"); |
+ |
+ // Dump the page, the content of dump page should be equal with our expect |
+ // result file gb18030_content_with_encoding_gb18030.htm. |
+ std::wstring full_file_name = save_dir_ + file_name; |
+ std::wstring dir = save_dir_ + |
+ L"gb18030_content_with_encoding_iso88591_files"; |
+ EXPECT_TRUE(tab->SavePage(full_file_name, dir, |
+ SavePackage::SAVE_AS_COMPLETE_HTML)); |
+ EXPECT_TRUE(WaitForDownloadShelfVisible(tab.get())); |
+ CheckFile(full_file_name, expect_file_name, true); |
+} |
+ |
+// Below encoding are disabled because it is known issue that |
+// auto detect doesn't return right value for them |
+// ISO-8859-4 |
+// ISO-8859-13 |
+// windows-1257 |
+// KOI8-U |
+// macintosh |
+// windows-1252 |
+ |
Johnny(Jianning) Ding
2009/03/09 12:31:46
please remove this empty line.
|
+// Also disabled Thai and Vietnamese because auto detect doesn't work for them |
+// windows-874 |
+// windows-1258 |
+// windows-1253 |
+ |
Johnny(Jianning) Ding
2009/03/09 12:31:46
please remove this empty line.
|
+// For Hebrew, I made the expecting encoding value as ISO-8859-8-I because of |
+// bug crbug.com/2927 |
+ |
+TEST_F(BrowserEncodingTest, TestEncodingAutoDetect) { |
+ // Test file name |
+ const wchar_t* file_name[] = { |
Johnny(Jianning) Ding
2009/03/09 12:31:46
please use the previous defined "EncodingTestData"
|
+ L"Big5_content_without_encoding_declaration.htm", |
+ L"gb18030_content_without_encoding_declaration.htm", |
+ L"iso-8859-1_content_without_encoding_declaration.htm", |
+ L"ISO-8859-5_content_without_encoding_declaration.htm", |
+ L"ISO-8859-6_content_without_encoding_declaration.htm", |
+ L"ISO-8859-7_content_without_encoding_declaration.htm", |
+ L"ISO-8859-8_content_without_encoding_declaration.htm", |
+ L"KOI8-R_content_without_encoding_declaration.htm", |
+ L"Shift-JIS_content_without_encoding_declaration.htm", |
+ L"UTF-8_content_without_encoding_declaration.htm", |
+ L"windows-949_content_without_encoding_declaration.htm", |
+ L"windows-1251_content_without_encoding_declaration.htm", |
+ L"windows-1254_content_without_encoding_declaration.htm", |
+ L"windows-1255_content_without_encoding_declaration.htm", |
+ L"windows-1256_content_without_encoding_declaration.htm", |
+ }; |
+ |
+ // Expect file directory and file name |
+ std::wstring expect_folder_name = L"encoding_auto_detect\\expect_results\\"; |
+ const wchar_t* expect_file_name[] = { |
+ L"expect_Big5_content_save_from_without_encoding_declaration.htm", |
+ L"expect_gb18030_content_save_from_without_encoding_declaration.htm", |
+ L"expect_iso-8859-1_content_save_from_without_encoding_declaration.htm", |
+ L"expect_ISO-8859-5_content_save_from_without_encoding_declaration.htm", |
+ L"expect_ISO-8859-6_content_save_from_without_encoding_declaration.htm", |
+ L"expect_ISO-8859-7_content_save_from_without_encoding_declaration.htm", |
+ L"expect_ISO-8859-8_content_save_from_without_encoding_declaration.htm", |
+ L"expect_KOI8-R_content_save_from_without_encoding_declaration.htm", |
+ L"expect_Shift-JIS_content_save_from_without_encoding_declaration.htm", |
+ L"expect_UTF-8_content_save_from_without_encoding_declaration.htm", |
+ L"expect_windows-949_content_save_from_without_encoding_declaration.htm", |
+ L"expect_windows-1251_content_save_from_without_encoding_declaration.htm", |
+ L"expect_windows-1254_content_save_from_without_encoding_declaration.htm", |
+ L"expect_windows-1255_content_save_from_without_encoding_declaration.htm", |
+ L"expect_windows-1256_content_save_from_without_encoding_declaration.htm", |
+ }; |
+ |
+ // Real expect file name |
+ std::wstring full_expect_file_name; |
+ |
+ // Expected encoding |
+ const wchar_t* expect_encoding[] = {L"Big5", |
+ L"gb18030", |
+ L"ISO-8859-1", |
+ L"ISO-8859-5", |
+ L"ISO-8859-6", |
+ L"ISO-8859-7", |
+ L"ISO-8859-8-I", |
+ L"KOI8-R", |
+ L"Shift_JIS", |
+ L"UTF-8", |
+ L"windows-949", |
+ L"windows-1251", |
+ L"windows-1254", |
+ L"windows-1255", |
+ L"windows-1256", |
+ }; |
+ |
+ // Save as file directory |
+ const wchar_t* save_dir_sub[] = { |
+ L"Big5_content_without_encoding_declaration_files", |
Johnny(Jianning) Ding
2009/03/09 12:31:46
you can define the prefix name like EncodingTestDa
|
+ L"gb18030_content_without_encoding_declaration_files", |
+ L"iso-8859-1_content_without_encoding_declaration_files", |
+ L"ISO-8859-5_content_without_encoding_declaration_files", |
+ L"ISO-8859-6_content_without_encoding_declaration_files", |
+ L"ISO-8859-7_content_without_encoding_declaration_files", |
+ L"ISO-8859-8_content_without_encoding_declaration_files", |
+ L"KOI8-R_content_without_encoding_declaration_files", |
+ L"Shift-JIS_content_without_encoding_declaration_files", |
+ L"UTF-8_content_without_encoding_declaration_files", |
+ L"windows-949_content_without_encoding_declaration_files", |
+ L"windows-1251_content_without_encoding_declaration_files", |
+ L"windows-1254_content_without_encoding_declaration_files", |
+ L"windows-1255_content_without_encoding_declaration_files", |
+ L"windows-1256_content_without_encoding_declaration_files", |
+ }; |
+ |
+ // Real save as location: dir = save_dir_ + save_dir_sub[i]; |
+ std::wstring dir; |
+ |
+ // Real save as file name: full_file_name = save_dir_ + file_name[i]; |
+ std::wstring full_file_name; |
+ |
+ int64 last_nav_time; |
+ bool encoding_auto_detect = false; |
+ bool new_encoding_auto_detect = false; |
+ |
+ for(int i = 0;i < arraysize (file_name);i++) { |
+ scoped_ptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
+ ASSERT_TRUE(browser.get()); |
+ |
+ // Set the default charset to non-GB related encoding to make sure we |
+ // incorrectly decode the page. |
+ browser->SetStringPreference(prefs::kDefaultCharset, L"ISO-8859-1"); |
+ |
+ url = URLRequestMockHTTPJob::GetMockUrl( |
+ kTestDir + L"/encoding_auto_detect/" + file_name[i]); |
Johnny(Jianning) Ding
2009/03/09 12:31:46
4 spaces indent
|
+ scoped_ptr<TabProxy> tab(GetActiveTab()); |
+ ASSERT_TRUE(tab->NavigateToURL(url)); |
+ WaitUntilTabCount(1); |
+ |
+ // Disable auto detect if it is on |
+ last_nav_time = 0; |
+ EXPECT_TRUE(browser->SetBooleanPreference( |
+ prefs::kWebKitUsesUniversalDetector, encoding_auto_detect)); |
+ EXPECT_TRUE(tab->Reload()); |
+ |
+ // Get the encoding used for the page, it must be the default charset we |
+ // just set |
+ // std::wstring encoding; |
+ EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding_)); |
+ EXPECT_EQ(encoding_, L"ISO-8859-1"); |
+ |
+ // Enable the encoding auto detection. |
+ last_nav_time = 0; |
+ EXPECT_TRUE(browser->SetBooleanPreference( |
+ prefs::kWebKitUsesUniversalDetector, !encoding_auto_detect)); |
+ EXPECT_TRUE(tab->Reload()); |
+ |
+ // Re-get the encoding of page. It should return the real encoding now. |
+ EXPECT_TRUE(browser->GetBooleanPreference( |
+ prefs::kWebKitUsesUniversalDetector, &new_encoding_auto_detect)); |
+ EXPECT_EQ(new_encoding_auto_detect, !encoding_auto_detect); |
+ EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding_)); |
+ EXPECT_EQ(encoding_, expect_encoding[i]); |
+ |
+ // Dump the page, the content of dump page should be equal with our expect |
+ // result file gb18030_content_with_encoding_gb18030.htm. |
+ full_file_name = save_dir_ + file_name[i]; |
+ dir = save_dir_ + save_dir_sub[i]; |
+ full_expect_file_name = expect_folder_name + expect_file_name[i]; |
+ |
+ EXPECT_TRUE(tab->SavePage(full_file_name, dir, |
+ SavePackage::SAVE_AS_COMPLETE_HTML)); |
+ EXPECT_TRUE(WaitForDownloadShelfVisible(tab.get())); |
+ |
+ CheckFile(full_file_name, full_expect_file_name, true); |
+ } |
+} |