diff test/test_misc.py @ 6347:3b945aee0919

accept_language parse; fix priority order; preserve insertion order There are conditions under which the order is not correctly returned. Use hashq.hashpop in a loop to get items out of hash (list) in proper priority order. Make 3 element tuples in hashq include insertion order. This makes tuples inserted later lower in priority when priority q values are the same. Makes: "zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5" return ['zn', 'pt_br', 'en_US'] (pt_br is default prio of 1 like zn). Otherwise we get ['pt_br', 'zn', 'en_US'] since 'p' > 'z'.
author John Rouillard <rouilj@ieee.org>
date Sun, 21 Mar 2021 18:39:43 -0400
parents 9a09719b0d8e
children 5986ddd0d2e7
line wrap: on
line diff
--- a/test/test_misc.py	Sun Mar 21 15:39:22 2021 -0400
+++ b/test/test_misc.py	Sun Mar 21 18:39:43 2021 -0400
@@ -8,8 +8,18 @@
     def testParse(self):
         self.assertEqual(parse("da, en-gb;q=0.8, en;q=0.7"),
                          ['da', 'en_gb', 'en'])
+        self.assertEqual(parse("da, en-gb;q=0.7, en;q=0.8"),
+                         ['da', 'en', 'en_gb'])
         self.assertEqual(parse("en;q=0.2, fr;q=1"), ['fr', 'en'])
         self.assertEqual(parse("zn; q = 0.2 ,pt-br;q =1"), ['pt_br', 'zn'])
+        self.assertEqual(parse("pt-br;q =1, zn; q = 0.2"), ['pt_br', 'zn'])
+        self.assertEqual(parse("pt-br,zn;q= 0.1, en-US;q=0.5"),
+                         ['pt_br', 'en_US', 'zn'])
+        # verify that items with q=1.0 are in same output order as input
+        self.assertEqual(parse("pt-br,en-US; q=0.5, zn;q= 1.0" ),
+                         ['pt_br', 'zn', 'en_US'])
+        self.assertEqual(parse("zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5" ),
+                         ['zn', 'pt_br', 'en_US'])
         self.assertEqual(parse("es-AR"), ['es_AR'])
         self.assertEqual(parse("es-es-cat"), ['es_es_cat'])
         self.assertEqual(parse(""), [])

Roundup Issue Tracker: http://roundup-tracker.org/