]> git.saurik.com Git - apt.git/blob - test/libapt/getlanguages_test.cc
warn if clearsigned file has ignored content parts
[apt.git] / test / libapt / getlanguages_test.cc
1 #include <config.h>
2
3 #include <apt-pkg/aptconfiguration.h>
4 #include <apt-pkg/configuration.h>
5 #include <apt-pkg/error.h>
6 #include <apt-pkg/fileutl.h>
7
8 #include <algorithm>
9 #include <iostream>
10 #include <string>
11 #include <vector>
12
13 #include <sys/types.h>
14 #include <sys/stat.h>
15 #include <fcntl.h>
16
17 #include <gtest/gtest.h>
18
19 #include "file-helpers.h"
20
21 TEST(LanguagesTest,Environment)
22 {
23 _config->Clear();
24
25 char const* env[2];
26 env[0] = "de_DE.UTF-8";
27 env[1] = "";
28
29 std::vector<std::string> vec = APT::Configuration::getLanguages(false, false, env);
30 ASSERT_EQ(3 ,vec.size());
31 EXPECT_EQ("de_DE", vec[0]);
32 EXPECT_EQ("de", vec[1]);
33 EXPECT_EQ("en", vec[2]);
34
35 // Special: Check if the cache is actually in use
36 env[0] = "en_GB.UTF-8";
37 vec = APT::Configuration::getLanguages(false, true, env);
38 ASSERT_EQ(3, vec.size());
39 EXPECT_EQ("de_DE", vec[0]);
40 EXPECT_EQ("de", vec[1]);
41 EXPECT_EQ("en", vec[2]);
42
43 env[0] = "en_GB.UTF-8";
44 vec = APT::Configuration::getLanguages(false, false, env);
45 ASSERT_EQ(2, vec.size());
46 EXPECT_EQ("en_GB", vec[0]);
47 EXPECT_EQ("en", vec[1]);
48
49 // esperanto
50 env[0] = "eo.UTF-8";
51 vec = APT::Configuration::getLanguages(false, false, env);
52 ASSERT_EQ(2, vec.size());
53 EXPECT_EQ("eo", vec[0]);
54 EXPECT_EQ("en", vec[1]);
55
56 env[0] = "tr_DE@euro";
57 vec = APT::Configuration::getLanguages(false, false, env);
58 EXPECT_EQ(3, vec.size());
59 EXPECT_EQ("tr_DE", vec[0]);
60 EXPECT_EQ("tr", vec[1]);
61 EXPECT_EQ("en", vec[2]);
62
63 env[0] = "de_NO";
64 env[1] = "de_NO:en_GB:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en";
65 vec = APT::Configuration::getLanguages(false, false, env);
66 EXPECT_EQ(6, vec.size());
67 EXPECT_EQ("de_NO", vec[0]);
68 EXPECT_EQ("de", vec[1]);
69 EXPECT_EQ("en_GB", vec[2]);
70 EXPECT_EQ("nb_NO", vec[3]);
71 EXPECT_EQ("nb", vec[4]);
72 EXPECT_EQ("en", vec[5]);
73
74 env[0] = "pt_PR.UTF-8";
75 env[1] = "";
76 vec = APT::Configuration::getLanguages(false, false, env);
77 EXPECT_EQ(3, vec.size());
78 EXPECT_EQ("pt_PR", vec[0]);
79 EXPECT_EQ("pt", vec[1]);
80 EXPECT_EQ("en", vec[2]);
81
82 env[0] = "ast_DE.UTF-8";
83 vec = APT::Configuration::getLanguages(false, false, env); // bogus, but syntactical correct
84 EXPECT_EQ(3, vec.size());
85 EXPECT_EQ("ast_DE", vec[0]);
86 EXPECT_EQ("ast", vec[1]);
87 EXPECT_EQ("en", vec[2]);
88
89 env[0] = "C";
90 vec = APT::Configuration::getLanguages(false, false, env);
91 EXPECT_EQ(1, vec.size());
92 EXPECT_EQ("en", vec[0]);
93
94 _config->Set("Acquire::Languages", "none");
95 env[0] = "C";
96 vec = APT::Configuration::getLanguages(false, false, env);
97 EXPECT_TRUE(vec.empty());
98
99 _config->Set("Acquire::Languages", "environment");
100 env[0] = "C";
101 vec = APT::Configuration::getLanguages(false, false, env);
102 EXPECT_EQ(1, vec.size());
103 EXPECT_EQ("en", vec[0]);
104
105 _config->Set("Acquire::Languages", "de");
106 env[0] = "C";
107 vec = APT::Configuration::getLanguages(false, false, env);
108 EXPECT_EQ(1, vec.size());
109 EXPECT_EQ("de", vec[0]);
110
111 _config->Set("Acquire::Languages", "fr");
112 env[0] = "ast_DE.UTF-8";
113 vec = APT::Configuration::getLanguages(false, false, env);
114 EXPECT_EQ(1, vec.size());
115 EXPECT_EQ("fr", vec[0]);
116
117 _config->Set("Acquire::Languages", "environment,en");
118 env[0] = "de_DE.UTF-8";
119 vec = APT::Configuration::getLanguages(false, false, env);
120 EXPECT_EQ(3, vec.size());
121 EXPECT_EQ("de_DE", vec[0]);
122 EXPECT_EQ("de", vec[1]);
123 EXPECT_EQ("en", vec[2]);
124 _config->Set("Acquire::Languages", "");
125
126 _config->Set("Acquire::Languages::1", "environment");
127 _config->Set("Acquire::Languages::2", "en");
128 env[0] = "de_DE.UTF-8";
129 vec = APT::Configuration::getLanguages(false, false, env);
130 EXPECT_EQ(3, vec.size());
131 EXPECT_EQ("de_DE", vec[0]);
132 EXPECT_EQ("de", vec[1]);
133 EXPECT_EQ("en", vec[2]);
134
135 _config->Set("Acquire::Languages::3", "de");
136 env[0] = "de_DE.UTF-8";
137 vec = APT::Configuration::getLanguages(false, false, env);
138 EXPECT_EQ(3, vec.size());
139 EXPECT_EQ("de_DE", vec[0]);
140 EXPECT_EQ("de", vec[1]);
141 EXPECT_EQ("en", vec[2]);
142
143 _config->Clear();
144 }
145
146 TEST(LanguagesTest,TranslationFiles)
147 {
148 _config->Clear();
149 _config->Set("Acquire::Languages::1", "environment");
150 _config->Set("Acquire::Languages::2", "en");
151 _config->Set("Acquire::Languages::3", "de");
152
153 char const* env[2];
154 env[0] = "de_DE.UTF-8";
155 env[1] = "";
156
157 std::string tempdir;
158 createTemporaryDirectory("languages", tempdir);
159
160 #define createTranslation(lang) \
161 createFile(tempdir, std::string("/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-").append(lang));
162
163 createTranslation("tr");
164 createTranslation("pt");
165 createTranslation("se~");
166 createTranslation("st.bak");
167 createTranslation("ast_DE");
168 createTranslation("tlh%5fDE");
169
170 _config->Set("Dir::State::lists", tempdir);
171 std::vector<std::string> vec = APT::Configuration::getLanguages(true, false, env);
172 EXPECT_EQ(8, vec.size());
173 EXPECT_EQ("de_DE", vec[0]);
174 EXPECT_EQ("de", vec[1]);
175 EXPECT_EQ("en", vec[2]);
176 EXPECT_EQ("none", vec[3]);
177 EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "pt"));
178 EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "tr"));
179 EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "ast_DE"));
180 EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "tlh_DE"));
181 EXPECT_NE(vec[4], vec[5]);
182 EXPECT_NE(vec[4], vec[6]);
183 EXPECT_NE(vec[4], vec[7]);
184 EXPECT_NE(vec[5], vec[6]);
185 EXPECT_NE(vec[5], vec[7]);
186 EXPECT_NE(vec[6], vec[7]);
187
188 _config->Set("Acquire::Languages", "none");
189 vec = APT::Configuration::getLanguages(true, false, env);
190 EXPECT_EQ(1, vec.size());
191 EXPECT_EQ("none", vec[0]);
192 _config->Set("Acquire::Languages", "");
193
194 _config->Set("Dir::State::lists", "/non-existing-dir");
195 _config->Set("Acquire::Languages::1", "none");
196 env[0] = "de_DE.UTF-8";
197 vec = APT::Configuration::getLanguages(false, false, env);
198 EXPECT_TRUE(vec.empty());
199 env[0] = "de_DE.UTF-8";
200 vec = APT::Configuration::getLanguages(true, false, env);
201 EXPECT_EQ(2, vec.size());
202 EXPECT_EQ("en", vec[0]);
203 EXPECT_EQ("de", vec[1]);
204
205 _config->Set("Acquire::Languages::1", "fr");
206 _config->Set("Acquire::Languages", "de_DE");
207 env[0] = "de_DE.UTF-8";
208 vec = APT::Configuration::getLanguages(false, false, env);
209 EXPECT_EQ(1, vec.size());
210 EXPECT_EQ("de_DE", vec[0]);
211
212 _config->Set("Acquire::Languages", "none");
213 env[0] = "de_DE.UTF-8";
214 vec = APT::Configuration::getLanguages(true, false, env);
215 EXPECT_EQ(1, vec.size());
216 EXPECT_EQ("none", vec[0]);
217
218 _error->PushToStack();
219 _config->Set("Acquire::Languages", "");
220 //FIXME: Remove support for this deprecated setting
221 _config->Set("APT::Acquire::Translation", "ast_DE");
222 env[0] = "de_DE.UTF-8";
223 vec = APT::Configuration::getLanguages(true, false, env);
224 EXPECT_EQ(2, vec.size());
225 EXPECT_EQ("ast_DE", vec[0]);
226 EXPECT_EQ("en", vec[1]);
227 _config->Set("APT::Acquire::Translation", "none");
228 env[0] = "de_DE.UTF-8";
229 vec = APT::Configuration::getLanguages(true, false, env);
230 EXPECT_EQ(1, vec.size());
231 EXPECT_EQ("en", vec[0]);
232
233 // discard the deprecation warning for APT::Acquire::Translation
234 if (_error->PendingError())
235 _error->MergeWithStack();
236 else
237 _error->RevertToStack();
238
239 EXPECT_EQ(0, system(std::string("rm -rf ").append(tempdir).c_str()));
240 _config->Clear();
241 }