Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3761)

Unified Diff: chrome/browser/translate/translate_manager_browsertest.cc

Issue 7171002: Get the list of supported languages from the translate server. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/translate/translate_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/translate/translate_manager_browsertest.cc
===================================================================
--- chrome/browser/translate/translate_manager_browsertest.cc (revision 89207)
+++ chrome/browser/translate/translate_manager_browsertest.cc (working copy)
@@ -3,9 +3,12 @@
// found in the LICENSE file.
+#include <algorithm>
#include <set>
+#include <vector>
#include "base/utf_string_conversions.h"
+#include "base/stringprintf.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/prefs/pref_change_registrar.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -177,7 +180,7 @@
URLFetcher::set_factory(NULL);
}
- void SimulateURLFetch(bool success) {
+ void SimulateTranslateScriptURLFetch(bool success) {
TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
ASSERT_TRUE(fetcher);
net::URLRequestStatus status;
@@ -189,6 +192,34 @@
std::string());
}
+ void SimulateSupportedLanguagesURLFetch(bool success,
+ std::vector<std::string> languages) {
Jay Civelli 2011/06/21 17:22:07 const std::vector<std::string>&
+ TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
+ net::URLRequestStatus status;
+ status.set_status(success ? net::URLRequestStatus::SUCCESS :
+ net::URLRequestStatus::FAILED);
+
+ std::string data;
+ if (success) {
+ data = base::StringPrintf("%s{'sl': {'bla': 'bla'}, '%s': {",
+ TranslateManager::kLanguageListCallbackName,
+ TranslateManager::kTargetLanguagesKey);
+ const char* comma = "";
+ for (size_t i = 0; i < languages.size(); ++i) {
+ data += base::StringPrintf(
+ "%s'%s': 'UnusedFullName'", comma, languages[i].c_str());
+ if (i == 0)
+ comma = ",";
+ }
+ data += "}})";
+ }
+ fetcher->delegate()->OnURLFetchComplete(fetcher, fetcher->original_url(),
+ status, success ? 200 : 500,
+ net::ResponseCookies(),
+ data);
+ }
+
void SetPrefObserverExpectation(const char* path) {
EXPECT_CALL(
pref_observer_,
@@ -300,7 +331,7 @@
// Simulate the translate script being retrieved (it only needs to be done
// once in the test as it is cached).
- SimulateURLFetch(true);
+ SimulateTranslateScriptURLFetch(true);
// Test that we sent the right message to the renderer.
int page_id = 0;
@@ -361,7 +392,7 @@
process()->sink().ClearMessages();
infobar->Translate();
// Simulate a failure retrieving the translate script.
- SimulateURLFetch(false);
+ SimulateTranslateScriptURLFetch(false);
// We should not have sent any message to translate to the renderer.
EXPECT_FALSE(GetTranslateMessage(NULL, NULL, NULL));
@@ -389,13 +420,14 @@
menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
// To test that bug #49018 if fixed, make sure we deal correctly with errors.
- SimulateURLFetch(false); // Simulate a failure to fetch the translate script.
+ // Simulate a failure to fetch the translate script.
+ SimulateTranslateScriptURLFetch(false);
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
EXPECT_TRUE(infobar->IsError());
infobar->MessageInfoBarButtonPressed();
- SimulateURLFetch(true); // This time succeed.
+ SimulateTranslateScriptURLFetch(true); // This time succeed.
// Simulate the render notifying the translation has been done, the server
// having detected the page was in a known and supported language.
@@ -506,6 +538,59 @@
}
}
+// Test the fetching of languages from the translate server
+TEST_F(TranslateManagerTest, FetchLanguagesFromTranslateServer) {
+ std::vector<std::string> server_languages;
+ // A list of languages to fake being returned by the translate server.
+ server_languages.push_back("aa");
+ server_languages.push_back("bb");
+ server_languages.push_back("ab");
+ server_languages.push_back("en-CA");
+ server_languages.push_back("zz");
+ server_languages.push_back("yy");
+ server_languages.push_back("fr-FR");
+
+ // First, get the default languages list:
+ std::vector<std::string> default_supported_languages;
+ TranslateManager::GetSupportedLanguages(&default_supported_languages);
+ // To make sure we got the defaults and don't confuse them with the mocks.
+ ASSERT_NE(default_supported_languages.size(), server_languages.size());
+
+ TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer(
+ contents()->profile()->GetPrefs());
+
+ // Check that we still get the defaults until the URLFetch has completed.
+ std::vector<std::string> current_supported_languages;
+ TranslateManager::GetSupportedLanguages(&current_supported_languages);
+ EXPECT_EQ(default_supported_languages, current_supported_languages);
+
+ // Also check that it didn't change if we failed the URL fetch.
+ SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>());
+ current_supported_languages.clear();
+ TranslateManager::GetSupportedLanguages(&current_supported_languages);
+ EXPECT_EQ(default_supported_languages, current_supported_languages);
+
+ // Now check that we got the appropriate set of languages from the server.
+ TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer(
+ contents()->profile()->GetPrefs());
+ SimulateSupportedLanguagesURLFetch(true, server_languages);
+ current_supported_languages.clear();
+ TranslateManager::GetSupportedLanguages(&current_supported_languages);
+ // Not sure we need to guarantee the order of languages, so we find them.
+ EXPECT_EQ(server_languages.size(), current_supported_languages.size());
+ for (size_t i = 0; i < server_languages.size(); ++i) {
+ EXPECT_NE(current_supported_languages.end(),
+ std::find(current_supported_languages.begin(),
+ current_supported_languages.end(),
+ server_languages[i]));
+ }
+
+ // Reset to original state.
+ TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer(
+ contents()->profile()->GetPrefs());
+ SimulateSupportedLanguagesURLFetch(true, default_supported_languages);
+}
+
// Tests auto-translate on page.
TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) {
// Simulate navigating to a page and getting its language.
@@ -515,7 +600,8 @@
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
+ // Simulate the translate script being retrieved.
+ SimulateTranslateScriptURLFetch(true);
rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
TranslateErrors::NONE));
@@ -687,7 +773,8 @@
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
+ // Simulate the translate script being retrieved.
+ SimulateTranslateScriptURLFetch(true);
rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
TranslateErrors::NONE));
@@ -716,7 +803,8 @@
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
+ // Simulate the translate script being retrieved.
+ SimulateTranslateScriptURLFetch(true);
rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
TranslateErrors::NONE));
// The after translate infobar is showing.
@@ -753,7 +841,7 @@
ASSERT_TRUE(infobar != NULL);
process()->sink().ClearMessages();
infobar->Translate();
- SimulateURLFetch(true);
+ SimulateTranslateScriptURLFetch(true);
// Simulate the render notifying the translation has been done, but it
// reports a language we don't support.
rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "qbz", "en",
@@ -936,8 +1024,8 @@
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
-
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
+ // Simulate the translate script being retrieved.
+ SimulateTranslateScriptURLFetch(true);
int page_id = 0;
std::string original_lang, target_lang;
EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
@@ -1007,7 +1095,8 @@
TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
+ // Simulate the translate script being retrieved.
+ SimulateTranslateScriptURLFetch(true);
int page_id = 0;
std::string original_lang, target_lang;
EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
@@ -1117,7 +1206,7 @@
EXPECT_TRUE(translate_prefs.IsLanguagePairWhitelisted("fr", "en"));
// Simulate the translate script being retrieved (it only needs to be done
// once in the test as it is cached).
- SimulateURLFetch(true);
+ SimulateTranslateScriptURLFetch(true);
// That should have triggered a page translate.
int page_id = 0;
std::string original_lang, target_lang;
@@ -1179,7 +1268,7 @@
ASSERT_TRUE(infobar != NULL);
process()->sink().ClearMessages();
infobar->Translate();
- SimulateURLFetch(true);
+ SimulateTranslateScriptURLFetch(true);
rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
TranslateErrors::NONE));
@@ -1198,7 +1287,7 @@
process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID) ==
NULL);
// Now simulate the URL fetch.
- SimulateURLFetch(true);
+ SimulateTranslateScriptURLFetch(true);
// Now the message should have been sent.
int page_id = 0;
std::string original_lang, target_lang;
« no previous file with comments | « chrome/browser/translate/translate_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698