[libsoup] Fix auto-Accept-Language in locales that use ", " for decimals
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] Fix auto-Accept-Language in locales that use ", " for decimals
- Date: Wed, 11 Aug 2010 15:55:21 +0000 (UTC)
commit fb280d10fdb05f301141f8a90f72d5c0e34b4497
Author: Dan Winship <danw gnome org>
Date: Wed Aug 11 11:54:05 2010 -0400
Fix auto-Accept-Language in locales that use "," for decimals
noticed in related epiphany code in bug 602547
libsoup/soup-session.c | 13 ++++++-----
tests/misc-test.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 6 deletions(-)
---
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 5916771..1dbde5a 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -756,13 +756,14 @@ add_quality_value (const gchar *str, int quality)
{
g_return_val_if_fail (str != NULL, NULL);
- if (quality > 0 && quality < 100) {
- double qvalue = quality / 100.0;
- return g_strdup_printf ("%s;q=%.2g", str, qvalue);
- } else {
- /* Just dup the string in this case */
+ if (quality >= 0 && quality < 100) {
+ /* We don't use %.02g because of "." vs "," locale issues */
+ if (quality % 10)
+ return g_strdup_printf ("%s;q=0.%02d", str, quality);
+ else
+ return g_strdup_printf ("%s;q=0.%d", str, quality / 10);
+ } else
return g_strdup (str);
- }
}
/* Returns a RFC2616 compliant languages list from system locales */
diff --git a/tests/misc-test.c b/tests/misc-test.c
index 8b462c5..b1c9eab 100644
--- a/tests/misc-test.c
+++ b/tests/misc-test.c
@@ -581,6 +581,59 @@ do_content_length_framing_test (void)
soup_test_session_abort_unref (session);
}
+static void
+do_one_accept_language_test (const char *language, const char *expected_header)
+{
+ SoupSession *session;
+ SoupMessage *msg;
+ const char *val;
+
+ debug_printf (1, " LANGUAGE=%s\n", language);
+ g_setenv ("LANGUAGE", language, TRUE);
+ session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC,
+ SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
+ NULL);
+ msg = soup_message_new_from_uri ("GET", base_uri);
+ soup_session_send_message (session, msg);
+ soup_test_session_abort_unref (session);
+
+ if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
+ debug_printf (1, " Message failed? %d %s\n",
+ msg->status_code, msg->reason_phrase);
+ errors++;
+ }
+ val = soup_message_headers_get_list (msg->request_headers,
+ "Accept-Language");
+ if (!val) {
+ debug_printf (1, " No Accept-Language set!\n");
+ errors++;
+ } else if (strcmp (val, expected_header) != 0) {
+ debug_printf (1, " Wrong Accept-Language: expected '%s', got '%s'\n",
+ expected_header, val);
+ errors++;
+ }
+
+ g_object_unref (msg);
+}
+
+static void
+do_accept_language_test (void)
+{
+ const char *orig_language;
+
+ debug_printf (1, "\nAutomatic Accept-Language processing\n");
+
+ orig_language = g_getenv ("LANGUAGE");
+ do_one_accept_language_test ("C", "en");
+ do_one_accept_language_test ("fr_FR", "fr-fr, fr;q=0.9");
+ do_one_accept_language_test ("fr_FR:de:en_US", "fr-fr, fr;q=0.9, de;q=0.8, en-us;q=0.7, en;q=0.6");
+
+ if (orig_language)
+ g_setenv ("LANGUAGE", orig_language, TRUE);
+ else
+ g_unsetenv ("LANGUAGE");
+}
+
int
main (int argc, char **argv)
{
@@ -607,6 +660,7 @@ main (int argc, char **argv)
do_star_test ();
do_early_abort_test ();
do_content_length_framing_test ();
+ do_accept_language_test ();
soup_uri_free (base_uri);
soup_test_server_quit_unref (server);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]