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

Side by Side Diff: chrome/browser/translate/chrome_translate_client_unittest.cc

Issue 2954053002: Add a unit test for translation event logging. (Closed)
Patch Set: rebase Created 3 years, 5 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/translate/chrome_translate_client.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/translate/chrome_translate_client.h" 5 #include "chrome/browser/translate/chrome_translate_client.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string>
9 #include <vector>
8 10
9 #include "base/command_line.h" 11 #include "base/command_line.h"
10 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
11 #include "base/run_loop.h" 13 #include "base/run_loop.h"
12 #include "base/test/scoped_feature_list.h" 14 #include "base/test/scoped_feature_list.h"
13 #include "chrome/browser/sync/profile_sync_service_factory.h" 15 #include "chrome/browser/sync/profile_sync_service_factory.h"
14 #include "chrome/browser/sync/user_event_service_factory.h" 16 #include "chrome/browser/sync/user_event_service_factory.h"
15 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 17 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
18 #include "components/metrics/proto/translate_event.pb.h"
16 #include "components/sync/driver/sync_driver_switches.h" 19 #include "components/sync/driver/sync_driver_switches.h"
17 #include "components/sync/user_events/fake_user_event_service.h" 20 #include "components/sync/user_events/fake_user_event_service.h"
18 #include "components/translate/core/common/language_detection_details.h" 21 #include "components/translate/core/common/language_detection_details.h"
19 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
20 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
21 #include "url/gurl.h" 24 #include "url/gurl.h"
22 25
23 std::unique_ptr<KeyedService> BuildFakeUserEventService( 26 std::unique_ptr<KeyedService> BuildFakeUserEventService(
24 content::BrowserContext* context) { 27 content::BrowserContext* context) {
25 return base::MakeUnique<syncer::FakeUserEventService>(); 28 return base::MakeUnique<syncer::FakeUserEventService>();
26 } 29 }
27 30
31 metrics::TranslateEventProto BuildTranslateEventProto(
32 const std::string& from,
33 const std::string& to,
34 const metrics::TranslateEventProto::EventType type) {
35 metrics::TranslateEventProto event;
36 event.set_source_language(from);
37 event.set_target_language(to);
38 event.set_event_type(type);
39 return event;
40 }
41
28 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { 42 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness {
29 public: 43 public:
30 void SetUp() override { 44 void SetUp() override {
31 ChromeRenderViewHostTestHarness::SetUp(); 45 ChromeRenderViewHostTestHarness::SetUp();
32 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( 46 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>(
33 browser_sync::UserEventServiceFactory::GetInstance() 47 browser_sync::UserEventServiceFactory::GetInstance()
34 ->SetTestingFactoryAndUse(browser_context(), 48 ->SetTestingFactoryAndUse(browser_context(),
35 &BuildFakeUserEventService)); 49 &BuildFakeUserEventService));
36 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); 50 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>();
37 scoped_feature_list_->InitAndEnableFeature( 51 scoped_feature_list_->InitWithFeatures(
38 switches::kSyncUserLanguageDetectionEvents); 52 {switches::kSyncUserLanguageDetectionEvents,
53 switches::kSyncUserTranslationEvents},
54 {});
39 } 55 }
40 56
41 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } 57 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); }
42 58
43 protected: 59 protected:
44 syncer::FakeUserEventService* GetUserEventService() { 60 syncer::FakeUserEventService* GetUserEventService() {
45 return fake_user_event_service_; 61 return fake_user_event_service_;
46 } 62 }
47 63
48 private: 64 private:
49 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; 65 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_;
50 syncer::FakeUserEventService* fake_user_event_service_; 66 syncer::FakeUserEventService* fake_user_event_service_;
51 }; 67 };
52 68
53 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { 69 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) {
54 GURL url("http://yahoo.com"); 70 const GURL url("http://yahoo.com");
55 NavigateAndCommit(url); 71 NavigateAndCommit(url);
56 ChromeTranslateClient client(web_contents()); 72 ChromeTranslateClient client(web_contents());
57 translate::LanguageDetectionDetails details; 73 translate::LanguageDetectionDetails details;
58 details.cld_language = "en"; 74 details.cld_language = "en";
59 details.is_cld_reliable = true; 75 details.is_cld_reliable = true;
60 details.adopted_language = "en"; 76 details.adopted_language = "en";
61 client.OnLanguageDetermined(details); 77 client.OnLanguageDetermined(details);
62 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); 78 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size());
63 } 79 }
64 80
65 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) { 81 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) {
66 GURL url("about://blank"); 82 const GURL url("about://blank");
67 NavigateAndCommit(url); 83 NavigateAndCommit(url);
68 ChromeTranslateClient client(web_contents()); 84 ChromeTranslateClient client(web_contents());
69 translate::LanguageDetectionDetails details; 85 translate::LanguageDetectionDetails details;
70 details.cld_language = "en"; 86 details.cld_language = "en";
71 details.is_cld_reliable = true; 87 details.is_cld_reliable = true;
72 details.adopted_language = "en"; 88 details.adopted_language = "en";
73 client.OnLanguageDetermined(details); 89 client.OnLanguageDetermined(details);
74 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); 90 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size());
75 } 91 }
92
93 TEST_F(ChromeTranslateClientTest, TranslationEventShouldRecord) {
94 const GURL url("http://yahoo.com");
95 NavigateAndCommit(url);
96 ChromeTranslateClient client(web_contents());
97 // An event we care about.
98 const metrics::TranslateEventProto& event_proto = BuildTranslateEventProto(
99 "ja", "en", metrics::TranslateEventProto::USER_ACCEPT);
100 client.RecordTranslateEvent(event_proto);
101 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size());
102
103 sync_pb::UserEventSpecifics::Translation expected_translation_event;
104 expected_translation_event.set_from_language_code("ja");
105 expected_translation_event.set_to_language_code("en");
106 expected_translation_event.set_interaction(
107 sync_pb::UserEventSpecifics::Translation::ACCEPT);
108 const auto& result_translation_event =
109 GetUserEventService()->GetRecordedUserEvents()[0].translation_event();
110 EXPECT_EQ(expected_translation_event.SerializeAsString(),
111 result_translation_event.SerializeAsString());
112 }
113
114 TEST_F(ChromeTranslateClientTest, TranslationEventShouldNotRecord) {
115 const GURL url("http://yahoo.com");
116 NavigateAndCommit(url);
117 ChromeTranslateClient client(web_contents());
118 // An event we don't care about.
119 const metrics::TranslateEventProto& event_proto = BuildTranslateEventProto(
120 "ja", "en", metrics::TranslateEventProto::UNSUPPORTED_URL);
121 client.RecordTranslateEvent(event_proto);
122 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size());
123 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/chrome_translate_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698