Chromium Code Reviews| Index: components/translate/core/browser/language_model_unittest.cc |
| diff --git a/components/translate/core/browser/language_model_unittest.cc b/components/translate/core/browser/language_model_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..be0f8eecf307bf56d2f1a7ce39778c52a45559df |
| --- /dev/null |
| +++ b/components/translate/core/browser/language_model_unittest.cc |
| @@ -0,0 +1,94 @@ |
| +// Copyright 2016 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 "components/translate/core/browser/language_model.h" |
| + |
| +#include "base/macros.h" |
|
droger
2016/10/05 15:40:00
Not needed?
jkrcal
2016/10/06 08:50:58
Done.
|
| +#include "components/prefs/testing_pref_service.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using testing::ElementsAre; |
| +using testing::FloatEq; |
| +using testing::Ge; |
| + |
| +namespace { |
| + |
| +const char kLang1[] = "en"; |
| +const char kLang2[] = "de"; |
| +const char kLang3[] = "es"; |
| + |
| +} // namespace |
| + |
| +namespace translate { |
| + |
| +TEST(LanguageModelTest, ListSorted) { |
| + TestingPrefServiceSimple prefs; |
| + LanguageModel::RegisterProfilePrefs(prefs.registry()); |
| + LanguageModel model(&prefs); |
| + |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang2); |
| + |
| + EXPECT_THAT(model.GetTopLanguages(), |
| + ElementsAre(LanguageModel::LanguageInfo{kLang1}, |
| + LanguageModel::LanguageInfo{kLang2})); |
| +} |
| + |
| +TEST(LanguageModelTest, ListSortedReversed) { |
| + TestingPrefServiceSimple prefs; |
| + LanguageModel::RegisterProfilePrefs(prefs.registry()); |
| + LanguageModel model(&prefs); |
| + |
| + model.OnPageVisited(kLang2); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + |
| + EXPECT_THAT(model.GetTopLanguages(), |
| + ElementsAre(LanguageModel::LanguageInfo{kLang1}, |
| + LanguageModel::LanguageInfo{kLang2})); |
| +} |
| + |
| +TEST(LanguageModelTest, RightFrequencies) { |
| + TestingPrefServiceSimple prefs; |
| + LanguageModel::RegisterProfilePrefs(prefs.registry()); |
| + LanguageModel model(&prefs); |
| + |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang1); |
| + model.OnPageVisited(kLang2); |
| + |
| + // Corresponding frequencies are given by the model. |
| + EXPECT_THAT(model.GetLanguageFrequency(kLang1), FloatEq(0.75)); |
| + EXPECT_THAT(model.GetLanguageFrequency(kLang2), FloatEq(0.25)); |
| + // An unknown language gets frequency 0. |
| + EXPECT_THAT(model.GetLanguageFrequency(kLang3), 0); |
| +} |
| + |
| +TEST(LanguageModelTest, RareLanguageDiscarded) { |
| + TestingPrefServiceSimple prefs; |
| + LanguageModel::RegisterProfilePrefs(prefs.registry()); |
| + LanguageModel model(&prefs); |
| + |
| + model.OnPageVisited(kLang2); |
| + |
| + for (int i = 0; i < 900; i++) |
| + model.OnPageVisited(kLang1); |
| + |
| + // Lang 2 is in the model. |
| + EXPECT_THAT(model.GetLanguageFrequency(kLang2), Ge(0.0)); |
| + |
| + // Another 100 visits cause the cleanup (total > 1000). |
| + for (int i = 0; i < 100; i++) |
| + model.OnPageVisited(kLang1); |
| + // Lang 2 is removed from the model. |
| + EXPECT_THAT(model.GetTopLanguages(), |
| + ElementsAre(LanguageModel::LanguageInfo{kLang1, 1})); |
| +} |
| + |
| +} // namespace translate |