• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/translate/core/browser/language_state.h"
6 
7 #include "base/memory/scoped_ptr.h"
8 #include "components/translate/core/browser/language_state.h"
9 #include "components/translate/core/browser/translate_driver.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "url/gurl.h"
12 
13 namespace {
14 
15 const std::string kHtmlMimeType = "text/html";
16 
17 class MockTranslateDriver : public TranslateDriver {
18  public:
MockTranslateDriver()19   MockTranslateDriver()
20       : on_is_page_translated_changed_called_(false),
21         on_translate_enabled_changed_called_(false),
22         language_state_(this) {
23   }
24 
Reset()25   void Reset() {
26     on_is_page_translated_changed_called_ = false;
27     on_translate_enabled_changed_called_ = false;
28   }
29 
~MockTranslateDriver()30   virtual ~MockTranslateDriver() {}
31 
OnIsPageTranslatedChanged()32   virtual void OnIsPageTranslatedChanged() OVERRIDE {
33     on_is_page_translated_changed_called_ = true;
34   }
35 
OnTranslateEnabledChanged()36   virtual void OnTranslateEnabledChanged() OVERRIDE {
37     on_translate_enabled_changed_called_ = true;
38   }
39 
IsLinkNavigation()40   virtual bool IsLinkNavigation() OVERRIDE {
41     return false;
42   }
43 
TranslatePage(const std::string & translate_script,const std::string & source_lang,const std::string & target_lang)44   virtual void TranslatePage(const std::string& translate_script,
45                              const std::string& source_lang,
46                              const std::string& target_lang) OVERRIDE {}
47 
RevertTranslation()48   virtual void RevertTranslation() OVERRIDE {}
49 
IsOffTheRecord()50   virtual bool IsOffTheRecord() OVERRIDE { return false; }
51 
GetContentsMimeType()52   virtual const std::string& GetContentsMimeType() OVERRIDE {
53     return kHtmlMimeType;
54   }
55 
GetLastCommittedURL()56   virtual const GURL& GetLastCommittedURL() OVERRIDE {
57     return GURL::EmptyGURL();
58   }
59 
GetActiveURL()60   virtual const GURL& GetActiveURL() OVERRIDE { return GURL::EmptyGURL(); }
61 
GetVisibleURL()62   virtual const GURL& GetVisibleURL() OVERRIDE { return GURL::EmptyGURL(); }
63 
HasCurrentPage()64   virtual bool HasCurrentPage() OVERRIDE { return true; }
65 
GetCurrentPageID()66   virtual int GetCurrentPageID() OVERRIDE { return 0; }
67 
OpenUrlInNewTab(const GURL & url)68   virtual void OpenUrlInNewTab(const GURL& url) OVERRIDE {}
69 
on_is_page_translated_changed_called() const70   bool on_is_page_translated_changed_called() const {
71     return on_is_page_translated_changed_called_;
72   }
73 
on_translate_enabled_changed_called() const74   bool on_translate_enabled_changed_called() const {
75     return on_translate_enabled_changed_called_;
76   }
77 
78  private:
79   bool on_is_page_translated_changed_called_;
80   bool on_translate_enabled_changed_called_;
81   LanguageState language_state_;
82 
83   DISALLOW_COPY_AND_ASSIGN(MockTranslateDriver);
84 };
85 
86 }  // namespace
87 
TEST(LanguageStateTest,IsPageTranslated)88 TEST(LanguageStateTest, IsPageTranslated) {
89   scoped_ptr<MockTranslateDriver> driver(
90       new MockTranslateDriver);
91   LanguageState language_state(driver.get());
92   EXPECT_FALSE(language_state.IsPageTranslated());
93 
94   // Navigate to a French page.
95   language_state.LanguageDetermined("fr", true);
96   EXPECT_EQ("fr", language_state.original_language());
97   EXPECT_EQ("fr", language_state.current_language());
98   EXPECT_FALSE(language_state.IsPageTranslated());
99 
100   // Translate the page into English.
101   language_state.SetCurrentLanguage("en");
102   EXPECT_EQ("fr", language_state.original_language());
103   EXPECT_EQ("en", language_state.current_language());
104   EXPECT_TRUE(language_state.IsPageTranslated());
105 
106   // Move on another page in Japanese.
107   language_state.LanguageDetermined("ja", true);
108   EXPECT_EQ("ja", language_state.original_language());
109   EXPECT_EQ("ja", language_state.current_language());
110   EXPECT_FALSE(language_state.IsPageTranslated());
111 }
112 
TEST(LanguageStateTest,Driver)113 TEST(LanguageStateTest, Driver) {
114 
115   scoped_ptr<MockTranslateDriver> driver(
116       new MockTranslateDriver);
117   LanguageState language_state(driver.get());
118 
119   // Enable/Disable translate.
120   EXPECT_FALSE(language_state.translate_enabled());
121   EXPECT_FALSE(driver->on_translate_enabled_changed_called());
122   language_state.SetTranslateEnabled(true);
123   EXPECT_TRUE(language_state.translate_enabled());
124   EXPECT_TRUE(driver->on_translate_enabled_changed_called());
125 
126   driver->Reset();
127   language_state.SetTranslateEnabled(false);
128   EXPECT_FALSE(language_state.translate_enabled());
129   EXPECT_TRUE(driver->on_translate_enabled_changed_called());
130 
131   // Navigate to a French page.
132   driver->Reset();
133   language_state.LanguageDetermined("fr", true);
134   EXPECT_FALSE(language_state.translate_enabled());
135   EXPECT_FALSE(driver->on_is_page_translated_changed_called());
136   EXPECT_FALSE(driver->on_translate_enabled_changed_called());
137 
138   // Translate.
139   language_state.SetCurrentLanguage("en");
140   EXPECT_TRUE(language_state.IsPageTranslated());
141   EXPECT_TRUE(driver->on_is_page_translated_changed_called());
142 
143   // Translate feature must be enabled after an actual translation.
144   EXPECT_TRUE(language_state.translate_enabled());
145   EXPECT_TRUE(driver->on_translate_enabled_changed_called());
146 }
147