Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / components / translate / core / browser / translate_prefs_unittest.cc
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/translate_prefs.h"
6
7 #include <algorithm>
8 #include <string>
9 #include <vector>
10
11 #include "components/translate/core/browser/translate_download_manager.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 TEST(TranslatePrefsTest, CreateBlockedLanguages) {
15   TranslateDownloadManager::GetInstance()->set_application_locale("en");
16   std::vector<std::string> blacklisted_languages;
17   blacklisted_languages.push_back("en");
18   blacklisted_languages.push_back("fr");
19   // Hebrew: synonym to 'he'
20   blacklisted_languages.push_back("iw");
21   // Haitian is not used as Accept-Language
22   blacklisted_languages.push_back("ht");
23
24   std::vector<std::string> accept_languages;
25   accept_languages.push_back("en");
26   // The subcode (IT) will be ignored when merging, except for Chinese.
27   accept_languages.push_back("it-IT");
28   accept_languages.push_back("ja");
29   // Filippino: synonym to 'tl'
30   accept_languages.push_back("fil");
31   // General Chinese is not used as Translate language, but not filtered
32   // when merging.
33   accept_languages.push_back("zh");
34   // Chinese with a sub code is acceptable for the blocked-language list.
35   accept_languages.push_back("zh-TW");
36
37   std::vector<std::string> blocked_languages;
38
39   TranslatePrefs::CreateBlockedLanguages(&blocked_languages,
40                                          blacklisted_languages,
41                                          accept_languages);
42
43   // The order of the elements cannot be determined.
44   std::vector<std::string> expected;
45   expected.push_back("en");
46   expected.push_back("fr");
47   expected.push_back("iw");
48   expected.push_back("ht");
49   expected.push_back("it");
50   expected.push_back("ja");
51   expected.push_back("tl");
52   expected.push_back("zh");
53   expected.push_back("zh-TW");
54
55   EXPECT_EQ(expected.size(), blocked_languages.size());
56   for (std::vector<std::string>::const_iterator it = expected.begin();
57        it != expected.end(); ++it) {
58     EXPECT_NE(blocked_languages.end(),
59               std::find(blocked_languages.begin(),
60                         blocked_languages.end(),
61                         *it));
62   }
63 }
64
65 TEST(TranslatePrefsTest, CreateBlockedLanguagesNonEnglishUI) {
66   std::vector<std::string> blacklisted_languages;
67   blacklisted_languages.push_back("fr");
68
69   std::vector<std::string> accept_languages;
70   accept_languages.push_back("en");
71   accept_languages.push_back("ja");
72   accept_languages.push_back("zh");
73
74   // Run in an English locale.
75   {
76     TranslateDownloadManager::GetInstance()->set_application_locale("en");
77     std::vector<std::string> blocked_languages;
78     TranslatePrefs::CreateBlockedLanguages(&blocked_languages,
79                                            blacklisted_languages,
80                                            accept_languages);
81     std::vector<std::string> expected;
82     expected.push_back("en");
83     expected.push_back("fr");
84     expected.push_back("ja");
85     expected.push_back("zh");
86
87     EXPECT_EQ(expected.size(), blocked_languages.size());
88     for (std::vector<std::string>::const_iterator it = expected.begin();
89          it != expected.end(); ++it) {
90       EXPECT_NE(blocked_languages.end(),
91                 std::find(blocked_languages.begin(),
92                           blocked_languages.end(),
93                           *it));
94     }
95   }
96
97   // Run in a Japanese locale.
98   // English should not be included in the result even though Accept Languages
99   // has English because the UI is not English.
100   {
101     TranslateDownloadManager::GetInstance()->set_application_locale("ja");
102     std::vector<std::string> blocked_languages;
103     TranslatePrefs::CreateBlockedLanguages(&blocked_languages,
104                                            blacklisted_languages,
105                                            accept_languages);
106     std::vector<std::string> expected;
107     expected.push_back("fr");
108     expected.push_back("ja");
109     expected.push_back("zh");
110
111     EXPECT_EQ(expected.size(), blocked_languages.size());
112     for (std::vector<std::string>::const_iterator it = expected.begin();
113          it != expected.end(); ++it) {
114       EXPECT_NE(blocked_languages.end(),
115                 std::find(blocked_languages.begin(),
116                           blocked_languages.end(),
117                           *it));
118     }
119   }
120 }