* apt-pkg/aptconfiguration.cc:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 20 May 2012 16:58:37 +0000 (18:58 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 20 May 2012 16:58:37 +0000 (18:58 +0200)
  - longcode Translation files are saved with encoded underscore,
    so make sure to pick these files up as well for Acquire::Languages

apt-pkg/aptconfiguration.cc
debian/changelog
test/libapt/assert.h
test/libapt/getlanguages_test.cc
test/libapt/run-tests

index 0fd470e..d763546 100644 (file)
@@ -144,7 +144,7 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
        if (D != 0) {
                builtin.push_back("none");
                for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) {
-                       string const name = Ent->d_name;
+                       string const name = SubstVar(Ent->d_name, "%5f", "_");
                        size_t const foundDash = name.rfind("-");
                        size_t const foundUnderscore = name.rfind("_", foundDash);
                        if (foundDash == string::npos || foundUnderscore == string::npos ||
index c4bf881..5d4f872 100644 (file)
@@ -38,6 +38,9 @@ apt (0.9.4) UNRELEASED; urgency=low
   * doc/*.xml:
     - add a few translator notes and reword some paragraphs to ensure that
       translators and users alike can better understand them (Closes: #669409)
+  * apt-pkg/aptconfiguration.cc:
+    - longcode Translation files are saved with encoded underscore,
+      so make sure to pick these files up as well for Acquire::Languages
 
   [ Raphael Geissert ]
   * apt-pkg/acquire*.cc:
index a07be4b..fdf6740 100644 (file)
@@ -1,6 +1,7 @@
 #include <iostream>
 
 #define equals(x,y) assertEquals(y, x, __LINE__)
+#define equalsNot(x,y) assertEqualsNot(y, x, __LINE__)
 
 template < typename X, typename Y >
 void OutputAssertEqual(X expect, char const* compare, Y get, unsigned long const &line) {
@@ -14,6 +15,13 @@ void assertEquals(X expect, Y get, unsigned long const &line) {
        OutputAssertEqual(expect, "==", get, line);
 }
 
+template < typename X, typename Y >
+void assertEqualsNot(X expect, Y get, unsigned long const &line) {
+       if (expect != get)
+               return;
+       OutputAssertEqual(expect, "!=", get, line);
+}
+
 void assertEquals(unsigned int const &expect, int const &get, unsigned long const &line) {
        if (get < 0)
                OutputAssertEqual(expect, "==", get, line);
@@ -80,6 +88,19 @@ void assertEqualsOr3(X expect1, X expect2, X expect3, Y get, unsigned long const
        OutputAssertEqualOr3(expect1, expect2, expect3, "==", get, line);
 }
 
+#define equalsOr4(v,w,x,y,z) assertEqualsOr4(w, x, y, z, v, __LINE__)
+
+template < typename X, typename Y >
+void OutputAssertEqualOr4(X expect1, X expect2, X expect3, X expect4, char const* compare, Y get, unsigned long const &line) {
+       std::cerr << "Test FAILED: »" << expect1 << "« or »" << expect2 << "« or »" << expect3 << "« or »" << expect4 << "« " << compare << " »" << get << "« at line " << line << std::endl;
+}
+
+template < typename X, typename Y >
+void assertEqualsOr4(X expect1, X expect2, X expect3, X expect4, Y get, unsigned long const &line) {
+       if (expect1 == get || expect2 == get || expect3 == get || expect4 == get)
+               return;
+       OutputAssertEqualOr4(expect1, expect2, expect3, expect4, "==", get, line);
+}
 
 // simple helper to quickly output a vectors
 template < typename X >
index a1c801e..274cf4a 100644 (file)
@@ -126,14 +126,21 @@ int main(int argc,char *argv[])
 
        _config->Set("Dir::State::lists", argv[1]);
        vec = APT::Configuration::getLanguages(true, false, env);
-       equals(vec.size(), 7);
+       equals(vec.size(), 8);
        equals(vec[0], "de_DE");
        equals(vec[1], "de");
        equals(vec[2], "en");
        equals(vec[3], "none");
-       equalsOr3(vec[4], "pt", "tr", "ast_DE");
-       equalsOr3(vec[5], "tr", "pt", "ast_DE");
-       equalsOr3(vec[6], "tr", "pt", "ast_DE");
+       equalsOr4(vec[4], "pt", "tr", "ast_DE", "tlh_DE");
+       equalsOr4(vec[5], "tr", "pt", "ast_DE", "tlh_DE");
+       equalsOr4(vec[6], "tr", "pt", "ast_DE", "tlh_DE");
+       equalsOr4(vec[7], "tr", "pt", "ast_DE", "tlh_DE");
+       equalsNot(vec[4], vec[5]);
+       equalsNot(vec[4], vec[6]);
+       equalsNot(vec[4], vec[7]);
+       equalsNot(vec[5], vec[6]);
+       equalsNot(vec[5], vec[7]);
+       equalsNot(vec[6], vec[7]);
 
        _config->Set("Acquire::Languages", "none");
        vec = APT::Configuration::getLanguages(true, false, env);
index 4ea9a91..45a3157 100755 (executable)
@@ -65,7 +65,8 @@ do
                        "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-pt" \
                        "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-se~" \
                        "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-st.bak" \
-                       "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-ast_DE"
+                       "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-ast_DE" \
+                       "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-tlh%5fDE"
        elif [ $name = "HashSums${EXT}" ]; then
                TMP="$(readlink -f "./${0}")"
                echo -n "Testing with ${NAME} "